diff --git a/base/javascript-prop-types/test/inputs/json/misc/00c36.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/00c36.json/default/toplevel.js
index 8bf9acc..f741c73 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/00c36.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/00c36.json/default/toplevel.js
@@ -15,24 +15,24 @@ import PropTypes from "prop-types";
 let _TopLevelElement;
 let _Country;
 let _PurpleTopLevel;
-const _ID = PropTypes.oneOfType(['us', 'nyGdpMktpCD']);
-const _Value = PropTypes.oneOfType(['unitedStates', 'gdpCurrentUS']);
+const _ID = PropTypes.oneOf(["US", "NY.GDP.MKTP.CD"]);
+const _Value = PropTypes.oneOf(["United States", "GDP (current US$)"]);
 _PurpleTopLevel = PropTypes.shape({
-    "page": PropTypes.number,
-    "pages": PropTypes.number,
-    "per_page": PropTypes.string,
-    "total": PropTypes.number,
+    "page": PropTypes.number.isRequired,
+    "pages": PropTypes.number.isRequired,
+    "per_page": PropTypes.string.isRequired,
+    "total": PropTypes.number.isRequired,
 });
 _Country = PropTypes.shape({
-    "id": _ID,
-    "value": _Value,
+    "id": _ID.isRequired,
+    "value": _Value.isRequired,
 });
 _TopLevelElement = PropTypes.shape({
-    "country": _Country,
-    "date": PropTypes.string,
-    "decimal": PropTypes.string,
-    "indicator": _Country,
-    "value": PropTypes.string,
+    "country": (...args) => _Country.isRequired(...args),
+    "date": PropTypes.string.isRequired,
+    "decimal": PropTypes.string.isRequired,
+    "indicator": (...args) => _Country.isRequired(...args),
+    "value": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(_TopLevelElement), _PurpleTopLevel]));
+export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TopLevelElement(...args)), (...args) => _PurpleTopLevel(...args)]));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/00ec5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/00ec5.json/default/toplevel.js
index 9ec08af..8f9207e 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/00ec5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/00ec5.json/default/toplevel.js
@@ -24,62 +24,62 @@ let _Parameter;
 let _Responses;
 let _The200;
 let _Schema;
-const _Type = PropTypes.oneOfType(['string']);
+const _Type = PropTypes.oneOf(["string"]);
 _Schema = PropTypes.shape({
-    "$ref": PropTypes.string,
+    "$ref": PropTypes.string.isRequired,
 });
 _The200 = PropTypes.shape({
-    "description": PropTypes.string,
-    "schema": _Schema,
+    "description": PropTypes.string.isRequired,
+    "schema": (...args) => _Schema.isRequired(...args),
 });
 _Responses = PropTypes.shape({
-    "200": _The200,
+    "200": (...args) => _The200.isRequired(...args),
 });
 _Parameter = PropTypes.shape({
-    "description": PropTypes.string,
-    "format": _Type,
-    "in": PropTypes.string,
-    "name": PropTypes.string,
-    "required": PropTypes.bool,
-    "type": _Type,
+    "description": PropTypes.string.isRequired,
+    "format": _Type.isRequired,
+    "in": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "required": PropTypes.bool.isRequired,
+    "type": _Type.isRequired,
 });
 _Get = PropTypes.shape({
-    "description": PropTypes.string,
-    "parameters": PropTypes.arrayOf(_Parameter),
-    "responses": _Responses,
-    "summary": PropTypes.string,
-    "tags": PropTypes.arrayOf(PropTypes.string),
+    "description": PropTypes.string.isRequired,
+    "parameters": PropTypes.arrayOf((...args) => _Parameter(...args)).isRequired,
+    "responses": (...args) => _Responses.isRequired(...args),
+    "summary": PropTypes.string.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 _BusinessServiceProvidersSearch = PropTypes.shape({
-    "get": _Get,
+    "get": (...args) => _Get.isRequired(...args),
 });
 _Paths = PropTypes.shape({
-    "/business_service_providers/search": _BusinessServiceProvidersSearch,
+    "/business_service_providers/search": (...args) => _BusinessServiceProvidersSearch.isRequired(...args),
 });
 _Info = PropTypes.shape({
-    "description": PropTypes.string,
-    "title": PropTypes.string,
-    "version": PropTypes.string,
+    "description": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
 });
 _Property = PropTypes.shape({
-    "description": PropTypes.string,
-    "type": _Type,
+    "description": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
 });
 _Provider = PropTypes.shape({
-    "properties": PropTypes.object,
+    "properties": PropTypes.object.isRequired,
 });
 _Definitions = PropTypes.shape({
-    "Provider": _Provider,
+    "Provider": (...args) => _Provider.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "basePath": PropTypes.string,
-    "definitions": _Definitions,
-    "host": PropTypes.string,
-    "info": _Info,
-    "paths": _Paths,
-    "produces": PropTypes.arrayOf(PropTypes.string),
-    "schemes": PropTypes.arrayOf(PropTypes.string),
-    "swagger": PropTypes.string,
+    "basePath": PropTypes.string.isRequired,
+    "definitions": (...args) => _Definitions.isRequired(...args),
+    "host": PropTypes.string.isRequired,
+    "info": (...args) => _Info.isRequired(...args),
+    "paths": (...args) => _Paths.isRequired(...args),
+    "produces": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "schemes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "swagger": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/010b1.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/010b1.json/default/toplevel.js
index a4e8532..9ee622b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/010b1.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/010b1.json/default/toplevel.js
@@ -13,14 +13,14 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Country = PropTypes.oneOfType(['unitedStates']);
+const _Country = PropTypes.oneOf(["United States"]);
 _TopLevel = PropTypes.shape({
-    "age": PropTypes.number,
-    "country": _Country,
-    "females": PropTypes.number,
-    "males": PropTypes.number,
-    "total": PropTypes.number,
-    "year": PropTypes.number,
+    "age": PropTypes.number.isRequired,
+    "country": _Country.isRequired,
+    "females": PropTypes.number.isRequired,
+    "males": PropTypes.number.isRequired,
+    "total": PropTypes.number.isRequired,
+    "year": PropTypes.number.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/016af.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/016af.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/016af.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/016af.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/033b1.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/033b1.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/033b1.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/033b1.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/050b0.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/050b0.json/default/toplevel.js
index 7571f1b..5216955 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/050b0.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/050b0.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Identifier;
 let _Link;
 let _OtherName;
 let _Text;
-const _Scheme = PropTypes.oneOfType(['dep5', 'spdx', 'trove']);
-const _Keyword = PropTypes.oneOfType(['osiApproved', 'popular', 'permissive', 'copyleft']);
-const _Note = PropTypes.oneOfType(['tlDRLegal', 'wikipediaPage', 'osiPage', 'noteWikipediaPage', 'mozillaPage']);
-const _MediaType = PropTypes.oneOfType(['textHTML', 'textPlain']);
-const _Title = PropTypes.oneOfType(['html', 'plainText']);
+const _Scheme = PropTypes.oneOf(["DEP5", "SPDX", "Trove"]);
+const _Keyword = PropTypes.oneOf(["osi-approved", "popular", "permissive", "copyleft"]);
+const _Note = PropTypes.oneOf(["tl;dr legal", "Wikipedia page", "OSI Page", "Wikipedia Page", "Mozilla Page"]);
+const _MediaType = PropTypes.oneOf(["text/html", "text/plain"]);
+const _Title = PropTypes.oneOf(["HTML", "Plain Text"]);
 _Text = PropTypes.shape({
-    "media_type": _MediaType,
-    "title": _Title,
-    "url": PropTypes.string,
+    "media_type": _MediaType.isRequired,
+    "title": _Title.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _OtherName = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
     "note": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Link = PropTypes.shape({
-    "note": _Note,
-    "url": PropTypes.string,
+    "note": _Note.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": _Scheme,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": _Scheme.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(_OtherName),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf((...args) => _OtherName(...args)).isRequired,
     "superseded_by": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/06bee.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/06bee.json/default/toplevel.js
index c9265b2..aadc974 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/06bee.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/06bee.json/default/toplevel.js
@@ -16,33 +16,33 @@ let _TopLevel;
 let _Identifier;
 let _Link;
 let _Text;
-const _Scheme = PropTypes.oneOfType(['spdx', 'trove', 'dep5']);
-const _Keyword = PropTypes.oneOfType(['discouraged', 'nonReusable', 'osiApproved']);
-const _Note = PropTypes.oneOfType(['osiPage']);
-const _MediaType = PropTypes.oneOfType(['textHTML']);
-const _Title = PropTypes.oneOfType(['html']);
+const _Scheme = PropTypes.oneOf(["SPDX", "Trove", "DEP5"]);
+const _Keyword = PropTypes.oneOf(["discouraged", "non-reusable", "osi-approved"]);
+const _Note = PropTypes.oneOf(["OSI Page"]);
+const _MediaType = PropTypes.oneOf(["text/html"]);
+const _Title = PropTypes.oneOf(["HTML"]);
 _Text = PropTypes.shape({
-    "media_type": _MediaType,
-    "title": _Title,
-    "url": PropTypes.string,
+    "media_type": _MediaType.isRequired,
+    "title": _Title.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Link = PropTypes.shape({
-    "note": _Note,
-    "url": PropTypes.string,
+    "note": _Note.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": _Scheme,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": _Scheme.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(PropTypes.any),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf(PropTypes.any).isRequired,
     "superseded_by": PropTypes.any,
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/07540.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/07540.json/default/toplevel.js
index aaf0f12..26e3f36 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/07540.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/07540.json/default/toplevel.js
@@ -17,7 +17,7 @@ let _Cookies;
 _Cookies = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "cookies": _Cookies,
+    "cookies": (...args) => _Cookies.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/0779f.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/0779f.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/0779f.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/0779f.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/07c75.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/07c75.json/default/toplevel.js
index 98a3a01..f8d6e6e 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/07c75.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/07c75.json/default/toplevel.js
@@ -17,27 +17,27 @@ let _Identifier;
 let _Link;
 let _Text;
 _Text = PropTypes.shape({
-    "media_type": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
+    "media_type": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Link = PropTypes.shape({
-    "note": PropTypes.string,
-    "url": PropTypes.string,
+    "note": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": PropTypes.string,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(PropTypes.string),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(PropTypes.any),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf(PropTypes.any).isRequired,
     "superseded_by": PropTypes.any,
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/09f54.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/09f54.json/default/toplevel.js
index e95d109..7f6dd0a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/09f54.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/09f54.json/default/toplevel.js
@@ -16,18 +16,18 @@ let _TopLevel;
 let _Datum;
 let _Description;
 _Description = PropTypes.shape({
-    "base_period": PropTypes.string,
-    "missing": PropTypes.number,
-    "title": PropTypes.string,
-    "units": PropTypes.string,
+    "base_period": PropTypes.string.isRequired,
+    "missing": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "units": PropTypes.string.isRequired,
 });
 _Datum = PropTypes.shape({
-    "anomaly": PropTypes.string,
-    "value": PropTypes.string,
+    "anomaly": PropTypes.string.isRequired,
+    "value": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.object,
-    "description": _Description,
+    "data": PropTypes.object.isRequired,
+    "description": (...args) => _Description.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/0a358.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/0a358.json/default/toplevel.js
index dd49afc..601030b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/0a358.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/0a358.json/default/toplevel.js
@@ -16,23 +16,23 @@ let _TopLevel;
 let _Facets;
 let _Result;
 _Result = PropTypes.shape({
-    "code": PropTypes.string,
-    "created_at": PropTypes.string,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "uri": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "uri": PropTypes.string.isRequired,
 });
 _Facets = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "facets": _Facets,
-    "limit": PropTypes.number,
-    "next": PropTypes.string,
-    "offset": PropTypes.number,
-    "previous": PropTypes.bool,
-    "results": PropTypes.arrayOf(_Result),
+    "count": PropTypes.number.isRequired,
+    "facets": (...args) => _Facets.isRequired(...args),
+    "limit": PropTypes.number.isRequired,
+    "next": PropTypes.string.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "previous": PropTypes.bool.isRequired,
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/0a91a.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/0a91a.json/default/toplevel.js
index 7592403..f589bae 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/0a91a.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/0a91a.json/default/toplevel.js
@@ -24,186 +24,186 @@ let _Base;
 let _BaseRepo;
 let _MergedBy;
 let _TopLevelRepo;
-const _Type = PropTypes.oneOfType(['pushEvent', 'createEvent', 'watchEvent', 'pullRequestEvent', 'deleteEvent']);
+const _Type = PropTypes.oneOf(["PushEvent", "CreateEvent", "WatchEvent", "PullRequestEvent", "DeleteEvent"]);
 _TopLevelRepo = PropTypes.shape({
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "url": PropTypes.string,
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _MergedBy = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "events_url": PropTypes.string,
-    "followers_url": PropTypes.string,
-    "following_url": PropTypes.string,
-    "gists_url": PropTypes.string,
-    "gravatar_id": PropTypes.string,
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "login": PropTypes.string,
-    "organizations_url": PropTypes.string,
-    "received_events_url": PropTypes.string,
-    "repos_url": PropTypes.string,
-    "site_admin": PropTypes.bool,
-    "starred_url": PropTypes.string,
-    "subscriptions_url": PropTypes.string,
-    "type": PropTypes.string,
-    "url": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
+    "events_url": PropTypes.string.isRequired,
+    "followers_url": PropTypes.string.isRequired,
+    "following_url": PropTypes.string.isRequired,
+    "gists_url": PropTypes.string.isRequired,
+    "gravatar_id": PropTypes.string.isRequired,
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "login": PropTypes.string.isRequired,
+    "organizations_url": PropTypes.string.isRequired,
+    "received_events_url": PropTypes.string.isRequired,
+    "repos_url": PropTypes.string.isRequired,
+    "site_admin": PropTypes.bool.isRequired,
+    "starred_url": PropTypes.string.isRequired,
+    "subscriptions_url": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _BaseRepo = PropTypes.shape({
-    "archive_url": PropTypes.string,
-    "assignees_url": PropTypes.string,
-    "blobs_url": PropTypes.string,
-    "branches_url": PropTypes.string,
-    "clone_url": PropTypes.string,
-    "collaborators_url": PropTypes.string,
-    "comments_url": PropTypes.string,
-    "commits_url": PropTypes.string,
-    "compare_url": PropTypes.string,
-    "contents_url": PropTypes.string,
-    "contributors_url": PropTypes.string,
-    "created_at": PropTypes.string,
-    "default_branch": PropTypes.string,
-    "deployments_url": PropTypes.string,
+    "archive_url": PropTypes.string.isRequired,
+    "assignees_url": PropTypes.string.isRequired,
+    "blobs_url": PropTypes.string.isRequired,
+    "branches_url": PropTypes.string.isRequired,
+    "clone_url": PropTypes.string.isRequired,
+    "collaborators_url": PropTypes.string.isRequired,
+    "comments_url": PropTypes.string.isRequired,
+    "commits_url": PropTypes.string.isRequired,
+    "compare_url": PropTypes.string.isRequired,
+    "contents_url": PropTypes.string.isRequired,
+    "contributors_url": PropTypes.string.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "default_branch": PropTypes.string.isRequired,
+    "deployments_url": PropTypes.string.isRequired,
     "description": PropTypes.any,
-    "downloads_url": PropTypes.string,
-    "events_url": PropTypes.string,
-    "fork": PropTypes.bool,
-    "forks": PropTypes.number,
-    "forks_count": PropTypes.number,
-    "forks_url": PropTypes.string,
-    "full_name": PropTypes.string,
-    "git_commits_url": PropTypes.string,
-    "git_refs_url": PropTypes.string,
-    "git_tags_url": PropTypes.string,
-    "git_url": PropTypes.string,
-    "has_downloads": PropTypes.bool,
-    "has_issues": PropTypes.bool,
-    "has_pages": PropTypes.bool,
-    "has_projects": PropTypes.bool,
-    "has_wiki": PropTypes.bool,
+    "downloads_url": PropTypes.string.isRequired,
+    "events_url": PropTypes.string.isRequired,
+    "fork": PropTypes.bool.isRequired,
+    "forks": PropTypes.number.isRequired,
+    "forks_count": PropTypes.number.isRequired,
+    "forks_url": PropTypes.string.isRequired,
+    "full_name": PropTypes.string.isRequired,
+    "git_commits_url": PropTypes.string.isRequired,
+    "git_refs_url": PropTypes.string.isRequired,
+    "git_tags_url": PropTypes.string.isRequired,
+    "git_url": PropTypes.string.isRequired,
+    "has_downloads": PropTypes.bool.isRequired,
+    "has_issues": PropTypes.bool.isRequired,
+    "has_pages": PropTypes.bool.isRequired,
+    "has_projects": PropTypes.bool.isRequired,
+    "has_wiki": PropTypes.bool.isRequired,
     "homepage": PropTypes.any,
-    "hooks_url": PropTypes.string,
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "issue_comment_url": PropTypes.string,
-    "issue_events_url": PropTypes.string,
-    "issues_url": PropTypes.string,
-    "keys_url": PropTypes.string,
-    "labels_url": PropTypes.string,
-    "language": PropTypes.string,
-    "languages_url": PropTypes.string,
-    "merges_url": PropTypes.string,
-    "milestones_url": PropTypes.string,
+    "hooks_url": PropTypes.string.isRequired,
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "issue_comment_url": PropTypes.string.isRequired,
+    "issue_events_url": PropTypes.string.isRequired,
+    "issues_url": PropTypes.string.isRequired,
+    "keys_url": PropTypes.string.isRequired,
+    "labels_url": PropTypes.string.isRequired,
+    "language": PropTypes.string.isRequired,
+    "languages_url": PropTypes.string.isRequired,
+    "merges_url": PropTypes.string.isRequired,
+    "milestones_url": PropTypes.string.isRequired,
     "mirror_url": PropTypes.any,
-    "name": PropTypes.string,
-    "notifications_url": PropTypes.string,
-    "open_issues": PropTypes.number,
-    "open_issues_count": PropTypes.number,
-    "owner": _MergedBy,
-    "private": PropTypes.bool,
-    "pulls_url": PropTypes.string,
-    "pushed_at": PropTypes.string,
-    "releases_url": PropTypes.string,
-    "size": PropTypes.number,
-    "ssh_url": PropTypes.string,
-    "stargazers_count": PropTypes.number,
-    "stargazers_url": PropTypes.string,
-    "statuses_url": PropTypes.string,
-    "subscribers_url": PropTypes.string,
-    "subscription_url": PropTypes.string,
-    "svn_url": PropTypes.string,
-    "tags_url": PropTypes.string,
-    "teams_url": PropTypes.string,
-    "trees_url": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "url": PropTypes.string,
-    "watchers": PropTypes.number,
-    "watchers_count": PropTypes.number,
+    "name": PropTypes.string.isRequired,
+    "notifications_url": PropTypes.string.isRequired,
+    "open_issues": PropTypes.number.isRequired,
+    "open_issues_count": PropTypes.number.isRequired,
+    "owner": (...args) => _MergedBy.isRequired(...args),
+    "private": PropTypes.bool.isRequired,
+    "pulls_url": PropTypes.string.isRequired,
+    "pushed_at": PropTypes.string.isRequired,
+    "releases_url": PropTypes.string.isRequired,
+    "size": PropTypes.number.isRequired,
+    "ssh_url": PropTypes.string.isRequired,
+    "stargazers_count": PropTypes.number.isRequired,
+    "stargazers_url": PropTypes.string.isRequired,
+    "statuses_url": PropTypes.string.isRequired,
+    "subscribers_url": PropTypes.string.isRequired,
+    "subscription_url": PropTypes.string.isRequired,
+    "svn_url": PropTypes.string.isRequired,
+    "tags_url": PropTypes.string.isRequired,
+    "teams_url": PropTypes.string.isRequired,
+    "trees_url": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "watchers": PropTypes.number.isRequired,
+    "watchers_count": PropTypes.number.isRequired,
 });
 _Base = PropTypes.shape({
-    "label": PropTypes.string,
-    "ref": PropTypes.string,
-    "repo": _BaseRepo,
-    "sha": PropTypes.string,
-    "user": _MergedBy,
+    "label": PropTypes.string.isRequired,
+    "ref": PropTypes.string.isRequired,
+    "repo": (...args) => _BaseRepo.isRequired(...args),
+    "sha": PropTypes.string.isRequired,
+    "user": (...args) => _MergedBy.isRequired(...args),
 });
 _Comments = PropTypes.shape({
-    "href": PropTypes.string,
+    "href": PropTypes.string.isRequired,
 });
 _Links = PropTypes.shape({
-    "comments": _Comments,
-    "commits": _Comments,
-    "html": _Comments,
-    "issue": _Comments,
-    "review_comment": _Comments,
-    "review_comments": _Comments,
-    "self": _Comments,
-    "statuses": _Comments,
+    "comments": (...args) => _Comments.isRequired(...args),
+    "commits": (...args) => _Comments.isRequired(...args),
+    "html": (...args) => _Comments.isRequired(...args),
+    "issue": (...args) => _Comments.isRequired(...args),
+    "review_comment": (...args) => _Comments.isRequired(...args),
+    "review_comments": (...args) => _Comments.isRequired(...args),
+    "self": (...args) => _Comments.isRequired(...args),
+    "statuses": (...args) => _Comments.isRequired(...args),
 });
 _PullRequest = PropTypes.shape({
-    "_links": _Links,
-    "additions": PropTypes.number,
+    "_links": (...args) => _Links.isRequired(...args),
+    "additions": PropTypes.number.isRequired,
     "assignee": PropTypes.any,
-    "assignees": PropTypes.arrayOf(PropTypes.any),
-    "base": _Base,
-    "body": PropTypes.string,
-    "changed_files": PropTypes.number,
-    "closed_at": PropTypes.string,
-    "comments": PropTypes.number,
-    "comments_url": PropTypes.string,
-    "commits": PropTypes.number,
-    "commits_url": PropTypes.string,
-    "created_at": PropTypes.string,
-    "deletions": PropTypes.number,
-    "diff_url": PropTypes.string,
-    "head": _Base,
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "issue_url": PropTypes.string,
-    "locked": PropTypes.bool,
-    "maintainer_can_modify": PropTypes.bool,
-    "merge_commit_sha": PropTypes.string,
+    "assignees": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "base": (...args) => _Base.isRequired(...args),
+    "body": PropTypes.string.isRequired,
+    "changed_files": PropTypes.number.isRequired,
+    "closed_at": PropTypes.string.isRequired,
+    "comments": PropTypes.number.isRequired,
+    "comments_url": PropTypes.string.isRequired,
+    "commits": PropTypes.number.isRequired,
+    "commits_url": PropTypes.string.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "deletions": PropTypes.number.isRequired,
+    "diff_url": PropTypes.string.isRequired,
+    "head": (...args) => _Base.isRequired(...args),
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "issue_url": PropTypes.string.isRequired,
+    "locked": PropTypes.bool.isRequired,
+    "maintainer_can_modify": PropTypes.bool.isRequired,
+    "merge_commit_sha": PropTypes.string.isRequired,
     "mergeable": PropTypes.any,
-    "mergeable_state": PropTypes.string,
-    "merged": PropTypes.bool,
-    "merged_at": PropTypes.string,
-    "merged_by": _MergedBy,
+    "mergeable_state": PropTypes.string.isRequired,
+    "merged": PropTypes.bool.isRequired,
+    "merged_at": PropTypes.string.isRequired,
+    "merged_by": (...args) => _MergedBy.isRequired(...args),
     "milestone": PropTypes.any,
-    "number": PropTypes.number,
-    "patch_url": PropTypes.string,
+    "number": PropTypes.number.isRequired,
+    "patch_url": PropTypes.string.isRequired,
     "rebaseable": PropTypes.any,
-    "requested_reviewers": PropTypes.arrayOf(PropTypes.any),
-    "review_comment_url": PropTypes.string,
-    "review_comments": PropTypes.number,
-    "review_comments_url": PropTypes.string,
-    "state": PropTypes.string,
-    "statuses_url": PropTypes.string,
-    "title": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "url": PropTypes.string,
-    "user": _MergedBy,
+    "requested_reviewers": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "review_comment_url": PropTypes.string.isRequired,
+    "review_comments": PropTypes.number.isRequired,
+    "review_comments_url": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "statuses_url": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": (...args) => _MergedBy.isRequired(...args),
 });
 _Author = PropTypes.shape({
-    "email": PropTypes.string,
-    "name": PropTypes.string,
+    "email": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _Commit = PropTypes.shape({
-    "author": _Author,
-    "distinct": PropTypes.bool,
-    "message": PropTypes.string,
-    "sha": PropTypes.string,
-    "url": PropTypes.string,
+    "author": (...args) => _Author.isRequired(...args),
+    "distinct": PropTypes.bool.isRequired,
+    "message": PropTypes.string.isRequired,
+    "sha": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Payload = PropTypes.shape({
     "action": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "before": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "commits": PropTypes.oneOfType([PropTypes.arrayOf(_Commit), PropTypes.any]),
+    "commits": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Commit(...args)), PropTypes.any]),
     "description": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "distinct_size": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "head": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "master_branch": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "number": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "pull_request": PropTypes.oneOfType([_PullRequest, PropTypes.any]),
+    "pull_request": PropTypes.oneOfType([(...args) => _PullRequest(...args), PropTypes.any]),
     "push_id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "pusher_type": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "ref": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -211,22 +211,22 @@ _Payload = PropTypes.shape({
     "size": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Actor = PropTypes.shape({
-    "avatar_url": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
     "display_login": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "gravatar_id": PropTypes.string,
-    "id": PropTypes.number,
-    "login": PropTypes.string,
-    "url": PropTypes.string,
+    "gravatar_id": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "login": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "actor": _Actor,
-    "created_at": PropTypes.string,
-    "id": PropTypes.string,
-    "org": PropTypes.oneOfType([_Actor, PropTypes.any]),
-    "payload": _Payload,
-    "public": PropTypes.bool,
-    "repo": _TopLevelRepo,
-    "type": _Type,
+    "actor": (...args) => _Actor.isRequired(...args),
+    "created_at": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "org": PropTypes.oneOfType([(...args) => _Actor(...args), PropTypes.any]),
+    "payload": (...args) => _Payload.isRequired(...args),
+    "public": PropTypes.bool.isRequired,
+    "repo": (...args) => _TopLevelRepo.isRequired(...args),
+    "type": _Type.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/0b91a.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/0b91a.json/default/toplevel.js
index 980cccd..1a9e92e 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/0b91a.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/0b91a.json/default/toplevel.js
@@ -19,42 +19,42 @@ let _Resultset;
 let _Result;
 let _Component;
 _Component = PropTypes.shape({
-    "name": PropTypes.string,
-    "uuid": PropTypes.string,
+    "name": PropTypes.string.isRequired,
+    "uuid": PropTypes.string.isRequired,
 });
 _Result = PropTypes.shape({
-    "attachment": PropTypes.arrayOf(PropTypes.any),
-    "body": PropTypes.string,
-    "changed": PropTypes.string,
-    "component": PropTypes.arrayOf(_Component),
-    "created": PropTypes.string,
-    "date": PropTypes.string,
-    "image": PropTypes.arrayOf(PropTypes.any),
+    "attachment": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "body": PropTypes.string.isRequired,
+    "changed": PropTypes.string.isRequired,
+    "component": PropTypes.arrayOf((...args) => _Component(...args)).isRequired,
+    "created": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "image": PropTypes.arrayOf(PropTypes.any).isRequired,
     "number": PropTypes.any,
     "teaser": PropTypes.any,
-    "title": PropTypes.string,
-    "topic": PropTypes.arrayOf(PropTypes.any),
-    "url": PropTypes.string,
-    "uuid": PropTypes.string,
-    "vuuid": PropTypes.string,
+    "title": PropTypes.string.isRequired,
+    "topic": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "url": PropTypes.string.isRequired,
+    "uuid": PropTypes.string.isRequired,
+    "vuuid": PropTypes.string.isRequired,
 });
 _Resultset = PropTypes.shape({
-    "count": PropTypes.number,
-    "page": PropTypes.number,
-    "pagesize": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "page": PropTypes.number.isRequired,
+    "pagesize": PropTypes.number.isRequired,
 });
 _ResponseInfo = PropTypes.shape({
-    "developerMessage": PropTypes.string,
-    "status": PropTypes.number,
+    "developerMessage": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _Metadata = PropTypes.shape({
-    "executionTime": PropTypes.number,
-    "responseInfo": _ResponseInfo,
-    "resultset": _Resultset,
+    "executionTime": PropTypes.number.isRequired,
+    "responseInfo": (...args) => _ResponseInfo.isRequired(...args),
+    "resultset": (...args) => _Resultset.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "metadata": _Metadata,
-    "results": PropTypes.arrayOf(_Result),
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/0cffa.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/0cffa.json/default/toplevel.js
index 90c1cc6..f1c4467 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/0cffa.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/0cffa.json/default/toplevel.js
@@ -22,104 +22,104 @@ let _Looping;
 let _User;
 let _Meta;
 let _Pagination;
-const _Rating = PropTypes.oneOfType(['g', 'pg']);
-const _Type = PropTypes.oneOfType(['gif']);
-const _Username = PropTypes.oneOfType(['cheezburger', 'empty', 'natgeowild', 'nowthis']);
+const _Rating = PropTypes.oneOf(["g", "pg"]);
+const _Type = PropTypes.oneOf(["gif"]);
+const _Username = PropTypes.oneOf(["cheezburger", "", "natgeowild", "nowthis"]);
 _Pagination = PropTypes.shape({
-    "count": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _Meta = PropTypes.shape({
-    "msg": PropTypes.string,
-    "response_id": PropTypes.string,
-    "status": PropTypes.number,
+    "msg": PropTypes.string.isRequired,
+    "response_id": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "banner_url": PropTypes.string,
-    "display_name": PropTypes.string,
-    "profile_url": PropTypes.string,
-    "twitter": PropTypes.string,
-    "username": _Username,
+    "avatar_url": PropTypes.string.isRequired,
+    "banner_url": PropTypes.string.isRequired,
+    "display_name": PropTypes.string.isRequired,
+    "profile_url": PropTypes.string.isRequired,
+    "twitter": PropTypes.string.isRequired,
+    "username": _Username.isRequired,
 });
 _Looping = PropTypes.shape({
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
 });
 _FixedHeight = PropTypes.shape({
     "frames": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "hash": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "mp4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mp4_size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "size": PropTypes.string,
-    "url": PropTypes.string,
-    "webp": PropTypes.string,
-    "webp_size": PropTypes.string,
-    "width": PropTypes.string,
+    "size": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "webp": PropTypes.string.isRequired,
+    "webp_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _DownsizedSmall = PropTypes.shape({
-    "height": PropTypes.string,
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Downsized = PropTypes.shape({
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Images = PropTypes.shape({
-    "480w_still": PropTypes.oneOfType([_Downsized, PropTypes.any]),
-    "downsized": _Downsized,
-    "downsized_large": _Downsized,
-    "downsized_medium": _Downsized,
-    "downsized_small": _DownsizedSmall,
-    "downsized_still": _Downsized,
-    "fixed_height": _FixedHeight,
-    "fixed_height_downsampled": _FixedHeight,
-    "fixed_height_small": _FixedHeight,
-    "fixed_height_small_still": _Downsized,
-    "fixed_height_still": _Downsized,
-    "fixed_width": _FixedHeight,
-    "fixed_width_downsampled": _FixedHeight,
-    "fixed_width_small": _FixedHeight,
-    "fixed_width_small_still": _Downsized,
-    "fixed_width_still": _Downsized,
-    "looping": _Looping,
-    "original": _FixedHeight,
-    "original_mp4": _DownsizedSmall,
-    "original_still": _Downsized,
-    "preview": _DownsizedSmall,
-    "preview_gif": _Downsized,
-    "preview_webp": _Downsized,
+    "480w_still": PropTypes.oneOfType([(...args) => _Downsized(...args), PropTypes.any]),
+    "downsized": (...args) => _Downsized.isRequired(...args),
+    "downsized_large": (...args) => _Downsized.isRequired(...args),
+    "downsized_medium": (...args) => _Downsized.isRequired(...args),
+    "downsized_small": (...args) => _DownsizedSmall.isRequired(...args),
+    "downsized_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width_still": (...args) => _Downsized.isRequired(...args),
+    "looping": (...args) => _Looping.isRequired(...args),
+    "original": (...args) => _FixedHeight.isRequired(...args),
+    "original_mp4": (...args) => _DownsizedSmall.isRequired(...args),
+    "original_still": (...args) => _Downsized.isRequired(...args),
+    "preview": (...args) => _DownsizedSmall.isRequired(...args),
+    "preview_gif": (...args) => _Downsized.isRequired(...args),
+    "preview_webp": (...args) => _Downsized.isRequired(...args),
 });
 _Datum = PropTypes.shape({
-    "bitly_gif_url": PropTypes.string,
-    "bitly_url": PropTypes.string,
-    "content_url": PropTypes.string,
-    "embed_url": PropTypes.string,
-    "id": PropTypes.string,
-    "images": _Images,
-    "import_datetime": PropTypes.string,
-    "is_indexable": PropTypes.number,
-    "rating": _Rating,
-    "slug": PropTypes.string,
-    "source": PropTypes.string,
-    "source_post_url": PropTypes.string,
-    "source_tld": PropTypes.string,
-    "trending_datetime": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
-    "user": PropTypes.oneOfType([_User, PropTypes.any]),
-    "username": _Username,
+    "bitly_gif_url": PropTypes.string.isRequired,
+    "bitly_url": PropTypes.string.isRequired,
+    "content_url": PropTypes.string.isRequired,
+    "embed_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "images": (...args) => _Images.isRequired(...args),
+    "import_datetime": PropTypes.string.isRequired,
+    "is_indexable": PropTypes.number.isRequired,
+    "rating": _Rating.isRequired,
+    "slug": PropTypes.string.isRequired,
+    "source": PropTypes.string.isRequired,
+    "source_post_url": PropTypes.string.isRequired,
+    "source_tld": PropTypes.string.isRequired,
+    "trending_datetime": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": PropTypes.oneOfType([(...args) => _User(...args), PropTypes.any]),
+    "username": _Username.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "meta": _Meta,
-    "pagination": _Pagination,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "pagination": (...args) => _Pagination.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/0e0c2.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/0e0c2.json/default/toplevel.js
index ee69682..cc19357 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/0e0c2.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/0e0c2.json/default/toplevel.js
@@ -20,69 +20,69 @@ let _FavMovie;
 let _Image;
 let _Video;
 let _VoteScore;
-const _DetailLanguage = PropTypes.oneOfType(['en', 'th']);
-const _Type = PropTypes.oneOfType(['poster', 'backdrop']);
-const _ResultLanguage = PropTypes.oneOfType(['en', 'empty']);
+const _DetailLanguage = PropTypes.oneOf(["en", "th"]);
+const _Type = PropTypes.oneOf(["Poster", "Backdrop"]);
+const _ResultLanguage = PropTypes.oneOf(["en", "-"]);
 _VoteScore = PropTypes.shape({
-    "avg": PropTypes.number,
-    "score": PropTypes.number,
-    "total": PropTypes.number,
+    "avg": PropTypes.number.isRequired,
+    "score": PropTypes.number.isRequired,
+    "total": PropTypes.number.isRequired,
 });
 _Video = PropTypes.shape({
-    "kind": PropTypes.string,
-    "language": _ResultLanguage,
-    "source": PropTypes.string,
-    "url": PropTypes.string,
+    "kind": PropTypes.string.isRequired,
+    "language": _ResultLanguage.isRequired,
+    "source": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "favs": PropTypes.number,
-    "id": PropTypes.number,
-    "thumbnail": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
+    "favs": PropTypes.number.isRequired,
+    "id": PropTypes.number.isRequired,
+    "thumbnail": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _FavMovie = PropTypes.shape({
-    "follow": PropTypes.bool,
-    "star": PropTypes.bool,
-    "watched": PropTypes.bool,
+    "follow": PropTypes.bool.isRequired,
+    "star": PropTypes.bool.isRequired,
+    "watched": PropTypes.bool.isRequired,
 });
 _Detail = PropTypes.shape({
-    "cast": PropTypes.string,
-    "director": PropTypes.string,
-    "id": PropTypes.number,
-    "language": _DetailLanguage,
-    "storyline": PropTypes.string,
-    "tagline": PropTypes.string,
-    "title": PropTypes.string,
+    "cast": PropTypes.string.isRequired,
+    "director": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "language": _DetailLanguage.isRequired,
+    "storyline": PropTypes.string.isRequired,
+    "tagline": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Collection = PropTypes.shape({
-    "id": PropTypes.number,
-    "movies": PropTypes.arrayOf(PropTypes.number),
-    "name": PropTypes.string,
-    "slug": PropTypes.string,
+    "id": PropTypes.number.isRequired,
+    "movies": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "name": PropTypes.string.isRequired,
+    "slug": PropTypes.string.isRequired,
 });
 _Result = PropTypes.shape({
-    "active_screens": PropTypes.number,
-    "collections": PropTypes.arrayOf(_Collection),
-    "details": PropTypes.arrayOf(_Detail),
-    "duration": PropTypes.number,
-    "fav_movie": _FavMovie,
-    "id": PropTypes.number,
-    "images": PropTypes.arrayOf(_Image),
-    "language": _ResultLanguage,
-    "release_date": PropTypes.string,
-    "stars": PropTypes.number,
+    "active_screens": PropTypes.number.isRequired,
+    "collections": PropTypes.arrayOf((...args) => _Collection(...args)).isRequired,
+    "details": PropTypes.arrayOf((...args) => _Detail(...args)).isRequired,
+    "duration": PropTypes.number.isRequired,
+    "fav_movie": (...args) => _FavMovie.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "images": PropTypes.arrayOf((...args) => _Image(...args)).isRequired,
+    "language": _ResultLanguage.isRequired,
+    "release_date": PropTypes.string.isRequired,
+    "stars": PropTypes.number.isRequired,
     "tags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any]),
-    "title": PropTypes.string,
-    "videos": PropTypes.arrayOf(_Video),
-    "vote_score": _VoteScore,
-    "watches": PropTypes.number,
+    "title": PropTypes.string.isRequired,
+    "videos": PropTypes.arrayOf((...args) => _Video(...args)).isRequired,
+    "vote_score": (...args) => _VoteScore.isRequired(...args),
+    "watches": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "next": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "next": PropTypes.string.isRequired,
     "previous": PropTypes.any,
-    "results": PropTypes.arrayOf(_Result),
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/0fecf.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/0fecf.json/default/toplevel.js
index 4203df1..fabd06b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/0fecf.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/0fecf.json/default/toplevel.js
@@ -14,7 +14,7 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "countries": PropTypes.arrayOf(PropTypes.string),
+    "countries": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/10be4.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/10be4.json/default/toplevel.js
index 3e0dc4c..51e4918 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/10be4.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/10be4.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Identifier;
 let _Link;
 let _OtherName;
 let _Text;
-const _Scheme = PropTypes.oneOfType(['spdx', 'trove', 'dep5']);
-const _Keyword = PropTypes.oneOfType(['osiApproved', 'discouraged', 'redundant', 'miscellaneous', 'nonReusable', 'obsolete', 'popular', 'permissive', 'retired', 'specialPurpose', 'copyleft', 'international']);
-const _Note = PropTypes.oneOfType(['osiPage', 'tlDRLegal', 'wikipediaPage', 'noteWikipediaPage', 'mozillaPage', 'osetFoundationPage']);
-const _MediaType = PropTypes.oneOfType(['textHTML', 'textPlain', 'applicationPDF']);
-const _Title = PropTypes.oneOfType(['html', 'plainText', 'pdf']);
+const _Scheme = PropTypes.oneOf(["SPDX", "Trove", "DEP5"]);
+const _Keyword = PropTypes.oneOf(["osi-approved", "discouraged", "redundant", "miscellaneous", "non-reusable", "obsolete", "popular", "permissive", "retired", "special-purpose", "copyleft", "international"]);
+const _Note = PropTypes.oneOf(["OSI Page", "tl;dr legal", "Wikipedia page", "Wikipedia Page", "Mozilla Page", "OSET Foundation Page"]);
+const _MediaType = PropTypes.oneOf(["text/html", "text/plain", "application/pdf"]);
+const _Title = PropTypes.oneOf(["HTML", "Plain Text", "PDF"]);
 _Text = PropTypes.shape({
-    "media_type": _MediaType,
-    "title": _Title,
-    "url": PropTypes.string,
+    "media_type": _MediaType.isRequired,
+    "title": _Title.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _OtherName = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
     "note": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Link = PropTypes.shape({
-    "note": _Note,
-    "url": PropTypes.string,
+    "note": _Note.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": _Scheme,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": _Scheme.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(_OtherName),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf((...args) => _OtherName(...args)).isRequired,
     "superseded_by": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/112b5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/112b5.json/default/toplevel.js
index 1876f56..00ed57f 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/112b5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/112b5.json/default/toplevel.js
@@ -16,18 +16,18 @@ let _TopLevel;
 let _Args;
 let _Headers;
 _Headers = PropTypes.shape({
-    "Accept-Encoding": PropTypes.string,
-    "Connection": PropTypes.string,
-    "Host": PropTypes.string,
-    "User-Agent": PropTypes.string,
+    "Accept-Encoding": PropTypes.string.isRequired,
+    "Connection": PropTypes.string.isRequired,
+    "Host": PropTypes.string.isRequired,
+    "User-Agent": PropTypes.string.isRequired,
 });
 _Args = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "args": _Args,
-    "headers": _Headers,
-    "origin": PropTypes.string,
-    "url": PropTypes.string,
+    "args": (...args) => _Args.isRequired(...args),
+    "headers": (...args) => _Headers.isRequired(...args),
+    "origin": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/127a1.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/127a1.json/default/toplevel.js
index 0c1f989..c86b37c 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/127a1.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/127a1.json/default/toplevel.js
@@ -22,104 +22,104 @@ let _Looping;
 let _User;
 let _Meta;
 let _Pagination;
-const _Rating = PropTypes.oneOfType(['g']);
-const _Type = PropTypes.oneOfType(['gif']);
-const _Username = PropTypes.oneOfType(['empty', 'thedailyshow', 'studiosoriginals', 'disneyzootopia']);
+const _Rating = PropTypes.oneOf(["g"]);
+const _Type = PropTypes.oneOf(["gif"]);
+const _Username = PropTypes.oneOf(["", "thedailyshow", "studiosoriginals", "disneyzootopia"]);
 _Pagination = PropTypes.shape({
-    "count": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _Meta = PropTypes.shape({
-    "msg": PropTypes.string,
-    "response_id": PropTypes.string,
-    "status": PropTypes.number,
+    "msg": PropTypes.string.isRequired,
+    "response_id": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "banner_url": PropTypes.string,
-    "display_name": PropTypes.string,
-    "profile_url": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
+    "banner_url": PropTypes.string.isRequired,
+    "display_name": PropTypes.string.isRequired,
+    "profile_url": PropTypes.string.isRequired,
     "twitter": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "username": _Username,
+    "username": _Username.isRequired,
 });
 _Looping = PropTypes.shape({
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
 });
 _FixedHeight = PropTypes.shape({
     "frames": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "hash": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "mp4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mp4_size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "size": PropTypes.string,
-    "url": PropTypes.string,
-    "webp": PropTypes.string,
-    "webp_size": PropTypes.string,
-    "width": PropTypes.string,
+    "size": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "webp": PropTypes.string.isRequired,
+    "webp_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _DownsizedSmall = PropTypes.shape({
-    "height": PropTypes.string,
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Downsized = PropTypes.shape({
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Images = PropTypes.shape({
-    "480w_still": PropTypes.oneOfType([_Downsized, PropTypes.any]),
-    "downsized": _Downsized,
-    "downsized_large": _Downsized,
-    "downsized_medium": _Downsized,
-    "downsized_small": _DownsizedSmall,
-    "downsized_still": _Downsized,
-    "fixed_height": _FixedHeight,
-    "fixed_height_downsampled": _FixedHeight,
-    "fixed_height_small": _FixedHeight,
-    "fixed_height_small_still": _Downsized,
-    "fixed_height_still": _Downsized,
-    "fixed_width": _FixedHeight,
-    "fixed_width_downsampled": _FixedHeight,
-    "fixed_width_small": _FixedHeight,
-    "fixed_width_small_still": _Downsized,
-    "fixed_width_still": _Downsized,
-    "looping": _Looping,
-    "original": _FixedHeight,
-    "original_mp4": _DownsizedSmall,
-    "original_still": _Downsized,
-    "preview": _DownsizedSmall,
-    "preview_gif": _Downsized,
-    "preview_webp": _Downsized,
+    "480w_still": PropTypes.oneOfType([(...args) => _Downsized(...args), PropTypes.any]),
+    "downsized": (...args) => _Downsized.isRequired(...args),
+    "downsized_large": (...args) => _Downsized.isRequired(...args),
+    "downsized_medium": (...args) => _Downsized.isRequired(...args),
+    "downsized_small": (...args) => _DownsizedSmall.isRequired(...args),
+    "downsized_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width_still": (...args) => _Downsized.isRequired(...args),
+    "looping": (...args) => _Looping.isRequired(...args),
+    "original": (...args) => _FixedHeight.isRequired(...args),
+    "original_mp4": (...args) => _DownsizedSmall.isRequired(...args),
+    "original_still": (...args) => _Downsized.isRequired(...args),
+    "preview": (...args) => _DownsizedSmall.isRequired(...args),
+    "preview_gif": (...args) => _Downsized.isRequired(...args),
+    "preview_webp": (...args) => _Downsized.isRequired(...args),
 });
 _Datum = PropTypes.shape({
-    "bitly_gif_url": PropTypes.string,
-    "bitly_url": PropTypes.string,
-    "content_url": PropTypes.string,
-    "embed_url": PropTypes.string,
-    "id": PropTypes.string,
-    "images": _Images,
-    "import_datetime": PropTypes.string,
-    "is_indexable": PropTypes.number,
-    "rating": _Rating,
-    "slug": PropTypes.string,
-    "source": PropTypes.string,
-    "source_post_url": PropTypes.string,
-    "source_tld": PropTypes.string,
-    "trending_datetime": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
-    "user": PropTypes.oneOfType([_User, PropTypes.any]),
-    "username": _Username,
+    "bitly_gif_url": PropTypes.string.isRequired,
+    "bitly_url": PropTypes.string.isRequired,
+    "content_url": PropTypes.string.isRequired,
+    "embed_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "images": (...args) => _Images.isRequired(...args),
+    "import_datetime": PropTypes.string.isRequired,
+    "is_indexable": PropTypes.number.isRequired,
+    "rating": _Rating.isRequired,
+    "slug": PropTypes.string.isRequired,
+    "source": PropTypes.string.isRequired,
+    "source_post_url": PropTypes.string.isRequired,
+    "source_tld": PropTypes.string.isRequired,
+    "trending_datetime": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": PropTypes.oneOfType([(...args) => _User(...args), PropTypes.any]),
+    "username": _Username.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "meta": _Meta,
-    "pagination": _Pagination,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "pagination": (...args) => _Pagination.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/13d8d.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/13d8d.json/default/toplevel.js
index 080204f..a084b6d 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/13d8d.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/13d8d.json/default/toplevel.js
@@ -17,28 +17,28 @@ let _Location;
 let _Street;
 let _OutcomeStatus;
 _OutcomeStatus = PropTypes.shape({
-    "category": PropTypes.string,
-    "date": PropTypes.string,
+    "category": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
 });
 _Street = PropTypes.shape({
-    "id": PropTypes.number,
-    "name": PropTypes.string,
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "latitude": PropTypes.string,
-    "longitude": PropTypes.string,
-    "street": _Street,
+    "latitude": PropTypes.string.isRequired,
+    "longitude": PropTypes.string.isRequired,
+    "street": (...args) => _Street.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "category": PropTypes.string,
-    "context": PropTypes.string,
-    "id": PropTypes.number,
-    "location": _Location,
-    "location_subtype": PropTypes.string,
-    "location_type": PropTypes.string,
-    "month": PropTypes.string,
-    "outcome_status": _OutcomeStatus,
-    "persistent_id": PropTypes.string,
+    "category": PropTypes.string.isRequired,
+    "context": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "location_subtype": PropTypes.string.isRequired,
+    "location_type": PropTypes.string.isRequired,
+    "month": PropTypes.string.isRequired,
+    "outcome_status": (...args) => _OutcomeStatus.isRequired(...args),
+    "persistent_id": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/14d38.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/14d38.json/default/toplevel.js
index 6d55b38..ed0de2e 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/14d38.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/14d38.json/default/toplevel.js
@@ -15,13 +15,13 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Headers;
 _Headers = PropTypes.shape({
-    "Accept-Encoding": PropTypes.string,
-    "Connection": PropTypes.string,
-    "Host": PropTypes.string,
-    "User-Agent": PropTypes.string,
+    "Accept-Encoding": PropTypes.string.isRequired,
+    "Connection": PropTypes.string.isRequired,
+    "Host": PropTypes.string.isRequired,
+    "User-Agent": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "headers": _Headers,
+    "headers": (...args) => _Headers.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/167d6.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/167d6.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/167d6.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/167d6.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/16bc5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/16bc5.json/default/toplevel.js
index c1f2259..79ae4ee 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/16bc5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/16bc5.json/default/toplevel.js
@@ -27,92 +27,92 @@ let _Location;
 let _Units;
 let _Wind;
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/176f1.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/176f1.json/default/toplevel.js
index 86e26a8..1ab028a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/176f1.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/176f1.json/default/toplevel.js
@@ -22,24 +22,24 @@ _Footnote = PropTypes.shape({
     "text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Datum = PropTypes.shape({
-    "footnotes": PropTypes.arrayOf(_Footnote),
-    "period": PropTypes.string,
-    "periodName": PropTypes.string,
-    "value": PropTypes.string,
-    "year": PropTypes.string,
+    "footnotes": PropTypes.arrayOf((...args) => _Footnote(...args)).isRequired,
+    "period": PropTypes.string.isRequired,
+    "periodName": PropTypes.string.isRequired,
+    "value": PropTypes.string.isRequired,
+    "year": PropTypes.string.isRequired,
 });
 _Series = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "seriesID": PropTypes.string,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "seriesID": PropTypes.string.isRequired,
 });
 _Results = PropTypes.shape({
-    "series": PropTypes.arrayOf(_Series),
+    "series": PropTypes.arrayOf((...args) => _Series(...args)).isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "Results": _Results,
-    "message": PropTypes.arrayOf(PropTypes.any),
-    "responseTime": PropTypes.number,
-    "status": PropTypes.string,
+    "Results": (...args) => _Results.isRequired(...args),
+    "message": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "responseTime": PropTypes.number.isRequired,
+    "status": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/1a7f5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/1a7f5.json/default/toplevel.js
index a4e8532..9ee622b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/1a7f5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/1a7f5.json/default/toplevel.js
@@ -13,14 +13,14 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Country = PropTypes.oneOfType(['unitedStates']);
+const _Country = PropTypes.oneOf(["United States"]);
 _TopLevel = PropTypes.shape({
-    "age": PropTypes.number,
-    "country": _Country,
-    "females": PropTypes.number,
-    "males": PropTypes.number,
-    "total": PropTypes.number,
-    "year": PropTypes.number,
+    "age": PropTypes.number.isRequired,
+    "country": _Country.isRequired,
+    "females": PropTypes.number.isRequired,
+    "males": PropTypes.number.isRequired,
+    "total": PropTypes.number.isRequired,
+    "year": PropTypes.number.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/1b28c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/1b28c.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/1b28c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/1b28c.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/1b409.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/1b409.json/default/toplevel.js
index 42031bc..0e66a25 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/1b409.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/1b409.json/default/toplevel.js
@@ -17,71 +17,71 @@ let _Meta;
 let _Object;
 let _Extra;
 let _Person;
-const _Party = PropTypes.oneOfType(['republican', 'democrat']);
-const _Gender = PropTypes.oneOfType(['male', 'female']);
-const _GenderLabel = PropTypes.oneOfType(['male', 'female']);
-const _Namemod = PropTypes.oneOfType(['empty', 'jr', 'ii', 'iii', 'iv']);
-const _RoleType = PropTypes.oneOfType(['representative']);
-const _RoleTypeLabel = PropTypes.oneOfType(['representative', 'delegate', 'residentCommissioner']);
-const _Title = PropTypes.oneOfType(['rep', 'commish']);
+const _Party = PropTypes.oneOf(["Republican", "Democrat"]);
+const _Gender = PropTypes.oneOf(["male", "female"]);
+const _GenderLabel = PropTypes.oneOf(["Male", "Female"]);
+const _Namemod = PropTypes.oneOf(["", "Jr.", "II", "III", "IV"]);
+const _RoleType = PropTypes.oneOf(["representative"]);
+const _RoleTypeLabel = PropTypes.oneOf(["Representative", "Delegate", "Resident Commissioner"]);
+const _Title = PropTypes.oneOf(["Rep.", "Commish."]);
 _Person = PropTypes.shape({
-    "bioguideid": PropTypes.string,
-    "birthday": PropTypes.string,
-    "cspanid": PropTypes.number,
-    "firstname": PropTypes.string,
-    "gender": _Gender,
-    "gender_label": _GenderLabel,
-    "id": PropTypes.number,
-    "lastname": PropTypes.string,
-    "link": PropTypes.string,
-    "middlename": PropTypes.string,
-    "name": PropTypes.string,
-    "namemod": _Namemod,
-    "nickname": PropTypes.string,
-    "osid": PropTypes.string,
+    "bioguideid": PropTypes.string.isRequired,
+    "birthday": PropTypes.string.isRequired,
+    "cspanid": PropTypes.number.isRequired,
+    "firstname": PropTypes.string.isRequired,
+    "gender": _Gender.isRequired,
+    "gender_label": _GenderLabel.isRequired,
+    "id": PropTypes.number.isRequired,
+    "lastname": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "middlename": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "namemod": _Namemod.isRequired,
+    "nickname": PropTypes.string.isRequired,
+    "osid": PropTypes.string.isRequired,
     "pvsid": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "sortname": PropTypes.string,
+    "sortname": PropTypes.string.isRequired,
     "twitterid": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "youtubeid": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Extra = PropTypes.shape({
-    "address": PropTypes.string,
+    "address": PropTypes.string.isRequired,
     "contact_form": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "fax": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "office": PropTypes.string,
+    "office": PropTypes.string.isRequired,
     "rss_url": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Object = PropTypes.shape({
     "caucus": PropTypes.any,
-    "congress_numbers": PropTypes.arrayOf(PropTypes.number),
-    "current": PropTypes.bool,
-    "description": PropTypes.string,
-    "district": PropTypes.number,
-    "enddate": PropTypes.string,
-    "extra": _Extra,
-    "id": PropTypes.number,
+    "congress_numbers": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "current": PropTypes.bool.isRequired,
+    "description": PropTypes.string.isRequired,
+    "district": PropTypes.number.isRequired,
+    "enddate": PropTypes.string.isRequired,
+    "extra": (...args) => _Extra.isRequired(...args),
+    "id": PropTypes.number.isRequired,
     "leadership_title": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "party": _Party,
-    "person": _Person,
-    "phone": PropTypes.string,
-    "role_type": _RoleType,
-    "role_type_label": _RoleTypeLabel,
+    "party": _Party.isRequired,
+    "person": (...args) => _Person.isRequired(...args),
+    "phone": PropTypes.string.isRequired,
+    "role_type": _RoleType.isRequired,
+    "role_type_label": _RoleTypeLabel.isRequired,
     "senator_class": PropTypes.any,
     "senator_rank": PropTypes.any,
-    "startdate": PropTypes.string,
-    "state": PropTypes.string,
-    "title": _Title,
-    "title_long": _RoleTypeLabel,
-    "website": PropTypes.string,
+    "startdate": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "title": _Title.isRequired,
+    "title_long": _RoleTypeLabel.isRequired,
+    "website": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "limit": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "limit": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "meta": _Meta,
-    "objects": PropTypes.arrayOf(_Object),
+    "meta": (...args) => _Meta.isRequired(...args),
+    "objects": PropTypes.arrayOf((...args) => _Object(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/2465e.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/2465e.json/default/toplevel.js
index 9964244..fa5d3cf 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/2465e.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/2465e.json/default/toplevel.js
@@ -26,68 +26,68 @@ let _Responses;
 let _The200;
 let _Schema;
 _Schema = PropTypes.shape({
-    "$ref": PropTypes.string,
+    "$ref": PropTypes.string.isRequired,
 });
 _The200 = PropTypes.shape({
-    "description": PropTypes.string,
-    "schema": _Schema,
+    "description": PropTypes.string.isRequired,
+    "schema": (...args) => _Schema.isRequired(...args),
 });
 _Responses = PropTypes.shape({
-    "200": _The200,
+    "200": (...args) => _The200.isRequired(...args),
 });
 _Parameter = PropTypes.shape({
-    "description": PropTypes.string,
-    "format": PropTypes.string,
-    "in": PropTypes.string,
-    "name": PropTypes.string,
-    "required": PropTypes.bool,
-    "type": PropTypes.string,
+    "description": PropTypes.string.isRequired,
+    "format": PropTypes.string.isRequired,
+    "in": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "required": PropTypes.bool.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Get = PropTypes.shape({
-    "description": PropTypes.string,
-    "parameters": PropTypes.arrayOf(_Parameter),
-    "responses": _Responses,
-    "summary": PropTypes.string,
-    "tags": PropTypes.arrayOf(PropTypes.string),
+    "description": PropTypes.string.isRequired,
+    "parameters": PropTypes.arrayOf((...args) => _Parameter(...args)).isRequired,
+    "responses": (...args) => _Responses.isRequired(...args),
+    "summary": PropTypes.string.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 _ItaTaxonomiesSearch = PropTypes.shape({
-    "get": _Get,
+    "get": (...args) => _Get.isRequired(...args),
 });
 _Paths = PropTypes.shape({
-    "/ita_taxonomies/search": _ItaTaxonomiesSearch,
+    "/ita_taxonomies/search": (...args) => _ItaTaxonomiesSearch.isRequired(...args),
 });
 _Info = PropTypes.shape({
-    "description": PropTypes.string,
-    "title": PropTypes.string,
-    "version": PropTypes.string,
+    "description": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
 });
 _Annotations = PropTypes.shape({
-    "description": PropTypes.string,
-    "type": PropTypes.string,
+    "description": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Properties = PropTypes.shape({
-    "annotations": _Annotations,
-    "datatype_properties": _Annotations,
-    "id": _Annotations,
-    "label": _Annotations,
-    "sub_class_of": _Annotations,
-    "type": _Annotations,
+    "annotations": (...args) => _Annotations.isRequired(...args),
+    "datatype_properties": (...args) => _Annotations.isRequired(...args),
+    "id": (...args) => _Annotations.isRequired(...args),
+    "label": (...args) => _Annotations.isRequired(...args),
+    "sub_class_of": (...args) => _Annotations.isRequired(...args),
+    "type": (...args) => _Annotations.isRequired(...args),
 });
 _Taxonomy = PropTypes.shape({
-    "properties": _Properties,
+    "properties": (...args) => _Properties.isRequired(...args),
 });
 _Definitions = PropTypes.shape({
-    "Taxonomy": _Taxonomy,
+    "Taxonomy": (...args) => _Taxonomy.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "basePath": PropTypes.string,
-    "definitions": _Definitions,
-    "host": PropTypes.string,
-    "info": _Info,
-    "paths": _Paths,
-    "produces": PropTypes.arrayOf(PropTypes.string),
-    "schemes": PropTypes.arrayOf(PropTypes.string),
-    "swagger": PropTypes.string,
+    "basePath": PropTypes.string.isRequired,
+    "definitions": (...args) => _Definitions.isRequired(...args),
+    "host": PropTypes.string.isRequired,
+    "info": (...args) => _Info.isRequired(...args),
+    "paths": (...args) => _Paths.isRequired(...args),
+    "produces": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "schemes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "swagger": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/24f52.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/24f52.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/24f52.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/24f52.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/262f0.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/262f0.json/default/toplevel.js
index 4ad0fa8..0267122 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/262f0.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/262f0.json/default/toplevel.js
@@ -26,94 +26,94 @@ let _GUID;
 let _Location;
 let _Units;
 let _Wind;
-const _Text = PropTypes.oneOfType(['mostlyCloudy', 'rain', 'partlyCloudy']);
+const _Text = PropTypes.oneOf(["Mostly Cloudy", "Rain", "Partly Cloudy"]);
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": _Text,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": _Text.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": _Text,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": _Text.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/26b49.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/26b49.json/default/toplevel.js
index 4baec46..d70951d 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/26b49.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/26b49.json/default/toplevel.js
@@ -22,104 +22,104 @@ let _Looping;
 let _User;
 let _Meta;
 let _Pagination;
-const _Rating = PropTypes.oneOfType(['pg', 'g', 'pg13', 'y']);
-const _Type = PropTypes.oneOfType(['gif']);
+const _Rating = PropTypes.oneOf(["pg", "g", "pg-13", "y"]);
+const _Type = PropTypes.oneOf(["gif"]);
 _Pagination = PropTypes.shape({
-    "count": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _Meta = PropTypes.shape({
-    "msg": PropTypes.string,
-    "response_id": PropTypes.string,
-    "status": PropTypes.number,
+    "msg": PropTypes.string.isRequired,
+    "response_id": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "banner_url": PropTypes.string,
-    "display_name": PropTypes.string,
-    "profile_url": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
+    "banner_url": PropTypes.string.isRequired,
+    "display_name": PropTypes.string.isRequired,
+    "profile_url": PropTypes.string.isRequired,
     "twitter": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "username": PropTypes.string,
+    "username": PropTypes.string.isRequired,
 });
 _Looping = PropTypes.shape({
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
 });
 _FixedHeight = PropTypes.shape({
     "frames": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "hash": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "mp4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mp4_size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "size": PropTypes.string,
-    "url": PropTypes.string,
-    "webp": PropTypes.string,
-    "webp_size": PropTypes.string,
-    "width": PropTypes.string,
+    "size": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "webp": PropTypes.string.isRequired,
+    "webp_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _DownsizedSmall = PropTypes.shape({
-    "height": PropTypes.string,
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Downsized = PropTypes.shape({
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Images = PropTypes.shape({
-    "480w_still": PropTypes.oneOfType([_Downsized, PropTypes.any]),
-    "downsized": _Downsized,
-    "downsized_large": _Downsized,
-    "downsized_medium": _Downsized,
-    "downsized_small": _DownsizedSmall,
-    "downsized_still": _Downsized,
-    "fixed_height": _FixedHeight,
-    "fixed_height_downsampled": _FixedHeight,
-    "fixed_height_small": _FixedHeight,
-    "fixed_height_small_still": _Downsized,
-    "fixed_height_still": _Downsized,
-    "fixed_width": _FixedHeight,
-    "fixed_width_downsampled": _FixedHeight,
-    "fixed_width_small": _FixedHeight,
-    "fixed_width_small_still": _Downsized,
-    "fixed_width_still": _Downsized,
-    "hd": PropTypes.oneOfType([_DownsizedSmall, PropTypes.any]),
-    "looping": _Looping,
-    "original": _FixedHeight,
-    "original_mp4": _DownsizedSmall,
-    "original_still": _Downsized,
-    "preview": _DownsizedSmall,
-    "preview_gif": _Downsized,
-    "preview_webp": _Downsized,
+    "480w_still": PropTypes.oneOfType([(...args) => _Downsized(...args), PropTypes.any]),
+    "downsized": (...args) => _Downsized.isRequired(...args),
+    "downsized_large": (...args) => _Downsized.isRequired(...args),
+    "downsized_medium": (...args) => _Downsized.isRequired(...args),
+    "downsized_small": (...args) => _DownsizedSmall.isRequired(...args),
+    "downsized_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width_still": (...args) => _Downsized.isRequired(...args),
+    "hd": PropTypes.oneOfType([(...args) => _DownsizedSmall(...args), PropTypes.any]),
+    "looping": (...args) => _Looping.isRequired(...args),
+    "original": (...args) => _FixedHeight.isRequired(...args),
+    "original_mp4": (...args) => _DownsizedSmall.isRequired(...args),
+    "original_still": (...args) => _Downsized.isRequired(...args),
+    "preview": (...args) => _DownsizedSmall.isRequired(...args),
+    "preview_gif": (...args) => _Downsized.isRequired(...args),
+    "preview_webp": (...args) => _Downsized.isRequired(...args),
 });
 _Datum = PropTypes.shape({
-    "bitly_gif_url": PropTypes.string,
-    "bitly_url": PropTypes.string,
-    "content_url": PropTypes.string,
-    "embed_url": PropTypes.string,
-    "id": PropTypes.string,
-    "images": _Images,
-    "import_datetime": PropTypes.string,
-    "is_indexable": PropTypes.number,
-    "rating": _Rating,
-    "slug": PropTypes.string,
-    "source": PropTypes.string,
-    "source_post_url": PropTypes.string,
-    "source_tld": PropTypes.string,
-    "trending_datetime": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
-    "user": PropTypes.oneOfType([_User, PropTypes.any]),
-    "username": PropTypes.string,
+    "bitly_gif_url": PropTypes.string.isRequired,
+    "bitly_url": PropTypes.string.isRequired,
+    "content_url": PropTypes.string.isRequired,
+    "embed_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "images": (...args) => _Images.isRequired(...args),
+    "import_datetime": PropTypes.string.isRequired,
+    "is_indexable": PropTypes.number.isRequired,
+    "rating": _Rating.isRequired,
+    "slug": PropTypes.string.isRequired,
+    "source": PropTypes.string.isRequired,
+    "source_post_url": PropTypes.string.isRequired,
+    "source_tld": PropTypes.string.isRequired,
+    "trending_datetime": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": PropTypes.oneOfType([(...args) => _User(...args), PropTypes.any]),
+    "username": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "meta": _Meta,
-    "pagination": _Pagination,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "pagination": (...args) => _Pagination.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/26c9c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/26c9c.json/default/toplevel.js
index 1cc98a5..a5e8fa5 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/26c9c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/26c9c.json/default/toplevel.js
@@ -37,90 +37,90 @@ let _Query;
 let _OrderBy;
 let _Expression;
 _Expression = PropTypes.shape({
-    "columnId": PropTypes.number,
-    "type": PropTypes.string,
+    "columnId": PropTypes.number.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _OrderBy = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "expression": _Expression,
+    "ascending": PropTypes.bool.isRequired,
+    "expression": (...args) => _Expression.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "orderBys": PropTypes.arrayOf(_OrderBy),
+    "orderBys": PropTypes.arrayOf((...args) => _OrderBy(...args)).isRequired,
 });
 _Owner = PropTypes.shape({
-    "displayName": PropTypes.string,
-    "id": PropTypes.string,
-    "profileImageUrlLarge": PropTypes.string,
-    "profileImageUrlMedium": PropTypes.string,
-    "profileImageUrlSmall": PropTypes.string,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "roleName": PropTypes.string,
-    "screenName": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "profileImageUrlLarge": PropTypes.string.isRequired,
+    "profileImageUrlMedium": PropTypes.string.isRequired,
+    "profileImageUrlSmall": PropTypes.string.isRequired,
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "roleName": PropTypes.string.isRequired,
+    "screenName": PropTypes.string.isRequired,
 });
 _Visible = PropTypes.shape({
-    "table": PropTypes.bool,
+    "table": PropTypes.bool.isRequired,
 });
 _RenderTypeConfig = PropTypes.shape({
-    "visible": _Visible,
+    "visible": (...args) => _Visible.isRequired(...args),
 });
 _Order = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "columnFieldName": PropTypes.string,
+    "ascending": PropTypes.bool.isRequired,
+    "columnFieldName": PropTypes.string.isRequired,
 });
 _JSONQuery = PropTypes.shape({
-    "order": PropTypes.arrayOf(_Order),
+    "order": PropTypes.arrayOf((...args) => _Order(...args)).isRequired,
 });
 _Notes = PropTypes.shape({
-    "Notes": PropTypes.string,
+    "Notes": PropTypes.string.isRequired,
 });
 _DatasetSummary = PropTypes.shape({
-    "Contact Information": PropTypes.string,
-    "Coverage": PropTypes.string,
-    "Data Frequency": PropTypes.string,
-    "Dataset Owner": PropTypes.string,
-    "Granularity": PropTypes.string,
-    "Organization": PropTypes.string,
-    "Posting Frequency": PropTypes.string,
-    "Time Period": PropTypes.string,
-    "Units": PropTypes.string,
+    "Contact Information": PropTypes.string.isRequired,
+    "Coverage": PropTypes.string.isRequired,
+    "Data Frequency": PropTypes.string.isRequired,
+    "Dataset Owner": PropTypes.string.isRequired,
+    "Granularity": PropTypes.string.isRequired,
+    "Organization": PropTypes.string.isRequired,
+    "Posting Frequency": PropTypes.string.isRequired,
+    "Time Period": PropTypes.string.isRequired,
+    "Units": PropTypes.string.isRequired,
 });
 _DatasetInformation = PropTypes.shape({
-    "Agency": PropTypes.string,
+    "Agency": PropTypes.string.isRequired,
 });
 _CommonCore = PropTypes.shape({
-    "Contact Email": PropTypes.string,
-    "Contact Name": PropTypes.string,
-    "Publisher": PropTypes.string,
+    "Contact Email": PropTypes.string.isRequired,
+    "Contact Name": PropTypes.string.isRequired,
+    "Publisher": PropTypes.string.isRequired,
 });
 _AdditionalResources = PropTypes.shape({
-    "See Also": PropTypes.string,
-    "See Also ": PropTypes.string,
+    "See Also": PropTypes.string.isRequired,
+    "See Also ": PropTypes.string.isRequired,
 });
 _CustomFields = PropTypes.shape({
-    "Additional Resources": _AdditionalResources,
-    "Common Core": _CommonCore,
-    "Dataset Information": _DatasetInformation,
-    "Dataset Summary": _DatasetSummary,
-    "Notes": _Notes,
+    "Additional Resources": (...args) => _AdditionalResources.isRequired(...args),
+    "Common Core": (...args) => _CommonCore.isRequired(...args),
+    "Dataset Information": (...args) => _DatasetInformation.isRequired(...args),
+    "Dataset Summary": (...args) => _DatasetSummary.isRequired(...args),
+    "Notes": (...args) => _Notes.isRequired(...args),
 });
 _Attachment = PropTypes.shape({
-    "assetId": PropTypes.string,
-    "blobId": PropTypes.string,
-    "filename": PropTypes.string,
-    "name": PropTypes.string,
+    "assetId": PropTypes.string.isRequired,
+    "blobId": PropTypes.string.isRequired,
+    "filename": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _Metadata = PropTypes.shape({
-    "attachments": PropTypes.arrayOf(_Attachment),
-    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string),
-    "custom_fields": _CustomFields,
-    "jsonQuery": _JSONQuery,
-    "rdfSubject": PropTypes.string,
-    "renderTypeConfig": _RenderTypeConfig,
+    "attachments": PropTypes.arrayOf((...args) => _Attachment(...args)).isRequired,
+    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "custom_fields": (...args) => _CustomFields.isRequired(...args),
+    "jsonQuery": (...args) => _JSONQuery.isRequired(...args),
+    "rdfSubject": PropTypes.string.isRequired,
+    "renderTypeConfig": (...args) => _RenderTypeConfig.isRequired(...args),
 });
 _Grant = PropTypes.shape({
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "inherited": PropTypes.bool,
-    "type": PropTypes.string,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "inherited": PropTypes.bool.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Format = PropTypes.shape({
     "align": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -129,77 +129,77 @@ _Format = PropTypes.shape({
     "view": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Top = PropTypes.shape({
-    "count": PropTypes.number,
-    "item": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "item": PropTypes.string.isRequired,
 });
 _CachedContents = PropTypes.shape({
     "average": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "largest": PropTypes.string,
-    "non_null": PropTypes.number,
-    "null": PropTypes.number,
-    "smallest": PropTypes.string,
+    "largest": PropTypes.string.isRequired,
+    "non_null": PropTypes.number.isRequired,
+    "null": PropTypes.number.isRequired,
+    "smallest": PropTypes.string.isRequired,
     "sum": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "top": PropTypes.arrayOf(_Top),
+    "top": PropTypes.arrayOf((...args) => _Top(...args)).isRequired,
 });
 _Column = PropTypes.shape({
-    "cachedContents": PropTypes.oneOfType([_CachedContents, PropTypes.any]),
-    "dataTypeName": PropTypes.string,
-    "fieldName": PropTypes.string,
+    "cachedContents": PropTypes.oneOfType([(...args) => _CachedContents(...args), PropTypes.any]),
+    "dataTypeName": PropTypes.string.isRequired,
+    "fieldName": PropTypes.string.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "format": _Format,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "position": PropTypes.number,
-    "renderTypeName": PropTypes.string,
+    "format": (...args) => _Format.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "position": PropTypes.number.isRequired,
+    "renderTypeName": PropTypes.string.isRequired,
     "tableColumnId": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _View = PropTypes.shape({
-    "attribution": PropTypes.string,
-    "attributionLink": PropTypes.string,
-    "averageRating": PropTypes.number,
-    "category": PropTypes.string,
-    "columns": PropTypes.arrayOf(_Column),
-    "createdAt": PropTypes.number,
-    "description": PropTypes.string,
-    "displayType": PropTypes.string,
-    "downloadCount": PropTypes.number,
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "grants": PropTypes.arrayOf(_Grant),
-    "hideFromCatalog": PropTypes.bool,
-    "hideFromDataJson": PropTypes.bool,
-    "id": PropTypes.string,
-    "indexUpdatedAt": PropTypes.number,
-    "locale": PropTypes.string,
-    "metadata": _Metadata,
-    "name": PropTypes.string,
-    "newBackend": PropTypes.bool,
-    "numberOfComments": PropTypes.number,
-    "oid": PropTypes.number,
-    "owner": _Owner,
-    "provenance": PropTypes.string,
-    "publicationAppendEnabled": PropTypes.bool,
-    "publicationDate": PropTypes.number,
-    "publicationGroup": PropTypes.number,
-    "publicationStage": PropTypes.string,
-    "query": _Query,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "rowsUpdatedAt": PropTypes.number,
-    "rowsUpdatedBy": PropTypes.string,
-    "tableAuthor": _Owner,
-    "tableId": PropTypes.number,
-    "tags": PropTypes.arrayOf(PropTypes.string),
-    "totalTimesRated": PropTypes.number,
-    "viewCount": PropTypes.number,
-    "viewLastModified": PropTypes.number,
-    "viewType": PropTypes.string,
+    "attribution": PropTypes.string.isRequired,
+    "attributionLink": PropTypes.string.isRequired,
+    "averageRating": PropTypes.number.isRequired,
+    "category": PropTypes.string.isRequired,
+    "columns": PropTypes.arrayOf((...args) => _Column(...args)).isRequired,
+    "createdAt": PropTypes.number.isRequired,
+    "description": PropTypes.string.isRequired,
+    "displayType": PropTypes.string.isRequired,
+    "downloadCount": PropTypes.number.isRequired,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "grants": PropTypes.arrayOf((...args) => _Grant(...args)).isRequired,
+    "hideFromCatalog": PropTypes.bool.isRequired,
+    "hideFromDataJson": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "indexUpdatedAt": PropTypes.number.isRequired,
+    "locale": PropTypes.string.isRequired,
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "name": PropTypes.string.isRequired,
+    "newBackend": PropTypes.bool.isRequired,
+    "numberOfComments": PropTypes.number.isRequired,
+    "oid": PropTypes.number.isRequired,
+    "owner": (...args) => _Owner.isRequired(...args),
+    "provenance": PropTypes.string.isRequired,
+    "publicationAppendEnabled": PropTypes.bool.isRequired,
+    "publicationDate": PropTypes.number.isRequired,
+    "publicationGroup": PropTypes.number.isRequired,
+    "publicationStage": PropTypes.string.isRequired,
+    "query": (...args) => _Query.isRequired(...args),
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rowsUpdatedAt": PropTypes.number.isRequired,
+    "rowsUpdatedBy": PropTypes.string.isRequired,
+    "tableAuthor": (...args) => _Owner.isRequired(...args),
+    "tableId": PropTypes.number.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "totalTimesRated": PropTypes.number.isRequired,
+    "viewCount": PropTypes.number.isRequired,
+    "viewLastModified": PropTypes.number.isRequired,
+    "viewType": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "view": _View,
+    "view": (...args) => _View.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))),
-    "meta": _Meta,
+    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/27332.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/27332.json/default/toplevel.js
index 2f385d3..cc82470 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/27332.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/27332.json/default/toplevel.js
@@ -23,29 +23,29 @@ let _Preview;
 let _Image;
 let _Source;
 let _Variants;
-const _Domain = PropTypes.oneOfType(['selfPics', 'imgurCOM', 'iImgurCOM', 'iReddIt']);
-const _PostHint = PropTypes.oneOfType(['link', 'image']);
-const _Subreddit = PropTypes.oneOfType(['pics']);
-const _SubredditID = PropTypes.oneOfType(['t52Qh0U']);
-const _SubredditNamePrefixed = PropTypes.oneOfType(['rPics']);
-const _SubredditType = PropTypes.oneOfType(['public']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _Domain = PropTypes.oneOf(["self.pics", "imgur.com", "i.imgur.com", "i.redd.it"]);
+const _PostHint = PropTypes.oneOf(["link", "image"]);
+const _Subreddit = PropTypes.oneOf(["pics"]);
+const _SubredditID = PropTypes.oneOf(["t5_2qh0u"]);
+const _SubredditNamePrefixed = PropTypes.oneOf(["r/pics"]);
+const _SubredditType = PropTypes.oneOf(["public"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _Variants = PropTypes.shape({
 });
 _Source = PropTypes.shape({
-    "height": PropTypes.number,
-    "url": PropTypes.string,
-    "width": PropTypes.number,
+    "height": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Image = PropTypes.shape({
-    "id": PropTypes.string,
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
-    "variants": _Variants,
+    "id": PropTypes.string.isRequired,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
+    "variants": (...args) => _Variants.isRequired(...args),
 });
 _Preview = PropTypes.shape({
-    "enabled": PropTypes.bool,
-    "images": PropTypes.arrayOf(_Image),
+    "enabled": PropTypes.bool.isRequired,
+    "images": PropTypes.arrayOf((...args) => _Image(...args)).isRequired,
 });
 _MediaEmbed = PropTypes.shape({
     "content": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -54,102 +54,102 @@ _MediaEmbed = PropTypes.shape({
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Oembed = PropTypes.shape({
-    "description": PropTypes.string,
-    "height": PropTypes.number,
-    "html": PropTypes.string,
-    "provider_name": PropTypes.string,
-    "provider_url": PropTypes.string,
-    "thumbnail_height": PropTypes.number,
-    "thumbnail_url": PropTypes.string,
-    "thumbnail_width": PropTypes.number,
-    "title": PropTypes.string,
-    "type": PropTypes.string,
-    "version": PropTypes.string,
-    "width": PropTypes.number,
+    "description": PropTypes.string.isRequired,
+    "height": PropTypes.number.isRequired,
+    "html": PropTypes.string.isRequired,
+    "provider_name": PropTypes.string.isRequired,
+    "provider_url": PropTypes.string.isRequired,
+    "thumbnail_height": PropTypes.number.isRequired,
+    "thumbnail_url": PropTypes.string.isRequired,
+    "thumbnail_width": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Media = PropTypes.shape({
-    "oembed": _Oembed,
-    "type": _Domain,
+    "oembed": (...args) => _Oembed.isRequired(...args),
+    "type": _Domain.isRequired,
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "author_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
     "distinguished": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "domain": _Domain,
-    "downs": PropTypes.number,
-    "edited": PropTypes.bool,
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "domain": _Domain.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.bool.isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
     "link_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "link_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "locked": PropTypes.bool,
-    "media": PropTypes.oneOfType([_Media, PropTypes.any]),
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "locked": PropTypes.bool.isRequired,
+    "media": PropTypes.oneOfType([(...args) => _Media(...args), PropTypes.any]),
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "permalink": PropTypes.string,
+    "over_18": PropTypes.bool.isRequired,
+    "permalink": PropTypes.string.isRequired,
     "post_hint": PropTypes.oneOfType([_PostHint, PropTypes.any]),
-    "preview": PropTypes.oneOfType([_Preview, PropTypes.any]),
-    "quarantine": PropTypes.bool,
+    "preview": PropTypes.oneOfType([(...args) => _Preview(...args), PropTypes.any]),
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
-    "secure_media": PropTypes.oneOfType([_Media, PropTypes.any]),
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
+    "secure_media": PropTypes.oneOfType([(...args) => _Media(...args), PropTypes.any]),
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": _Subreddit,
-    "subreddit_id": _SubredditID,
-    "subreddit_name_prefixed": _SubredditNamePrefixed,
-    "subreddit_type": _SubredditType,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": _Subreddit.isRequired,
+    "subreddit_id": _SubredditID.isRequired,
+    "subreddit_name_prefixed": _SubredditNamePrefixed.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
     "suggested_sort": PropTypes.any,
-    "thumbnail": PropTypes.string,
+    "thumbnail": PropTypes.string.isRequired,
     "thumbnail_height": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "thumbnail_width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
+    "visited": PropTypes.bool.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/29f47.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/29f47.json/default/toplevel.js
index d6a7691..e20d1ee 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/29f47.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/29f47.json/default/toplevel.js
@@ -22,118 +22,118 @@ let _Image;
 let _Source;
 let _Variants;
 let _GIF;
-const _Distinguished = PropTypes.oneOfType(['admin']);
-const _Domain = PropTypes.oneOfType(['selfAnnouncements', 'iReddIt']);
-const _PostHint = PropTypes.oneOfType(['self', 'image']);
-const _Subreddit = PropTypes.oneOfType(['announcements']);
-const _SubredditID = PropTypes.oneOfType(['t52R0Ij']);
-const _SubredditNamePrefixed = PropTypes.oneOfType(['rAnnouncements']);
-const _SubredditType = PropTypes.oneOfType(['restricted']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _Distinguished = PropTypes.oneOf(["admin"]);
+const _Domain = PropTypes.oneOf(["self.announcements", "i.redd.it"]);
+const _PostHint = PropTypes.oneOf(["self", "image"]);
+const _Subreddit = PropTypes.oneOf(["announcements"]);
+const _SubredditID = PropTypes.oneOf(["t5_2r0ij"]);
+const _SubredditNamePrefixed = PropTypes.oneOf(["r/announcements"]);
+const _SubredditType = PropTypes.oneOf(["restricted"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _GIF = PropTypes.shape({
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
 });
 _Variants = PropTypes.shape({
-    "gif": PropTypes.oneOfType([_GIF, PropTypes.any]),
-    "mp4": PropTypes.oneOfType([_GIF, PropTypes.any]),
+    "gif": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
+    "mp4": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
 });
 _Source = PropTypes.shape({
-    "height": PropTypes.number,
-    "url": PropTypes.string,
-    "width": PropTypes.number,
+    "height": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Image = PropTypes.shape({
-    "id": PropTypes.string,
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
-    "variants": _Variants,
+    "id": PropTypes.string.isRequired,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
+    "variants": (...args) => _Variants.isRequired(...args),
 });
 _Preview = PropTypes.shape({
-    "enabled": PropTypes.bool,
-    "images": PropTypes.arrayOf(_Image),
+    "enabled": PropTypes.bool.isRequired,
+    "images": PropTypes.arrayOf((...args) => _Image(...args)).isRequired,
 });
 _MediaEmbed = PropTypes.shape({
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.any,
     "author_flair_text": PropTypes.any,
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
-    "distinguished": _Distinguished,
-    "domain": _Domain,
-    "downs": PropTypes.number,
-    "edited": PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
+    "distinguished": _Distinguished.isRequired,
+    "domain": _Domain.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.oneOfType([PropTypes.bool, PropTypes.number]).isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
     "link_flair_css_class": PropTypes.any,
     "link_flair_text": PropTypes.any,
-    "locked": PropTypes.bool,
+    "locked": PropTypes.bool.isRequired,
     "media": PropTypes.any,
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "permalink": PropTypes.string,
+    "over_18": PropTypes.bool.isRequired,
+    "permalink": PropTypes.string.isRequired,
     "post_hint": PropTypes.oneOfType([_PostHint, PropTypes.any]),
-    "preview": PropTypes.oneOfType([_Preview, PropTypes.any]),
-    "quarantine": PropTypes.bool,
+    "preview": PropTypes.oneOfType([(...args) => _Preview(...args), PropTypes.any]),
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
     "secure_media": PropTypes.any,
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": _Subreddit,
-    "subreddit_id": _SubredditID,
-    "subreddit_name_prefixed": _SubredditNamePrefixed,
-    "subreddit_type": _SubredditType,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": _Subreddit.isRequired,
+    "subreddit_id": _SubredditID.isRequired,
+    "subreddit_name_prefixed": _SubredditNamePrefixed.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
     "suggested_sort": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "thumbnail": PropTypes.string,
+    "thumbnail": PropTypes.string.isRequired,
     "thumbnail_height": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "thumbnail_width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
+    "visited": PropTypes.bool.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/2d4e2.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/2d4e2.json/default/toplevel.js
index 5d18544..78bb521 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/2d4e2.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/2d4e2.json/default/toplevel.js
@@ -17,77 +17,77 @@ let _Meta;
 let _Object;
 let _Extra;
 let _Person;
-const _Party = PropTypes.oneOfType(['republican', 'democrat', 'independent']);
-const _Gender = PropTypes.oneOfType(['male', 'female']);
-const _GenderLabel = PropTypes.oneOfType(['male', 'female']);
-const _Namemod = PropTypes.oneOfType(['empty', 'iii', 'jr']);
-const _RoleType = PropTypes.oneOfType(['senator']);
-const _RoleTypeLabel = PropTypes.oneOfType(['senator']);
-const _SenatorClass = PropTypes.oneOfType(['class2', 'class1', 'class3']);
-const _SenatorClassLabel = PropTypes.oneOfType(['class2', 'class1', 'class3']);
-const _SenatorRank = PropTypes.oneOfType(['senior', 'junior']);
-const _SenatorRankLabel = PropTypes.oneOfType(['senior', 'junior']);
-const _Title = PropTypes.oneOfType(['sen']);
+const _Party = PropTypes.oneOf(["Republican", "Democrat", "Independent"]);
+const _Gender = PropTypes.oneOf(["male", "female"]);
+const _GenderLabel = PropTypes.oneOf(["Male", "Female"]);
+const _Namemod = PropTypes.oneOf(["", "III", "Jr."]);
+const _RoleType = PropTypes.oneOf(["senator"]);
+const _RoleTypeLabel = PropTypes.oneOf(["Senator"]);
+const _SenatorClass = PropTypes.oneOf(["class2", "class1", "class3"]);
+const _SenatorClassLabel = PropTypes.oneOf(["Class 2", "Class 1", "Class 3"]);
+const _SenatorRank = PropTypes.oneOf(["senior", "junior"]);
+const _SenatorRankLabel = PropTypes.oneOf(["Senior", "Junior"]);
+const _Title = PropTypes.oneOf(["Sen."]);
 _Person = PropTypes.shape({
-    "bioguideid": PropTypes.string,
-    "birthday": PropTypes.string,
-    "cspanid": PropTypes.number,
-    "firstname": PropTypes.string,
-    "gender": _Gender,
-    "gender_label": _GenderLabel,
-    "id": PropTypes.number,
-    "lastname": PropTypes.string,
-    "link": PropTypes.string,
-    "middlename": PropTypes.string,
-    "name": PropTypes.string,
-    "namemod": _Namemod,
-    "nickname": PropTypes.string,
-    "osid": PropTypes.string,
-    "pvsid": PropTypes.string,
-    "sortname": PropTypes.string,
+    "bioguideid": PropTypes.string.isRequired,
+    "birthday": PropTypes.string.isRequired,
+    "cspanid": PropTypes.number.isRequired,
+    "firstname": PropTypes.string.isRequired,
+    "gender": _Gender.isRequired,
+    "gender_label": _GenderLabel.isRequired,
+    "id": PropTypes.number.isRequired,
+    "lastname": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "middlename": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "namemod": _Namemod.isRequired,
+    "nickname": PropTypes.string.isRequired,
+    "osid": PropTypes.string.isRequired,
+    "pvsid": PropTypes.string.isRequired,
+    "sortname": PropTypes.string.isRequired,
     "twitterid": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "youtubeid": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Extra = PropTypes.shape({
-    "address": PropTypes.string,
-    "contact_form": PropTypes.string,
+    "address": PropTypes.string.isRequired,
+    "contact_form": PropTypes.string.isRequired,
     "fax": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "office": PropTypes.string,
+    "office": PropTypes.string.isRequired,
     "rss_url": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Object = PropTypes.shape({
     "caucus": PropTypes.oneOfType([_Party, PropTypes.any]),
-    "congress_numbers": PropTypes.arrayOf(PropTypes.number),
-    "current": PropTypes.bool,
-    "description": PropTypes.string,
+    "congress_numbers": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "current": PropTypes.bool.isRequired,
+    "description": PropTypes.string.isRequired,
     "district": PropTypes.any,
-    "enddate": PropTypes.string,
-    "extra": _Extra,
-    "id": PropTypes.number,
+    "enddate": PropTypes.string.isRequired,
+    "extra": (...args) => _Extra.isRequired(...args),
+    "id": PropTypes.number.isRequired,
     "leadership_title": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "party": _Party,
-    "person": _Person,
-    "phone": PropTypes.string,
-    "role_type": _RoleType,
-    "role_type_label": _RoleTypeLabel,
-    "senator_class": _SenatorClass,
-    "senator_class_label": _SenatorClassLabel,
-    "senator_rank": _SenatorRank,
-    "senator_rank_label": _SenatorRankLabel,
-    "startdate": PropTypes.string,
-    "state": PropTypes.string,
-    "title": _Title,
-    "title_long": _RoleTypeLabel,
-    "website": PropTypes.string,
+    "party": _Party.isRequired,
+    "person": (...args) => _Person.isRequired(...args),
+    "phone": PropTypes.string.isRequired,
+    "role_type": _RoleType.isRequired,
+    "role_type_label": _RoleTypeLabel.isRequired,
+    "senator_class": _SenatorClass.isRequired,
+    "senator_class_label": _SenatorClassLabel.isRequired,
+    "senator_rank": _SenatorRank.isRequired,
+    "senator_rank_label": _SenatorRankLabel.isRequired,
+    "startdate": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "title": _Title.isRequired,
+    "title_long": _RoleTypeLabel.isRequired,
+    "website": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "limit": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "limit": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "meta": _Meta,
-    "objects": PropTypes.arrayOf(_Object),
+    "meta": (...args) => _Meta.isRequired(...args),
+    "objects": PropTypes.arrayOf((...args) => _Object(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/2df80.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/2df80.json/default/toplevel.js
index 41b6919..fb352e1 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/2df80.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/2df80.json/default/toplevel.js
@@ -15,29 +15,29 @@ import PropTypes from "prop-types";
 let _TopLevelElement;
 let _Adminregion;
 let _PurpleTopLevel;
-const _ID = PropTypes.oneOfType(['empty', 'sas', 'ssa', 'eca', 'lac', 'eap', 'mna', 'hic', 'lic', 'na', 'lmc', 'umc', 'lnx', 'idx', 'ibd', 'idb', 'lcn', 'ssf', 'ecs', 'mea', 'eas', 'nac']);
-const _Value = PropTypes.oneOfType(['empty', 'southAsia', 'subSaharanAfricaExcludingHighIncome', 'europeCentralAsiaExcludingHighIncome', 'latinAmericaCaribbeanExcludingHighIncome', 'eastAsiaPacificExcludingHighIncome', 'middleEastNorthAfricaExcludingHighIncome', 'highIncome', 'lowIncome', 'aggregates', 'lowerMiddleIncome', 'upperMiddleIncome', 'notClassified', 'ida', 'ibrd', 'blend', 'latinAmericaCaribbean', 'subSaharanAfrica', 'europeCentralAsia', 'middleEastNorthAfrica', 'eastAsiaPacific', 'northAmerica']);
+const _ID = PropTypes.oneOf(["", "SAS", "SSA", "ECA", "LAC", "EAP", "MNA", "HIC", "LIC", "NA", "LMC", "UMC", "LNX", "IDX", "IBD", "IDB", "LCN", "SSF", "ECS", "MEA", "EAS", "NAC"]);
+const _Value = PropTypes.oneOf(["", "South Asia", "Sub-Saharan Africa (excluding high income)", "Europe & Central Asia (excluding high income)", "Latin America & Caribbean (excluding high income)", "East Asia & Pacific (excluding high income)", "Middle East & North Africa (excluding high income)", "High income", "Low income", "Aggregates", "Lower middle income", "Upper middle income", "Not classified", "IDA", "IBRD", "Blend", "Latin America & Caribbean ", "Sub-Saharan Africa ", "Europe & Central Asia", "Middle East & North Africa", "East Asia & Pacific", "North America"]);
 _PurpleTopLevel = PropTypes.shape({
-    "page": PropTypes.number,
-    "pages": PropTypes.number,
-    "per_page": PropTypes.string,
-    "total": PropTypes.number,
+    "page": PropTypes.number.isRequired,
+    "pages": PropTypes.number.isRequired,
+    "per_page": PropTypes.string.isRequired,
+    "total": PropTypes.number.isRequired,
 });
 _Adminregion = PropTypes.shape({
-    "id": _ID,
-    "value": _Value,
+    "id": _ID.isRequired,
+    "value": _Value.isRequired,
 });
 _TopLevelElement = PropTypes.shape({
-    "adminregion": _Adminregion,
-    "capitalCity": PropTypes.string,
-    "id": PropTypes.string,
-    "incomeLevel": _Adminregion,
-    "iso2Code": PropTypes.string,
-    "latitude": PropTypes.string,
-    "lendingType": _Adminregion,
-    "longitude": PropTypes.string,
-    "name": PropTypes.string,
-    "region": _Adminregion,
+    "adminregion": (...args) => _Adminregion.isRequired(...args),
+    "capitalCity": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "incomeLevel": (...args) => _Adminregion.isRequired(...args),
+    "iso2Code": PropTypes.string.isRequired,
+    "latitude": PropTypes.string.isRequired,
+    "lendingType": (...args) => _Adminregion.isRequired(...args),
+    "longitude": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "region": (...args) => _Adminregion.isRequired(...args),
 });
 
-export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(_TopLevelElement), _PurpleTopLevel]));
+export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TopLevelElement(...args)), (...args) => _PurpleTopLevel(...args)]));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/31189.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/31189.json/default/toplevel.js
index 3aa1de5..838b762 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/31189.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/31189.json/default/toplevel.js
@@ -21,22 +21,22 @@ _Rates = PropTypes.shape({
     "reduced": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "reduced1": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "reduced2": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "standard": PropTypes.number,
+    "standard": PropTypes.number.isRequired,
     "super_reduced": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Period = PropTypes.shape({
-    "effective_from": PropTypes.string,
-    "rates": _Rates,
+    "effective_from": PropTypes.string.isRequired,
+    "rates": (...args) => _Rates.isRequired(...args),
 });
 _Rate = PropTypes.shape({
-    "code": PropTypes.string,
-    "country_code": PropTypes.string,
-    "name": PropTypes.string,
-    "periods": PropTypes.arrayOf(_Period),
+    "code": PropTypes.string.isRequired,
+    "country_code": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "periods": PropTypes.arrayOf((...args) => _Period(...args)).isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "details": PropTypes.string,
-    "rates": PropTypes.arrayOf(_Rate),
+    "details": PropTypes.string.isRequired,
+    "rates": PropTypes.arrayOf((...args) => _Rate(...args)).isRequired,
     "version": PropTypes.any,
 });
 
diff --git a/base/javascript-prop-types/test/inputs/json/misc/32431.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/32431.json/default/toplevel.js
index 6f8e1c6..61fec99 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/32431.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/32431.json/default/toplevel.js
@@ -17,62 +17,62 @@ let _Feature;
 let _Geometry;
 let _Properties;
 let _Metadata;
-const _GeometryType = PropTypes.oneOfType(['point']);
-const _MagType = PropTypes.oneOfType(['md', 'ml', 'mb']);
-const _Status = PropTypes.oneOfType(['automatic', 'reviewed']);
-const _PropertiesType = PropTypes.oneOfType(['earthquake']);
-const _FeatureType = PropTypes.oneOfType(['feature']);
+const _GeometryType = PropTypes.oneOf(["Point"]);
+const _MagType = PropTypes.oneOf(["md", "ml", "mb"]);
+const _Status = PropTypes.oneOf(["automatic", "reviewed"]);
+const _PropertiesType = PropTypes.oneOf(["earthquake"]);
+const _FeatureType = PropTypes.oneOf(["Feature"]);
 _Metadata = PropTypes.shape({
-    "api": PropTypes.string,
-    "count": PropTypes.number,
-    "generated": PropTypes.number,
-    "status": PropTypes.number,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
+    "api": PropTypes.string.isRequired,
+    "count": PropTypes.number.isRequired,
+    "generated": PropTypes.number.isRequired,
+    "status": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Properties = PropTypes.shape({
     "alert": PropTypes.any,
     "cdi": PropTypes.any,
-    "code": PropTypes.string,
-    "detail": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "detail": PropTypes.string.isRequired,
     "dmin": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "felt": PropTypes.any,
     "gap": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "ids": PropTypes.string,
-    "mag": PropTypes.number,
-    "magType": _MagType,
+    "ids": PropTypes.string.isRequired,
+    "mag": PropTypes.number.isRequired,
+    "magType": _MagType.isRequired,
     "mmi": PropTypes.any,
-    "net": PropTypes.string,
+    "net": PropTypes.string.isRequired,
     "nst": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "place": PropTypes.string,
-    "rms": PropTypes.number,
-    "sig": PropTypes.number,
-    "sources": PropTypes.string,
-    "status": _Status,
-    "time": PropTypes.number,
-    "title": PropTypes.string,
-    "tsunami": PropTypes.number,
-    "type": _PropertiesType,
-    "types": PropTypes.string,
-    "tz": PropTypes.number,
-    "updated": PropTypes.number,
-    "url": PropTypes.string,
+    "place": PropTypes.string.isRequired,
+    "rms": PropTypes.number.isRequired,
+    "sig": PropTypes.number.isRequired,
+    "sources": PropTypes.string.isRequired,
+    "status": _Status.isRequired,
+    "time": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "tsunami": PropTypes.number.isRequired,
+    "type": _PropertiesType.isRequired,
+    "types": PropTypes.string.isRequired,
+    "tz": PropTypes.number.isRequired,
+    "updated": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Geometry = PropTypes.shape({
-    "coordinates": PropTypes.arrayOf(PropTypes.number),
-    "type": _GeometryType,
+    "coordinates": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "type": _GeometryType.isRequired,
 });
 _Feature = PropTypes.shape({
-    "geometry": _Geometry,
-    "id": PropTypes.string,
-    "properties": _Properties,
-    "type": _FeatureType,
+    "geometry": (...args) => _Geometry.isRequired(...args),
+    "id": PropTypes.string.isRequired,
+    "properties": (...args) => _Properties.isRequired(...args),
+    "type": _FeatureType.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "bbox": PropTypes.arrayOf(PropTypes.number),
-    "features": PropTypes.arrayOf(_Feature),
-    "metadata": _Metadata,
-    "type": PropTypes.string,
+    "bbox": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "features": PropTypes.arrayOf((...args) => _Feature(...args)).isRequired,
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/32d5c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/32d5c.json/default/toplevel.js
index 8f176e6..62eba51 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/32d5c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/32d5c.json/default/toplevel.js
@@ -15,13 +15,13 @@ import PropTypes from "prop-types";
 let _TopLevel;
 _TopLevel = PropTypes.shape({
     "BirthDate": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "BirthDateIsProtected": PropTypes.bool,
-    "GenderTypeID": PropTypes.number,
-    "Notes": PropTypes.string,
-    "ParliamentaryName": PropTypes.string,
-    "PersonID": PropTypes.number,
-    "PhotoURL": PropTypes.string,
-    "PreferredName": PropTypes.string,
+    "BirthDateIsProtected": PropTypes.bool.isRequired,
+    "GenderTypeID": PropTypes.number.isRequired,
+    "Notes": PropTypes.string.isRequired,
+    "ParliamentaryName": PropTypes.string.isRequired,
+    "PersonID": PropTypes.number.isRequired,
+    "PhotoURL": PropTypes.string.isRequired,
+    "PreferredName": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/337ed.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/337ed.json/default/toplevel.js
index baa6c37..62a5ca3 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/337ed.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/337ed.json/default/toplevel.js
@@ -16,33 +16,33 @@ let _TopLevel;
 let _Facets;
 let _Result;
 let _CustomIncome;
-const _Status = PropTypes.oneOfType(['active', 'inactive']);
-const _CustomIncomeType = PropTypes.oneOfType(['public', 'other']);
-const _ResultType = PropTypes.oneOfType(['financialDataNGO', 'financialDataLawyer', 'financialDataTradeAssociation']);
+const _Status = PropTypes.oneOf(["active", "inactive"]);
+const _CustomIncomeType = PropTypes.oneOf(["public", "other"]);
+const _ResultType = PropTypes.oneOf(["FinancialDataNGO", "FinancialDataLawyer", "FinancialDataTradeAssociation"]);
 _CustomIncome = PropTypes.shape({
-    "amount": PropTypes.number,
-    "created_at": PropTypes.string,
-    "id": PropTypes.string,
-    "name": PropTypes.string,
-    "status": _Status,
-    "type": _CustomIncomeType,
-    "updated_at": PropTypes.string,
-    "uri": PropTypes.string,
+    "amount": PropTypes.number.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "status": _Status.isRequired,
+    "type": _CustomIncomeType.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "uri": PropTypes.string.isRequired,
 });
 _Result = PropTypes.shape({
     "cost_absolute": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "cost_max": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "cost_min": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "created_at": PropTypes.string,
-    "customIncomes": PropTypes.arrayOf(_CustomIncome),
+    "created_at": PropTypes.string.isRequired,
+    "customIncomes": PropTypes.arrayOf((...args) => _CustomIncome(...args)).isRequired,
     "direct_rep_costs_max": PropTypes.any,
     "direct_rep_costs_min": PropTypes.any,
-    "end_date": PropTypes.string,
-    "eur_sources_grants": PropTypes.number,
+    "end_date": PropTypes.string.isRequired,
+    "eur_sources_grants": PropTypes.number.isRequired,
     "eur_sources_grants_src": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "eur_sources_procurement": PropTypes.number,
+    "eur_sources_procurement": PropTypes.number.isRequired,
     "eur_sources_procurement_src": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "id": PropTypes.string,
+    "id": PropTypes.string.isRequired,
     "new_organisation": PropTypes.any,
     "no_clients": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "other_financial_information": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -52,27 +52,27 @@ _Result = PropTypes.shape({
     "public_financing_infranational": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "public_financing_national": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "public_financing_total": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "representative": PropTypes.string,
-    "start_date": PropTypes.string,
-    "status": _Status,
+    "representative": PropTypes.string.isRequired,
+    "start_date": PropTypes.string.isRequired,
+    "status": _Status.isRequired,
     "total_budget": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "turnover_absolute": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "turnover_max": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "turnover_min": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "type": _ResultType,
-    "updated_at": PropTypes.string,
-    "uri": PropTypes.string,
+    "type": _ResultType.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "uri": PropTypes.string.isRequired,
 });
 _Facets = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "facets": _Facets,
-    "limit": PropTypes.number,
-    "next": PropTypes.string,
-    "offset": PropTypes.number,
-    "previous": PropTypes.bool,
-    "results": PropTypes.arrayOf(_Result),
+    "count": PropTypes.number.isRequired,
+    "facets": (...args) => _Facets.isRequired(...args),
+    "limit": PropTypes.number.isRequired,
+    "next": PropTypes.string.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "previous": PropTypes.bool.isRequired,
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/33d2e.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/33d2e.json/default/toplevel.js
index a4affdf..dae29ca 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/33d2e.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/33d2e.json/default/toplevel.js
@@ -16,15 +16,15 @@ let _TopLevel;
 let _Laureate;
 let _Prize;
 let _AffiliationClass;
-const _Gender = PropTypes.oneOfType(['male', 'female', 'org']);
-const _Category = PropTypes.oneOfType(['physics', 'chemistry', 'peace', 'medicine', 'literature', 'economics']);
+const _Gender = PropTypes.oneOf(["male", "female", "org"]);
+const _Category = PropTypes.oneOf(["physics", "chemistry", "peace", "medicine", "literature", "economics"]);
 _AffiliationClass = PropTypes.shape({
     "city": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "country": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "name": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Prize = PropTypes.shape({
-    "affiliations": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _AffiliationClass])),
+    "affiliations": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _AffiliationClass(...args)])).isRequired,
     "category": PropTypes.oneOfType([_Category, PropTypes.any]),
     "motivation": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "overallMotivation": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -32,22 +32,22 @@ _Prize = PropTypes.shape({
     "year": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Laureate = PropTypes.shape({
-    "born": PropTypes.string,
+    "born": PropTypes.string.isRequired,
     "bornCity": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "bornCountry": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "bornCountryCode": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "died": PropTypes.string,
+    "died": PropTypes.string.isRequired,
     "diedCity": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "diedCountry": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "diedCountryCode": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "firstname": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "gender": _Gender,
-    "id": PropTypes.string,
-    "prizes": PropTypes.arrayOf(_Prize),
+    "gender": _Gender.isRequired,
+    "id": PropTypes.string.isRequired,
+    "prizes": PropTypes.arrayOf((...args) => _Prize(...args)).isRequired,
     "surname": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _TopLevel = PropTypes.shape({
-    "laureates": PropTypes.arrayOf(_Laureate),
+    "laureates": PropTypes.arrayOf((...args) => _Laureate(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/34702.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/34702.json/default/toplevel.js
index 43c0572..eec8540 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/34702.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/34702.json/default/toplevel.js
@@ -18,52 +18,52 @@ let _CRSProperties;
 let _Feature;
 let _Geometry;
 let _FeatureProperties;
-const _GeometryType = PropTypes.oneOfType(['point']);
-const _GeometryName = PropTypes.oneOfType(['geom']);
-const _FireBanR = PropTypes.oneOfType(['northCentral', 'central', 'southWest', 'wimmera', 'northernCountry', 'eastGippsland', 'northEast', 'mallee', 'westSouthGippsland', 'ballarat']);
-const _Region = PropTypes.oneOfType(['eastern', 'northernMetro', 'western', 'southernMetro']);
-const _PropertiesType = PropTypes.oneOfType(['street', 'avenue', 'road', 'highway', 'boulevard', 'court', 'way', 'drive', 'south', 'hill', 'lane', 'close', 'parade', 'typeRoad', 'place', 'rd']);
-const _FeatureType = PropTypes.oneOfType(['feature']);
+const _GeometryType = PropTypes.oneOf(["Point"]);
+const _GeometryName = PropTypes.oneOf(["geom"]);
+const _FireBanR = PropTypes.oneOf(["North Central", "Central", "South West", "Wimmera", "Northern Country", "East Gippsland", "North East", "Mallee", "West &South Gippsland", "Ballarat"]);
+const _Region = PropTypes.oneOf(["Eastern", "Northern Metro", "Western", "Southern Metro"]);
+const _PropertiesType = PropTypes.oneOf(["STREET", "AVENUE", "ROAD", "HIGHWAY", "BOULEVARD", "COURT", "WAY", "DRIVE", "SOUTH", "HILL", "LANE", "CLOSE", "PARADE", "Road", "PLACE", "RD"]);
+const _FeatureType = PropTypes.oneOf(["Feature"]);
 _FeatureProperties = PropTypes.shape({
-    "division": PropTypes.string,
-    "fax": PropTypes.number,
+    "division": PropTypes.string.isRequired,
+    "fax": PropTypes.number.isRequired,
     "fire_ban_r": PropTypes.oneOfType([_FireBanR, PropTypes.any]),
-    "latitude": PropTypes.number,
-    "local_govt": PropTypes.string,
-    "longitude": PropTypes.number,
+    "latitude": PropTypes.number.isRequired,
+    "local_govt": PropTypes.string.isRequired,
+    "longitude": PropTypes.number.isRequired,
     "no": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "phone": PropTypes.number,
-    "postcode": PropTypes.number,
-    "psa": PropTypes.string,
-    "region": _Region,
-    "station": PropTypes.string,
-    "street": PropTypes.string,
-    "suburb": PropTypes.string,
+    "phone": PropTypes.number.isRequired,
+    "postcode": PropTypes.number.isRequired,
+    "psa": PropTypes.string.isRequired,
+    "region": _Region.isRequired,
+    "station": PropTypes.string.isRequired,
+    "street": PropTypes.string.isRequired,
+    "suburb": PropTypes.string.isRequired,
     "type": PropTypes.oneOfType([_PropertiesType, PropTypes.any]),
 });
 _Geometry = PropTypes.shape({
-    "coordinates": PropTypes.arrayOf(PropTypes.number),
-    "type": _GeometryType,
+    "coordinates": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "type": _GeometryType.isRequired,
 });
 _Feature = PropTypes.shape({
-    "geometry": _Geometry,
-    "geometry_name": _GeometryName,
-    "id": PropTypes.string,
-    "properties": _FeatureProperties,
-    "type": _FeatureType,
+    "geometry": (...args) => _Geometry.isRequired(...args),
+    "geometry_name": _GeometryName.isRequired,
+    "id": PropTypes.string.isRequired,
+    "properties": (...args) => _FeatureProperties.isRequired(...args),
+    "type": _FeatureType.isRequired,
 });
 _CRSProperties = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _CRS = PropTypes.shape({
-    "properties": _CRSProperties,
-    "type": PropTypes.string,
+    "properties": (...args) => _CRSProperties.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "crs": _CRS,
-    "features": PropTypes.arrayOf(_Feature),
-    "totalFeatures": PropTypes.number,
-    "type": PropTypes.string,
+    "crs": (...args) => _CRS.isRequired(...args),
+    "features": PropTypes.arrayOf((...args) => _Feature(...args)).isRequired,
+    "totalFeatures": PropTypes.number.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/3536b.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/3536b.json/default/toplevel.js
index 2558a51..3e1ce7e 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/3536b.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/3536b.json/default/toplevel.js
@@ -16,30 +16,30 @@ let _TopLevel;
 let _Identifier;
 let _Link;
 let _Text;
-const _Scheme = PropTypes.oneOfType(['spdx', 'dep5', 'trove']);
-const _Keyword = PropTypes.oneOfType(['discouraged', 'obsolete', 'osiApproved']);
+const _Scheme = PropTypes.oneOf(["SPDX", "DEP5", "Trove"]);
+const _Keyword = PropTypes.oneOf(["discouraged", "obsolete", "osi-approved"]);
 _Text = PropTypes.shape({
-    "media_type": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
+    "media_type": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Link = PropTypes.shape({
-    "note": PropTypes.string,
-    "url": PropTypes.string,
+    "note": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": _Scheme,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": _Scheme.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(PropTypes.any),
-    "superseded_by": PropTypes.string,
-    "text": PropTypes.arrayOf(_Text),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "superseded_by": PropTypes.string.isRequired,
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/3659d.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/3659d.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/3659d.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/3659d.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/36d5d.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/36d5d.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/36d5d.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/36d5d.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/3a6b3.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/3a6b3.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/3a6b3.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/3a6b3.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/3e9a3.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/3e9a3.json/default/toplevel.js
index 86e26a8..1ab028a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/3e9a3.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/3e9a3.json/default/toplevel.js
@@ -22,24 +22,24 @@ _Footnote = PropTypes.shape({
     "text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Datum = PropTypes.shape({
-    "footnotes": PropTypes.arrayOf(_Footnote),
-    "period": PropTypes.string,
-    "periodName": PropTypes.string,
-    "value": PropTypes.string,
-    "year": PropTypes.string,
+    "footnotes": PropTypes.arrayOf((...args) => _Footnote(...args)).isRequired,
+    "period": PropTypes.string.isRequired,
+    "periodName": PropTypes.string.isRequired,
+    "value": PropTypes.string.isRequired,
+    "year": PropTypes.string.isRequired,
 });
 _Series = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "seriesID": PropTypes.string,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "seriesID": PropTypes.string.isRequired,
 });
 _Results = PropTypes.shape({
-    "series": PropTypes.arrayOf(_Series),
+    "series": PropTypes.arrayOf((...args) => _Series(...args)).isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "Results": _Results,
-    "message": PropTypes.arrayOf(PropTypes.any),
-    "responseTime": PropTypes.number,
-    "status": PropTypes.string,
+    "Results": (...args) => _Results.isRequired(...args),
+    "message": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "responseTime": PropTypes.number.isRequired,
+    "status": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/3f1ce.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/3f1ce.json/default/toplevel.js
index f8597b0..ee99f0f 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/3f1ce.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/3f1ce.json/default/toplevel.js
@@ -26,94 +26,94 @@ let _GUID;
 let _Location;
 let _Units;
 let _Wind;
-const _Text = PropTypes.oneOfType(['thunderstorms']);
+const _Text = PropTypes.oneOf(["Thunderstorms"]);
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": _Text,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": _Text.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/421d4.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/421d4.json/default/toplevel.js
index b40cdbf..126e80f 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/421d4.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/421d4.json/default/toplevel.js
@@ -26,107 +26,107 @@ let _RenderTypeConfig;
 let _Visible;
 let _Owner;
 _Owner = PropTypes.shape({
-    "displayName": PropTypes.string,
-    "id": PropTypes.string,
-    "screenName": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "screenName": PropTypes.string.isRequired,
 });
 _Visible = PropTypes.shape({
-    "table": PropTypes.bool,
+    "table": PropTypes.bool.isRequired,
 });
 _RenderTypeConfig = PropTypes.shape({
-    "visible": _Visible,
+    "visible": (...args) => _Visible.isRequired(...args),
 });
 _Metadata = PropTypes.shape({
-    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string),
-    "rdfClass": PropTypes.string,
-    "rdfSubject": PropTypes.string,
-    "renderTypeConfig": _RenderTypeConfig,
-    "rowIdentifier": PropTypes.string,
+    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rdfClass": PropTypes.string.isRequired,
+    "rdfSubject": PropTypes.string.isRequired,
+    "renderTypeConfig": (...args) => _RenderTypeConfig.isRequired(...args),
+    "rowIdentifier": PropTypes.string.isRequired,
 });
 _License = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _Grant = PropTypes.shape({
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "inherited": PropTypes.bool,
-    "type": PropTypes.string,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "inherited": PropTypes.bool.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Query = PropTypes.shape({
 });
 _Top = PropTypes.shape({
-    "count": PropTypes.number,
-    "item": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "item": PropTypes.string.isRequired,
 });
 _CachedContents = PropTypes.shape({
     "average": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "largest": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "non_null": PropTypes.number,
-    "null": PropTypes.number,
+    "non_null": PropTypes.number.isRequired,
+    "null": PropTypes.number.isRequired,
     "smallest": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "sum": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "top": PropTypes.oneOfType([PropTypes.arrayOf(_Top), PropTypes.any]),
+    "top": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Top(...args)), PropTypes.any]),
 });
 _Column = PropTypes.shape({
-    "cachedContents": PropTypes.oneOfType([_CachedContents, PropTypes.any]),
-    "dataTypeName": PropTypes.string,
-    "fieldName": PropTypes.string,
+    "cachedContents": PropTypes.oneOfType([(...args) => _CachedContents(...args), PropTypes.any]),
+    "dataTypeName": PropTypes.string.isRequired,
+    "fieldName": PropTypes.string.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "format": _Query,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "position": PropTypes.number,
-    "renderTypeName": PropTypes.string,
+    "format": (...args) => _Query.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "position": PropTypes.number.isRequired,
+    "renderTypeName": PropTypes.string.isRequired,
     "tableColumnId": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _View = PropTypes.shape({
-    "attribution": PropTypes.string,
-    "averageRating": PropTypes.number,
-    "category": PropTypes.string,
-    "columns": PropTypes.arrayOf(_Column),
-    "createdAt": PropTypes.number,
-    "description": PropTypes.string,
-    "displayType": PropTypes.string,
-    "downloadCount": PropTypes.number,
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "grants": PropTypes.arrayOf(_Grant),
-    "hideFromCatalog": PropTypes.bool,
-    "hideFromDataJson": PropTypes.bool,
-    "id": PropTypes.string,
-    "indexUpdatedAt": PropTypes.number,
-    "license": _License,
-    "licenseId": PropTypes.string,
-    "locale": PropTypes.string,
-    "metadata": _Metadata,
-    "name": PropTypes.string,
-    "newBackend": PropTypes.bool,
-    "numberOfComments": PropTypes.number,
-    "oid": PropTypes.number,
-    "owner": _Owner,
-    "provenance": PropTypes.string,
-    "publicationAppendEnabled": PropTypes.bool,
-    "publicationDate": PropTypes.number,
-    "publicationGroup": PropTypes.number,
-    "publicationStage": PropTypes.string,
-    "query": _Query,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "rowClass": PropTypes.string,
-    "rowsUpdatedAt": PropTypes.number,
-    "rowsUpdatedBy": PropTypes.string,
-    "tableAuthor": _Owner,
-    "tableId": PropTypes.number,
-    "tags": PropTypes.arrayOf(PropTypes.string),
-    "totalTimesRated": PropTypes.number,
-    "viewCount": PropTypes.number,
-    "viewLastModified": PropTypes.number,
-    "viewType": PropTypes.string,
+    "attribution": PropTypes.string.isRequired,
+    "averageRating": PropTypes.number.isRequired,
+    "category": PropTypes.string.isRequired,
+    "columns": PropTypes.arrayOf((...args) => _Column(...args)).isRequired,
+    "createdAt": PropTypes.number.isRequired,
+    "description": PropTypes.string.isRequired,
+    "displayType": PropTypes.string.isRequired,
+    "downloadCount": PropTypes.number.isRequired,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "grants": PropTypes.arrayOf((...args) => _Grant(...args)).isRequired,
+    "hideFromCatalog": PropTypes.bool.isRequired,
+    "hideFromDataJson": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "indexUpdatedAt": PropTypes.number.isRequired,
+    "license": (...args) => _License.isRequired(...args),
+    "licenseId": PropTypes.string.isRequired,
+    "locale": PropTypes.string.isRequired,
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "name": PropTypes.string.isRequired,
+    "newBackend": PropTypes.bool.isRequired,
+    "numberOfComments": PropTypes.number.isRequired,
+    "oid": PropTypes.number.isRequired,
+    "owner": (...args) => _Owner.isRequired(...args),
+    "provenance": PropTypes.string.isRequired,
+    "publicationAppendEnabled": PropTypes.bool.isRequired,
+    "publicationDate": PropTypes.number.isRequired,
+    "publicationGroup": PropTypes.number.isRequired,
+    "publicationStage": PropTypes.string.isRequired,
+    "query": (...args) => _Query.isRequired(...args),
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rowClass": PropTypes.string.isRequired,
+    "rowsUpdatedAt": PropTypes.number.isRequired,
+    "rowsUpdatedBy": PropTypes.string.isRequired,
+    "tableAuthor": (...args) => _Owner.isRequired(...args),
+    "tableId": PropTypes.number.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "totalTimesRated": PropTypes.number.isRequired,
+    "viewCount": PropTypes.number.isRequired,
+    "viewLastModified": PropTypes.number.isRequired,
+    "viewType": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "view": _View,
+    "view": (...args) => _View.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))),
-    "meta": _Meta,
+    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/437e7.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/437e7.json/default/toplevel.js
index 47e974c..a974e03 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/437e7.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/437e7.json/default/toplevel.js
@@ -22,101 +22,101 @@ let _Looping;
 let _User;
 let _Meta;
 let _Pagination;
-const _Rating = PropTypes.oneOfType(['g', 'pg', 'y', 'pg13']);
-const _Type = PropTypes.oneOfType(['gif']);
+const _Rating = PropTypes.oneOf(["g", "pg", "y", "pg-13"]);
+const _Type = PropTypes.oneOf(["gif"]);
 _Pagination = PropTypes.shape({
-    "count": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _Meta = PropTypes.shape({
-    "msg": PropTypes.string,
-    "response_id": PropTypes.string,
-    "status": PropTypes.number,
+    "msg": PropTypes.string.isRequired,
+    "response_id": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "banner_url": PropTypes.string,
-    "display_name": PropTypes.string,
-    "profile_url": PropTypes.string,
-    "twitter": PropTypes.string,
-    "username": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
+    "banner_url": PropTypes.string.isRequired,
+    "display_name": PropTypes.string.isRequired,
+    "profile_url": PropTypes.string.isRequired,
+    "twitter": PropTypes.string.isRequired,
+    "username": PropTypes.string.isRequired,
 });
 _Looping = PropTypes.shape({
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
 });
 _FixedHeight = PropTypes.shape({
     "frames": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "mp4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mp4_size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "size": PropTypes.string,
-    "url": PropTypes.string,
-    "webp": PropTypes.string,
-    "webp_size": PropTypes.string,
-    "width": PropTypes.string,
+    "size": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "webp": PropTypes.string.isRequired,
+    "webp_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _DownsizedSmall = PropTypes.shape({
-    "height": PropTypes.string,
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Downsized = PropTypes.shape({
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Images = PropTypes.shape({
-    "downsized": _Downsized,
-    "downsized_large": _Downsized,
-    "downsized_medium": _Downsized,
-    "downsized_small": _DownsizedSmall,
-    "downsized_still": _Downsized,
-    "fixed_height": _FixedHeight,
-    "fixed_height_downsampled": _FixedHeight,
-    "fixed_height_small": _FixedHeight,
-    "fixed_height_small_still": _Downsized,
-    "fixed_height_still": _Downsized,
-    "fixed_width": _FixedHeight,
-    "fixed_width_downsampled": _FixedHeight,
-    "fixed_width_small": _FixedHeight,
-    "fixed_width_small_still": _Downsized,
-    "fixed_width_still": _Downsized,
-    "looping": _Looping,
-    "original": _FixedHeight,
-    "original_mp4": _DownsizedSmall,
-    "original_still": _Downsized,
-    "preview": _DownsizedSmall,
-    "preview_gif": _Downsized,
-    "preview_webp": _Downsized,
+    "downsized": (...args) => _Downsized.isRequired(...args),
+    "downsized_large": (...args) => _Downsized.isRequired(...args),
+    "downsized_medium": (...args) => _Downsized.isRequired(...args),
+    "downsized_small": (...args) => _DownsizedSmall.isRequired(...args),
+    "downsized_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width_still": (...args) => _Downsized.isRequired(...args),
+    "looping": (...args) => _Looping.isRequired(...args),
+    "original": (...args) => _FixedHeight.isRequired(...args),
+    "original_mp4": (...args) => _DownsizedSmall.isRequired(...args),
+    "original_still": (...args) => _Downsized.isRequired(...args),
+    "preview": (...args) => _DownsizedSmall.isRequired(...args),
+    "preview_gif": (...args) => _Downsized.isRequired(...args),
+    "preview_webp": (...args) => _Downsized.isRequired(...args),
 });
 _Datum = PropTypes.shape({
-    "bitly_gif_url": PropTypes.string,
-    "bitly_url": PropTypes.string,
-    "content_url": PropTypes.string,
-    "embed_url": PropTypes.string,
-    "id": PropTypes.string,
-    "images": _Images,
-    "import_datetime": PropTypes.string,
-    "is_indexable": PropTypes.number,
-    "rating": _Rating,
-    "slug": PropTypes.string,
-    "source": PropTypes.string,
-    "source_post_url": PropTypes.string,
-    "source_tld": PropTypes.string,
-    "trending_datetime": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
-    "user": PropTypes.oneOfType([_User, PropTypes.any]),
-    "username": PropTypes.string,
+    "bitly_gif_url": PropTypes.string.isRequired,
+    "bitly_url": PropTypes.string.isRequired,
+    "content_url": PropTypes.string.isRequired,
+    "embed_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "images": (...args) => _Images.isRequired(...args),
+    "import_datetime": PropTypes.string.isRequired,
+    "is_indexable": PropTypes.number.isRequired,
+    "rating": _Rating.isRequired,
+    "slug": PropTypes.string.isRequired,
+    "source": PropTypes.string.isRequired,
+    "source_post_url": PropTypes.string.isRequired,
+    "source_tld": PropTypes.string.isRequired,
+    "trending_datetime": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": PropTypes.oneOfType([(...args) => _User(...args), PropTypes.any]),
+    "username": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "meta": _Meta,
-    "pagination": _Pagination,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "pagination": (...args) => _Pagination.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/43970.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/43970.json/default/toplevel.js
index 223b104..3a359b3 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/43970.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/43970.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "ID": PropTypes.number,
-    "Name": PropTypes.string,
-    "Notes": PropTypes.string,
+    "ID": PropTypes.number.isRequired,
+    "Name": PropTypes.string.isRequired,
+    "Notes": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/43eaf.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/43eaf.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/43eaf.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/43eaf.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/458db.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/458db.json/default/toplevel.js
index bc40cad..d9bbc7c 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/458db.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/458db.json/default/toplevel.js
@@ -18,43 +18,43 @@ let _ResponseInfo;
 let _Resultset;
 let _Result;
 let _Component;
-const _Name = PropTypes.oneOfType(['officeOnViolenceAgainstWomen']);
+const _Name = PropTypes.oneOf(["Office on Violence Against Women"]);
 _Component = PropTypes.shape({
-    "name": _Name,
-    "uuid": PropTypes.string,
+    "name": _Name.isRequired,
+    "uuid": PropTypes.string.isRequired,
 });
 _Result = PropTypes.shape({
-    "attachments": PropTypes.arrayOf(PropTypes.any),
-    "body": PropTypes.string,
-    "changed": PropTypes.string,
-    "component": PropTypes.arrayOf(_Component),
-    "created": PropTypes.string,
-    "date": PropTypes.string,
-    "image": PropTypes.arrayOf(PropTypes.any),
-    "teaser": PropTypes.arrayOf(PropTypes.any),
-    "title": PropTypes.string,
-    "topic": PropTypes.arrayOf(PropTypes.any),
-    "url": PropTypes.string,
-    "uuid": PropTypes.string,
-    "vuuid": PropTypes.string,
+    "attachments": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "body": PropTypes.string.isRequired,
+    "changed": PropTypes.string.isRequired,
+    "component": PropTypes.arrayOf((...args) => _Component(...args)).isRequired,
+    "created": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "image": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "teaser": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "title": PropTypes.string.isRequired,
+    "topic": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "url": PropTypes.string.isRequired,
+    "uuid": PropTypes.string.isRequired,
+    "vuuid": PropTypes.string.isRequired,
 });
 _Resultset = PropTypes.shape({
-    "count": PropTypes.number,
-    "page": PropTypes.number,
-    "pagesize": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "page": PropTypes.number.isRequired,
+    "pagesize": PropTypes.number.isRequired,
 });
 _ResponseInfo = PropTypes.shape({
-    "developerMessage": PropTypes.string,
-    "status": PropTypes.number,
+    "developerMessage": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _Metadata = PropTypes.shape({
-    "executionTime": PropTypes.number,
-    "responseInfo": _ResponseInfo,
-    "resultset": _Resultset,
+    "executionTime": PropTypes.number.isRequired,
+    "responseInfo": (...args) => _ResponseInfo.isRequired(...args),
+    "resultset": (...args) => _Resultset.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "metadata": _Metadata,
-    "results": PropTypes.arrayOf(_Result),
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/4961a.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/4961a.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/4961a.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/4961a.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/4a0d7.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/4a0d7.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/4a0d7.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/4a0d7.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/4a455.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/4a455.json/default/toplevel.js
index 544456e..e7ee5bd 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/4a455.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/4a455.json/default/toplevel.js
@@ -18,40 +18,40 @@ let _CRSProperties;
 let _Feature;
 let _Geometry;
 let _FeatureProperties;
-const _GeometryType = PropTypes.oneOfType(['multiPoint']);
-const _GeometryName = PropTypes.oneOfType(['geom']);
-const _FeatureType = PropTypes.oneOfType(['feature']);
+const _GeometryType = PropTypes.oneOf(["MultiPoint"]);
+const _GeometryName = PropTypes.oneOf(["geom"]);
+const _FeatureType = PropTypes.oneOf(["Feature"]);
 _FeatureProperties = PropTypes.shape({
-    "facebookaccount": PropTypes.string,
-    "frequencyfinderurl": PropTypes.string,
-    "name": PropTypes.string,
-    "siteurl": PropTypes.string,
-    "streetaddress": PropTypes.string,
-    "twitteraccount": PropTypes.string,
+    "facebookaccount": PropTypes.string.isRequired,
+    "frequencyfinderurl": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "siteurl": PropTypes.string.isRequired,
+    "streetaddress": PropTypes.string.isRequired,
+    "twitteraccount": PropTypes.string.isRequired,
 });
 _Geometry = PropTypes.shape({
-    "coordinates": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),
-    "type": _GeometryType,
+    "coordinates": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)).isRequired,
+    "type": _GeometryType.isRequired,
 });
 _Feature = PropTypes.shape({
-    "geometry": _Geometry,
-    "geometry_name": _GeometryName,
-    "id": PropTypes.string,
-    "properties": _FeatureProperties,
-    "type": _FeatureType,
+    "geometry": (...args) => _Geometry.isRequired(...args),
+    "geometry_name": _GeometryName.isRequired,
+    "id": PropTypes.string.isRequired,
+    "properties": (...args) => _FeatureProperties.isRequired(...args),
+    "type": _FeatureType.isRequired,
 });
 _CRSProperties = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _CRS = PropTypes.shape({
-    "properties": _CRSProperties,
-    "type": PropTypes.string,
+    "properties": (...args) => _CRSProperties.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "crs": _CRS,
-    "features": PropTypes.arrayOf(_Feature),
-    "totalFeatures": PropTypes.number,
-    "type": PropTypes.string,
+    "crs": (...args) => _CRS.isRequired(...args),
+    "features": PropTypes.arrayOf((...args) => _Feature(...args)).isRequired,
+    "totalFeatures": PropTypes.number.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/4c547.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/4c547.json/default/toplevel.js
index c1f2259..79ae4ee 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/4c547.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/4c547.json/default/toplevel.js
@@ -27,92 +27,92 @@ let _Location;
 let _Units;
 let _Wind;
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/4d6fb.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/4d6fb.json/default/toplevel.js
index 0ce9fc5..55e09d0 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/4d6fb.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/4d6fb.json/default/toplevel.js
@@ -23,28 +23,28 @@ let _Preview;
 let _Image;
 let _Source;
 let _Variants;
-const _PostHint = PropTypes.oneOfType(['richVideo', 'link']);
-const _Subreddit = PropTypes.oneOfType(['todayilearned']);
-const _SubredditID = PropTypes.oneOfType(['t52Qqjc']);
-const _SubredditNamePrefixed = PropTypes.oneOfType(['rTodayilearned']);
-const _SubredditType = PropTypes.oneOfType(['public']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _PostHint = PropTypes.oneOf(["rich:video", "link"]);
+const _Subreddit = PropTypes.oneOf(["todayilearned"]);
+const _SubredditID = PropTypes.oneOf(["t5_2qqjc"]);
+const _SubredditNamePrefixed = PropTypes.oneOf(["r/todayilearned"]);
+const _SubredditType = PropTypes.oneOf(["public"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _Variants = PropTypes.shape({
 });
 _Source = PropTypes.shape({
-    "height": PropTypes.number,
-    "url": PropTypes.string,
-    "width": PropTypes.number,
+    "height": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Image = PropTypes.shape({
-    "id": PropTypes.string,
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
-    "variants": _Variants,
+    "id": PropTypes.string.isRequired,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
+    "variants": (...args) => _Variants.isRequired(...args),
 });
 _Preview = PropTypes.shape({
-    "enabled": PropTypes.bool,
-    "images": PropTypes.arrayOf(_Image),
+    "enabled": PropTypes.bool.isRequired,
+    "images": PropTypes.arrayOf((...args) => _Image(...args)).isRequired,
 });
 _MediaEmbed = PropTypes.shape({
     "content": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -53,103 +53,103 @@ _MediaEmbed = PropTypes.shape({
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Oembed = PropTypes.shape({
-    "author_name": PropTypes.string,
-    "author_url": PropTypes.string,
-    "height": PropTypes.number,
-    "html": PropTypes.string,
-    "provider_name": PropTypes.string,
-    "provider_url": PropTypes.string,
-    "thumbnail_height": PropTypes.number,
-    "thumbnail_url": PropTypes.string,
-    "thumbnail_width": PropTypes.number,
-    "title": PropTypes.string,
-    "type": PropTypes.string,
-    "version": PropTypes.string,
-    "width": PropTypes.number,
+    "author_name": PropTypes.string.isRequired,
+    "author_url": PropTypes.string.isRequired,
+    "height": PropTypes.number.isRequired,
+    "html": PropTypes.string.isRequired,
+    "provider_name": PropTypes.string.isRequired,
+    "provider_url": PropTypes.string.isRequired,
+    "thumbnail_height": PropTypes.number.isRequired,
+    "thumbnail_url": PropTypes.string.isRequired,
+    "thumbnail_width": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Media = PropTypes.shape({
-    "oembed": _Oembed,
-    "type": PropTypes.string,
+    "oembed": (...args) => _Oembed.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.any,
     "author_flair_text": PropTypes.any,
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
     "distinguished": PropTypes.any,
-    "domain": PropTypes.string,
-    "downs": PropTypes.number,
-    "edited": PropTypes.bool,
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "domain": PropTypes.string.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.bool.isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
     "link_flair_css_class": PropTypes.any,
     "link_flair_text": PropTypes.any,
-    "locked": PropTypes.bool,
-    "media": PropTypes.oneOfType([_Media, PropTypes.any]),
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "locked": PropTypes.bool.isRequired,
+    "media": PropTypes.oneOfType([(...args) => _Media(...args), PropTypes.any]),
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "permalink": PropTypes.string,
+    "over_18": PropTypes.bool.isRequired,
+    "permalink": PropTypes.string.isRequired,
     "post_hint": PropTypes.oneOfType([_PostHint, PropTypes.any]),
-    "preview": PropTypes.oneOfType([_Preview, PropTypes.any]),
-    "quarantine": PropTypes.bool,
+    "preview": PropTypes.oneOfType([(...args) => _Preview(...args), PropTypes.any]),
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
-    "secure_media": PropTypes.oneOfType([_Media, PropTypes.any]),
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
+    "secure_media": PropTypes.oneOfType([(...args) => _Media(...args), PropTypes.any]),
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.any,
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": _Subreddit,
-    "subreddit_id": _SubredditID,
-    "subreddit_name_prefixed": _SubredditNamePrefixed,
-    "subreddit_type": _SubredditType,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": _Subreddit.isRequired,
+    "subreddit_id": _SubredditID.isRequired,
+    "subreddit_name_prefixed": _SubredditNamePrefixed.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
     "suggested_sort": PropTypes.any,
-    "thumbnail": PropTypes.string,
+    "thumbnail": PropTypes.string.isRequired,
     "thumbnail_height": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "thumbnail_width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
+    "visited": PropTypes.bool.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/4e336.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/4e336.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/4e336.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/4e336.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/54147.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/54147.json/default/toplevel.js
index 5f3906e..190e187 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/54147.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/54147.json/default/toplevel.js
@@ -16,21 +16,21 @@ let _TopLevel;
 let _Args;
 let _Headers;
 _Headers = PropTypes.shape({
-    "Accept-Encoding": PropTypes.string,
-    "Connection": PropTypes.string,
-    "Host": PropTypes.string,
-    "User-Agent": PropTypes.string,
+    "Accept-Encoding": PropTypes.string.isRequired,
+    "Connection": PropTypes.string.isRequired,
+    "Host": PropTypes.string.isRequired,
+    "User-Agent": PropTypes.string.isRequired,
 });
 _Args = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "args": _Args,
-    "data": PropTypes.string,
-    "files": _Args,
-    "form": _Args,
-    "headers": _Headers,
-    "origin": PropTypes.string,
-    "url": PropTypes.string,
+    "args": (...args) => _Args.isRequired(...args),
+    "data": PropTypes.string.isRequired,
+    "files": (...args) => _Args.isRequired(...args),
+    "form": (...args) => _Args.isRequired(...args),
+    "headers": (...args) => _Headers.isRequired(...args),
+    "origin": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/54d32.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/54d32.json/default/toplevel.js
index 1f0ffae..4d1aa11 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/54d32.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/54d32.json/default/toplevel.js
@@ -15,25 +15,25 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Facets;
 let _Result;
-const _Status = PropTypes.oneOfType(['inactive', 'active']);
+const _Status = PropTypes.oneOf(["inactive", "active"]);
 _Result = PropTypes.shape({
-    "created_at": PropTypes.string,
-    "id": PropTypes.string,
-    "person_id": PropTypes.string,
-    "representative_id": PropTypes.string,
-    "status": _Status,
-    "updated_at": PropTypes.string,
+    "created_at": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "person_id": PropTypes.string.isRequired,
+    "representative_id": PropTypes.string.isRequired,
+    "status": _Status.isRequired,
+    "updated_at": PropTypes.string.isRequired,
 });
 _Facets = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "facets": _Facets,
-    "limit": PropTypes.number,
-    "next": PropTypes.string,
-    "offset": PropTypes.number,
-    "previous": PropTypes.bool,
-    "results": PropTypes.arrayOf(_Result),
+    "count": PropTypes.number.isRequired,
+    "facets": (...args) => _Facets.isRequired(...args),
+    "limit": PropTypes.number.isRequired,
+    "next": PropTypes.string.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "previous": PropTypes.bool.isRequired,
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/570ec.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/570ec.json/default/toplevel.js
index 4e5b550..86d888b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/570ec.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/570ec.json/default/toplevel.js
@@ -17,33 +17,33 @@ let _Identifier;
 let _Link;
 let _OtherName;
 let _Text;
-const _Scheme = PropTypes.oneOfType(['dep5', 'spdx', 'trove']);
+const _Scheme = PropTypes.oneOf(["DEP5", "SPDX", "Trove"]);
 _Text = PropTypes.shape({
-    "media_type": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
+    "media_type": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _OtherName = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
     "note": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Link = PropTypes.shape({
-    "note": PropTypes.string,
-    "url": PropTypes.string,
+    "note": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": _Scheme,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": _Scheme.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(PropTypes.string),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(_OtherName),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf((...args) => _OtherName(...args)).isRequired,
     "superseded_by": PropTypes.any,
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/5dd0d.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/5dd0d.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/5dd0d.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/5dd0d.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/5eae5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/5eae5.json/default/toplevel.js
index 8696469..f406f82 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/5eae5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/5eae5.json/default/toplevel.js
@@ -14,10 +14,10 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "Date": PropTypes.string,
-    "ID": PropTypes.number,
-    "Sponsor": PropTypes.string,
-    "Title": PropTypes.string,
+    "Date": PropTypes.string.isRequired,
+    "ID": PropTypes.number.isRequired,
+    "Sponsor": PropTypes.string.isRequired,
+    "Title": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/5eb20.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/5eb20.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/5eb20.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/5eb20.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/5f3a1.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/5f3a1.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/5f3a1.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/5f3a1.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/5f7fe.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/5f7fe.json/default/toplevel.js
index a53db94..7dda5a2 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/5f7fe.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/5f7fe.json/default/toplevel.js
@@ -36,167 +36,167 @@ let _Owner;
 let _Query;
 let _OrderBy;
 let _Expression;
-const _TypeName = PropTypes.oneOfType(['metaData', 'calendarDate', 'text']);
+const _TypeName = PropTypes.oneOf(["meta_data", "calendar_date", "text"]);
 _Expression = PropTypes.shape({
-    "columnId": PropTypes.number,
-    "type": PropTypes.string,
+    "columnId": PropTypes.number.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _OrderBy = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "expression": _Expression,
+    "ascending": PropTypes.bool.isRequired,
+    "expression": (...args) => _Expression.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "orderBys": PropTypes.arrayOf(_OrderBy),
+    "orderBys": PropTypes.arrayOf((...args) => _OrderBy(...args)).isRequired,
 });
 _Owner = PropTypes.shape({
-    "displayName": PropTypes.string,
-    "id": PropTypes.string,
-    "profileImageUrlLarge": PropTypes.string,
-    "profileImageUrlMedium": PropTypes.string,
-    "profileImageUrlSmall": PropTypes.string,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "roleName": PropTypes.string,
-    "screenName": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "profileImageUrlLarge": PropTypes.string.isRequired,
+    "profileImageUrlMedium": PropTypes.string.isRequired,
+    "profileImageUrlSmall": PropTypes.string.isRequired,
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "roleName": PropTypes.string.isRequired,
+    "screenName": PropTypes.string.isRequired,
 });
 _Visible = PropTypes.shape({
-    "table": PropTypes.bool,
+    "table": PropTypes.bool.isRequired,
 });
 _RenderTypeConfig = PropTypes.shape({
-    "visible": _Visible,
+    "visible": (...args) => _Visible.isRequired(...args),
 });
 _Order = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "columnFieldName": PropTypes.string,
+    "ascending": PropTypes.bool.isRequired,
+    "columnFieldName": PropTypes.string.isRequired,
 });
 _JSONQuery = PropTypes.shape({
-    "order": PropTypes.arrayOf(_Order),
+    "order": PropTypes.arrayOf((...args) => _Order(...args)).isRequired,
 });
 _Notes = PropTypes.shape({
-    "Notes": PropTypes.string,
+    "Notes": PropTypes.string.isRequired,
 });
 _DatasetSummary = PropTypes.shape({
-    "Contact Information": PropTypes.string,
-    "Coverage": PropTypes.string,
-    "Data Frequency": PropTypes.string,
-    "Dataset Owner": PropTypes.string,
-    "Granularity": PropTypes.string,
-    "Organization": PropTypes.string,
-    "Posting Frequency": PropTypes.string,
-    "Time Period": PropTypes.string,
-    "Units": PropTypes.string,
+    "Contact Information": PropTypes.string.isRequired,
+    "Coverage": PropTypes.string.isRequired,
+    "Data Frequency": PropTypes.string.isRequired,
+    "Dataset Owner": PropTypes.string.isRequired,
+    "Granularity": PropTypes.string.isRequired,
+    "Organization": PropTypes.string.isRequired,
+    "Posting Frequency": PropTypes.string.isRequired,
+    "Time Period": PropTypes.string.isRequired,
+    "Units": PropTypes.string.isRequired,
 });
 _DatasetInformation = PropTypes.shape({
-    "Agency": PropTypes.string,
+    "Agency": PropTypes.string.isRequired,
 });
 _CommonCore = PropTypes.shape({
-    "Contact Email": PropTypes.string,
-    "Contact Name": PropTypes.string,
-    "Publisher": PropTypes.string,
+    "Contact Email": PropTypes.string.isRequired,
+    "Contact Name": PropTypes.string.isRequired,
+    "Publisher": PropTypes.string.isRequired,
 });
 _AdditionalResources = PropTypes.shape({
-    "See Also": PropTypes.string,
-    "See Also ": PropTypes.string,
+    "See Also": PropTypes.string.isRequired,
+    "See Also ": PropTypes.string.isRequired,
 });
 _CustomFields = PropTypes.shape({
-    "Additional Resources": _AdditionalResources,
-    "Common Core": _CommonCore,
-    "Dataset Information": _DatasetInformation,
-    "Dataset Summary": _DatasetSummary,
-    "Notes": _Notes,
+    "Additional Resources": (...args) => _AdditionalResources.isRequired(...args),
+    "Common Core": (...args) => _CommonCore.isRequired(...args),
+    "Dataset Information": (...args) => _DatasetInformation.isRequired(...args),
+    "Dataset Summary": (...args) => _DatasetSummary.isRequired(...args),
+    "Notes": (...args) => _Notes.isRequired(...args),
 });
 _Attachment = PropTypes.shape({
-    "assetId": PropTypes.string,
-    "blobId": PropTypes.string,
-    "filename": PropTypes.string,
-    "name": PropTypes.string,
+    "assetId": PropTypes.string.isRequired,
+    "blobId": PropTypes.string.isRequired,
+    "filename": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _Metadata = PropTypes.shape({
-    "attachments": PropTypes.arrayOf(_Attachment),
-    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string),
-    "custom_fields": _CustomFields,
-    "jsonQuery": _JSONQuery,
-    "rdfSubject": PropTypes.string,
-    "renderTypeConfig": _RenderTypeConfig,
+    "attachments": PropTypes.arrayOf((...args) => _Attachment(...args)).isRequired,
+    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "custom_fields": (...args) => _CustomFields.isRequired(...args),
+    "jsonQuery": (...args) => _JSONQuery.isRequired(...args),
+    "rdfSubject": PropTypes.string.isRequired,
+    "renderTypeConfig": (...args) => _RenderTypeConfig.isRequired(...args),
 });
 _Grant = PropTypes.shape({
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "inherited": PropTypes.bool,
-    "type": PropTypes.string,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "inherited": PropTypes.bool.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Format = PropTypes.shape({
     "align": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "view": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Top = PropTypes.shape({
-    "count": PropTypes.number,
-    "item": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "item": PropTypes.string.isRequired,
 });
 _CachedContents = PropTypes.shape({
-    "largest": PropTypes.string,
-    "non_null": PropTypes.number,
-    "null": PropTypes.number,
-    "smallest": PropTypes.string,
-    "top": PropTypes.arrayOf(_Top),
+    "largest": PropTypes.string.isRequired,
+    "non_null": PropTypes.number.isRequired,
+    "null": PropTypes.number.isRequired,
+    "smallest": PropTypes.string.isRequired,
+    "top": PropTypes.arrayOf((...args) => _Top(...args)).isRequired,
 });
 _Column = PropTypes.shape({
-    "cachedContents": PropTypes.oneOfType([_CachedContents, PropTypes.any]),
-    "dataTypeName": _TypeName,
-    "fieldName": PropTypes.string,
+    "cachedContents": PropTypes.oneOfType([(...args) => _CachedContents(...args), PropTypes.any]),
+    "dataTypeName": _TypeName.isRequired,
+    "fieldName": PropTypes.string.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "format": _Format,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "position": PropTypes.number,
-    "renderTypeName": _TypeName,
+    "format": (...args) => _Format.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "position": PropTypes.number.isRequired,
+    "renderTypeName": _TypeName.isRequired,
     "tableColumnId": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _View = PropTypes.shape({
-    "attribution": PropTypes.string,
-    "attributionLink": PropTypes.string,
-    "averageRating": PropTypes.number,
-    "category": PropTypes.string,
-    "columns": PropTypes.arrayOf(_Column),
-    "createdAt": PropTypes.number,
-    "description": PropTypes.string,
-    "displayType": PropTypes.string,
-    "downloadCount": PropTypes.number,
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "grants": PropTypes.arrayOf(_Grant),
-    "hideFromCatalog": PropTypes.bool,
-    "hideFromDataJson": PropTypes.bool,
-    "id": PropTypes.string,
-    "indexUpdatedAt": PropTypes.number,
-    "locale": PropTypes.string,
-    "metadata": _Metadata,
-    "name": PropTypes.string,
-    "newBackend": PropTypes.bool,
-    "numberOfComments": PropTypes.number,
-    "oid": PropTypes.number,
-    "owner": _Owner,
-    "provenance": PropTypes.string,
-    "publicationAppendEnabled": PropTypes.bool,
-    "publicationDate": PropTypes.number,
-    "publicationGroup": PropTypes.number,
-    "publicationStage": PropTypes.string,
-    "query": _Query,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "rowsUpdatedAt": PropTypes.number,
-    "rowsUpdatedBy": PropTypes.string,
-    "tableAuthor": _Owner,
-    "tableId": PropTypes.number,
-    "tags": PropTypes.arrayOf(PropTypes.string),
-    "totalTimesRated": PropTypes.number,
-    "viewCount": PropTypes.number,
-    "viewLastModified": PropTypes.number,
-    "viewType": PropTypes.string,
+    "attribution": PropTypes.string.isRequired,
+    "attributionLink": PropTypes.string.isRequired,
+    "averageRating": PropTypes.number.isRequired,
+    "category": PropTypes.string.isRequired,
+    "columns": PropTypes.arrayOf((...args) => _Column(...args)).isRequired,
+    "createdAt": PropTypes.number.isRequired,
+    "description": PropTypes.string.isRequired,
+    "displayType": PropTypes.string.isRequired,
+    "downloadCount": PropTypes.number.isRequired,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "grants": PropTypes.arrayOf((...args) => _Grant(...args)).isRequired,
+    "hideFromCatalog": PropTypes.bool.isRequired,
+    "hideFromDataJson": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "indexUpdatedAt": PropTypes.number.isRequired,
+    "locale": PropTypes.string.isRequired,
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "name": PropTypes.string.isRequired,
+    "newBackend": PropTypes.bool.isRequired,
+    "numberOfComments": PropTypes.number.isRequired,
+    "oid": PropTypes.number.isRequired,
+    "owner": (...args) => _Owner.isRequired(...args),
+    "provenance": PropTypes.string.isRequired,
+    "publicationAppendEnabled": PropTypes.bool.isRequired,
+    "publicationDate": PropTypes.number.isRequired,
+    "publicationGroup": PropTypes.number.isRequired,
+    "publicationStage": PropTypes.string.isRequired,
+    "query": (...args) => _Query.isRequired(...args),
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rowsUpdatedAt": PropTypes.number.isRequired,
+    "rowsUpdatedBy": PropTypes.string.isRequired,
+    "tableAuthor": (...args) => _Owner.isRequired(...args),
+    "tableId": PropTypes.number.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "totalTimesRated": PropTypes.number.isRequired,
+    "viewCount": PropTypes.number.isRequired,
+    "viewLastModified": PropTypes.number.isRequired,
+    "viewType": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "view": _View,
+    "view": (...args) => _View.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))),
-    "meta": _Meta,
+    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/617e8.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/617e8.json/default/toplevel.js
index bcdbd1e..d255b0d 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/617e8.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/617e8.json/default/toplevel.js
@@ -36,166 +36,166 @@ let _Owner;
 let _Query;
 let _OrderBy;
 let _Expression;
-const _TypeName = PropTypes.oneOfType(['metaData', 'calendarDate', 'text']);
+const _TypeName = PropTypes.oneOf(["meta_data", "calendar_date", "text"]);
 _Expression = PropTypes.shape({
-    "columnId": PropTypes.number,
-    "type": PropTypes.string,
+    "columnId": PropTypes.number.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _OrderBy = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "expression": _Expression,
+    "ascending": PropTypes.bool.isRequired,
+    "expression": (...args) => _Expression.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "orderBys": PropTypes.arrayOf(_OrderBy),
+    "orderBys": PropTypes.arrayOf((...args) => _OrderBy(...args)).isRequired,
 });
 _Owner = PropTypes.shape({
-    "displayName": PropTypes.string,
-    "id": PropTypes.string,
-    "profileImageUrlLarge": PropTypes.string,
-    "profileImageUrlMedium": PropTypes.string,
-    "profileImageUrlSmall": PropTypes.string,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "roleName": PropTypes.string,
-    "screenName": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "profileImageUrlLarge": PropTypes.string.isRequired,
+    "profileImageUrlMedium": PropTypes.string.isRequired,
+    "profileImageUrlSmall": PropTypes.string.isRequired,
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "roleName": PropTypes.string.isRequired,
+    "screenName": PropTypes.string.isRequired,
 });
 _Visible = PropTypes.shape({
-    "table": PropTypes.bool,
+    "table": PropTypes.bool.isRequired,
 });
 _RenderTypeConfig = PropTypes.shape({
-    "visible": _Visible,
+    "visible": (...args) => _Visible.isRequired(...args),
 });
 _Order = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "columnFieldName": PropTypes.string,
+    "ascending": PropTypes.bool.isRequired,
+    "columnFieldName": PropTypes.string.isRequired,
 });
 _JSONQuery = PropTypes.shape({
-    "order": PropTypes.arrayOf(_Order),
+    "order": PropTypes.arrayOf((...args) => _Order(...args)).isRequired,
 });
 _Notes = PropTypes.shape({
-    "Notes": PropTypes.string,
+    "Notes": PropTypes.string.isRequired,
 });
 _DatasetSummary = PropTypes.shape({
-    "Contact Information": PropTypes.string,
-    "Coverage": PropTypes.string,
-    "Data Frequency": PropTypes.string,
-    "Dataset Owner": PropTypes.string,
-    "Granularity": PropTypes.string,
-    "Organization": PropTypes.string,
-    "Posting Frequency": PropTypes.string,
-    "Time Period": PropTypes.string,
+    "Contact Information": PropTypes.string.isRequired,
+    "Coverage": PropTypes.string.isRequired,
+    "Data Frequency": PropTypes.string.isRequired,
+    "Dataset Owner": PropTypes.string.isRequired,
+    "Granularity": PropTypes.string.isRequired,
+    "Organization": PropTypes.string.isRequired,
+    "Posting Frequency": PropTypes.string.isRequired,
+    "Time Period": PropTypes.string.isRequired,
 });
 _DatasetInformation = PropTypes.shape({
-    "Agency": PropTypes.string,
+    "Agency": PropTypes.string.isRequired,
 });
 _CommonCore = PropTypes.shape({
-    "Contact Email": PropTypes.string,
-    "Contact Name": PropTypes.string,
-    "Publisher": PropTypes.string,
+    "Contact Email": PropTypes.string.isRequired,
+    "Contact Name": PropTypes.string.isRequired,
+    "Publisher": PropTypes.string.isRequired,
 });
 _AdditionalResources = PropTypes.shape({
-    "See Also": PropTypes.string,
+    "See Also": PropTypes.string.isRequired,
 });
 _CustomFields = PropTypes.shape({
-    "Additional Resources": _AdditionalResources,
-    "Common Core": _CommonCore,
-    "Dataset Information": _DatasetInformation,
-    "Dataset Summary": _DatasetSummary,
-    "Notes": _Notes,
+    "Additional Resources": (...args) => _AdditionalResources.isRequired(...args),
+    "Common Core": (...args) => _CommonCore.isRequired(...args),
+    "Dataset Information": (...args) => _DatasetInformation.isRequired(...args),
+    "Dataset Summary": (...args) => _DatasetSummary.isRequired(...args),
+    "Notes": (...args) => _Notes.isRequired(...args),
 });
 _Attachment = PropTypes.shape({
-    "assetId": PropTypes.string,
-    "blobId": PropTypes.string,
-    "filename": PropTypes.string,
-    "name": PropTypes.string,
+    "assetId": PropTypes.string.isRequired,
+    "blobId": PropTypes.string.isRequired,
+    "filename": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _Metadata = PropTypes.shape({
-    "attachments": PropTypes.arrayOf(_Attachment),
-    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string),
-    "custom_fields": _CustomFields,
-    "jsonQuery": _JSONQuery,
-    "rdfSubject": PropTypes.string,
-    "renderTypeConfig": _RenderTypeConfig,
+    "attachments": PropTypes.arrayOf((...args) => _Attachment(...args)).isRequired,
+    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "custom_fields": (...args) => _CustomFields.isRequired(...args),
+    "jsonQuery": (...args) => _JSONQuery.isRequired(...args),
+    "rdfSubject": PropTypes.string.isRequired,
+    "renderTypeConfig": (...args) => _RenderTypeConfig.isRequired(...args),
 });
 _Grant = PropTypes.shape({
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "inherited": PropTypes.bool,
-    "type": PropTypes.string,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "inherited": PropTypes.bool.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Format = PropTypes.shape({
     "align": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "view": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Top = PropTypes.shape({
-    "count": PropTypes.number,
-    "item": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "item": PropTypes.string.isRequired,
 });
 _CachedContents = PropTypes.shape({
-    "largest": PropTypes.string,
-    "non_null": PropTypes.number,
-    "null": PropTypes.number,
-    "smallest": PropTypes.string,
-    "top": PropTypes.arrayOf(_Top),
+    "largest": PropTypes.string.isRequired,
+    "non_null": PropTypes.number.isRequired,
+    "null": PropTypes.number.isRequired,
+    "smallest": PropTypes.string.isRequired,
+    "top": PropTypes.arrayOf((...args) => _Top(...args)).isRequired,
 });
 _Column = PropTypes.shape({
-    "cachedContents": PropTypes.oneOfType([_CachedContents, PropTypes.any]),
-    "dataTypeName": _TypeName,
+    "cachedContents": PropTypes.oneOfType([(...args) => _CachedContents(...args), PropTypes.any]),
+    "dataTypeName": _TypeName.isRequired,
     "description": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "fieldName": PropTypes.string,
+    "fieldName": PropTypes.string.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "format": _Format,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "position": PropTypes.number,
-    "renderTypeName": _TypeName,
+    "format": (...args) => _Format.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "position": PropTypes.number.isRequired,
+    "renderTypeName": _TypeName.isRequired,
     "tableColumnId": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _View = PropTypes.shape({
-    "attribution": PropTypes.string,
-    "attributionLink": PropTypes.string,
-    "averageRating": PropTypes.number,
-    "category": PropTypes.string,
-    "columns": PropTypes.arrayOf(_Column),
-    "createdAt": PropTypes.number,
-    "description": PropTypes.string,
-    "displayType": PropTypes.string,
-    "downloadCount": PropTypes.number,
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "grants": PropTypes.arrayOf(_Grant),
-    "hideFromCatalog": PropTypes.bool,
-    "hideFromDataJson": PropTypes.bool,
-    "id": PropTypes.string,
-    "indexUpdatedAt": PropTypes.number,
-    "locale": PropTypes.string,
-    "metadata": _Metadata,
-    "name": PropTypes.string,
-    "newBackend": PropTypes.bool,
-    "numberOfComments": PropTypes.number,
-    "oid": PropTypes.number,
-    "owner": _Owner,
-    "provenance": PropTypes.string,
-    "publicationAppendEnabled": PropTypes.bool,
-    "publicationDate": PropTypes.number,
-    "publicationGroup": PropTypes.number,
-    "publicationStage": PropTypes.string,
-    "query": _Query,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "rowsUpdatedAt": PropTypes.number,
-    "rowsUpdatedBy": PropTypes.string,
-    "tableAuthor": _Owner,
-    "tableId": PropTypes.number,
-    "tags": PropTypes.arrayOf(PropTypes.string),
-    "totalTimesRated": PropTypes.number,
-    "viewCount": PropTypes.number,
-    "viewLastModified": PropTypes.number,
-    "viewType": PropTypes.string,
+    "attribution": PropTypes.string.isRequired,
+    "attributionLink": PropTypes.string.isRequired,
+    "averageRating": PropTypes.number.isRequired,
+    "category": PropTypes.string.isRequired,
+    "columns": PropTypes.arrayOf((...args) => _Column(...args)).isRequired,
+    "createdAt": PropTypes.number.isRequired,
+    "description": PropTypes.string.isRequired,
+    "displayType": PropTypes.string.isRequired,
+    "downloadCount": PropTypes.number.isRequired,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "grants": PropTypes.arrayOf((...args) => _Grant(...args)).isRequired,
+    "hideFromCatalog": PropTypes.bool.isRequired,
+    "hideFromDataJson": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "indexUpdatedAt": PropTypes.number.isRequired,
+    "locale": PropTypes.string.isRequired,
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "name": PropTypes.string.isRequired,
+    "newBackend": PropTypes.bool.isRequired,
+    "numberOfComments": PropTypes.number.isRequired,
+    "oid": PropTypes.number.isRequired,
+    "owner": (...args) => _Owner.isRequired(...args),
+    "provenance": PropTypes.string.isRequired,
+    "publicationAppendEnabled": PropTypes.bool.isRequired,
+    "publicationDate": PropTypes.number.isRequired,
+    "publicationGroup": PropTypes.number.isRequired,
+    "publicationStage": PropTypes.string.isRequired,
+    "query": (...args) => _Query.isRequired(...args),
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rowsUpdatedAt": PropTypes.number.isRequired,
+    "rowsUpdatedBy": PropTypes.string.isRequired,
+    "tableAuthor": (...args) => _Owner.isRequired(...args),
+    "tableId": PropTypes.number.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "totalTimesRated": PropTypes.number.isRequired,
+    "viewCount": PropTypes.number.isRequired,
+    "viewLastModified": PropTypes.number.isRequired,
+    "viewType": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "view": _View,
+    "view": (...args) => _View.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))),
-    "meta": _Meta,
+    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/61b66.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/61b66.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/61b66.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/61b66.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/6260a.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/6260a.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/6260a.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/6260a.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/65dec.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/65dec.json/default/toplevel.js
index 9f28f4e..0fead01 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/65dec.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/65dec.json/default/toplevel.js
@@ -16,62 +16,62 @@ let _TopLevel;
 let _Card;
 let _LegalityElement;
 let _Ruling;
-const _ColorIdentity = PropTypes.oneOfType(['w', 'r', 'b', 'g', 'u']);
-const _Watermark = PropTypes.oneOfType(['white', 'red', 'black', 'green', 'blue']);
-const _Layout = PropTypes.oneOfType(['normal']);
-const _LegalityEnum = PropTypes.oneOfType(['legal', 'banned', 'restricted']);
-const _Rarity = PropTypes.oneOfType(['uncommon', 'rare', 'common', 'basicLand']);
-const _Type = PropTypes.oneOfType(['creature', 'artifact', 'instant', 'land', 'enchantment', 'sorcery']);
+const _ColorIdentity = PropTypes.oneOf(["W", "R", "B", "G", "U"]);
+const _Watermark = PropTypes.oneOf(["White", "Red", "Black", "Green", "Blue"]);
+const _Layout = PropTypes.oneOf(["normal"]);
+const _LegalityEnum = PropTypes.oneOf(["Legal", "Banned", "Restricted"]);
+const _Rarity = PropTypes.oneOf(["Uncommon", "Rare", "Common", "Basic Land"]);
+const _Type = PropTypes.oneOf(["Creature", "Artifact", "Instant", "Land", "Enchantment", "Sorcery"]);
 _Ruling = PropTypes.shape({
-    "date": PropTypes.string,
-    "text": PropTypes.string,
+    "date": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _LegalityElement = PropTypes.shape({
-    "format": PropTypes.string,
-    "legality": _LegalityEnum,
+    "format": PropTypes.string.isRequired,
+    "legality": _LegalityEnum.isRequired,
 });
 _Card = PropTypes.shape({
-    "artist": PropTypes.string,
-    "cmc": PropTypes.number,
+    "artist": PropTypes.string.isRequired,
+    "cmc": PropTypes.number.isRequired,
     "colorIdentity": PropTypes.oneOfType([PropTypes.arrayOf(_ColorIdentity), PropTypes.any]),
     "colors": PropTypes.oneOfType([PropTypes.arrayOf(_Watermark), PropTypes.any]),
     "flavor": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "id": PropTypes.string,
-    "imageName": PropTypes.string,
-    "layout": _Layout,
-    "legalities": PropTypes.arrayOf(_LegalityElement),
+    "id": PropTypes.string.isRequired,
+    "imageName": PropTypes.string.isRequired,
+    "layout": _Layout.isRequired,
+    "legalities": PropTypes.arrayOf((...args) => _LegalityElement(...args)).isRequired,
     "manaCost": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mciNumber": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "multiverseid": PropTypes.number,
-    "name": PropTypes.string,
-    "originalText": PropTypes.string,
-    "originalType": PropTypes.string,
+    "multiverseid": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "originalText": PropTypes.string.isRequired,
+    "originalType": PropTypes.string.isRequired,
     "power": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "printings": PropTypes.arrayOf(PropTypes.string),
-    "rarity": _Rarity,
+    "printings": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rarity": _Rarity.isRequired,
     "reserved": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
-    "rulings": PropTypes.oneOfType([PropTypes.arrayOf(_Ruling), PropTypes.any]),
+    "rulings": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Ruling(...args)), PropTypes.any]),
     "subtypes": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
     "supertypes": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
     "text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "toughness": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "type": PropTypes.string,
-    "types": PropTypes.arrayOf(_Type),
+    "type": PropTypes.string.isRequired,
+    "types": PropTypes.arrayOf(_Type).isRequired,
     "variations": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any]),
     "watermark": PropTypes.oneOfType([_Watermark, PropTypes.any]),
 });
 _TopLevel = PropTypes.shape({
-    "booster": PropTypes.arrayOf(PropTypes.string),
-    "border": PropTypes.string,
-    "cards": PropTypes.arrayOf(_Card),
-    "code": PropTypes.string,
-    "gathererCode": PropTypes.string,
-    "magicCardsInfoCode": PropTypes.string,
-    "mkm_id": PropTypes.number,
-    "mkm_name": PropTypes.string,
-    "name": PropTypes.string,
-    "releaseDate": PropTypes.string,
-    "type": PropTypes.string,
+    "booster": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "border": PropTypes.string.isRequired,
+    "cards": PropTypes.arrayOf((...args) => _Card(...args)).isRequired,
+    "code": PropTypes.string.isRequired,
+    "gathererCode": PropTypes.string.isRequired,
+    "magicCardsInfoCode": PropTypes.string.isRequired,
+    "mkm_id": PropTypes.number.isRequired,
+    "mkm_name": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "releaseDate": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/66121.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/66121.json/default/toplevel.js
index 3f3ea27..5214557 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/66121.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/66121.json/default/toplevel.js
@@ -16,33 +16,33 @@ let _TopLevel;
 let _Identifier;
 let _Link;
 let _Text;
-const _Scheme = PropTypes.oneOfType(['spdx', 'trove', 'dep5']);
-const _Keyword = PropTypes.oneOfType(['osiApproved', 'discouraged', 'redundant']);
-const _Note = PropTypes.oneOfType(['osiPage']);
-const _MediaType = PropTypes.oneOfType(['textHTML']);
-const _Title = PropTypes.oneOfType(['html']);
+const _Scheme = PropTypes.oneOf(["SPDX", "Trove", "DEP5"]);
+const _Keyword = PropTypes.oneOf(["osi-approved", "discouraged", "redundant"]);
+const _Note = PropTypes.oneOf(["OSI Page"]);
+const _MediaType = PropTypes.oneOf(["text/html"]);
+const _Title = PropTypes.oneOf(["HTML"]);
 _Text = PropTypes.shape({
-    "media_type": _MediaType,
-    "title": _Title,
-    "url": PropTypes.string,
+    "media_type": _MediaType.isRequired,
+    "title": _Title.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Link = PropTypes.shape({
-    "note": _Note,
-    "url": PropTypes.string,
+    "note": _Note.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": _Scheme,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": _Scheme.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(PropTypes.any),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf(PropTypes.any).isRequired,
     "superseded_by": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/6617c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/6617c.json/default/toplevel.js
index 5438ab9..8363ae0 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/6617c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/6617c.json/default/toplevel.js
@@ -15,13 +15,13 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _IssPosition;
 _IssPosition = PropTypes.shape({
-    "latitude": PropTypes.string,
-    "longitude": PropTypes.string,
+    "latitude": PropTypes.string.isRequired,
+    "longitude": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "iss_position": _IssPosition,
-    "message": PropTypes.string,
-    "timestamp": PropTypes.number,
+    "iss_position": (...args) => _IssPosition.isRequired(...args),
+    "message": PropTypes.string.isRequired,
+    "timestamp": PropTypes.number.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/67c03.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/67c03.json/default/toplevel.js
index 00f491f..d0b51b4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/67c03.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/67c03.json/default/toplevel.js
@@ -15,13 +15,13 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Person;
 _Person = PropTypes.shape({
-    "craft": PropTypes.string,
-    "name": PropTypes.string,
+    "craft": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "message": PropTypes.string,
-    "number": PropTypes.number,
-    "people": PropTypes.arrayOf(_Person),
+    "message": PropTypes.string.isRequired,
+    "number": PropTypes.number.isRequired,
+    "people": PropTypes.arrayOf((...args) => _Person(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/68c30.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/68c30.json/default/toplevel.js
index f468487..219b04f 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/68c30.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/68c30.json/default/toplevel.js
@@ -17,35 +17,35 @@ let _Tx;
 let _Input;
 let _Out;
 _Out = PropTypes.shape({
-    "addr": PropTypes.string,
-    "n": PropTypes.number,
-    "script": PropTypes.string,
-    "spent": PropTypes.bool,
-    "tx_index": PropTypes.number,
-    "type": PropTypes.number,
-    "value": PropTypes.number,
+    "addr": PropTypes.string.isRequired,
+    "n": PropTypes.number.isRequired,
+    "script": PropTypes.string.isRequired,
+    "spent": PropTypes.bool.isRequired,
+    "tx_index": PropTypes.number.isRequired,
+    "type": PropTypes.number.isRequired,
+    "value": PropTypes.number.isRequired,
 });
 _Input = PropTypes.shape({
-    "prev_out": _Out,
-    "script": PropTypes.string,
-    "sequence": PropTypes.number,
+    "prev_out": (...args) => _Out.isRequired(...args),
+    "script": PropTypes.string.isRequired,
+    "sequence": PropTypes.number.isRequired,
 });
 _Tx = PropTypes.shape({
-    "double_spend": PropTypes.bool,
-    "hash": PropTypes.string,
-    "inputs": PropTypes.arrayOf(_Input),
-    "lock_time": PropTypes.number,
-    "out": PropTypes.arrayOf(_Out),
-    "relayed_by": PropTypes.string,
-    "size": PropTypes.number,
-    "time": PropTypes.number,
-    "tx_index": PropTypes.number,
-    "ver": PropTypes.number,
-    "vin_sz": PropTypes.number,
-    "vout_sz": PropTypes.number,
+    "double_spend": PropTypes.bool.isRequired,
+    "hash": PropTypes.string.isRequired,
+    "inputs": PropTypes.arrayOf((...args) => _Input(...args)).isRequired,
+    "lock_time": PropTypes.number.isRequired,
+    "out": PropTypes.arrayOf((...args) => _Out(...args)).isRequired,
+    "relayed_by": PropTypes.string.isRequired,
+    "size": PropTypes.number.isRequired,
+    "time": PropTypes.number.isRequired,
+    "tx_index": PropTypes.number.isRequired,
+    "ver": PropTypes.number.isRequired,
+    "vin_sz": PropTypes.number.isRequired,
+    "vout_sz": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "txs": PropTypes.arrayOf(_Tx),
+    "txs": PropTypes.arrayOf((...args) => _Tx(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/6c155.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/6c155.json/default/toplevel.js
index 715a7e2..9c366e7 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/6c155.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/6c155.json/default/toplevel.js
@@ -20,54 +20,54 @@ let _Result;
 let _Component;
 let _Location;
 _Location = PropTypes.shape({
-    "administrative_area": PropTypes.string,
-    "country": PropTypes.string,
-    "fax_number": PropTypes.string,
-    "locality": PropTypes.string,
-    "mobile_number": PropTypes.string,
-    "phone_number": PropTypes.string,
-    "phone_number_extension": PropTypes.string,
-    "postal_code": PropTypes.string,
+    "administrative_area": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "fax_number": PropTypes.string.isRequired,
+    "locality": PropTypes.string.isRequired,
+    "mobile_number": PropTypes.string.isRequired,
+    "phone_number": PropTypes.string.isRequired,
+    "phone_number_extension": PropTypes.string.isRequired,
+    "postal_code": PropTypes.string.isRequired,
     "sub_premise": PropTypes.any,
-    "thoroughfare": PropTypes.string,
+    "thoroughfare": PropTypes.string.isRequired,
 });
 _Component = PropTypes.shape({
-    "name": PropTypes.string,
-    "uuid": PropTypes.string,
+    "name": PropTypes.string.isRequired,
+    "uuid": PropTypes.string.isRequired,
 });
 _Result = PropTypes.shape({
-    "attachment": PropTypes.arrayOf(PropTypes.any),
-    "body": PropTypes.string,
-    "changed": PropTypes.string,
-    "component": PropTypes.arrayOf(_Component),
-    "created": PropTypes.string,
-    "date": PropTypes.string,
-    "image": PropTypes.arrayOf(PropTypes.any),
-    "location": _Location,
+    "attachment": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "body": PropTypes.string.isRequired,
+    "changed": PropTypes.string.isRequired,
+    "component": PropTypes.arrayOf((...args) => _Component(...args)).isRequired,
+    "created": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "image": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "location": (...args) => _Location.isRequired(...args),
     "teaser": PropTypes.any,
-    "title": PropTypes.string,
-    "topic": PropTypes.arrayOf(PropTypes.any),
-    "url": PropTypes.string,
-    "uuid": PropTypes.string,
-    "vuuid": PropTypes.string,
+    "title": PropTypes.string.isRequired,
+    "topic": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "url": PropTypes.string.isRequired,
+    "uuid": PropTypes.string.isRequired,
+    "vuuid": PropTypes.string.isRequired,
 });
 _Resultset = PropTypes.shape({
-    "count": PropTypes.number,
-    "page": PropTypes.number,
-    "pagesize": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "page": PropTypes.number.isRequired,
+    "pagesize": PropTypes.number.isRequired,
 });
 _ResponseInfo = PropTypes.shape({
-    "developerMessage": PropTypes.string,
-    "status": PropTypes.number,
+    "developerMessage": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _Metadata = PropTypes.shape({
-    "executionTime": PropTypes.number,
-    "responseInfo": _ResponseInfo,
-    "resultset": _Resultset,
+    "executionTime": PropTypes.number.isRequired,
+    "responseInfo": (...args) => _ResponseInfo.isRequired(...args),
+    "resultset": (...args) => _Resultset.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "metadata": _Metadata,
-    "results": PropTypes.arrayOf(_Result),
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/6de06.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/6de06.json/default/toplevel.js
index e248be6..5b5152c 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/6de06.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/6de06.json/default/toplevel.js
@@ -24,33 +24,33 @@ let _Image;
 let _Source;
 let _Variants;
 let _GIF;
-const _PostHint = PropTypes.oneOfType(['link', 'image', 'richVideo']);
-const _SubredditType = PropTypes.oneOfType(['public']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _PostHint = PropTypes.oneOf(["link", "image", "rich:video"]);
+const _SubredditType = PropTypes.oneOf(["public"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _GIF = PropTypes.shape({
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
 });
 _Variants = PropTypes.shape({
-    "gif": PropTypes.oneOfType([_GIF, PropTypes.any]),
-    "mp4": PropTypes.oneOfType([_GIF, PropTypes.any]),
-    "nsfw": PropTypes.oneOfType([_GIF, PropTypes.any]),
-    "obfuscated": PropTypes.oneOfType([_GIF, PropTypes.any]),
+    "gif": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
+    "mp4": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
+    "nsfw": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
+    "obfuscated": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
 });
 _Source = PropTypes.shape({
-    "height": PropTypes.number,
-    "url": PropTypes.string,
-    "width": PropTypes.number,
+    "height": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Image = PropTypes.shape({
-    "id": PropTypes.string,
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
-    "variants": _Variants,
+    "id": PropTypes.string.isRequired,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
+    "variants": (...args) => _Variants.isRequired(...args),
 });
 _Preview = PropTypes.shape({
-    "enabled": PropTypes.bool,
-    "images": PropTypes.arrayOf(_Image),
+    "enabled": PropTypes.bool.isRequired,
+    "images": PropTypes.arrayOf((...args) => _Image(...args)).isRequired,
 });
 _MediaEmbed = PropTypes.shape({
     "content": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -59,102 +59,102 @@ _MediaEmbed = PropTypes.shape({
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Oembed = PropTypes.shape({
-    "description": PropTypes.string,
-    "height": PropTypes.number,
-    "html": PropTypes.string,
-    "provider_name": PropTypes.string,
-    "provider_url": PropTypes.string,
-    "thumbnail_height": PropTypes.number,
-    "thumbnail_url": PropTypes.string,
-    "thumbnail_width": PropTypes.number,
-    "title": PropTypes.string,
-    "type": PropTypes.string,
-    "version": PropTypes.string,
-    "width": PropTypes.number,
+    "description": PropTypes.string.isRequired,
+    "height": PropTypes.number.isRequired,
+    "html": PropTypes.string.isRequired,
+    "provider_name": PropTypes.string.isRequired,
+    "provider_url": PropTypes.string.isRequired,
+    "thumbnail_height": PropTypes.number.isRequired,
+    "thumbnail_url": PropTypes.string.isRequired,
+    "thumbnail_width": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Media = PropTypes.shape({
-    "oembed": _Oembed,
-    "type": PropTypes.string,
+    "oembed": (...args) => _Oembed.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "author_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
     "distinguished": PropTypes.any,
-    "domain": PropTypes.string,
-    "downs": PropTypes.number,
-    "edited": PropTypes.bool,
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "domain": PropTypes.string.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.bool.isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
     "link_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "link_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "locked": PropTypes.bool,
-    "media": PropTypes.oneOfType([_Media, PropTypes.any]),
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "locked": PropTypes.bool.isRequired,
+    "media": PropTypes.oneOfType([(...args) => _Media(...args), PropTypes.any]),
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "permalink": PropTypes.string,
+    "over_18": PropTypes.bool.isRequired,
+    "permalink": PropTypes.string.isRequired,
     "post_hint": PropTypes.oneOfType([_PostHint, PropTypes.any]),
-    "preview": PropTypes.oneOfType([_Preview, PropTypes.any]),
-    "quarantine": PropTypes.bool,
+    "preview": PropTypes.oneOfType([(...args) => _Preview(...args), PropTypes.any]),
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
-    "secure_media": PropTypes.oneOfType([_Media, PropTypes.any]),
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
+    "secure_media": PropTypes.oneOfType([(...args) => _Media(...args), PropTypes.any]),
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": PropTypes.string,
-    "subreddit_id": PropTypes.string,
-    "subreddit_name_prefixed": PropTypes.string,
-    "subreddit_type": _SubredditType,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": PropTypes.string.isRequired,
+    "subreddit_id": PropTypes.string.isRequired,
+    "subreddit_name_prefixed": PropTypes.string.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
     "suggested_sort": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "thumbnail": PropTypes.string,
+    "thumbnail": PropTypes.string.isRequired,
     "thumbnail_height": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "thumbnail_width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
+    "visited": PropTypes.bool.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/6dec6.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/6dec6.json/default/toplevel.js
index 93de7ef..5ccbd74 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/6dec6.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/6dec6.json/default/toplevel.js
@@ -26,94 +26,94 @@ let _GUID;
 let _Location;
 let _Units;
 let _Wind;
-const _Text = PropTypes.oneOfType(['showers', 'mostlySunny', 'partlyCloudy']);
+const _Text = PropTypes.oneOf(["Showers", "Mostly Sunny", "Partly Cloudy"]);
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": _Text,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": _Text.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/6eb00.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/6eb00.json/default/toplevel.js
index b93817a..692f7dd 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/6eb00.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/6eb00.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "DirectorateID": PropTypes.number,
-    "Id": PropTypes.number,
-    "Name": PropTypes.string,
+    "DirectorateID": PropTypes.number.isRequired,
+    "Id": PropTypes.number.isRequired,
+    "Name": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/70c77.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/70c77.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/70c77.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/70c77.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/734ad.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/734ad.json/default/toplevel.js
index 425e0cc..38175c6 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/734ad.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/734ad.json/default/toplevel.js
@@ -15,17 +15,17 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Facets;
 let _Result;
-const _Status = PropTypes.oneOfType(['active', 'inactive']);
+const _Status = PropTypes.oneOf(["active", "inactive"]);
 _Result = PropTypes.shape({
     "acronym": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "activity_consult_committees": PropTypes.string,
-    "activity_eu_legislative": PropTypes.string,
-    "activity_expert_groups": PropTypes.string,
-    "activity_high_level_groups": PropTypes.string,
-    "activity_industry_forums": PropTypes.string,
-    "activity_inter_groups": PropTypes.string,
+    "activity_consult_committees": PropTypes.string.isRequired,
+    "activity_eu_legislative": PropTypes.string.isRequired,
+    "activity_expert_groups": PropTypes.string.isRequired,
+    "activity_high_level_groups": PropTypes.string.isRequired,
+    "activity_industry_forums": PropTypes.string.isRequired,
+    "activity_inter_groups": PropTypes.string.isRequired,
     "activity_other": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "activity_relevant_comm": PropTypes.string,
+    "activity_relevant_comm": PropTypes.string.isRequired,
     "be_office_country": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "be_office_lat": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "be_office_lon": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
@@ -34,58 +34,58 @@ _Result = PropTypes.shape({
     "be_office_postbox": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "be_office_street": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "be_office_town": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "code_of_conduct": PropTypes.string,
-    "contact_country": PropTypes.number,
-    "created_at": PropTypes.string,
-    "entity": PropTypes.string,
-    "goals": PropTypes.string,
-    "head": PropTypes.string,
-    "head_office_country": PropTypes.string,
+    "code_of_conduct": PropTypes.string.isRequired,
+    "contact_country": PropTypes.number.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "entity": PropTypes.string.isRequired,
+    "goals": PropTypes.string.isRequired,
+    "head": PropTypes.string.isRequired,
+    "head_office_country": PropTypes.string.isRequired,
     "head_office_lat": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "head_office_lon": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "head_office_phone": PropTypes.string,
+    "head_office_phone": PropTypes.string.isRequired,
     "head_office_post_code": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "head_office_postbox": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "head_office_street": PropTypes.string,
-    "head_office_town": PropTypes.string,
-    "id": PropTypes.string,
-    "identification_code": PropTypes.string,
-    "info_members": PropTypes.string,
-    "last_update_date": PropTypes.string,
-    "legal": PropTypes.string,
-    "legal_status": PropTypes.string,
-    "main_category": PropTypes.number,
-    "main_category_title": PropTypes.string,
-    "members": PropTypes.number,
+    "head_office_street": PropTypes.string.isRequired,
+    "head_office_town": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "identification_code": PropTypes.string.isRequired,
+    "info_members": PropTypes.string.isRequired,
+    "last_update_date": PropTypes.string.isRequired,
+    "legal": PropTypes.string.isRequired,
+    "legal_status": PropTypes.string.isRequired,
+    "main_category": PropTypes.number.isRequired,
+    "main_category_title": PropTypes.string.isRequired,
+    "members": PropTypes.number.isRequired,
     "members_100": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "members_25": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "members_50": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "members_75": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "members_fte": PropTypes.number,
-    "name": PropTypes.string,
+    "members_fte": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
     "native_name": PropTypes.any,
     "networking": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "number_of_natural_persons": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "other_code_of_conduct": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "registration_date": PropTypes.string,
-    "status": _Status,
-    "structure_members": PropTypes.string,
-    "sub_category": PropTypes.number,
-    "sub_category_title": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "uri": PropTypes.string,
+    "registration_date": PropTypes.string.isRequired,
+    "status": _Status.isRequired,
+    "structure_members": PropTypes.string.isRequired,
+    "sub_category": PropTypes.number.isRequired,
+    "sub_category_title": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "uri": PropTypes.string.isRequired,
     "web_site_url": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Facets = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "facets": _Facets,
-    "limit": PropTypes.number,
-    "next": PropTypes.string,
-    "offset": PropTypes.number,
-    "previous": PropTypes.bool,
-    "results": PropTypes.arrayOf(_Result),
+    "count": PropTypes.number.isRequired,
+    "facets": (...args) => _Facets.isRequired(...args),
+    "limit": PropTypes.number.isRequired,
+    "next": PropTypes.string.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "previous": PropTypes.bool.isRequired,
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/75912.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/75912.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/75912.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/75912.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/7681c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/7681c.json/default/toplevel.js
index 3af5197..7f55b7c 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/7681c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/7681c.json/default/toplevel.js
@@ -22,104 +22,104 @@ let _Looping;
 let _User;
 let _Meta;
 let _Pagination;
-const _Rating = PropTypes.oneOfType(['g', 'pg', 'pg13']);
-const _Type = PropTypes.oneOfType(['gif']);
-const _Username = PropTypes.oneOfType(['empty', 'mashable', 'nba', 'originals']);
+const _Rating = PropTypes.oneOf(["g", "pg", "pg-13"]);
+const _Type = PropTypes.oneOf(["gif"]);
+const _Username = PropTypes.oneOf(["", "mashable", "nba", "Originals"]);
 _Pagination = PropTypes.shape({
-    "count": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _Meta = PropTypes.shape({
-    "msg": PropTypes.string,
-    "response_id": PropTypes.string,
-    "status": PropTypes.number,
+    "msg": PropTypes.string.isRequired,
+    "response_id": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "banner_url": PropTypes.string,
-    "display_name": PropTypes.string,
-    "profile_url": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
+    "banner_url": PropTypes.string.isRequired,
+    "display_name": PropTypes.string.isRequired,
+    "profile_url": PropTypes.string.isRequired,
     "twitter": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "username": PropTypes.string,
+    "username": PropTypes.string.isRequired,
 });
 _Looping = PropTypes.shape({
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
 });
 _FixedHeight = PropTypes.shape({
     "frames": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "hash": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "mp4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mp4_size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "size": PropTypes.string,
-    "url": PropTypes.string,
-    "webp": PropTypes.string,
-    "webp_size": PropTypes.string,
-    "width": PropTypes.string,
+    "size": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "webp": PropTypes.string.isRequired,
+    "webp_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _DownsizedSmall = PropTypes.shape({
-    "height": PropTypes.string,
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Downsized = PropTypes.shape({
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Images = PropTypes.shape({
-    "480w_still": PropTypes.oneOfType([_Downsized, PropTypes.any]),
-    "downsized": _Downsized,
-    "downsized_large": _Downsized,
-    "downsized_medium": _Downsized,
-    "downsized_small": _DownsizedSmall,
-    "downsized_still": _Downsized,
-    "fixed_height": _FixedHeight,
-    "fixed_height_downsampled": _FixedHeight,
-    "fixed_height_small": _FixedHeight,
-    "fixed_height_small_still": _Downsized,
-    "fixed_height_still": _Downsized,
-    "fixed_width": _FixedHeight,
-    "fixed_width_downsampled": _FixedHeight,
-    "fixed_width_small": _FixedHeight,
-    "fixed_width_small_still": _Downsized,
-    "fixed_width_still": _Downsized,
-    "looping": _Looping,
-    "original": _FixedHeight,
-    "original_mp4": _DownsizedSmall,
-    "original_still": _Downsized,
-    "preview": _DownsizedSmall,
-    "preview_gif": _Downsized,
-    "preview_webp": _Downsized,
+    "480w_still": PropTypes.oneOfType([(...args) => _Downsized(...args), PropTypes.any]),
+    "downsized": (...args) => _Downsized.isRequired(...args),
+    "downsized_large": (...args) => _Downsized.isRequired(...args),
+    "downsized_medium": (...args) => _Downsized.isRequired(...args),
+    "downsized_small": (...args) => _DownsizedSmall.isRequired(...args),
+    "downsized_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width_still": (...args) => _Downsized.isRequired(...args),
+    "looping": (...args) => _Looping.isRequired(...args),
+    "original": (...args) => _FixedHeight.isRequired(...args),
+    "original_mp4": (...args) => _DownsizedSmall.isRequired(...args),
+    "original_still": (...args) => _Downsized.isRequired(...args),
+    "preview": (...args) => _DownsizedSmall.isRequired(...args),
+    "preview_gif": (...args) => _Downsized.isRequired(...args),
+    "preview_webp": (...args) => _Downsized.isRequired(...args),
 });
 _Datum = PropTypes.shape({
-    "bitly_gif_url": PropTypes.string,
-    "bitly_url": PropTypes.string,
-    "content_url": PropTypes.string,
-    "embed_url": PropTypes.string,
-    "id": PropTypes.string,
-    "images": _Images,
-    "import_datetime": PropTypes.string,
-    "is_indexable": PropTypes.number,
-    "rating": _Rating,
-    "slug": PropTypes.string,
-    "source": PropTypes.string,
-    "source_post_url": PropTypes.string,
-    "source_tld": PropTypes.string,
-    "trending_datetime": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
-    "user": PropTypes.oneOfType([_User, PropTypes.any]),
-    "username": _Username,
+    "bitly_gif_url": PropTypes.string.isRequired,
+    "bitly_url": PropTypes.string.isRequired,
+    "content_url": PropTypes.string.isRequired,
+    "embed_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "images": (...args) => _Images.isRequired(...args),
+    "import_datetime": PropTypes.string.isRequired,
+    "is_indexable": PropTypes.number.isRequired,
+    "rating": _Rating.isRequired,
+    "slug": PropTypes.string.isRequired,
+    "source": PropTypes.string.isRequired,
+    "source_post_url": PropTypes.string.isRequired,
+    "source_tld": PropTypes.string.isRequired,
+    "trending_datetime": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": PropTypes.oneOfType([(...args) => _User(...args), PropTypes.any]),
+    "username": _Username.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "meta": _Meta,
-    "pagination": _Pagination,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "pagination": (...args) => _Pagination.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/77392.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/77392.json/default/toplevel.js
index 99c945e..f33fe21 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/77392.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/77392.json/default/toplevel.js
@@ -13,19 +13,19 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _OrbitClass = PropTypes.oneOfType(['apollo', 'amor', 'aten', 'comet', 'jupiterFamilyComet', 'halleyTypeComet', 'parabolicComet', 'orbitClassJupiterFamilyComet', 'enckeTypeComet']);
-const _Pha = PropTypes.oneOfType(['y', 'n', 'nA']);
+const _OrbitClass = PropTypes.oneOf(["Apollo", "Amor", "Aten", "Comet", "Jupiter-family Comet", "Halley-type Comet*", "Parabolic Comet", "Jupiter-family Comet*", "Encke-type Comet"]);
+const _Pha = PropTypes.oneOf(["Y", "N", "n/a"]);
 _TopLevel = PropTypes.shape({
-    "designation": PropTypes.string,
-    "discovery_date": PropTypes.string,
+    "designation": PropTypes.string.isRequired,
+    "discovery_date": PropTypes.string.isRequired,
     "h_mag": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "i_deg": PropTypes.string,
-    "moid_au": PropTypes.string,
-    "orbit_class": _OrbitClass,
+    "i_deg": PropTypes.string.isRequired,
+    "moid_au": PropTypes.string.isRequired,
+    "orbit_class": _OrbitClass.isRequired,
     "period_yr": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "pha": _Pha,
-    "q_au_1": PropTypes.string,
+    "pha": _Pha.isRequired,
+    "q_au_1": PropTypes.string.isRequired,
     "q_au_2": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/7d397.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/7d397.json/default/toplevel.js
index bb1b1b4..cba9925 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/7d397.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/7d397.json/default/toplevel.js
@@ -25,67 +25,67 @@ let _Responses;
 let _The200;
 let _Schema;
 let _Items;
-const _Type = PropTypes.oneOfType(['string']);
-const _In = PropTypes.oneOfType(['query']);
+const _Type = PropTypes.oneOf(["string"]);
+const _In = PropTypes.oneOf(["query"]);
 _Items = PropTypes.shape({
-    "$ref": PropTypes.string,
+    "$ref": PropTypes.string.isRequired,
 });
 _Schema = PropTypes.shape({
-    "items": _Items,
-    "type": PropTypes.string,
+    "items": (...args) => _Items.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _The200 = PropTypes.shape({
-    "description": PropTypes.string,
-    "schema": _Schema,
+    "description": PropTypes.string.isRequired,
+    "schema": (...args) => _Schema.isRequired(...args),
 });
 _Responses = PropTypes.shape({
-    "200": _The200,
+    "200": (...args) => _The200.isRequired(...args),
 });
 _Parameter = PropTypes.shape({
-    "description": PropTypes.string,
-    "format": _Type,
-    "in": _In,
-    "name": PropTypes.string,
-    "required": PropTypes.bool,
-    "type": _Type,
+    "description": PropTypes.string.isRequired,
+    "format": _Type.isRequired,
+    "in": _In.isRequired,
+    "name": PropTypes.string.isRequired,
+    "required": PropTypes.bool.isRequired,
+    "type": _Type.isRequired,
 });
 _Get = PropTypes.shape({
-    "description": PropTypes.string,
-    "parameters": PropTypes.arrayOf(_Parameter),
-    "responses": _Responses,
-    "summary": PropTypes.string,
-    "tags": PropTypes.arrayOf(PropTypes.string),
+    "description": PropTypes.string.isRequired,
+    "parameters": PropTypes.arrayOf((...args) => _Parameter(...args)).isRequired,
+    "responses": (...args) => _Responses.isRequired(...args),
+    "summary": PropTypes.string.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 _ConsolidatedScreeningListSearch = PropTypes.shape({
-    "get": _Get,
+    "get": (...args) => _Get.isRequired(...args),
 });
 _Paths = PropTypes.shape({
-    "/consolidated_screening_list/search": _ConsolidatedScreeningListSearch,
+    "/consolidated_screening_list/search": (...args) => _ConsolidatedScreeningListSearch.isRequired(...args),
 });
 _Info = PropTypes.shape({
-    "description": PropTypes.string,
-    "title": PropTypes.string,
-    "version": PropTypes.string,
+    "description": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
 });
 _Property = PropTypes.shape({
-    "description": PropTypes.string,
-    "type": _Type,
+    "description": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
 });
 _List = PropTypes.shape({
-    "properties": PropTypes.object,
+    "properties": PropTypes.object.isRequired,
 });
 _Definitions = PropTypes.shape({
-    "List": _List,
+    "List": (...args) => _List.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "basePath": PropTypes.string,
-    "definitions": _Definitions,
-    "host": PropTypes.string,
-    "info": _Info,
-    "paths": _Paths,
-    "produces": PropTypes.arrayOf(PropTypes.string),
-    "schemes": PropTypes.arrayOf(PropTypes.string),
-    "swagger": PropTypes.string,
+    "basePath": PropTypes.string.isRequired,
+    "definitions": (...args) => _Definitions.isRequired(...args),
+    "host": PropTypes.string.isRequired,
+    "info": (...args) => _Info.isRequired(...args),
+    "paths": (...args) => _Paths.isRequired(...args),
+    "produces": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "schemes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "swagger": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/7d722.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/7d722.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/7d722.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/7d722.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/7df41.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/7df41.json/default/toplevel.js
index f96c9b8..2ba4bc0 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/7df41.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/7df41.json/default/toplevel.js
@@ -15,16 +15,16 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _PC;
 _PC = PropTypes.shape({
-    "count": PropTypes.number,
-    "label": PropTypes.string,
-    "peak24": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "label": PropTypes.string.isRequired,
+    "peak24": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "pc": _PC,
-    "ps3": _PC,
-    "ps4": _PC,
-    "xbox": _PC,
-    "xone": _PC,
+    "pc": (...args) => _PC.isRequired(...args),
+    "ps3": (...args) => _PC.isRequired(...args),
+    "ps4": (...args) => _PC.isRequired(...args),
+    "xbox": (...args) => _PC.isRequired(...args),
+    "xone": (...args) => _PC.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/7dfa6.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/7dfa6.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/7dfa6.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/7dfa6.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/7eb30.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/7eb30.json/default/toplevel.js
index 0dbdd08..c01fd65 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/7eb30.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/7eb30.json/default/toplevel.js
@@ -15,38 +15,38 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Result;
 let _Group;
-const _Code = PropTypes.oneOfType(['sf']);
-const _English = PropTypes.oneOfType(['sf']);
-const _Thai = PropTypes.oneOfType(['เอสเอฟ']);
-const _Location = PropTypes.oneOfType(['empty', 'the5ThFLEmporium']);
-const _Tel = PropTypes.oneOfType(['empty', 'the022688899']);
+const _Code = PropTypes.oneOf(["sf"]);
+const _English = PropTypes.oneOf(["SF"]);
+const _Thai = PropTypes.oneOf(["เอสเอฟ"]);
+const _Location = PropTypes.oneOf(["", "5th Fl. Emporium"]);
+const _Tel = PropTypes.oneOf(["", "02-268-8899"]);
 _Group = PropTypes.shape({
-    "code": _Code,
-    "english": _English,
-    "thai": _Thai,
-    "website": PropTypes.string,
+    "code": _Code.isRequired,
+    "english": _English.isRequired,
+    "thai": _Thai.isRequired,
+    "website": PropTypes.string.isRequired,
 });
 _Result = PropTypes.shape({
-    "code": PropTypes.string,
-    "english": PropTypes.string,
-    "fav": PropTypes.bool,
-    "group": _Group,
-    "location": _Location,
-    "min_screens": PropTypes.number,
-    "num_views": PropTypes.number,
-    "showtimes": PropTypes.string,
-    "stars": PropTypes.number,
-    "tel": _Tel,
-    "thai": PropTypes.string,
-    "today_screens": PropTypes.number,
-    "url": PropTypes.string,
-    "website": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "english": PropTypes.string.isRequired,
+    "fav": PropTypes.bool.isRequired,
+    "group": (...args) => _Group.isRequired(...args),
+    "location": _Location.isRequired,
+    "min_screens": PropTypes.number.isRequired,
+    "num_views": PropTypes.number.isRequired,
+    "showtimes": PropTypes.string.isRequired,
+    "stars": PropTypes.number.isRequired,
+    "tel": _Tel.isRequired,
+    "thai": PropTypes.string.isRequired,
+    "today_screens": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "website": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "next": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "next": PropTypes.string.isRequired,
     "previous": PropTypes.any,
-    "results": PropTypes.arrayOf(_Result),
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/7f568.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/7f568.json/default/toplevel.js
index 76e300e..269de59 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/7f568.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/7f568.json/default/toplevel.js
@@ -14,32 +14,32 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 let _File;
-const _Language = PropTypes.oneOfType(['markdown']);
-const _Type = PropTypes.oneOfType(['textPlain']);
+const _Language = PropTypes.oneOf(["Markdown"]);
+const _Type = PropTypes.oneOf(["text/plain"]);
 _File = PropTypes.shape({
-    "filename": PropTypes.string,
+    "filename": PropTypes.string.isRequired,
     "language": PropTypes.oneOfType([_Language, PropTypes.any]),
-    "raw_url": PropTypes.string,
-    "size": PropTypes.number,
-    "type": _Type,
+    "raw_url": PropTypes.string.isRequired,
+    "size": PropTypes.number.isRequired,
+    "type": _Type.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "comments": PropTypes.number,
-    "comments_url": PropTypes.string,
-    "commits_url": PropTypes.string,
-    "created_at": PropTypes.string,
+    "comments": PropTypes.number.isRequired,
+    "comments_url": PropTypes.string.isRequired,
+    "commits_url": PropTypes.string.isRequired,
+    "created_at": PropTypes.string.isRequired,
     "description": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "files": PropTypes.object,
-    "forks_url": PropTypes.string,
-    "git_pull_url": PropTypes.string,
-    "git_push_url": PropTypes.string,
-    "html_url": PropTypes.string,
-    "id": PropTypes.string,
-    "public": PropTypes.bool,
-    "truncated": PropTypes.bool,
-    "updated_at": PropTypes.string,
-    "url": PropTypes.string,
+    "files": PropTypes.object.isRequired,
+    "forks_url": PropTypes.string.isRequired,
+    "git_pull_url": PropTypes.string.isRequired,
+    "git_push_url": PropTypes.string.isRequired,
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "public": PropTypes.bool.isRequired,
+    "truncated": PropTypes.bool.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
     "user": PropTypes.any,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/7fbfb.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/7fbfb.json/default/toplevel.js
index 3aef7a6..d5e6248 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/7fbfb.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/7fbfb.json/default/toplevel.js
@@ -15,24 +15,24 @@ import PropTypes from "prop-types";
 let _TopLevelElement;
 let _Country;
 let _PurpleTopLevel;
-const _ID = PropTypes.oneOfType(['cn', 'nyGdpMktpCD']);
-const _Value = PropTypes.oneOfType(['china', 'gdpCurrentUS']);
+const _ID = PropTypes.oneOf(["CN", "NY.GDP.MKTP.CD"]);
+const _Value = PropTypes.oneOf(["China", "GDP (current US$)"]);
 _PurpleTopLevel = PropTypes.shape({
-    "page": PropTypes.number,
-    "pages": PropTypes.number,
-    "per_page": PropTypes.string,
-    "total": PropTypes.number,
+    "page": PropTypes.number.isRequired,
+    "pages": PropTypes.number.isRequired,
+    "per_page": PropTypes.string.isRequired,
+    "total": PropTypes.number.isRequired,
 });
 _Country = PropTypes.shape({
-    "id": _ID,
-    "value": _Value,
+    "id": _ID.isRequired,
+    "value": _Value.isRequired,
 });
 _TopLevelElement = PropTypes.shape({
-    "country": _Country,
-    "date": PropTypes.string,
-    "decimal": PropTypes.string,
-    "indicator": _Country,
-    "value": PropTypes.string,
+    "country": (...args) => _Country.isRequired(...args),
+    "date": PropTypes.string.isRequired,
+    "decimal": PropTypes.string.isRequired,
+    "indicator": (...args) => _Country.isRequired(...args),
+    "value": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(_TopLevelElement), _PurpleTopLevel]));
+export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TopLevelElement(...args)), (...args) => _PurpleTopLevel(...args)]));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/80aff.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/80aff.json/default/toplevel.js
index 89418a7..3445772 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/80aff.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/80aff.json/default/toplevel.js
@@ -16,24 +16,24 @@ let _TopLevel;
 let _Facets;
 let _Result;
 _Result = PropTypes.shape({
-    "created_at": PropTypes.string,
-    "id": PropTypes.number,
-    "items": PropTypes.number,
-    "name": PropTypes.string,
+    "created_at": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "items": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
     "parent": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "updated_at": PropTypes.string,
-    "uri": PropTypes.string,
+    "updated_at": PropTypes.string.isRequired,
+    "uri": PropTypes.string.isRequired,
 });
 _Facets = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "facets": _Facets,
-    "limit": PropTypes.number,
-    "next": PropTypes.bool,
-    "offset": PropTypes.number,
-    "previous": PropTypes.bool,
-    "results": PropTypes.arrayOf(_Result),
+    "count": PropTypes.number.isRequired,
+    "facets": (...args) => _Facets.isRequired(...args),
+    "limit": PropTypes.number.isRequired,
+    "next": PropTypes.bool.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "previous": PropTypes.bool.isRequired,
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/82509.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/82509.json/default/toplevel.js
index 1cf551b..8c29750 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/82509.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/82509.json/default/toplevel.js
@@ -14,7 +14,7 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "origin": PropTypes.string,
+    "origin": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/8592b.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/8592b.json/default/toplevel.js
index 8febfda..66a57a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/8592b.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/8592b.json/default/toplevel.js
@@ -20,109 +20,109 @@ let _MediaEmbed;
 let _Preview;
 let _Image;
 let _Source;
-const _PostHint = PropTypes.oneOfType(['link']);
-const _Subreddit = PropTypes.oneOfType(['science']);
-const _SubredditID = PropTypes.oneOfType(['t5Mouw']);
-const _SubredditNamePrefixed = PropTypes.oneOfType(['rScience']);
-const _SubredditType = PropTypes.oneOfType(['public']);
-const _SuggestedSort = PropTypes.oneOfType(['confidence', 'qa']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _PostHint = PropTypes.oneOf(["link"]);
+const _Subreddit = PropTypes.oneOf(["science"]);
+const _SubredditID = PropTypes.oneOf(["t5_mouw"]);
+const _SubredditNamePrefixed = PropTypes.oneOf(["r/science"]);
+const _SubredditType = PropTypes.oneOf(["public"]);
+const _SuggestedSort = PropTypes.oneOf(["confidence", "qa"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _Source = PropTypes.shape({
-    "height": PropTypes.number,
-    "url": PropTypes.string,
-    "width": PropTypes.number,
+    "height": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Image = PropTypes.shape({
-    "id": PropTypes.string,
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
-    "variants": _MediaEmbed,
+    "id": PropTypes.string.isRequired,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
+    "variants": (...args) => _MediaEmbed.isRequired(...args),
 });
 _Preview = PropTypes.shape({
-    "enabled": PropTypes.bool,
-    "images": PropTypes.arrayOf(_Image),
+    "enabled": PropTypes.bool.isRequired,
+    "images": PropTypes.arrayOf((...args) => _Image(...args)).isRequired,
 });
 _MediaEmbed = PropTypes.shape({
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "author_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
     "distinguished": PropTypes.any,
-    "domain": PropTypes.string,
-    "downs": PropTypes.number,
-    "edited": PropTypes.bool,
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "domain": PropTypes.string.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.bool.isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
-    "link_flair_css_class": PropTypes.string,
-    "link_flair_text": PropTypes.string,
-    "locked": PropTypes.bool,
+    "link_flair_css_class": PropTypes.string.isRequired,
+    "link_flair_text": PropTypes.string.isRequired,
+    "locked": PropTypes.bool.isRequired,
     "media": PropTypes.any,
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "permalink": PropTypes.string,
+    "over_18": PropTypes.bool.isRequired,
+    "permalink": PropTypes.string.isRequired,
     "post_hint": PropTypes.oneOfType([_PostHint, PropTypes.any]),
-    "preview": PropTypes.oneOfType([_Preview, PropTypes.any]),
-    "quarantine": PropTypes.bool,
+    "preview": PropTypes.oneOfType([(...args) => _Preview(...args), PropTypes.any]),
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
     "secure_media": PropTypes.any,
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": _Subreddit,
-    "subreddit_id": _SubredditID,
-    "subreddit_name_prefixed": _SubredditNamePrefixed,
-    "subreddit_type": _SubredditType,
-    "suggested_sort": _SuggestedSort,
-    "thumbnail": PropTypes.string,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": _Subreddit.isRequired,
+    "subreddit_id": _SubredditID.isRequired,
+    "subreddit_name_prefixed": _SubredditNamePrefixed.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
+    "suggested_sort": _SuggestedSort.isRequired,
+    "thumbnail": PropTypes.string.isRequired,
     "thumbnail_height": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "thumbnail_width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
+    "visited": PropTypes.bool.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/88130.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/88130.json/default/toplevel.js
index c1f2259..79ae4ee 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/88130.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/88130.json/default/toplevel.js
@@ -27,92 +27,92 @@ let _Location;
 let _Units;
 let _Wind;
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/8a62c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/8a62c.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/8a62c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/8a62c.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/908db.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/908db.json/default/toplevel.js
index 317ef51..60ff1b9 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/908db.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/908db.json/default/toplevel.js
@@ -16,14 +16,14 @@ let _TopLevel;
 let _StateElement;
 let _StateState;
 _StateState = PropTypes.shape({
-    "state_id": PropTypes.string,
-    "state_name": PropTypes.string,
+    "state_id": PropTypes.string.isRequired,
+    "state_name": PropTypes.string.isRequired,
 });
 _StateElement = PropTypes.shape({
-    "state": _StateState,
+    "state": (...args) => _StateState.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "states": PropTypes.arrayOf(_StateElement),
+    "states": PropTypes.arrayOf((...args) => _StateElement(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/9617f.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/9617f.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/9617f.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/9617f.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/96f7c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/96f7c.json/default/toplevel.js
index b3d4a4b..b3e69a6 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/96f7c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/96f7c.json/default/toplevel.js
@@ -14,12 +14,12 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "git": PropTypes.arrayOf(PropTypes.string),
-    "github_services_sha": PropTypes.string,
-    "hooks": PropTypes.arrayOf(PropTypes.string),
-    "importer": PropTypes.arrayOf(PropTypes.string),
-    "pages": PropTypes.arrayOf(PropTypes.string),
-    "verifiable_password_authentication": PropTypes.bool,
+    "git": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "github_services_sha": PropTypes.string.isRequired,
+    "hooks": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "importer": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "pages": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "verifiable_password_authentication": PropTypes.bool.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/9847b.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/9847b.json/default/toplevel.js
index 184fe49..5c5bb73 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/9847b.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/9847b.json/default/toplevel.js
@@ -14,8 +14,8 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "name": PropTypes.string,
+    "id": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/9929c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/9929c.json/default/toplevel.js
index c1f2259..79ae4ee 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/9929c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/9929c.json/default/toplevel.js
@@ -27,92 +27,92 @@ let _Location;
 let _Units;
 let _Wind;
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/996bd.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/996bd.json/default/toplevel.js
index 346a22b..4194665 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/996bd.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/996bd.json/default/toplevel.js
@@ -16,32 +16,32 @@ let _TopLevel;
 let _Identifier;
 let _Link;
 let _Text;
-const _Scheme = PropTypes.oneOfType(['dep5', 'spdx', 'trove']);
-const _Keyword = PropTypes.oneOfType(['osiApproved', 'popular', 'copyleft', 'international']);
-const _MediaType = PropTypes.oneOfType(['textPlain', 'textHTML']);
-const _Title = PropTypes.oneOfType(['plainText', 'html']);
+const _Scheme = PropTypes.oneOf(["DEP5", "SPDX", "Trove"]);
+const _Keyword = PropTypes.oneOf(["osi-approved", "popular", "copyleft", "international"]);
+const _MediaType = PropTypes.oneOf(["text/plain", "text/html"]);
+const _Title = PropTypes.oneOf(["Plain Text", "HTML"]);
 _Text = PropTypes.shape({
-    "media_type": _MediaType,
-    "title": _Title,
-    "url": PropTypes.string,
+    "media_type": _MediaType.isRequired,
+    "title": _Title.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Link = PropTypes.shape({
-    "note": PropTypes.string,
-    "url": PropTypes.string,
+    "note": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": _Scheme,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": _Scheme.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(PropTypes.any),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf(PropTypes.any).isRequired,
     "superseded_by": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/9a503.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/9a503.json/default/toplevel.js
index 41fe567..1a20ee0 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/9a503.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/9a503.json/default/toplevel.js
@@ -16,29 +16,29 @@ let _TopLevel;
 let _Identifier;
 let _Link;
 let _Text;
-const _Keyword = PropTypes.oneOfType(['discouraged', 'retired', 'osiApproved']);
+const _Keyword = PropTypes.oneOf(["discouraged", "retired", "osi-approved"]);
 _Text = PropTypes.shape({
-    "media_type": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
+    "media_type": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Link = PropTypes.shape({
-    "note": PropTypes.string,
-    "url": PropTypes.string,
+    "note": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": PropTypes.string,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(PropTypes.any),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf(PropTypes.any).isRequired,
     "superseded_by": PropTypes.any,
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/9ac3b.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/9ac3b.json/default/toplevel.js
index d19992d..0f1ed6a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/9ac3b.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/9ac3b.json/default/toplevel.js
@@ -15,31 +15,31 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Facets;
 let _Result;
-const _Status = PropTypes.oneOfType(['inactive', 'active']);
-const _Title = PropTypes.oneOfType(['mr', 'ms']);
+const _Status = PropTypes.oneOf(["inactive", "active"]);
+const _Title = PropTypes.oneOf(["Mr", "Ms"]);
 _Result = PropTypes.shape({
-    "created_at": PropTypes.string,
-    "entity": PropTypes.string,
-    "first_name": PropTypes.string,
-    "id": PropTypes.string,
-    "last_name": PropTypes.string,
-    "name": PropTypes.string,
+    "created_at": PropTypes.string.isRequired,
+    "entity": PropTypes.string.isRequired,
+    "first_name": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "last_name": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
     "position": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "status": _Status,
+    "status": _Status.isRequired,
     "title": PropTypes.oneOfType([_Title, PropTypes.any]),
-    "updated_at": PropTypes.string,
-    "uri": PropTypes.string,
+    "updated_at": PropTypes.string.isRequired,
+    "uri": PropTypes.string.isRequired,
 });
 _Facets = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "facets": _Facets,
-    "limit": PropTypes.number,
-    "next": PropTypes.string,
-    "offset": PropTypes.number,
-    "previous": PropTypes.bool,
-    "results": PropTypes.arrayOf(_Result),
+    "count": PropTypes.number.isRequired,
+    "facets": (...args) => _Facets.isRequired(...args),
+    "limit": PropTypes.number.isRequired,
+    "next": PropTypes.string.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "previous": PropTypes.bool.isRequired,
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/9eed5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/9eed5.json/default/toplevel.js
index 0a2e49e..93e13ea 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/9eed5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/9eed5.json/default/toplevel.js
@@ -16,29 +16,29 @@ let _TopLevel;
 let _Identifier;
 let _Link;
 let _Text;
-const _Keyword = PropTypes.oneOfType(['specialPurpose', 'osiApproved']);
+const _Keyword = PropTypes.oneOf(["special-purpose", "osi-approved"]);
 _Text = PropTypes.shape({
-    "media_type": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
+    "media_type": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Link = PropTypes.shape({
-    "note": PropTypes.string,
-    "url": PropTypes.string,
+    "note": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": PropTypes.string,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(PropTypes.any),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf(PropTypes.any).isRequired,
     "superseded_by": PropTypes.any,
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/a0496.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/a0496.json/default/toplevel.js
index acd87e1..121a979 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/a0496.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/a0496.json/default/toplevel.js
@@ -17,23 +17,23 @@ let _Errors;
 _Errors = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "code": PropTypes.string,
-    "column_names": PropTypes.arrayOf(PropTypes.string),
-    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))),
-    "description": PropTypes.string,
-    "display_url": PropTypes.string,
-    "errors": _Errors,
-    "frequency": PropTypes.string,
-    "from_date": PropTypes.string,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "premium": PropTypes.bool,
-    "source_code": PropTypes.string,
-    "source_name": PropTypes.string,
-    "to_date": PropTypes.string,
-    "type": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "urlize_name": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "column_names": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))).isRequired,
+    "description": PropTypes.string.isRequired,
+    "display_url": PropTypes.string.isRequired,
+    "errors": (...args) => _Errors.isRequired(...args),
+    "frequency": PropTypes.string.isRequired,
+    "from_date": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "premium": PropTypes.bool.isRequired,
+    "source_code": PropTypes.string.isRequired,
+    "source_name": PropTypes.string.isRequired,
+    "to_date": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "urlize_name": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/a1eca.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/a1eca.json/default/toplevel.js
index c1f2259..79ae4ee 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/a1eca.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/a1eca.json/default/toplevel.js
@@ -27,92 +27,92 @@ let _Location;
 let _Units;
 let _Wind;
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/a3d8c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/a3d8c.json/default/toplevel.js
index ad02e04..88a460a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/a3d8c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/a3d8c.json/default/toplevel.js
@@ -25,106 +25,106 @@ let _Metadata;
 let _RenderTypeConfig;
 let _Visible;
 let _Owner;
-const _TypeName = PropTypes.oneOfType(['metaData', 'number', 'text']);
+const _TypeName = PropTypes.oneOf(["meta_data", "number", "text"]);
 _Owner = PropTypes.shape({
-    "displayName": PropTypes.string,
-    "id": PropTypes.string,
-    "screenName": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "screenName": PropTypes.string.isRequired,
 });
 _Visible = PropTypes.shape({
-    "table": PropTypes.bool,
+    "table": PropTypes.bool.isRequired,
 });
 _RenderTypeConfig = PropTypes.shape({
-    "visible": _Visible,
+    "visible": (...args) => _Visible.isRequired(...args),
 });
 _Metadata = PropTypes.shape({
-    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string),
-    "rdfClass": PropTypes.string,
-    "rdfSubject": PropTypes.string,
-    "renderTypeConfig": _RenderTypeConfig,
-    "rowIdentifier": PropTypes.string,
+    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rdfClass": PropTypes.string.isRequired,
+    "rdfSubject": PropTypes.string.isRequired,
+    "renderTypeConfig": (...args) => _RenderTypeConfig.isRequired(...args),
+    "rowIdentifier": PropTypes.string.isRequired,
 });
 _License = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _Grant = PropTypes.shape({
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "inherited": PropTypes.bool,
-    "type": PropTypes.string,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "inherited": PropTypes.bool.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Query = PropTypes.shape({
 });
 _Top = PropTypes.shape({
-    "count": PropTypes.number,
-    "item": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "item": PropTypes.string.isRequired,
 });
 _CachedContents = PropTypes.shape({
     "average": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "largest": PropTypes.string,
-    "non_null": PropTypes.number,
-    "null": PropTypes.number,
-    "smallest": PropTypes.string,
+    "largest": PropTypes.string.isRequired,
+    "non_null": PropTypes.number.isRequired,
+    "null": PropTypes.number.isRequired,
+    "smallest": PropTypes.string.isRequired,
     "sum": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "top": PropTypes.arrayOf(_Top),
+    "top": PropTypes.arrayOf((...args) => _Top(...args)).isRequired,
 });
 _Column = PropTypes.shape({
-    "cachedContents": PropTypes.oneOfType([_CachedContents, PropTypes.any]),
-    "dataTypeName": _TypeName,
-    "fieldName": PropTypes.string,
+    "cachedContents": PropTypes.oneOfType([(...args) => _CachedContents(...args), PropTypes.any]),
+    "dataTypeName": _TypeName.isRequired,
+    "fieldName": PropTypes.string.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "format": _Query,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "position": PropTypes.number,
-    "renderTypeName": _TypeName,
+    "format": (...args) => _Query.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "position": PropTypes.number.isRequired,
+    "renderTypeName": _TypeName.isRequired,
     "tableColumnId": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _View = PropTypes.shape({
-    "averageRating": PropTypes.number,
-    "category": PropTypes.string,
-    "columns": PropTypes.arrayOf(_Column),
-    "createdAt": PropTypes.number,
-    "displayType": PropTypes.string,
-    "downloadCount": PropTypes.number,
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "grants": PropTypes.arrayOf(_Grant),
-    "hideFromCatalog": PropTypes.bool,
-    "hideFromDataJson": PropTypes.bool,
-    "id": PropTypes.string,
-    "indexUpdatedAt": PropTypes.number,
-    "license": _License,
-    "licenseId": PropTypes.string,
-    "locale": PropTypes.string,
-    "metadata": _Metadata,
-    "name": PropTypes.string,
-    "newBackend": PropTypes.bool,
-    "numberOfComments": PropTypes.number,
-    "oid": PropTypes.number,
-    "owner": _Owner,
-    "provenance": PropTypes.string,
-    "publicationAppendEnabled": PropTypes.bool,
-    "publicationDate": PropTypes.number,
-    "publicationGroup": PropTypes.number,
-    "publicationStage": PropTypes.string,
-    "query": _Query,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "rowClass": PropTypes.string,
-    "rowsUpdatedAt": PropTypes.number,
-    "rowsUpdatedBy": PropTypes.string,
-    "tableAuthor": _Owner,
-    "tableId": PropTypes.number,
-    "totalTimesRated": PropTypes.number,
-    "viewCount": PropTypes.number,
-    "viewLastModified": PropTypes.number,
-    "viewType": PropTypes.string,
+    "averageRating": PropTypes.number.isRequired,
+    "category": PropTypes.string.isRequired,
+    "columns": PropTypes.arrayOf((...args) => _Column(...args)).isRequired,
+    "createdAt": PropTypes.number.isRequired,
+    "displayType": PropTypes.string.isRequired,
+    "downloadCount": PropTypes.number.isRequired,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "grants": PropTypes.arrayOf((...args) => _Grant(...args)).isRequired,
+    "hideFromCatalog": PropTypes.bool.isRequired,
+    "hideFromDataJson": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "indexUpdatedAt": PropTypes.number.isRequired,
+    "license": (...args) => _License.isRequired(...args),
+    "licenseId": PropTypes.string.isRequired,
+    "locale": PropTypes.string.isRequired,
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "name": PropTypes.string.isRequired,
+    "newBackend": PropTypes.bool.isRequired,
+    "numberOfComments": PropTypes.number.isRequired,
+    "oid": PropTypes.number.isRequired,
+    "owner": (...args) => _Owner.isRequired(...args),
+    "provenance": PropTypes.string.isRequired,
+    "publicationAppendEnabled": PropTypes.bool.isRequired,
+    "publicationDate": PropTypes.number.isRequired,
+    "publicationGroup": PropTypes.number.isRequired,
+    "publicationStage": PropTypes.string.isRequired,
+    "query": (...args) => _Query.isRequired(...args),
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rowClass": PropTypes.string.isRequired,
+    "rowsUpdatedAt": PropTypes.number.isRequired,
+    "rowsUpdatedBy": PropTypes.string.isRequired,
+    "tableAuthor": (...args) => _Owner.isRequired(...args),
+    "tableId": PropTypes.number.isRequired,
+    "totalTimesRated": PropTypes.number.isRequired,
+    "viewCount": PropTypes.number.isRequired,
+    "viewLastModified": PropTypes.number.isRequired,
+    "viewType": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "view": _View,
+    "view": (...args) => _View.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))),
-    "meta": _Meta,
+    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/a45b0.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/a45b0.json/default/toplevel.js
index a4e8532..9ee622b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/a45b0.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/a45b0.json/default/toplevel.js
@@ -13,14 +13,14 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Country = PropTypes.oneOfType(['unitedStates']);
+const _Country = PropTypes.oneOf(["United States"]);
 _TopLevel = PropTypes.shape({
-    "age": PropTypes.number,
-    "country": _Country,
-    "females": PropTypes.number,
-    "males": PropTypes.number,
-    "total": PropTypes.number,
-    "year": PropTypes.number,
+    "age": PropTypes.number.isRequired,
+    "country": _Country.isRequired,
+    "females": PropTypes.number.isRequired,
+    "males": PropTypes.number.isRequired,
+    "total": PropTypes.number.isRequired,
+    "year": PropTypes.number.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/a71df.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/a71df.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/a71df.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/a71df.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/a9691.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/a9691.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/a9691.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/a9691.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/ab0d1.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/ab0d1.json/default/toplevel.js
index a4e8532..9ee622b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/ab0d1.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/ab0d1.json/default/toplevel.js
@@ -13,14 +13,14 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Country = PropTypes.oneOfType(['unitedStates']);
+const _Country = PropTypes.oneOf(["United States"]);
 _TopLevel = PropTypes.shape({
-    "age": PropTypes.number,
-    "country": _Country,
-    "females": PropTypes.number,
-    "males": PropTypes.number,
-    "total": PropTypes.number,
-    "year": PropTypes.number,
+    "age": PropTypes.number.isRequired,
+    "country": _Country.isRequired,
+    "females": PropTypes.number.isRequired,
+    "males": PropTypes.number.isRequired,
+    "total": PropTypes.number.isRequired,
+    "year": PropTypes.number.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/abb4b.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/abb4b.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/abb4b.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/abb4b.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/ac944.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/ac944.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/ac944.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/ac944.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/ad8be.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/ad8be.json/default/toplevel.js
index 3e0dc4c..51e4918 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/ad8be.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/ad8be.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Identifier;
 let _Link;
 let _OtherName;
 let _Text;
-const _Scheme = PropTypes.oneOfType(['spdx', 'trove', 'dep5']);
-const _Keyword = PropTypes.oneOfType(['osiApproved', 'discouraged', 'redundant', 'miscellaneous', 'nonReusable', 'obsolete', 'popular', 'permissive', 'retired', 'specialPurpose', 'copyleft', 'international']);
-const _Note = PropTypes.oneOfType(['osiPage', 'tlDRLegal', 'wikipediaPage', 'noteWikipediaPage', 'mozillaPage', 'osetFoundationPage']);
-const _MediaType = PropTypes.oneOfType(['textHTML', 'textPlain', 'applicationPDF']);
-const _Title = PropTypes.oneOfType(['html', 'plainText', 'pdf']);
+const _Scheme = PropTypes.oneOf(["SPDX", "Trove", "DEP5"]);
+const _Keyword = PropTypes.oneOf(["osi-approved", "discouraged", "redundant", "miscellaneous", "non-reusable", "obsolete", "popular", "permissive", "retired", "special-purpose", "copyleft", "international"]);
+const _Note = PropTypes.oneOf(["OSI Page", "tl;dr legal", "Wikipedia page", "Wikipedia Page", "Mozilla Page", "OSET Foundation Page"]);
+const _MediaType = PropTypes.oneOf(["text/html", "text/plain", "application/pdf"]);
+const _Title = PropTypes.oneOf(["HTML", "Plain Text", "PDF"]);
 _Text = PropTypes.shape({
-    "media_type": _MediaType,
-    "title": _Title,
-    "url": PropTypes.string,
+    "media_type": _MediaType.isRequired,
+    "title": _Title.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _OtherName = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
     "note": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Link = PropTypes.shape({
-    "note": _Note,
-    "url": PropTypes.string,
+    "note": _Note.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Identifier = PropTypes.shape({
-    "identifier": PropTypes.string,
-    "scheme": _Scheme,
+    "identifier": PropTypes.string.isRequired,
+    "scheme": _Scheme.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "identifiers": PropTypes.arrayOf(_Identifier),
-    "keywords": PropTypes.arrayOf(_Keyword),
-    "links": PropTypes.arrayOf(_Link),
-    "name": PropTypes.string,
-    "other_names": PropTypes.arrayOf(_OtherName),
+    "id": PropTypes.string.isRequired,
+    "identifiers": PropTypes.arrayOf((...args) => _Identifier(...args)).isRequired,
+    "keywords": PropTypes.arrayOf(_Keyword).isRequired,
+    "links": PropTypes.arrayOf((...args) => _Link(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "other_names": PropTypes.arrayOf((...args) => _OtherName(...args)).isRequired,
     "superseded_by": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "text": PropTypes.arrayOf(_Text),
+    "text": PropTypes.arrayOf((...args) => _Text(...args)).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/ae7f0.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/ae7f0.json/default/toplevel.js
index 598d578..afd51ad 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/ae7f0.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/ae7f0.json/default/toplevel.js
@@ -17,89 +17,89 @@ let _TopLevelData;
 let _Child;
 let _ChildData;
 let _MediaEmbed;
-const _Domain = PropTypes.oneOfType(['selfAskReddit']);
-const _Subreddit = PropTypes.oneOfType(['askReddit']);
-const _SubredditID = PropTypes.oneOfType(['t52Qh1I']);
-const _SubredditNamePrefixed = PropTypes.oneOfType(['rAskReddit']);
-const _SubredditType = PropTypes.oneOfType(['public']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _Domain = PropTypes.oneOf(["self.AskReddit"]);
+const _Subreddit = PropTypes.oneOf(["AskReddit"]);
+const _SubredditID = PropTypes.oneOf(["t5_2qh1i"]);
+const _SubredditNamePrefixed = PropTypes.oneOf(["r/AskReddit"]);
+const _SubredditType = PropTypes.oneOf(["public"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _MediaEmbed = PropTypes.shape({
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.any,
     "author_flair_text": PropTypes.any,
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
     "distinguished": PropTypes.any,
-    "domain": _Domain,
-    "downs": PropTypes.number,
-    "edited": PropTypes.bool,
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "domain": _Domain.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.bool.isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
     "link_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "link_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "locked": PropTypes.bool,
+    "locked": PropTypes.bool.isRequired,
     "media": PropTypes.any,
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "permalink": PropTypes.string,
-    "quarantine": PropTypes.bool,
+    "over_18": PropTypes.bool.isRequired,
+    "permalink": PropTypes.string.isRequired,
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
     "secure_media": PropTypes.any,
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.any,
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": _Subreddit,
-    "subreddit_id": _SubredditID,
-    "subreddit_name_prefixed": _SubredditNamePrefixed,
-    "subreddit_type": _SubredditType,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": _Subreddit.isRequired,
+    "subreddit_id": _SubredditID.isRequired,
+    "subreddit_name_prefixed": _SubredditNamePrefixed.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
     "suggested_sort": PropTypes.any,
-    "thumbnail": PropTypes.string,
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "thumbnail": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
+    "visited": PropTypes.bool.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/ae9ca.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/ae9ca.json/default/toplevel.js
index 166a791..f96c0a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/ae9ca.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/ae9ca.json/default/toplevel.js
@@ -16,36 +16,36 @@ let _TopLevel;
 let _Feature;
 let _Geometry;
 let _Properties;
-const _GeometryType = PropTypes.oneOfType(['point']);
-const _Class = PropTypes.oneOfType(['noCodeAllocated', 'osDistrict', 'osNeighbourhood', 'osRegional']);
-const _MaintainingAuthority = PropTypes.oneOfType(['cityOfBallarat']);
-const _Ward = PropTypes.oneOfType(['south', 'north', 'central']);
-const _FeatureType = PropTypes.oneOfType(['feature']);
+const _GeometryType = PropTypes.oneOf(["Point"]);
+const _Class = PropTypes.oneOf(["No Code Allocated", "OS-District", "OS-Neighbourhood", "OS-Regional"]);
+const _MaintainingAuthority = PropTypes.oneOf(["City of Ballarat"]);
+const _Ward = PropTypes.oneOf(["South", "North", "Central"]);
+const _FeatureType = PropTypes.oneOf(["Feature"]);
 _Properties = PropTypes.shape({
-    "Area": PropTypes.string,
-    "Central Asset ID": PropTypes.string,
-    "Class": _Class,
-    "Feature Location": PropTypes.string,
-    "Maintaining Authority": _MaintainingAuthority,
-    "Number": PropTypes.string,
-    "Site Name": PropTypes.string,
-    "Ward": _Ward,
-    "lat": PropTypes.string,
-    "long": PropTypes.string,
+    "Area": PropTypes.string.isRequired,
+    "Central Asset ID": PropTypes.string.isRequired,
+    "Class": _Class.isRequired,
+    "Feature Location": PropTypes.string.isRequired,
+    "Maintaining Authority": _MaintainingAuthority.isRequired,
+    "Number": PropTypes.string.isRequired,
+    "Site Name": PropTypes.string.isRequired,
+    "Ward": _Ward.isRequired,
+    "lat": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
 });
 _Geometry = PropTypes.shape({
-    "coordinates": PropTypes.arrayOf(PropTypes.number),
-    "type": _GeometryType,
+    "coordinates": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "type": _GeometryType.isRequired,
 });
 _Feature = PropTypes.shape({
-    "geometry": _Geometry,
-    "properties": _Properties,
-    "type": _FeatureType,
+    "geometry": (...args) => _Geometry.isRequired(...args),
+    "properties": (...args) => _Properties.isRequired(...args),
+    "type": _FeatureType.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "features": PropTypes.arrayOf(_Feature),
-    "name": PropTypes.string,
-    "type": PropTypes.string,
+    "features": PropTypes.arrayOf((...args) => _Feature(...args)).isRequired,
+    "name": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/af2d1.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/af2d1.json/default/toplevel.js
index 6fabd2a..ed7a5ef 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/af2d1.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/af2d1.json/default/toplevel.js
@@ -18,79 +18,79 @@ let _CRSProperties;
 let _Feature;
 let _Geometry;
 let _FeatureProperties;
-const _GeometryType = PropTypes.oneOfType(['multiPolygon']);
-const _GeometryName = PropTypes.oneOfType(['geom']);
-const _AddImprov = PropTypes.oneOfType(['f', 'addImprovF', 't']);
-const _FundingBa = PropTypes.oneOfType(['nonGCCC', 'capex', 'initial', 'contribute']);
-const _LevelAccu = PropTypes.oneOfType(['gpsCorrected10M', 'approx', 'gpsCOrrected10M']);
-const _Material = PropTypes.oneOfType(['gravel', 'concrete', 'bitumen', 'interlockConcBlock', 'other', 'earth']);
-const _MiSymbolo = PropTypes.oneOfType(['pen2265535Brush1016777215']);
-const _Status = PropTypes.oneOfType(['current']);
-const _PropertiesType = PropTypes.oneOfType(['boatRamp']);
-const _FeatureType = PropTypes.oneOfType(['feature']);
+const _GeometryType = PropTypes.oneOf(["MultiPolygon"]);
+const _GeometryName = PropTypes.oneOf(["geom"]);
+const _AddImprov = PropTypes.oneOf(["f", "F", "t"]);
+const _FundingBa = PropTypes.oneOf(["Non GCCC", "Capex", "Initial", "Contribute"]);
+const _LevelAccu = PropTypes.oneOf(["GPS Corrected 1.0M", "APPROX", "GPS COrrected 1.0M"]);
+const _Material = PropTypes.oneOf(["Gravel", "Concrete", "Bitumen", "Interlock Conc Block", "Other", "Earth"]);
+const _MiSymbolo = PropTypes.oneOf(["Pen (2, 2, 65535) Brush (1, 0, 16777215)"]);
+const _Status = PropTypes.oneOf(["CURRENT"]);
+const _PropertiesType = PropTypes.oneOf(["Boat Ramp"]);
+const _FeatureType = PropTypes.oneOf(["Feature"]);
 _FeatureProperties = PropTypes.shape({
     "add_improv": PropTypes.oneOfType([_AddImprov, PropTypes.any]),
-    "area_": PropTypes.number,
-    "asset_numb": PropTypes.string,
+    "area_": PropTypes.number.isRequired,
+    "asset_numb": PropTypes.string.isRequired,
     "comments": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "condition": PropTypes.number,
+    "condition": PropTypes.number.isRequired,
     "constructi": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "createdate": PropTypes.any,
     "createuser": PropTypes.any,
     "disposal_d": PropTypes.any,
-    "documents": PropTypes.string,
+    "documents": PropTypes.string.isRequired,
     "drawing_nu": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "file_numbe": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "folder_num": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "funding_ba": PropTypes.oneOfType([_FundingBa, PropTypes.any]),
-    "historic_c": PropTypes.number,
-    "inspection": PropTypes.string,
+    "historic_c": PropTypes.number.isRequired,
+    "inspection": PropTypes.string.isRequired,
     "inspectors": PropTypes.any,
     "last_updat": PropTypes.any,
     "level_accu": PropTypes.oneOfType([_LevelAccu, PropTypes.any]),
-    "material": _Material,
-    "mi_prinx": PropTypes.number,
-    "mi_symbolo": _MiSymbolo,
-    "number_lan": PropTypes.number,
+    "material": _Material.isRequired,
+    "mi_prinx": PropTypes.number.isRequired,
+    "mi_symbolo": _MiSymbolo.isRequired,
+    "number_lan": PropTypes.number.isRequired,
     "owner": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "positional": PropTypes.oneOfType([_LevelAccu, PropTypes.any]),
     "project_nu": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "rec_id": PropTypes.number,
+    "rec_id": PropTypes.number.isRequired,
     "record_cre": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "shape_area": PropTypes.number,
-    "shape_leng": PropTypes.number,
-    "status": _Status,
+    "shape_area": PropTypes.number.isRequired,
+    "shape_leng": PropTypes.number.isRequired,
+    "status": _Status.isRequired,
     "survey_num": PropTypes.any,
-    "toe_rl": PropTypes.number,
-    "top_rl": PropTypes.number,
+    "toe_rl": PropTypes.number.isRequired,
+    "top_rl": PropTypes.number.isRequired,
     "type": PropTypes.oneOfType([_PropertiesType, PropTypes.any]),
-    "update_dat": PropTypes.string,
+    "update_dat": PropTypes.string.isRequired,
     "updatedate": PropTypes.any,
     "updateuser": PropTypes.any,
 });
 _Geometry = PropTypes.shape({
-    "coordinates": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)))),
-    "type": _GeometryType,
+    "coordinates": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)))).isRequired,
+    "type": _GeometryType.isRequired,
 });
 _Feature = PropTypes.shape({
-    "geometry": _Geometry,
-    "geometry_name": _GeometryName,
-    "id": PropTypes.string,
-    "properties": _FeatureProperties,
-    "type": _FeatureType,
+    "geometry": (...args) => _Geometry.isRequired(...args),
+    "geometry_name": _GeometryName.isRequired,
+    "id": PropTypes.string.isRequired,
+    "properties": (...args) => _FeatureProperties.isRequired(...args),
+    "type": _FeatureType.isRequired,
 });
 _CRSProperties = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _CRS = PropTypes.shape({
-    "properties": _CRSProperties,
-    "type": PropTypes.string,
+    "properties": (...args) => _CRSProperties.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "crs": _CRS,
-    "features": PropTypes.arrayOf(_Feature),
-    "totalFeatures": PropTypes.number,
-    "type": PropTypes.string,
+    "crs": (...args) => _CRS.isRequired(...args),
+    "features": PropTypes.arrayOf((...args) => _Feature(...args)).isRequired,
+    "totalFeatures": PropTypes.number.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/b4865.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/b4865.json/default/toplevel.js
index 9418b35..24cab2a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/b4865.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/b4865.json/default/toplevel.js
@@ -14,26 +14,26 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 let _Geolocation;
-const _Fall = PropTypes.oneOfType(['fell', 'found']);
-const _Type = PropTypes.oneOfType(['point']);
-const _Nametype = PropTypes.oneOfType(['valid']);
+const _Fall = PropTypes.oneOf(["Fell", "Found"]);
+const _Type = PropTypes.oneOf(["Point"]);
+const _Nametype = PropTypes.oneOf(["Valid"]);
 _Geolocation = PropTypes.shape({
-    "coordinates": PropTypes.arrayOf(PropTypes.number),
-    "type": _Type,
+    "coordinates": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "type": _Type.isRequired,
 });
 _TopLevel = PropTypes.shape({
     ":@computed_region_cbhk_fwbd": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     ":@computed_region_nnqa_25f4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "fall": _Fall,
-    "geolocation": PropTypes.oneOfType([_Geolocation, PropTypes.any]),
-    "id": PropTypes.string,
+    "fall": _Fall.isRequired,
+    "geolocation": PropTypes.oneOfType([(...args) => _Geolocation(...args), PropTypes.any]),
+    "id": PropTypes.string.isRequired,
     "mass": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "name": PropTypes.string,
-    "nametype": _Nametype,
-    "recclass": PropTypes.string,
+    "name": PropTypes.string.isRequired,
+    "nametype": _Nametype.isRequired,
+    "recclass": PropTypes.string.isRequired,
     "reclat": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "reclong": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "year": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/b6f2c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/b6f2c.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/b6f2c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/b6f2c.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/b6fe5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/b6fe5.json/default/toplevel.js
index 1d66787..18a88fc 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/b6fe5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/b6fe5.json/default/toplevel.js
@@ -14,10 +14,10 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "group": PropTypes.string,
-    "movie": PropTypes.string,
-    "movie-image": PropTypes.string,
-    "theater": PropTypes.string,
+    "group": PropTypes.string.isRequired,
+    "movie": PropTypes.string.isRequired,
+    "movie-image": PropTypes.string.isRequired,
+    "theater": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/b9f64.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/b9f64.json/default/toplevel.js
index 78ca455..ae6b324 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/b9f64.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/b9f64.json/default/toplevel.js
@@ -14,7 +14,7 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "user-agent": PropTypes.string,
+    "user-agent": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/bb1ec.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/bb1ec.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/bb1ec.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/bb1ec.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/be234.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/be234.json/default/toplevel.js
index 83ac06d..ae8a103 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/be234.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/be234.json/default/toplevel.js
@@ -24,35 +24,35 @@ let _Image;
 let _Source;
 let _Variants;
 let _GIF;
-const _Domain = PropTypes.oneOfType(['redditCOM', 'iReddIt', 'iImgurCOM', 'gfycatCOM', 'imgurCOM']);
-const _PostHint = PropTypes.oneOfType(['link', 'image', 'richVideo']);
-const _Subreddit = PropTypes.oneOfType(['funny']);
-const _SubredditID = PropTypes.oneOfType(['t52Qh33']);
-const _SubredditNamePrefixed = PropTypes.oneOfType(['rFunny']);
-const _SubredditType = PropTypes.oneOfType(['public']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _Domain = PropTypes.oneOf(["reddit.com", "i.redd.it", "i.imgur.com", "gfycat.com", "imgur.com"]);
+const _PostHint = PropTypes.oneOf(["link", "image", "rich:video"]);
+const _Subreddit = PropTypes.oneOf(["funny"]);
+const _SubredditID = PropTypes.oneOf(["t5_2qh33"]);
+const _SubredditNamePrefixed = PropTypes.oneOf(["r/funny"]);
+const _SubredditType = PropTypes.oneOf(["public"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _GIF = PropTypes.shape({
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
 });
 _Variants = PropTypes.shape({
-    "gif": PropTypes.oneOfType([_GIF, PropTypes.any]),
-    "mp4": PropTypes.oneOfType([_GIF, PropTypes.any]),
+    "gif": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
+    "mp4": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
 });
 _Source = PropTypes.shape({
-    "height": PropTypes.number,
-    "url": PropTypes.string,
-    "width": PropTypes.number,
+    "height": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Image = PropTypes.shape({
-    "id": PropTypes.string,
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
-    "variants": _Variants,
+    "id": PropTypes.string.isRequired,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
+    "variants": (...args) => _Variants.isRequired(...args),
 });
 _Preview = PropTypes.shape({
-    "enabled": PropTypes.bool,
-    "images": PropTypes.arrayOf(_Image),
+    "enabled": PropTypes.bool.isRequired,
+    "images": PropTypes.arrayOf((...args) => _Image(...args)).isRequired,
 });
 _MediaEmbed = PropTypes.shape({
     "content": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -61,102 +61,102 @@ _MediaEmbed = PropTypes.shape({
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Oembed = PropTypes.shape({
-    "description": PropTypes.string,
-    "height": PropTypes.number,
-    "html": PropTypes.string,
-    "provider_name": PropTypes.string,
-    "provider_url": PropTypes.string,
-    "thumbnail_height": PropTypes.number,
-    "thumbnail_url": PropTypes.string,
-    "thumbnail_width": PropTypes.number,
-    "title": PropTypes.string,
-    "type": PropTypes.string,
-    "version": PropTypes.string,
-    "width": PropTypes.number,
+    "description": PropTypes.string.isRequired,
+    "height": PropTypes.number.isRequired,
+    "html": PropTypes.string.isRequired,
+    "provider_name": PropTypes.string.isRequired,
+    "provider_url": PropTypes.string.isRequired,
+    "thumbnail_height": PropTypes.number.isRequired,
+    "thumbnail_url": PropTypes.string.isRequired,
+    "thumbnail_width": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Media = PropTypes.shape({
-    "oembed": _Oembed,
-    "type": _Domain,
+    "oembed": (...args) => _Oembed.isRequired(...args),
+    "type": _Domain.isRequired,
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.any,
     "author_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
     "distinguished": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "domain": _Domain,
-    "downs": PropTypes.number,
-    "edited": PropTypes.bool,
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "domain": _Domain.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.bool.isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
     "link_flair_css_class": PropTypes.any,
     "link_flair_text": PropTypes.any,
-    "locked": PropTypes.bool,
-    "media": PropTypes.oneOfType([_Media, PropTypes.any]),
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "locked": PropTypes.bool.isRequired,
+    "media": PropTypes.oneOfType([(...args) => _Media(...args), PropTypes.any]),
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "permalink": PropTypes.string,
-    "post_hint": _PostHint,
-    "preview": _Preview,
-    "quarantine": PropTypes.bool,
+    "over_18": PropTypes.bool.isRequired,
+    "permalink": PropTypes.string.isRequired,
+    "post_hint": _PostHint.isRequired,
+    "preview": (...args) => _Preview.isRequired(...args),
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
-    "secure_media": PropTypes.oneOfType([_Media, PropTypes.any]),
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
+    "secure_media": PropTypes.oneOfType([(...args) => _Media(...args), PropTypes.any]),
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.any,
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": _Subreddit,
-    "subreddit_id": _SubredditID,
-    "subreddit_name_prefixed": _SubredditNamePrefixed,
-    "subreddit_type": _SubredditType,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": _Subreddit.isRequired,
+    "subreddit_id": _SubredditID.isRequired,
+    "subreddit_name_prefixed": _SubredditNamePrefixed.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
     "suggested_sort": PropTypes.any,
-    "thumbnail": PropTypes.string,
-    "thumbnail_height": PropTypes.number,
-    "thumbnail_width": PropTypes.number,
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "thumbnail": PropTypes.string.isRequired,
+    "thumbnail_height": PropTypes.number.isRequired,
+    "thumbnail_width": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
+    "visited": PropTypes.bool.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/c0356.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/c0356.json/default/toplevel.js
index 020a026..45f799d 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/c0356.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/c0356.json/default/toplevel.js
@@ -16,17 +16,17 @@ let _TopLevel;
 let _Datum;
 let _Description;
 _Description = PropTypes.shape({
-    "base_period": PropTypes.string,
-    "missing": PropTypes.number,
-    "title": PropTypes.string,
+    "base_period": PropTypes.string.isRequired,
+    "missing": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Datum = PropTypes.shape({
-    "anomaly": PropTypes.string,
-    "value": PropTypes.string,
+    "anomaly": PropTypes.string.isRequired,
+    "value": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.object,
-    "description": _Description,
+    "data": PropTypes.object.isRequired,
+    "description": (...args) => _Description.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/c0a3a.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/c0a3a.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/c0a3a.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/c0a3a.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/c3303.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/c3303.json/default/toplevel.js
index 201bfe9..3950b22 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/c3303.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/c3303.json/default/toplevel.js
@@ -22,103 +22,103 @@ let _Looping;
 let _User;
 let _Meta;
 let _Pagination;
-const _Rating = PropTypes.oneOfType(['pg', 'g', 'pg13']);
-const _Type = PropTypes.oneOfType(['gif']);
-const _Username = PropTypes.oneOfType(['empty', 'disneypixar']);
+const _Rating = PropTypes.oneOf(["pg", "g", "pg-13"]);
+const _Type = PropTypes.oneOf(["gif"]);
+const _Username = PropTypes.oneOf(["", "disneypixar"]);
 _Pagination = PropTypes.shape({
-    "count": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _Meta = PropTypes.shape({
-    "msg": PropTypes.string,
-    "response_id": PropTypes.string,
-    "status": PropTypes.number,
+    "msg": PropTypes.string.isRequired,
+    "response_id": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "banner_url": PropTypes.string,
-    "display_name": PropTypes.string,
-    "profile_url": PropTypes.string,
-    "username": _Username,
+    "avatar_url": PropTypes.string.isRequired,
+    "banner_url": PropTypes.string.isRequired,
+    "display_name": PropTypes.string.isRequired,
+    "profile_url": PropTypes.string.isRequired,
+    "username": _Username.isRequired,
 });
 _Looping = PropTypes.shape({
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
 });
 _FixedHeight = PropTypes.shape({
     "frames": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "hash": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "mp4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mp4_size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "size": PropTypes.string,
-    "url": PropTypes.string,
-    "webp": PropTypes.string,
-    "webp_size": PropTypes.string,
-    "width": PropTypes.string,
+    "size": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "webp": PropTypes.string.isRequired,
+    "webp_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _DownsizedSmall = PropTypes.shape({
-    "height": PropTypes.string,
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Downsized = PropTypes.shape({
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Images = PropTypes.shape({
-    "480w_still": PropTypes.oneOfType([_Downsized, PropTypes.any]),
-    "downsized": _Downsized,
-    "downsized_large": _Downsized,
-    "downsized_medium": _Downsized,
-    "downsized_small": _DownsizedSmall,
-    "downsized_still": _Downsized,
-    "fixed_height": _FixedHeight,
-    "fixed_height_downsampled": _FixedHeight,
-    "fixed_height_small": _FixedHeight,
-    "fixed_height_small_still": _Downsized,
-    "fixed_height_still": _Downsized,
-    "fixed_width": _FixedHeight,
-    "fixed_width_downsampled": _FixedHeight,
-    "fixed_width_small": _FixedHeight,
-    "fixed_width_small_still": _Downsized,
-    "fixed_width_still": _Downsized,
-    "looping": _Looping,
-    "original": _FixedHeight,
-    "original_mp4": _DownsizedSmall,
-    "original_still": _Downsized,
-    "preview": _DownsizedSmall,
-    "preview_gif": _Downsized,
-    "preview_webp": _Downsized,
+    "480w_still": PropTypes.oneOfType([(...args) => _Downsized(...args), PropTypes.any]),
+    "downsized": (...args) => _Downsized.isRequired(...args),
+    "downsized_large": (...args) => _Downsized.isRequired(...args),
+    "downsized_medium": (...args) => _Downsized.isRequired(...args),
+    "downsized_small": (...args) => _DownsizedSmall.isRequired(...args),
+    "downsized_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width_still": (...args) => _Downsized.isRequired(...args),
+    "looping": (...args) => _Looping.isRequired(...args),
+    "original": (...args) => _FixedHeight.isRequired(...args),
+    "original_mp4": (...args) => _DownsizedSmall.isRequired(...args),
+    "original_still": (...args) => _Downsized.isRequired(...args),
+    "preview": (...args) => _DownsizedSmall.isRequired(...args),
+    "preview_gif": (...args) => _Downsized.isRequired(...args),
+    "preview_webp": (...args) => _Downsized.isRequired(...args),
 });
 _Datum = PropTypes.shape({
-    "bitly_gif_url": PropTypes.string,
-    "bitly_url": PropTypes.string,
-    "content_url": PropTypes.string,
-    "embed_url": PropTypes.string,
-    "id": PropTypes.string,
-    "images": _Images,
-    "import_datetime": PropTypes.string,
-    "is_indexable": PropTypes.number,
-    "rating": _Rating,
-    "slug": PropTypes.string,
-    "source": PropTypes.string,
-    "source_post_url": PropTypes.string,
-    "source_tld": PropTypes.string,
-    "trending_datetime": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
-    "user": PropTypes.oneOfType([_User, PropTypes.any]),
-    "username": _Username,
+    "bitly_gif_url": PropTypes.string.isRequired,
+    "bitly_url": PropTypes.string.isRequired,
+    "content_url": PropTypes.string.isRequired,
+    "embed_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "images": (...args) => _Images.isRequired(...args),
+    "import_datetime": PropTypes.string.isRequired,
+    "is_indexable": PropTypes.number.isRequired,
+    "rating": _Rating.isRequired,
+    "slug": PropTypes.string.isRequired,
+    "source": PropTypes.string.isRequired,
+    "source_post_url": PropTypes.string.isRequired,
+    "source_tld": PropTypes.string.isRequired,
+    "trending_datetime": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": PropTypes.oneOfType([(...args) => _User(...args), PropTypes.any]),
+    "username": _Username.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "meta": _Meta,
-    "pagination": _Pagination,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "pagination": (...args) => _Pagination.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/c6cfd.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/c6cfd.json/default/toplevel.js
index 2566906..b57d6e0 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/c6cfd.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/c6cfd.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Country;
 _Country = PropTypes.shape({
-    "code": PropTypes.string,
-    "name": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "countries": PropTypes.arrayOf(_Country),
+    "countries": PropTypes.arrayOf((...args) => _Country(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/c8c7e.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/c8c7e.json/default/toplevel.js
index 7f51975..52b5bcd 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/c8c7e.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/c8c7e.json/default/toplevel.js
@@ -15,24 +15,24 @@ import PropTypes from "prop-types";
 let _TopLevelElement;
 let _Country;
 let _PurpleTopLevel;
-const _ID = PropTypes.oneOfType(['in', 'nyGdpMktpCD']);
-const _Value = PropTypes.oneOfType(['india', 'gdpCurrentUS']);
+const _ID = PropTypes.oneOf(["IN", "NY.GDP.MKTP.CD"]);
+const _Value = PropTypes.oneOf(["India", "GDP (current US$)"]);
 _PurpleTopLevel = PropTypes.shape({
-    "page": PropTypes.number,
-    "pages": PropTypes.number,
-    "per_page": PropTypes.string,
-    "total": PropTypes.number,
+    "page": PropTypes.number.isRequired,
+    "pages": PropTypes.number.isRequired,
+    "per_page": PropTypes.string.isRequired,
+    "total": PropTypes.number.isRequired,
 });
 _Country = PropTypes.shape({
-    "id": _ID,
-    "value": _Value,
+    "id": _ID.isRequired,
+    "value": _Value.isRequired,
 });
 _TopLevelElement = PropTypes.shape({
-    "country": _Country,
-    "date": PropTypes.string,
-    "decimal": PropTypes.string,
-    "indicator": _Country,
-    "value": PropTypes.string,
+    "country": (...args) => _Country.isRequired(...args),
+    "date": PropTypes.string.isRequired,
+    "decimal": PropTypes.string.isRequired,
+    "indicator": (...args) => _Country.isRequired(...args),
+    "value": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(_TopLevelElement), _PurpleTopLevel]));
+export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TopLevelElement(...args)), (...args) => _PurpleTopLevel(...args)]));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/cb0cc.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/cb0cc.json/default/toplevel.js
index 2c2f503..b5f4ad7 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/cb0cc.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/cb0cc.json/default/toplevel.js
@@ -15,22 +15,22 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Prize;
 let _Laureate;
-const _Category = PropTypes.oneOfType(['physics', 'chemistry', 'medicine', 'literature', 'peace', 'economics']);
+const _Category = PropTypes.oneOf(["physics", "chemistry", "medicine", "literature", "peace", "economics"]);
 _Laureate = PropTypes.shape({
-    "firstname": PropTypes.string,
-    "id": PropTypes.string,
+    "firstname": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
     "motivation": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "share": PropTypes.string,
-    "surname": PropTypes.string,
+    "share": PropTypes.string.isRequired,
+    "surname": PropTypes.string.isRequired,
 });
 _Prize = PropTypes.shape({
-    "category": _Category,
-    "laureates": PropTypes.arrayOf(_Laureate),
+    "category": _Category.isRequired,
+    "laureates": PropTypes.arrayOf((...args) => _Laureate(...args)).isRequired,
     "overallMotivation": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "year": PropTypes.string,
+    "year": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "prizes": PropTypes.arrayOf(_Prize),
+    "prizes": PropTypes.arrayOf((...args) => _Prize(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/cb81e.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/cb81e.json/default/toplevel.js
index 031c534..daf0ff1 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/cb81e.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/cb81e.json/default/toplevel.js
@@ -15,14 +15,14 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Description;
 _Description = PropTypes.shape({
-    "base_period": PropTypes.string,
-    "missing": PropTypes.string,
-    "title": PropTypes.string,
-    "units": PropTypes.string,
+    "base_period": PropTypes.string.isRequired,
+    "missing": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "units": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.object,
-    "description": _Description,
+    "data": PropTypes.object.isRequired,
+    "description": (...args) => _Description.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/ccd18.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/ccd18.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/ccd18.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/ccd18.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/cd238.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/cd238.json/default/toplevel.js
index 948ddf0..30dd1a4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/cd238.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/cd238.json/default/toplevel.js
@@ -17,37 +17,37 @@ let _Status;
 let _Weather;
 let _Meta;
 _Meta = PropTypes.shape({
-    "credit": PropTypes.string,
-    "updated": PropTypes.string,
-    "url": PropTypes.string,
+    "credit": PropTypes.string.isRequired,
+    "updated": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Weather = PropTypes.shape({
-    "meta": _Meta,
-    "temp": PropTypes.string,
-    "visibility": PropTypes.number,
-    "weather": PropTypes.string,
-    "wind": PropTypes.string,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "temp": PropTypes.string.isRequired,
+    "visibility": PropTypes.number.isRequired,
+    "weather": PropTypes.string.isRequired,
+    "wind": PropTypes.string.isRequired,
 });
 _Status = PropTypes.shape({
-    "avgDelay": PropTypes.string,
-    "closureBegin": PropTypes.string,
-    "closureEnd": PropTypes.string,
-    "endTime": PropTypes.string,
-    "maxDelay": PropTypes.string,
-    "minDelay": PropTypes.string,
-    "reason": PropTypes.string,
-    "trend": PropTypes.string,
-    "type": PropTypes.string,
+    "avgDelay": PropTypes.string.isRequired,
+    "closureBegin": PropTypes.string.isRequired,
+    "closureEnd": PropTypes.string.isRequired,
+    "endTime": PropTypes.string.isRequired,
+    "maxDelay": PropTypes.string.isRequired,
+    "minDelay": PropTypes.string.isRequired,
+    "reason": PropTypes.string.isRequired,
+    "trend": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "IATA": PropTypes.string,
-    "ICAO": PropTypes.string,
-    "city": PropTypes.string,
-    "delay": PropTypes.string,
-    "name": PropTypes.string,
-    "state": PropTypes.string,
-    "status": _Status,
-    "weather": _Weather,
+    "IATA": PropTypes.string.isRequired,
+    "ICAO": PropTypes.string.isRequired,
+    "city": PropTypes.string.isRequired,
+    "delay": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "status": (...args) => _Status.isRequired(...args),
+    "weather": (...args) => _Weather.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/cd463.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/cd463.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/cd463.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/cd463.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/cda6c.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/cda6c.json/default/toplevel.js
index 39892bf..477571d 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/cda6c.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/cda6c.json/default/toplevel.js
@@ -15,24 +15,24 @@ import PropTypes from "prop-types";
 let _TopLevelElement;
 let _Country;
 let _PurpleTopLevel;
-const _ID = PropTypes.oneOfType(['cn', 'spPopTotl']);
-const _Value = PropTypes.oneOfType(['china', 'populationTotal']);
+const _ID = PropTypes.oneOf(["CN", "SP.POP.TOTL"]);
+const _Value = PropTypes.oneOf(["China", "Population, total"]);
 _PurpleTopLevel = PropTypes.shape({
-    "page": PropTypes.number,
-    "pages": PropTypes.number,
-    "per_page": PropTypes.string,
-    "total": PropTypes.number,
+    "page": PropTypes.number.isRequired,
+    "pages": PropTypes.number.isRequired,
+    "per_page": PropTypes.string.isRequired,
+    "total": PropTypes.number.isRequired,
 });
 _Country = PropTypes.shape({
-    "id": _ID,
-    "value": _Value,
+    "id": _ID.isRequired,
+    "value": _Value.isRequired,
 });
 _TopLevelElement = PropTypes.shape({
-    "country": _Country,
-    "date": PropTypes.string,
-    "decimal": PropTypes.string,
-    "indicator": _Country,
-    "value": PropTypes.string,
+    "country": (...args) => _Country.isRequired(...args),
+    "date": PropTypes.string.isRequired,
+    "decimal": PropTypes.string.isRequired,
+    "indicator": (...args) => _Country.isRequired(...args),
+    "value": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(_TopLevelElement), _PurpleTopLevel]));
+export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TopLevelElement(...args)), (...args) => _PurpleTopLevel(...args)]));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/cf0d8.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/cf0d8.json/default/toplevel.js
index c1f2259..79ae4ee 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/cf0d8.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/cf0d8.json/default/toplevel.js
@@ -27,92 +27,92 @@ let _Location;
 let _Units;
 let _Wind;
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/cfbce.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/cfbce.json/default/toplevel.js
index 72bcfde..c2e0e4a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/cfbce.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/cfbce.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "base": PropTypes.string,
-    "date": PropTypes.string,
-    "rates": PropTypes.object,
+    "base": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "rates": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/d0908.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/d0908.json/default/toplevel.js
index cf6a865..40c5319 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/d0908.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/d0908.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _TotalPopulation;
 _TotalPopulation = PropTypes.shape({
-    "date": PropTypes.string,
-    "population": PropTypes.number,
+    "date": PropTypes.string.isRequired,
+    "population": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "total_population": PropTypes.arrayOf(_TotalPopulation),
+    "total_population": PropTypes.arrayOf((...args) => _TotalPopulation(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/d23d5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/d23d5.json/default/toplevel.js
index ad31dee..7f0362f 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/d23d5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/d23d5.json/default/toplevel.js
@@ -17,22 +17,22 @@ let _Facets;
 let _Result;
 _Result = PropTypes.shape({
     "acronym": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "created_at": PropTypes.string,
-    "id": PropTypes.string,
-    "name": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "uri": PropTypes.string,
+    "created_at": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "uri": PropTypes.string.isRequired,
 });
 _Facets = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "count": PropTypes.number,
-    "facets": _Facets,
-    "limit": PropTypes.number,
-    "next": PropTypes.string,
-    "offset": PropTypes.number,
-    "previous": PropTypes.bool,
-    "results": PropTypes.arrayOf(_Result),
+    "count": PropTypes.number.isRequired,
+    "facets": (...args) => _Facets.isRequired(...args),
+    "limit": PropTypes.number.isRequired,
+    "next": PropTypes.string.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "previous": PropTypes.bool.isRequired,
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/dbfb3.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/dbfb3.json/default/toplevel.js
index b04a646..7afa64b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/dbfb3.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/dbfb3.json/default/toplevel.js
@@ -26,94 +26,94 @@ let _GUID;
 let _Location;
 let _Units;
 let _Wind;
-const _Text = PropTypes.oneOfType(['mostlySunny', 'sunny']);
+const _Text = PropTypes.oneOf(["Mostly Sunny", "Sunny"]);
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": _Text,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": _Text.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": _Text,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": _Text.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/dc44f.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/dc44f.json/default/toplevel.js
index e3bd460..0ef2dd4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/dc44f.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/dc44f.json/default/toplevel.js
@@ -16,64 +16,64 @@ let _TopLevel;
 let _Card;
 let _LegalityElement;
 let _Ruling;
-const _Booster = PropTypes.oneOfType(['rare', 'uncommon', 'common']);
-const _ColorIdentity = PropTypes.oneOfType(['u', 'b', 'w', 'g', 'r']);
-const _Color = PropTypes.oneOfType(['blue', 'black', 'white', 'green', 'red']);
-const _Layout = PropTypes.oneOfType(['normal']);
-const _Format = PropTypes.oneOfType(['commander', 'legacy', 'modern', 'vintage', 'timeSpiralBlock', 'ravnicaBlock', 'iceAgeBlock', 'tempestBlock', 'onslaughtBlock', 'masquesBlock', 'mirageBlock', 'urzaBlock', 'scarsOfMirrodinBlock', 'mirrodinBlock', 'amonkhetBlock', 'battleForZendikarBlock', 'innistradBlock', 'invasionBlock', 'kaladeshBlock', 'kamigawaBlock', 'khansOfTarkirBlock', 'lorwynShadowmoorBlock', 'odysseyBlock', 'returnToRavnicaBlock', 'shadowsOverInnistradBlock', 'shardsOfAlaraBlock', 'standard', 'therosBlock', 'unSets', 'zendikarBlock']);
-const _LegalityEnum = PropTypes.oneOfType(['legal', 'banned', 'restricted']);
-const _Rarity = PropTypes.oneOfType(['uncommon', 'rare', 'common', 'basicLand']);
-const _Supertype = PropTypes.oneOfType(['basic']);
-const _Type = PropTypes.oneOfType(['creature', 'instant', 'enchantment', 'artifact', 'sorcery', 'land']);
+const _Booster = PropTypes.oneOf(["rare", "uncommon", "common"]);
+const _ColorIdentity = PropTypes.oneOf(["U", "B", "W", "G", "R"]);
+const _Color = PropTypes.oneOf(["Blue", "Black", "White", "Green", "Red"]);
+const _Layout = PropTypes.oneOf(["normal"]);
+const _Format = PropTypes.oneOf(["Commander", "Legacy", "Modern", "Vintage", "Time Spiral Block", "Ravnica Block", "Ice Age Block", "Tempest Block", "Onslaught Block", "Masques Block", "Mirage Block", "Urza Block", "Scars of Mirrodin Block", "Mirrodin Block", "Amonkhet Block", "Battle for Zendikar Block", "Innistrad Block", "Invasion Block", "Kaladesh Block", "Kamigawa Block", "Khans of Tarkir Block", "Lorwyn-Shadowmoor Block", "Odyssey Block", "Return to Ravnica Block", "Shadows over Innistrad Block", "Shards of Alara Block", "Standard", "Theros Block", "Un-Sets", "Zendikar Block"]);
+const _LegalityEnum = PropTypes.oneOf(["Legal", "Banned", "Restricted"]);
+const _Rarity = PropTypes.oneOf(["Uncommon", "Rare", "Common", "Basic Land"]);
+const _Supertype = PropTypes.oneOf(["Basic"]);
+const _Type = PropTypes.oneOf(["Creature", "Instant", "Enchantment", "Artifact", "Sorcery", "Land"]);
 _Ruling = PropTypes.shape({
-    "date": PropTypes.string,
-    "text": PropTypes.string,
+    "date": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _LegalityElement = PropTypes.shape({
-    "format": _Format,
-    "legality": _LegalityEnum,
+    "format": _Format.isRequired,
+    "legality": _LegalityEnum.isRequired,
 });
 _Card = PropTypes.shape({
-    "artist": PropTypes.string,
-    "cmc": PropTypes.number,
+    "artist": PropTypes.string.isRequired,
+    "cmc": PropTypes.number.isRequired,
     "colorIdentity": PropTypes.oneOfType([PropTypes.arrayOf(_ColorIdentity), PropTypes.any]),
     "colors": PropTypes.oneOfType([PropTypes.arrayOf(_Color), PropTypes.any]),
     "flavor": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "id": PropTypes.string,
-    "imageName": PropTypes.string,
-    "layout": _Layout,
-    "legalities": PropTypes.arrayOf(_LegalityElement),
+    "id": PropTypes.string.isRequired,
+    "imageName": PropTypes.string.isRequired,
+    "layout": _Layout.isRequired,
+    "legalities": PropTypes.arrayOf((...args) => _LegalityElement(...args)).isRequired,
     "manaCost": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mciNumber": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "multiverseid": PropTypes.number,
-    "name": PropTypes.string,
+    "multiverseid": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
     "originalText": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "originalType": PropTypes.string,
+    "originalType": PropTypes.string.isRequired,
     "power": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "printings": PropTypes.arrayOf(PropTypes.string),
-    "rarity": _Rarity,
+    "printings": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rarity": _Rarity.isRequired,
     "reserved": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
-    "rulings": PropTypes.oneOfType([PropTypes.arrayOf(_Ruling), PropTypes.any]),
+    "rulings": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Ruling(...args)), PropTypes.any]),
     "subtypes": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
     "supertypes": PropTypes.oneOfType([PropTypes.arrayOf(_Supertype), PropTypes.any]),
     "text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "toughness": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "type": PropTypes.string,
-    "types": PropTypes.arrayOf(_Type),
+    "type": PropTypes.string.isRequired,
+    "types": PropTypes.arrayOf(_Type).isRequired,
     "variations": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any]),
 });
 _TopLevel = PropTypes.shape({
-    "booster": PropTypes.arrayOf(_Booster),
-    "border": PropTypes.string,
-    "cards": PropTypes.arrayOf(_Card),
-    "code": PropTypes.string,
-    "gathererCode": PropTypes.string,
-    "magicCardsInfoCode": PropTypes.string,
-    "mkm_id": PropTypes.number,
-    "mkm_name": PropTypes.string,
-    "name": PropTypes.string,
-    "releaseDate": PropTypes.string,
-    "type": PropTypes.string,
+    "booster": PropTypes.arrayOf(_Booster).isRequired,
+    "border": PropTypes.string.isRequired,
+    "cards": PropTypes.arrayOf((...args) => _Card(...args)).isRequired,
+    "code": PropTypes.string.isRequired,
+    "gathererCode": PropTypes.string.isRequired,
+    "magicCardsInfoCode": PropTypes.string.isRequired,
+    "mkm_id": PropTypes.number.isRequired,
+    "mkm_name": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "releaseDate": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/dd1ce.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/dd1ce.json/default/toplevel.js
index e3bd460..0ef2dd4 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/dd1ce.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/dd1ce.json/default/toplevel.js
@@ -16,64 +16,64 @@ let _TopLevel;
 let _Card;
 let _LegalityElement;
 let _Ruling;
-const _Booster = PropTypes.oneOfType(['rare', 'uncommon', 'common']);
-const _ColorIdentity = PropTypes.oneOfType(['u', 'b', 'w', 'g', 'r']);
-const _Color = PropTypes.oneOfType(['blue', 'black', 'white', 'green', 'red']);
-const _Layout = PropTypes.oneOfType(['normal']);
-const _Format = PropTypes.oneOfType(['commander', 'legacy', 'modern', 'vintage', 'timeSpiralBlock', 'ravnicaBlock', 'iceAgeBlock', 'tempestBlock', 'onslaughtBlock', 'masquesBlock', 'mirageBlock', 'urzaBlock', 'scarsOfMirrodinBlock', 'mirrodinBlock', 'amonkhetBlock', 'battleForZendikarBlock', 'innistradBlock', 'invasionBlock', 'kaladeshBlock', 'kamigawaBlock', 'khansOfTarkirBlock', 'lorwynShadowmoorBlock', 'odysseyBlock', 'returnToRavnicaBlock', 'shadowsOverInnistradBlock', 'shardsOfAlaraBlock', 'standard', 'therosBlock', 'unSets', 'zendikarBlock']);
-const _LegalityEnum = PropTypes.oneOfType(['legal', 'banned', 'restricted']);
-const _Rarity = PropTypes.oneOfType(['uncommon', 'rare', 'common', 'basicLand']);
-const _Supertype = PropTypes.oneOfType(['basic']);
-const _Type = PropTypes.oneOfType(['creature', 'instant', 'enchantment', 'artifact', 'sorcery', 'land']);
+const _Booster = PropTypes.oneOf(["rare", "uncommon", "common"]);
+const _ColorIdentity = PropTypes.oneOf(["U", "B", "W", "G", "R"]);
+const _Color = PropTypes.oneOf(["Blue", "Black", "White", "Green", "Red"]);
+const _Layout = PropTypes.oneOf(["normal"]);
+const _Format = PropTypes.oneOf(["Commander", "Legacy", "Modern", "Vintage", "Time Spiral Block", "Ravnica Block", "Ice Age Block", "Tempest Block", "Onslaught Block", "Masques Block", "Mirage Block", "Urza Block", "Scars of Mirrodin Block", "Mirrodin Block", "Amonkhet Block", "Battle for Zendikar Block", "Innistrad Block", "Invasion Block", "Kaladesh Block", "Kamigawa Block", "Khans of Tarkir Block", "Lorwyn-Shadowmoor Block", "Odyssey Block", "Return to Ravnica Block", "Shadows over Innistrad Block", "Shards of Alara Block", "Standard", "Theros Block", "Un-Sets", "Zendikar Block"]);
+const _LegalityEnum = PropTypes.oneOf(["Legal", "Banned", "Restricted"]);
+const _Rarity = PropTypes.oneOf(["Uncommon", "Rare", "Common", "Basic Land"]);
+const _Supertype = PropTypes.oneOf(["Basic"]);
+const _Type = PropTypes.oneOf(["Creature", "Instant", "Enchantment", "Artifact", "Sorcery", "Land"]);
 _Ruling = PropTypes.shape({
-    "date": PropTypes.string,
-    "text": PropTypes.string,
+    "date": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _LegalityElement = PropTypes.shape({
-    "format": _Format,
-    "legality": _LegalityEnum,
+    "format": _Format.isRequired,
+    "legality": _LegalityEnum.isRequired,
 });
 _Card = PropTypes.shape({
-    "artist": PropTypes.string,
-    "cmc": PropTypes.number,
+    "artist": PropTypes.string.isRequired,
+    "cmc": PropTypes.number.isRequired,
     "colorIdentity": PropTypes.oneOfType([PropTypes.arrayOf(_ColorIdentity), PropTypes.any]),
     "colors": PropTypes.oneOfType([PropTypes.arrayOf(_Color), PropTypes.any]),
     "flavor": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "id": PropTypes.string,
-    "imageName": PropTypes.string,
-    "layout": _Layout,
-    "legalities": PropTypes.arrayOf(_LegalityElement),
+    "id": PropTypes.string.isRequired,
+    "imageName": PropTypes.string.isRequired,
+    "layout": _Layout.isRequired,
+    "legalities": PropTypes.arrayOf((...args) => _LegalityElement(...args)).isRequired,
     "manaCost": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mciNumber": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "multiverseid": PropTypes.number,
-    "name": PropTypes.string,
+    "multiverseid": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
     "originalText": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "originalType": PropTypes.string,
+    "originalType": PropTypes.string.isRequired,
     "power": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "printings": PropTypes.arrayOf(PropTypes.string),
-    "rarity": _Rarity,
+    "printings": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rarity": _Rarity.isRequired,
     "reserved": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
-    "rulings": PropTypes.oneOfType([PropTypes.arrayOf(_Ruling), PropTypes.any]),
+    "rulings": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Ruling(...args)), PropTypes.any]),
     "subtypes": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
     "supertypes": PropTypes.oneOfType([PropTypes.arrayOf(_Supertype), PropTypes.any]),
     "text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "toughness": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "type": PropTypes.string,
-    "types": PropTypes.arrayOf(_Type),
+    "type": PropTypes.string.isRequired,
+    "types": PropTypes.arrayOf(_Type).isRequired,
     "variations": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any]),
 });
 _TopLevel = PropTypes.shape({
-    "booster": PropTypes.arrayOf(_Booster),
-    "border": PropTypes.string,
-    "cards": PropTypes.arrayOf(_Card),
-    "code": PropTypes.string,
-    "gathererCode": PropTypes.string,
-    "magicCardsInfoCode": PropTypes.string,
-    "mkm_id": PropTypes.number,
-    "mkm_name": PropTypes.string,
-    "name": PropTypes.string,
-    "releaseDate": PropTypes.string,
-    "type": PropTypes.string,
+    "booster": PropTypes.arrayOf(_Booster).isRequired,
+    "border": PropTypes.string.isRequired,
+    "cards": PropTypes.arrayOf((...args) => _Card(...args)).isRequired,
+    "code": PropTypes.string.isRequired,
+    "gathererCode": PropTypes.string.isRequired,
+    "magicCardsInfoCode": PropTypes.string.isRequired,
+    "mkm_id": PropTypes.number.isRequired,
+    "mkm_name": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "releaseDate": PropTypes.string.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/dec3a.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/dec3a.json/default/toplevel.js
index 12eebdc..2935635 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/dec3a.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/dec3a.json/default/toplevel.js
@@ -20,62 +20,62 @@ let _Result;
 let _HiringOrg;
 let _Location;
 _Location = PropTypes.shape({
-    "administrative_area": PropTypes.string,
-    "country": PropTypes.string,
-    "fax_number": PropTypes.string,
-    "locality": PropTypes.string,
-    "mobile_number": PropTypes.string,
-    "phone_number": PropTypes.string,
-    "phone_number_extension": PropTypes.string,
-    "postal_code": PropTypes.string,
+    "administrative_area": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "fax_number": PropTypes.string.isRequired,
+    "locality": PropTypes.string.isRequired,
+    "mobile_number": PropTypes.string.isRequired,
+    "phone_number": PropTypes.string.isRequired,
+    "phone_number_extension": PropTypes.string.isRequired,
+    "postal_code": PropTypes.string.isRequired,
     "sub_premise": PropTypes.any,
-    "thoroughfare": PropTypes.string,
+    "thoroughfare": PropTypes.string.isRequired,
 });
 _HiringOrg = PropTypes.shape({
-    "name": PropTypes.string,
-    "uuid": PropTypes.string,
+    "name": PropTypes.string.isRequired,
+    "uuid": PropTypes.string.isRequired,
 });
 _Result = PropTypes.shape({
-    "about_office": PropTypes.string,
-    "application_process": PropTypes.string,
-    "body": PropTypes.string,
-    "changed": PropTypes.string,
-    "created": PropTypes.string,
+    "about_office": PropTypes.string.isRequired,
+    "application_process": PropTypes.string.isRequired,
+    "body": PropTypes.string.isRequired,
+    "changed": PropTypes.string.isRequired,
+    "created": PropTypes.string.isRequired,
     "deadline": PropTypes.any,
     "hiring_office": PropTypes.any,
-    "hiring_org": _HiringOrg,
+    "hiring_org": (...args) => _HiringOrg.isRequired(...args),
     "job_id": PropTypes.any,
-    "language": PropTypes.string,
-    "location": _Location,
-    "num_positions": PropTypes.string,
-    "position": PropTypes.string,
-    "practice_area": PropTypes.string,
-    "qualifications": PropTypes.string,
+    "language": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "num_positions": PropTypes.string.isRequired,
+    "position": PropTypes.string.isRequired,
+    "practice_area": PropTypes.string.isRequired,
+    "qualifications": PropTypes.string.isRequired,
     "relocation_expenses": PropTypes.any,
-    "salary": PropTypes.string,
-    "title": PropTypes.string,
-    "travel": PropTypes.string,
-    "url": PropTypes.string,
-    "uuid": PropTypes.string,
-    "vuuid": PropTypes.string,
+    "salary": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "travel": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "uuid": PropTypes.string.isRequired,
+    "vuuid": PropTypes.string.isRequired,
 });
 _Resultset = PropTypes.shape({
-    "count": PropTypes.number,
-    "page": PropTypes.number,
-    "pagesize": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "page": PropTypes.number.isRequired,
+    "pagesize": PropTypes.number.isRequired,
 });
 _ResponseInfo = PropTypes.shape({
-    "developerMessage": PropTypes.string,
-    "status": PropTypes.number,
+    "developerMessage": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _Metadata = PropTypes.shape({
-    "executionTime": PropTypes.number,
-    "responseInfo": _ResponseInfo,
-    "resultset": _Resultset,
+    "executionTime": PropTypes.number.isRequired,
+    "responseInfo": (...args) => _ResponseInfo.isRequired(...args),
+    "resultset": (...args) => _Resultset.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "metadata": _Metadata,
-    "results": PropTypes.arrayOf(_Result),
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/df957.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/df957.json/default/toplevel.js
index c1f2259..79ae4ee 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/df957.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/df957.json/default/toplevel.js
@@ -27,92 +27,92 @@ let _Location;
 let _Units;
 let _Wind;
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/e0ac7.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/e0ac7.json/default/toplevel.js
index 4925555..02b2dbf 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/e0ac7.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/e0ac7.json/default/toplevel.js
@@ -22,103 +22,103 @@ let _Looping;
 let _User;
 let _Meta;
 let _Pagination;
-const _Rating = PropTypes.oneOfType(['g', 'pg', 'y']);
-const _Type = PropTypes.oneOfType(['gif']);
+const _Rating = PropTypes.oneOf(["g", "pg", "y"]);
+const _Type = PropTypes.oneOf(["gif"]);
 _Pagination = PropTypes.shape({
-    "count": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _Meta = PropTypes.shape({
-    "msg": PropTypes.string,
-    "response_id": PropTypes.string,
-    "status": PropTypes.number,
+    "msg": PropTypes.string.isRequired,
+    "response_id": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "banner_url": PropTypes.string,
-    "display_name": PropTypes.string,
-    "profile_url": PropTypes.string,
-    "twitter": PropTypes.string,
-    "username": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
+    "banner_url": PropTypes.string.isRequired,
+    "display_name": PropTypes.string.isRequired,
+    "profile_url": PropTypes.string.isRequired,
+    "twitter": PropTypes.string.isRequired,
+    "username": PropTypes.string.isRequired,
 });
 _Looping = PropTypes.shape({
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
 });
 _FixedHeight = PropTypes.shape({
     "frames": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "hash": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "mp4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mp4_size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "size": PropTypes.string,
-    "url": PropTypes.string,
-    "webp": PropTypes.string,
-    "webp_size": PropTypes.string,
-    "width": PropTypes.string,
+    "size": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "webp": PropTypes.string.isRequired,
+    "webp_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _DownsizedSmall = PropTypes.shape({
-    "height": PropTypes.string,
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Downsized = PropTypes.shape({
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Images = PropTypes.shape({
-    "downsized": _Downsized,
-    "downsized_large": _Downsized,
-    "downsized_medium": _Downsized,
-    "downsized_small": _DownsizedSmall,
-    "downsized_still": _Downsized,
-    "fixed_height": _FixedHeight,
-    "fixed_height_downsampled": _FixedHeight,
-    "fixed_height_small": _FixedHeight,
-    "fixed_height_small_still": _Downsized,
-    "fixed_height_still": _Downsized,
-    "fixed_width": _FixedHeight,
-    "fixed_width_downsampled": _FixedHeight,
-    "fixed_width_small": _FixedHeight,
-    "fixed_width_small_still": _Downsized,
-    "fixed_width_still": _Downsized,
-    "hd": PropTypes.oneOfType([_DownsizedSmall, PropTypes.any]),
-    "looping": _Looping,
-    "original": _FixedHeight,
-    "original_mp4": _DownsizedSmall,
-    "original_still": _Downsized,
-    "preview": _DownsizedSmall,
-    "preview_gif": _Downsized,
-    "preview_webp": _Downsized,
+    "downsized": (...args) => _Downsized.isRequired(...args),
+    "downsized_large": (...args) => _Downsized.isRequired(...args),
+    "downsized_medium": (...args) => _Downsized.isRequired(...args),
+    "downsized_small": (...args) => _DownsizedSmall.isRequired(...args),
+    "downsized_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width_still": (...args) => _Downsized.isRequired(...args),
+    "hd": PropTypes.oneOfType([(...args) => _DownsizedSmall(...args), PropTypes.any]),
+    "looping": (...args) => _Looping.isRequired(...args),
+    "original": (...args) => _FixedHeight.isRequired(...args),
+    "original_mp4": (...args) => _DownsizedSmall.isRequired(...args),
+    "original_still": (...args) => _Downsized.isRequired(...args),
+    "preview": (...args) => _DownsizedSmall.isRequired(...args),
+    "preview_gif": (...args) => _Downsized.isRequired(...args),
+    "preview_webp": (...args) => _Downsized.isRequired(...args),
 });
 _Datum = PropTypes.shape({
-    "bitly_gif_url": PropTypes.string,
-    "bitly_url": PropTypes.string,
-    "content_url": PropTypes.string,
-    "embed_url": PropTypes.string,
-    "id": PropTypes.string,
-    "images": _Images,
-    "import_datetime": PropTypes.string,
-    "is_indexable": PropTypes.number,
-    "rating": _Rating,
-    "slug": PropTypes.string,
-    "source": PropTypes.string,
-    "source_post_url": PropTypes.string,
-    "source_tld": PropTypes.string,
-    "trending_datetime": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
-    "user": PropTypes.oneOfType([_User, PropTypes.any]),
-    "username": PropTypes.string,
+    "bitly_gif_url": PropTypes.string.isRequired,
+    "bitly_url": PropTypes.string.isRequired,
+    "content_url": PropTypes.string.isRequired,
+    "embed_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "images": (...args) => _Images.isRequired(...args),
+    "import_datetime": PropTypes.string.isRequired,
+    "is_indexable": PropTypes.number.isRequired,
+    "rating": _Rating.isRequired,
+    "slug": PropTypes.string.isRequired,
+    "source": PropTypes.string.isRequired,
+    "source_post_url": PropTypes.string.isRequired,
+    "source_tld": PropTypes.string.isRequired,
+    "trending_datetime": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": PropTypes.oneOfType([(...args) => _User(...args), PropTypes.any]),
+    "username": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "meta": _Meta,
-    "pagination": _Pagination,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "pagination": (...args) => _Pagination.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/e2915.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/e2915.json/default/toplevel.js
index 8d3f669..5a690e5 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/e2915.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/e2915.json/default/toplevel.js
@@ -26,94 +26,94 @@ let _GUID;
 let _Location;
 let _Units;
 let _Wind;
-const _Text = PropTypes.oneOfType(['sunny']);
+const _Text = PropTypes.oneOf(["Sunny"]);
 _Wind = PropTypes.shape({
-    "chill": PropTypes.string,
-    "direction": PropTypes.string,
-    "speed": PropTypes.string,
+    "chill": PropTypes.string.isRequired,
+    "direction": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
 });
 _Units = PropTypes.shape({
-    "distance": PropTypes.string,
-    "pressure": PropTypes.string,
-    "speed": PropTypes.string,
-    "temperature": PropTypes.string,
+    "distance": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "speed": PropTypes.string.isRequired,
+    "temperature": PropTypes.string.isRequired,
 });
 _Location = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "region": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "region": PropTypes.string.isRequired,
 });
 _GUID = PropTypes.shape({
-    "isPermaLink": PropTypes.string,
+    "isPermaLink": PropTypes.string.isRequired,
 });
 _Forecast = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "day": PropTypes.string,
-    "high": PropTypes.string,
-    "low": PropTypes.string,
-    "text": _Text,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "day": PropTypes.string.isRequired,
+    "high": PropTypes.string.isRequired,
+    "low": PropTypes.string.isRequired,
+    "text": _Text.isRequired,
 });
 _Condition = PropTypes.shape({
-    "code": PropTypes.string,
-    "date": PropTypes.string,
-    "temp": PropTypes.string,
-    "text": PropTypes.string,
+    "code": PropTypes.string.isRequired,
+    "date": PropTypes.string.isRequired,
+    "temp": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "condition": _Condition,
-    "description": PropTypes.string,
-    "forecast": PropTypes.arrayOf(_Forecast),
-    "guid": _GUID,
-    "lat": PropTypes.string,
-    "link": PropTypes.string,
-    "long": PropTypes.string,
-    "pubDate": PropTypes.string,
-    "title": PropTypes.string,
+    "condition": (...args) => _Condition.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "forecast": PropTypes.arrayOf((...args) => _Forecast(...args)).isRequired,
+    "guid": (...args) => _GUID.isRequired(...args),
+    "lat": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "long": PropTypes.string.isRequired,
+    "pubDate": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _Image = PropTypes.shape({
-    "height": PropTypes.string,
-    "link": PropTypes.string,
-    "title": PropTypes.string,
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Atmosphere = PropTypes.shape({
-    "humidity": PropTypes.string,
-    "pressure": PropTypes.string,
-    "rising": PropTypes.string,
-    "visibility": PropTypes.string,
+    "humidity": PropTypes.string.isRequired,
+    "pressure": PropTypes.string.isRequired,
+    "rising": PropTypes.string.isRequired,
+    "visibility": PropTypes.string.isRequired,
 });
 _Astronomy = PropTypes.shape({
-    "sunrise": PropTypes.string,
-    "sunset": PropTypes.string,
+    "sunrise": PropTypes.string.isRequired,
+    "sunset": PropTypes.string.isRequired,
 });
 _Channel = PropTypes.shape({
-    "astronomy": _Astronomy,
-    "atmosphere": _Atmosphere,
-    "description": PropTypes.string,
-    "image": _Image,
-    "item": _Item,
-    "language": PropTypes.string,
-    "lastBuildDate": PropTypes.string,
-    "link": PropTypes.string,
-    "location": _Location,
-    "title": PropTypes.string,
-    "ttl": PropTypes.string,
-    "units": _Units,
-    "wind": _Wind,
+    "astronomy": (...args) => _Astronomy.isRequired(...args),
+    "atmosphere": (...args) => _Atmosphere.isRequired(...args),
+    "description": PropTypes.string.isRequired,
+    "image": (...args) => _Image.isRequired(...args),
+    "item": (...args) => _Item.isRequired(...args),
+    "language": PropTypes.string.isRequired,
+    "lastBuildDate": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "location": (...args) => _Location.isRequired(...args),
+    "title": PropTypes.string.isRequired,
+    "ttl": PropTypes.string.isRequired,
+    "units": (...args) => _Units.isRequired(...args),
+    "wind": (...args) => _Wind.isRequired(...args),
 });
 _Results = PropTypes.shape({
-    "channel": _Channel,
+    "channel": (...args) => _Channel.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "count": PropTypes.number,
-    "created": PropTypes.string,
-    "lang": PropTypes.string,
-    "results": _Results,
+    "count": PropTypes.number.isRequired,
+    "created": PropTypes.string.isRequired,
+    "lang": PropTypes.string.isRequired,
+    "results": (...args) => _Results.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "query": _Query,
+    "query": (...args) => _Query.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/e2a58.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/e2a58.json/default/toplevel.js
index 2d53a31..cb8c852 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/e2a58.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/e2a58.json/default/toplevel.js
@@ -14,8 +14,8 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "date": PropTypes.string,
-    "stop-and-search": PropTypes.arrayOf(PropTypes.string),
+    "date": PropTypes.string.isRequired,
+    "stop-and-search": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/e324e.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/e324e.json/default/toplevel.js
index 9f15465..d55ad14 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/e324e.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/e324e.json/default/toplevel.js
@@ -25,66 +25,66 @@ let _Responses;
 let _The200;
 let _Schema;
 let _Items;
-const _Type = PropTypes.oneOfType(['string']);
+const _Type = PropTypes.oneOf(["string"]);
 _Items = PropTypes.shape({
-    "$ref": PropTypes.string,
+    "$ref": PropTypes.string.isRequired,
 });
 _Schema = PropTypes.shape({
-    "items": _Items,
-    "type": PropTypes.string,
+    "items": (...args) => _Items.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _The200 = PropTypes.shape({
-    "description": PropTypes.string,
-    "schema": _Schema,
+    "description": PropTypes.string.isRequired,
+    "schema": (...args) => _Schema.isRequired(...args),
 });
 _Responses = PropTypes.shape({
-    "200": _The200,
+    "200": (...args) => _The200.isRequired(...args),
 });
 _Parameter = PropTypes.shape({
-    "description": PropTypes.string,
-    "format": _Type,
-    "in": PropTypes.string,
-    "name": PropTypes.string,
-    "required": PropTypes.bool,
-    "type": _Type,
+    "description": PropTypes.string.isRequired,
+    "format": _Type.isRequired,
+    "in": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "required": PropTypes.bool.isRequired,
+    "type": _Type.isRequired,
 });
 _Get = PropTypes.shape({
-    "description": PropTypes.string,
-    "parameters": PropTypes.arrayOf(_Parameter),
-    "responses": _Responses,
-    "summary": PropTypes.string,
-    "tags": PropTypes.arrayOf(PropTypes.string),
+    "description": PropTypes.string.isRequired,
+    "parameters": PropTypes.arrayOf((...args) => _Parameter(...args)).isRequired,
+    "responses": (...args) => _Responses.isRequired(...args),
+    "summary": PropTypes.string.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 _TariffRatesSearch = PropTypes.shape({
-    "get": _Get,
+    "get": (...args) => _Get.isRequired(...args),
 });
 _Paths = PropTypes.shape({
-    "/tariff_rates/search": _TariffRatesSearch,
+    "/tariff_rates/search": (...args) => _TariffRatesSearch.isRequired(...args),
 });
 _Info = PropTypes.shape({
-    "description": PropTypes.string,
-    "title": PropTypes.string,
-    "version": PropTypes.string,
+    "description": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
 });
 _Property = PropTypes.shape({
-    "description": PropTypes.string,
-    "type": _Type,
+    "description": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
 });
 _Rate = PropTypes.shape({
-    "properties": PropTypes.object,
+    "properties": PropTypes.object.isRequired,
 });
 _Definitions = PropTypes.shape({
-    "Rate": _Rate,
+    "Rate": (...args) => _Rate.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "basePath": PropTypes.string,
-    "definitions": _Definitions,
-    "host": PropTypes.string,
-    "info": _Info,
-    "paths": _Paths,
-    "produces": PropTypes.arrayOf(PropTypes.string),
-    "schemes": PropTypes.arrayOf(PropTypes.string),
-    "swagger": PropTypes.string,
+    "basePath": PropTypes.string.isRequired,
+    "definitions": (...args) => _Definitions.isRequired(...args),
+    "host": PropTypes.string.isRequired,
+    "info": (...args) => _Info.isRequired(...args),
+    "paths": (...args) => _Paths.isRequired(...args),
+    "produces": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "schemes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "swagger": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/e53b5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/e53b5.json/default/toplevel.js
index 44fab2c..9fd9a1b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/e53b5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/e53b5.json/default/toplevel.js
@@ -15,24 +15,24 @@ import PropTypes from "prop-types";
 let _TopLevelElement;
 let _Country;
 let _PurpleTopLevel;
-const _ID = PropTypes.oneOfType(['in', 'spPopTotl']);
-const _Value = PropTypes.oneOfType(['india', 'populationTotal']);
+const _ID = PropTypes.oneOf(["IN", "SP.POP.TOTL"]);
+const _Value = PropTypes.oneOf(["India", "Population, total"]);
 _PurpleTopLevel = PropTypes.shape({
-    "page": PropTypes.number,
-    "pages": PropTypes.number,
-    "per_page": PropTypes.string,
-    "total": PropTypes.number,
+    "page": PropTypes.number.isRequired,
+    "pages": PropTypes.number.isRequired,
+    "per_page": PropTypes.string.isRequired,
+    "total": PropTypes.number.isRequired,
 });
 _Country = PropTypes.shape({
-    "id": _ID,
-    "value": _Value,
+    "id": _ID.isRequired,
+    "value": _Value.isRequired,
 });
 _TopLevelElement = PropTypes.shape({
-    "country": _Country,
-    "date": PropTypes.string,
-    "decimal": PropTypes.string,
-    "indicator": _Country,
-    "value": PropTypes.string,
+    "country": (...args) => _Country.isRequired(...args),
+    "date": PropTypes.string.isRequired,
+    "decimal": PropTypes.string.isRequired,
+    "indicator": (...args) => _Country.isRequired(...args),
+    "value": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(_TopLevelElement), _PurpleTopLevel]));
+export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TopLevelElement(...args)), (...args) => _PurpleTopLevel(...args)]));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/e64a0.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/e64a0.json/default/toplevel.js
index 1876f56..00ed57f 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/e64a0.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/e64a0.json/default/toplevel.js
@@ -16,18 +16,18 @@ let _TopLevel;
 let _Args;
 let _Headers;
 _Headers = PropTypes.shape({
-    "Accept-Encoding": PropTypes.string,
-    "Connection": PropTypes.string,
-    "Host": PropTypes.string,
-    "User-Agent": PropTypes.string,
+    "Accept-Encoding": PropTypes.string.isRequired,
+    "Connection": PropTypes.string.isRequired,
+    "Host": PropTypes.string.isRequired,
+    "User-Agent": PropTypes.string.isRequired,
 });
 _Args = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "args": _Args,
-    "headers": _Headers,
-    "origin": PropTypes.string,
-    "url": PropTypes.string,
+    "args": (...args) => _Args.isRequired(...args),
+    "headers": (...args) => _Headers.isRequired(...args),
+    "origin": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/e8a0b.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/e8a0b.json/default/toplevel.js
index a4e8532..9ee622b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/e8a0b.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/e8a0b.json/default/toplevel.js
@@ -13,14 +13,14 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Country = PropTypes.oneOfType(['unitedStates']);
+const _Country = PropTypes.oneOf(["United States"]);
 _TopLevel = PropTypes.shape({
-    "age": PropTypes.number,
-    "country": _Country,
-    "females": PropTypes.number,
-    "males": PropTypes.number,
-    "total": PropTypes.number,
-    "year": PropTypes.number,
+    "age": PropTypes.number.isRequired,
+    "country": _Country.isRequired,
+    "females": PropTypes.number.isRequired,
+    "males": PropTypes.number.isRequired,
+    "total": PropTypes.number.isRequired,
+    "year": PropTypes.number.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/e8b04.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/e8b04.json/default/toplevel.js
index 51af9d4..6b6189b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/e8b04.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/e8b04.json/default/toplevel.js
@@ -40,192 +40,192 @@ let _FluffyVisible;
 let _Owner;
 let _Ratings;
 let _TableAuthor;
-const _DisplayType = PropTypes.oneOfType(['table', 'dataLens', 'fatrow', 'page']);
-const _TopLevelFlag = PropTypes.oneOfType(['default', 'restorable', 'restorePossibleForType']);
-const _GrantFlag = PropTypes.oneOfType(['public']);
-const _GrantType = PropTypes.oneOfType(['viewer']);
-const _OrderColumnFieldName = PropTypes.oneOfType(['dateReceived', 'agreementDate', 'inEffectAsOf1_1_2012']);
-const _ChildColumnFieldName = PropTypes.oneOfType(['product', 'complaintWhatHappened', 'subProduct', 'issue']);
-const _MetadataOperator = PropTypes.oneOfType(['equals', 'blank']);
-const _ChildOperator = PropTypes.oneOfType(['equals', 'isNotBlank']);
-const _WhereOperator = PropTypes.oneOfType(['equals', 'and']);
-const _FieldType = PropTypes.oneOfType(['columnLabel', 'columnData']);
-const _Width = PropTypes.oneOfType(['the27', 'the40', 'the30', 'the33']);
-const _ModifyingViewUid = PropTypes.oneOfType(['s6EwH6Mp']);
-const _RoleName = PropTypes.oneOfType(['administrator', 'publisher']);
-const _Provenance = PropTypes.oneOfType(['official']);
-const _PublicationStage = PropTypes.oneOfType(['published']);
-const _Right = PropTypes.oneOfType(['read']);
-const _RowsUpdatedBy = PropTypes.oneOfType(['pjxgVe4M', 'the54A3Qyun', 'the9E3M2843', 'vvcaFr6G']);
-const _ViewType = PropTypes.oneOfType(['tabular']);
+const _DisplayType = PropTypes.oneOf(["table", "data_lens", "fatrow", "page"]);
+const _TopLevelFlag = PropTypes.oneOf(["default", "restorable", "restorePossibleForType"]);
+const _GrantFlag = PropTypes.oneOf(["public"]);
+const _GrantType = PropTypes.oneOf(["viewer"]);
+const _OrderColumnFieldName = PropTypes.oneOf(["date_received", "agreement_date", "in_effect_as_of_1_1_2012"]);
+const _ChildColumnFieldName = PropTypes.oneOf(["product", "complaint_what_happened", "sub_product", "issue"]);
+const _MetadataOperator = PropTypes.oneOf(["EQUALS", "blank?"]);
+const _ChildOperator = PropTypes.oneOf(["EQUALS", "IS_NOT_BLANK"]);
+const _WhereOperator = PropTypes.oneOf(["EQUALS", "AND"]);
+const _FieldType = PropTypes.oneOf(["columnLabel", "columnData"]);
+const _Width = PropTypes.oneOf(["27%", "40%", "30%", "33%"]);
+const _ModifyingViewUid = PropTypes.oneOf(["s6ew-h6mp"]);
+const _RoleName = PropTypes.oneOf(["administrator", "publisher"]);
+const _Provenance = PropTypes.oneOf(["official"]);
+const _PublicationStage = PropTypes.oneOf(["published"]);
+const _Right = PropTypes.oneOf(["read"]);
+const _RowsUpdatedBy = PropTypes.oneOf(["pjxg-ve4m", "54a3-qyun", "9e3m-2843", "vvca-fr6g"]);
+const _ViewType = PropTypes.oneOf(["tabular"]);
 _TableAuthor = PropTypes.shape({
-    "displayName": PropTypes.string,
-    "id": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
     "rights": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
     "roleName": PropTypes.oneOfType([_RoleName, PropTypes.any]),
-    "screenName": PropTypes.string,
+    "screenName": PropTypes.string.isRequired,
 });
 _Ratings = PropTypes.shape({
-    "rating": PropTypes.number,
+    "rating": PropTypes.number.isRequired,
 });
 _Owner = PropTypes.shape({
-    "displayName": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "id": PropTypes.string,
+    "id": PropTypes.string.isRequired,
     "lastNotificationSeenAt": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "profileImageUrlLarge": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "profileImageUrlMedium": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "profileImageUrlSmall": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "rights": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
     "roleName": PropTypes.oneOfType([_RoleName, PropTypes.any]),
-    "screenName": PropTypes.string,
+    "screenName": PropTypes.string.isRequired,
 });
 _FluffyVisible = PropTypes.shape({
-    "href": PropTypes.bool,
+    "href": PropTypes.bool.isRequired,
 });
 _V1ArchivedPropertiesRenderTypeConfig = PropTypes.shape({
-    "visible": _FluffyVisible,
+    "visible": (...args) => _FluffyVisible.isRequired(...args),
 });
 _AccessPoints = PropTypes.shape({
-    "new_view": PropTypes.string,
+    "new_view": PropTypes.string.isRequired,
 });
 _V1ArchivedProperties = PropTypes.shape({
-    "accessPoints": _AccessPoints,
-    "blist_id": PropTypes.string,
-    "renderTypeConfig": _V1ArchivedPropertiesRenderTypeConfig,
+    "accessPoints": (...args) => _AccessPoints.isRequired(...args),
+    "blist_id": PropTypes.string.isRequired,
+    "renderTypeConfig": (...args) => _V1ArchivedPropertiesRenderTypeConfig.isRequired(...args),
 });
 _Styles = PropTypes.shape({
-    "width": _Width,
+    "width": _Width.isRequired,
 });
 _Field = PropTypes.shape({
-    "tableColumnId": PropTypes.number,
-    "type": _FieldType,
+    "tableColumnId": PropTypes.number.isRequired,
+    "type": _FieldType.isRequired,
 });
 _Row = PropTypes.shape({
-    "fields": PropTypes.arrayOf(_Field),
+    "fields": PropTypes.arrayOf((...args) => _Field(...args)).isRequired,
 });
 _Column = PropTypes.shape({
-    "rows": PropTypes.arrayOf(_Row),
-    "styles": _Styles,
+    "rows": PropTypes.arrayOf((...args) => _Row(...args)).isRequired,
+    "styles": (...args) => _Styles.isRequired(...args),
 });
 _FatRow = PropTypes.shape({
-    "columns": PropTypes.arrayOf(_Column),
+    "columns": PropTypes.arrayOf((...args) => _Column(...args)).isRequired,
 });
 _RichRendererConfigs = PropTypes.shape({
-    "fatRow": _FatRow,
+    "fatRow": (...args) => _FatRow.isRequired(...args),
 });
 _PurpleVisible = PropTypes.shape({
     "fatrow": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
     "table": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
 });
 _MetadataRenderTypeConfig = PropTypes.shape({
-    "visible": _PurpleVisible,
+    "visible": (...args) => _PurpleVisible.isRequired(...args),
 });
 _TableColumnID = PropTypes.shape({
-    "2819740": PropTypes.number,
+    "2819740": PropTypes.number.isRequired,
 });
 _ChildMetadata = PropTypes.shape({
     "customValues": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
     "freeform": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
     "includeAuto": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "operator": PropTypes.oneOfType([_MetadataOperator, PropTypes.any]),
-    "tableColumnId": PropTypes.oneOfType([_TableColumnID, PropTypes.any]),
+    "tableColumnId": PropTypes.oneOfType([(...args) => _TableColumnID(...args), PropTypes.any]),
     "unifiedVersion": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Child = PropTypes.shape({
-    "columnFieldName": _ChildColumnFieldName,
-    "metadata": PropTypes.oneOfType([_ChildMetadata, PropTypes.any]),
-    "operator": _ChildOperator,
+    "columnFieldName": _ChildColumnFieldName.isRequired,
+    "metadata": PropTypes.oneOfType([(...args) => _ChildMetadata(...args), PropTypes.any]),
+    "operator": _ChildOperator.isRequired,
     "value": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Where = PropTypes.shape({
-    "children": PropTypes.oneOfType([PropTypes.arrayOf(_Child), PropTypes.any]),
+    "children": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Child(...args)), PropTypes.any]),
     "columnFieldName": PropTypes.oneOfType([_ChildColumnFieldName, PropTypes.any]),
-    "metadata": PropTypes.oneOfType([_ChildMetadata, PropTypes.any]),
-    "operator": _WhereOperator,
+    "metadata": PropTypes.oneOfType([(...args) => _ChildMetadata(...args), PropTypes.any]),
+    "operator": _WhereOperator.isRequired,
     "value": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Select = PropTypes.shape({
     "aggregate": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "columnFieldName": PropTypes.string,
+    "columnFieldName": PropTypes.string.isRequired,
 });
 _Order = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "columnFieldName": _OrderColumnFieldName,
+    "ascending": PropTypes.bool.isRequired,
+    "columnFieldName": _OrderColumnFieldName.isRequired,
 });
 _Group = PropTypes.shape({
-    "columnFieldName": PropTypes.string,
+    "columnFieldName": PropTypes.string.isRequired,
 });
 _JSONQuery = PropTypes.shape({
-    "group": PropTypes.oneOfType([PropTypes.arrayOf(_Group), PropTypes.any]),
-    "order": PropTypes.oneOfType([PropTypes.arrayOf(_Order), PropTypes.any]),
-    "select": PropTypes.oneOfType([PropTypes.arrayOf(_Select), PropTypes.any]),
-    "where": PropTypes.oneOfType([_Where, PropTypes.any]),
+    "group": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Group(...args)), PropTypes.any]),
+    "order": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Order(...args)), PropTypes.any]),
+    "select": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Select(...args)), PropTypes.any]),
+    "where": PropTypes.oneOfType([(...args) => _Where(...args), PropTypes.any]),
 });
 _Test = PropTypes.shape({
-    "CFPB1": PropTypes.string,
+    "CFPB1": PropTypes.string.isRequired,
 });
 _CustomFields = PropTypes.shape({
-    "TEST": _Test,
+    "TEST": (...args) => _Test.isRequired(...args),
 });
 _TopLevelMetadata = PropTypes.shape({
     "availableDisplayTypes": PropTypes.oneOfType([PropTypes.arrayOf(_DisplayType), PropTypes.any]),
-    "custom_fields": PropTypes.oneOfType([_CustomFields, PropTypes.any]),
-    "jsonQuery": PropTypes.oneOfType([_JSONQuery, PropTypes.any]),
+    "custom_fields": PropTypes.oneOfType([(...args) => _CustomFields(...args), PropTypes.any]),
+    "jsonQuery": PropTypes.oneOfType([(...args) => _JSONQuery(...args), PropTypes.any]),
     "rdfClass": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "rdfSubject": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "renderTypeConfig": PropTypes.oneOfType([_MetadataRenderTypeConfig, PropTypes.any]),
-    "richRendererConfigs": PropTypes.oneOfType([_RichRendererConfigs, PropTypes.any]),
+    "renderTypeConfig": PropTypes.oneOfType([(...args) => _MetadataRenderTypeConfig(...args), PropTypes.any]),
+    "richRendererConfigs": PropTypes.oneOfType([(...args) => _RichRendererConfigs(...args), PropTypes.any]),
     "rowIdentifier": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "rowLabel": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "v1_archived_properties": PropTypes.oneOfType([_V1ArchivedProperties, PropTypes.any]),
+    "v1_archived_properties": PropTypes.oneOfType([(...args) => _V1ArchivedProperties(...args), PropTypes.any]),
 });
 _Grant = PropTypes.shape({
-    "flags": PropTypes.arrayOf(_GrantFlag),
-    "inherited": PropTypes.bool,
-    "type": _GrantType,
+    "flags": PropTypes.arrayOf(_GrantFlag).isRequired,
+    "inherited": PropTypes.bool.isRequired,
+    "type": _GrantType.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "averageRating": PropTypes.number,
+    "averageRating": PropTypes.number.isRequired,
     "category": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "createdAt": PropTypes.number,
+    "createdAt": PropTypes.number.isRequired,
     "description": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "displayType": PropTypes.oneOfType([_DisplayType, PropTypes.any]),
-    "downloadCount": PropTypes.number,
+    "downloadCount": PropTypes.number.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(_TopLevelFlag), PropTypes.any]),
-    "grants": PropTypes.arrayOf(_Grant),
-    "hideFromCatalog": PropTypes.bool,
-    "hideFromDataJson": PropTypes.bool,
-    "id": PropTypes.string,
+    "grants": PropTypes.arrayOf((...args) => _Grant(...args)).isRequired,
+    "hideFromCatalog": PropTypes.bool.isRequired,
+    "hideFromDataJson": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
     "indexUpdatedAt": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "locale": PropTypes.string,
-    "metadata": _TopLevelMetadata,
+    "locale": PropTypes.string.isRequired,
+    "metadata": (...args) => _TopLevelMetadata.isRequired(...args),
     "moderationStatus": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
     "modifyingViewUid": PropTypes.oneOfType([_ModifyingViewUid, PropTypes.any]),
-    "name": PropTypes.string,
-    "newBackend": PropTypes.bool,
-    "numberOfComments": PropTypes.number,
-    "oid": PropTypes.number,
-    "owner": _Owner,
-    "provenance": _Provenance,
-    "publicationAppendEnabled": PropTypes.bool,
+    "name": PropTypes.string.isRequired,
+    "newBackend": PropTypes.bool.isRequired,
+    "numberOfComments": PropTypes.number.isRequired,
+    "oid": PropTypes.number.isRequired,
+    "owner": (...args) => _Owner.isRequired(...args),
+    "provenance": _Provenance.isRequired,
+    "publicationAppendEnabled": PropTypes.bool.isRequired,
     "publicationDate": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "publicationGroup": PropTypes.number,
-    "publicationStage": _PublicationStage,
-    "ratings": PropTypes.oneOfType([_Ratings, PropTypes.any]),
+    "publicationGroup": PropTypes.number.isRequired,
+    "publicationStage": _PublicationStage.isRequired,
+    "ratings": PropTypes.oneOfType([(...args) => _Ratings(...args), PropTypes.any]),
     "resourceName": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "rights": PropTypes.arrayOf(_Right),
+    "rights": PropTypes.arrayOf(_Right).isRequired,
     "rowClass": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "rowIdentifierColumnId": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "rowsUpdatedAt": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "rowsUpdatedBy": PropTypes.oneOfType([_RowsUpdatedBy, PropTypes.any]),
-    "tableAuthor": _TableAuthor,
-    "tableId": PropTypes.number,
+    "tableAuthor": (...args) => _TableAuthor.isRequired(...args),
+    "tableId": PropTypes.number.isRequired,
     "tags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "totalTimesRated": PropTypes.number,
-    "viewCount": PropTypes.number,
-    "viewLastModified": PropTypes.number,
-    "viewType": _ViewType,
+    "totalTimesRated": PropTypes.number.isRequired,
+    "viewCount": PropTypes.number.isRequired,
+    "viewLastModified": PropTypes.number.isRequired,
+    "viewType": _ViewType.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/f22f5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/f22f5.json/default/toplevel.js
index 4521b82..9fa3c8e 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/f22f5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/f22f5.json/default/toplevel.js
@@ -17,88 +17,88 @@ let _TopLevelData;
 let _Child;
 let _ChildData;
 let _MediaEmbed;
-const _Subreddit = PropTypes.oneOfType(['worldnews']);
-const _SubredditID = PropTypes.oneOfType(['t52Qh13']);
-const _SubredditNamePrefixed = PropTypes.oneOfType(['rWorldnews']);
-const _SubredditType = PropTypes.oneOfType(['public']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _Subreddit = PropTypes.oneOf(["worldnews"]);
+const _SubredditID = PropTypes.oneOf(["t5_2qh13"]);
+const _SubredditNamePrefixed = PropTypes.oneOf(["r/worldnews"]);
+const _SubredditType = PropTypes.oneOf(["public"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _MediaEmbed = PropTypes.shape({
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.any,
     "author_flair_text": PropTypes.any,
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
     "distinguished": PropTypes.any,
-    "domain": PropTypes.string,
-    "downs": PropTypes.number,
-    "edited": PropTypes.bool,
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "domain": PropTypes.string.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.bool.isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
     "link_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "link_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "locked": PropTypes.bool,
+    "locked": PropTypes.bool.isRequired,
     "media": PropTypes.any,
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "permalink": PropTypes.string,
-    "quarantine": PropTypes.bool,
+    "over_18": PropTypes.bool.isRequired,
+    "permalink": PropTypes.string.isRequired,
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
     "secure_media": PropTypes.any,
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.any,
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": _Subreddit,
-    "subreddit_id": _SubredditID,
-    "subreddit_name_prefixed": _SubredditNamePrefixed,
-    "subreddit_type": _SubredditType,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": _Subreddit.isRequired,
+    "subreddit_id": _SubredditID.isRequired,
+    "subreddit_name_prefixed": _SubredditNamePrefixed.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
     "suggested_sort": PropTypes.any,
-    "thumbnail": PropTypes.string,
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "thumbnail": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
+    "visited": PropTypes.bool.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/f3139.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/f3139.json/default/toplevel.js
index 184fe49..5c5bb73 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/f3139.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/f3139.json/default/toplevel.js
@@ -14,8 +14,8 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "id": PropTypes.string,
-    "name": PropTypes.string,
+    "id": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/f3edf.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/f3edf.json/default/toplevel.js
index a4e8532..9ee622b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/f3edf.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/f3edf.json/default/toplevel.js
@@ -13,14 +13,14 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Country = PropTypes.oneOfType(['unitedStates']);
+const _Country = PropTypes.oneOf(["United States"]);
 _TopLevel = PropTypes.shape({
-    "age": PropTypes.number,
-    "country": _Country,
-    "females": PropTypes.number,
-    "males": PropTypes.number,
-    "total": PropTypes.number,
-    "year": PropTypes.number,
+    "age": PropTypes.number.isRequired,
+    "country": _Country.isRequired,
+    "females": PropTypes.number.isRequired,
+    "males": PropTypes.number.isRequired,
+    "total": PropTypes.number.isRequired,
+    "year": PropTypes.number.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/f466a.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/f466a.json/default/toplevel.js
index a4e8532..9ee622b 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/f466a.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/f466a.json/default/toplevel.js
@@ -13,14 +13,14 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Country = PropTypes.oneOfType(['unitedStates']);
+const _Country = PropTypes.oneOf(["United States"]);
 _TopLevel = PropTypes.shape({
-    "age": PropTypes.number,
-    "country": _Country,
-    "females": PropTypes.number,
-    "males": PropTypes.number,
-    "total": PropTypes.number,
-    "year": PropTypes.number,
+    "age": PropTypes.number.isRequired,
+    "country": _Country.isRequired,
+    "females": PropTypes.number.isRequired,
+    "males": PropTypes.number.isRequired,
+    "total": PropTypes.number.isRequired,
+    "year": PropTypes.number.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/misc/f6a65.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/f6a65.json/default/toplevel.js
index 289d8c4..2ca5e69 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/f6a65.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/f6a65.json/default/toplevel.js
@@ -22,104 +22,104 @@ let _Looping;
 let _User;
 let _Meta;
 let _Pagination;
-const _Rating = PropTypes.oneOfType(['g', 'y', 'pg', 'pg13']);
-const _Type = PropTypes.oneOfType(['gif']);
-const _Username = PropTypes.oneOfType(['empty', 'producthunt', 'meetaiko', 'cheezburger']);
+const _Rating = PropTypes.oneOf(["g", "y", "pg", "pg-13"]);
+const _Type = PropTypes.oneOf(["gif"]);
+const _Username = PropTypes.oneOf(["", "producthunt", "meetaiko", "cheezburger"]);
 _Pagination = PropTypes.shape({
-    "count": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "count": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _Meta = PropTypes.shape({
-    "msg": PropTypes.string,
-    "response_id": PropTypes.string,
-    "status": PropTypes.number,
+    "msg": PropTypes.string.isRequired,
+    "response_id": PropTypes.string.isRequired,
+    "status": PropTypes.number.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "banner_url": PropTypes.string,
-    "display_name": PropTypes.string,
-    "profile_url": PropTypes.string,
-    "twitter": PropTypes.string,
-    "username": _Username,
+    "avatar_url": PropTypes.string.isRequired,
+    "banner_url": PropTypes.string.isRequired,
+    "display_name": PropTypes.string.isRequired,
+    "profile_url": PropTypes.string.isRequired,
+    "twitter": PropTypes.string.isRequired,
+    "username": _Username.isRequired,
 });
 _Looping = PropTypes.shape({
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
 });
 _FixedHeight = PropTypes.shape({
     "frames": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "hash": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "mp4": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "mp4_size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "size": PropTypes.string,
-    "url": PropTypes.string,
-    "webp": PropTypes.string,
-    "webp_size": PropTypes.string,
-    "width": PropTypes.string,
+    "size": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "webp": PropTypes.string.isRequired,
+    "webp_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _DownsizedSmall = PropTypes.shape({
-    "height": PropTypes.string,
-    "mp4": PropTypes.string,
-    "mp4_size": PropTypes.string,
-    "width": PropTypes.string,
+    "height": PropTypes.string.isRequired,
+    "mp4": PropTypes.string.isRequired,
+    "mp4_size": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Downsized = PropTypes.shape({
-    "height": PropTypes.string,
+    "height": PropTypes.string.isRequired,
     "size": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "url": PropTypes.string,
-    "width": PropTypes.string,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.string.isRequired,
 });
 _Images = PropTypes.shape({
-    "480w_still": PropTypes.oneOfType([_Downsized, PropTypes.any]),
-    "downsized": _Downsized,
-    "downsized_large": _Downsized,
-    "downsized_medium": _Downsized,
-    "downsized_small": _DownsizedSmall,
-    "downsized_still": _Downsized,
-    "fixed_height": _FixedHeight,
-    "fixed_height_downsampled": _FixedHeight,
-    "fixed_height_small": _FixedHeight,
-    "fixed_height_small_still": _Downsized,
-    "fixed_height_still": _Downsized,
-    "fixed_width": _FixedHeight,
-    "fixed_width_downsampled": _FixedHeight,
-    "fixed_width_small": _FixedHeight,
-    "fixed_width_small_still": _Downsized,
-    "fixed_width_still": _Downsized,
-    "looping": _Looping,
-    "original": _FixedHeight,
-    "original_mp4": _DownsizedSmall,
-    "original_still": _Downsized,
-    "preview": _DownsizedSmall,
-    "preview_gif": _Downsized,
-    "preview_webp": _Downsized,
+    "480w_still": PropTypes.oneOfType([(...args) => _Downsized(...args), PropTypes.any]),
+    "downsized": (...args) => _Downsized.isRequired(...args),
+    "downsized_large": (...args) => _Downsized.isRequired(...args),
+    "downsized_medium": (...args) => _Downsized.isRequired(...args),
+    "downsized_small": (...args) => _DownsizedSmall.isRequired(...args),
+    "downsized_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_height_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_height_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_downsampled": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small": (...args) => _FixedHeight.isRequired(...args),
+    "fixed_width_small_still": (...args) => _Downsized.isRequired(...args),
+    "fixed_width_still": (...args) => _Downsized.isRequired(...args),
+    "looping": (...args) => _Looping.isRequired(...args),
+    "original": (...args) => _FixedHeight.isRequired(...args),
+    "original_mp4": (...args) => _DownsizedSmall.isRequired(...args),
+    "original_still": (...args) => _Downsized.isRequired(...args),
+    "preview": (...args) => _DownsizedSmall.isRequired(...args),
+    "preview_gif": (...args) => _Downsized.isRequired(...args),
+    "preview_webp": (...args) => _Downsized.isRequired(...args),
 });
 _Datum = PropTypes.shape({
-    "bitly_gif_url": PropTypes.string,
-    "bitly_url": PropTypes.string,
-    "content_url": PropTypes.string,
-    "embed_url": PropTypes.string,
-    "id": PropTypes.string,
-    "images": _Images,
-    "import_datetime": PropTypes.string,
-    "is_indexable": PropTypes.number,
-    "rating": _Rating,
-    "slug": PropTypes.string,
-    "source": PropTypes.string,
-    "source_post_url": PropTypes.string,
-    "source_tld": PropTypes.string,
-    "trending_datetime": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
-    "user": PropTypes.oneOfType([_User, PropTypes.any]),
-    "username": _Username,
+    "bitly_gif_url": PropTypes.string.isRequired,
+    "bitly_url": PropTypes.string.isRequired,
+    "content_url": PropTypes.string.isRequired,
+    "embed_url": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "images": (...args) => _Images.isRequired(...args),
+    "import_datetime": PropTypes.string.isRequired,
+    "is_indexable": PropTypes.number.isRequired,
+    "rating": _Rating.isRequired,
+    "slug": PropTypes.string.isRequired,
+    "source": PropTypes.string.isRequired,
+    "source_post_url": PropTypes.string.isRequired,
+    "source_tld": PropTypes.string.isRequired,
+    "trending_datetime": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": PropTypes.oneOfType([(...args) => _User(...args), PropTypes.any]),
+    "username": _Username.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(_Datum),
-    "meta": _Meta,
-    "pagination": _Pagination,
+    "data": PropTypes.arrayOf((...args) => _Datum(...args)).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
+    "pagination": (...args) => _Pagination.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/f74d5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/f74d5.json/default/toplevel.js
index b933d4a..919ff9a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/f74d5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/f74d5.json/default/toplevel.js
@@ -25,106 +25,106 @@ let _Metadata;
 let _RenderTypeConfig;
 let _Visible;
 let _Owner;
-const _TypeName = PropTypes.oneOfType(['metaData', 'number', 'text']);
+const _TypeName = PropTypes.oneOf(["meta_data", "number", "text"]);
 _Owner = PropTypes.shape({
-    "displayName": PropTypes.string,
-    "id": PropTypes.string,
-    "screenName": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "screenName": PropTypes.string.isRequired,
 });
 _Visible = PropTypes.shape({
-    "table": PropTypes.bool,
+    "table": PropTypes.bool.isRequired,
 });
 _RenderTypeConfig = PropTypes.shape({
-    "visible": _Visible,
+    "visible": (...args) => _Visible.isRequired(...args),
 });
 _Metadata = PropTypes.shape({
-    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string),
-    "rdfClass": PropTypes.string,
-    "rdfSubject": PropTypes.string,
-    "renderTypeConfig": _RenderTypeConfig,
-    "rowIdentifier": PropTypes.string,
+    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rdfClass": PropTypes.string.isRequired,
+    "rdfSubject": PropTypes.string.isRequired,
+    "renderTypeConfig": (...args) => _RenderTypeConfig.isRequired(...args),
+    "rowIdentifier": PropTypes.string.isRequired,
 });
 _License = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _Grant = PropTypes.shape({
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "inherited": PropTypes.bool,
-    "type": PropTypes.string,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "inherited": PropTypes.bool.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Query = PropTypes.shape({
 });
 _Top = PropTypes.shape({
-    "count": PropTypes.number,
-    "item": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "item": PropTypes.string.isRequired,
 });
 _CachedContents = PropTypes.shape({
     "average": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "largest": PropTypes.string,
-    "non_null": PropTypes.number,
-    "null": PropTypes.number,
-    "smallest": PropTypes.string,
+    "largest": PropTypes.string.isRequired,
+    "non_null": PropTypes.number.isRequired,
+    "null": PropTypes.number.isRequired,
+    "smallest": PropTypes.string.isRequired,
     "sum": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "top": PropTypes.arrayOf(_Top),
+    "top": PropTypes.arrayOf((...args) => _Top(...args)).isRequired,
 });
 _Column = PropTypes.shape({
-    "cachedContents": PropTypes.oneOfType([_CachedContents, PropTypes.any]),
-    "dataTypeName": _TypeName,
-    "fieldName": PropTypes.string,
+    "cachedContents": PropTypes.oneOfType([(...args) => _CachedContents(...args), PropTypes.any]),
+    "dataTypeName": _TypeName.isRequired,
+    "fieldName": PropTypes.string.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "format": _Query,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "position": PropTypes.number,
-    "renderTypeName": _TypeName,
+    "format": (...args) => _Query.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "position": PropTypes.number.isRequired,
+    "renderTypeName": _TypeName.isRequired,
     "tableColumnId": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _View = PropTypes.shape({
-    "averageRating": PropTypes.number,
-    "category": PropTypes.string,
-    "columns": PropTypes.arrayOf(_Column),
-    "createdAt": PropTypes.number,
-    "displayType": PropTypes.string,
-    "downloadCount": PropTypes.number,
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "grants": PropTypes.arrayOf(_Grant),
-    "hideFromCatalog": PropTypes.bool,
-    "hideFromDataJson": PropTypes.bool,
-    "id": PropTypes.string,
-    "indexUpdatedAt": PropTypes.number,
-    "license": _License,
-    "licenseId": PropTypes.string,
-    "locale": PropTypes.string,
-    "metadata": _Metadata,
-    "name": PropTypes.string,
-    "newBackend": PropTypes.bool,
-    "numberOfComments": PropTypes.number,
-    "oid": PropTypes.number,
-    "owner": _Owner,
-    "provenance": PropTypes.string,
-    "publicationAppendEnabled": PropTypes.bool,
-    "publicationDate": PropTypes.number,
-    "publicationGroup": PropTypes.number,
-    "publicationStage": PropTypes.string,
-    "query": _Query,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "rowClass": PropTypes.string,
-    "rowsUpdatedAt": PropTypes.number,
-    "rowsUpdatedBy": PropTypes.string,
-    "tableAuthor": _Owner,
-    "tableId": PropTypes.number,
-    "totalTimesRated": PropTypes.number,
-    "viewCount": PropTypes.number,
-    "viewLastModified": PropTypes.number,
-    "viewType": PropTypes.string,
+    "averageRating": PropTypes.number.isRequired,
+    "category": PropTypes.string.isRequired,
+    "columns": PropTypes.arrayOf((...args) => _Column(...args)).isRequired,
+    "createdAt": PropTypes.number.isRequired,
+    "displayType": PropTypes.string.isRequired,
+    "downloadCount": PropTypes.number.isRequired,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "grants": PropTypes.arrayOf((...args) => _Grant(...args)).isRequired,
+    "hideFromCatalog": PropTypes.bool.isRequired,
+    "hideFromDataJson": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "indexUpdatedAt": PropTypes.number.isRequired,
+    "license": (...args) => _License.isRequired(...args),
+    "licenseId": PropTypes.string.isRequired,
+    "locale": PropTypes.string.isRequired,
+    "metadata": (...args) => _Metadata.isRequired(...args),
+    "name": PropTypes.string.isRequired,
+    "newBackend": PropTypes.bool.isRequired,
+    "numberOfComments": PropTypes.number.isRequired,
+    "oid": PropTypes.number.isRequired,
+    "owner": (...args) => _Owner.isRequired(...args),
+    "provenance": PropTypes.string.isRequired,
+    "publicationAppendEnabled": PropTypes.bool.isRequired,
+    "publicationDate": PropTypes.number.isRequired,
+    "publicationGroup": PropTypes.number.isRequired,
+    "publicationStage": PropTypes.string.isRequired,
+    "query": (...args) => _Query.isRequired(...args),
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rowClass": PropTypes.string.isRequired,
+    "rowsUpdatedAt": PropTypes.number.isRequired,
+    "rowsUpdatedBy": PropTypes.string.isRequired,
+    "tableAuthor": (...args) => _Owner.isRequired(...args),
+    "tableId": PropTypes.number.isRequired,
+    "totalTimesRated": PropTypes.number.isRequired,
+    "viewCount": PropTypes.number.isRequired,
+    "viewLastModified": PropTypes.number.isRequired,
+    "viewType": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "view": _View,
+    "view": (...args) => _View.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string]))),
-    "meta": _Meta,
+    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string]))).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/f82d9.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/f82d9.json/default/toplevel.js
index 2959af6..992873e 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/f82d9.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/f82d9.json/default/toplevel.js
@@ -26,78 +26,78 @@ let _Responses;
 let _The200;
 let _Schema;
 let _Items;
-const _Type = PropTypes.oneOfType(['string']);
+const _Type = PropTypes.oneOf(["string"]);
 _Items = PropTypes.shape({
-    "$ref": PropTypes.string,
+    "$ref": PropTypes.string.isRequired,
 });
 _Schema = PropTypes.shape({
-    "items": _Items,
-    "type": PropTypes.string,
+    "items": (...args) => _Items.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _The200 = PropTypes.shape({
-    "description": PropTypes.string,
-    "schema": _Schema,
+    "description": PropTypes.string.isRequired,
+    "schema": (...args) => _Schema.isRequired(...args),
 });
 _Responses = PropTypes.shape({
-    "200": _The200,
+    "200": (...args) => _The200.isRequired(...args),
 });
 _Parameter = PropTypes.shape({
-    "description": PropTypes.string,
-    "format": _Type,
-    "in": PropTypes.string,
-    "name": PropTypes.string,
-    "required": PropTypes.bool,
-    "type": _Type,
+    "description": PropTypes.string.isRequired,
+    "format": _Type.isRequired,
+    "in": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "required": PropTypes.bool.isRequired,
+    "type": _Type.isRequired,
 });
 _Get = PropTypes.shape({
-    "description": PropTypes.string,
-    "parameters": PropTypes.arrayOf(_Parameter),
-    "responses": _Responses,
-    "summary": PropTypes.string,
-    "tags": PropTypes.arrayOf(PropTypes.string),
+    "description": PropTypes.string.isRequired,
+    "parameters": PropTypes.arrayOf((...args) => _Parameter(...args)).isRequired,
+    "responses": (...args) => _Responses.isRequired(...args),
+    "summary": PropTypes.string.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 _MarketResearchLibrarySearch = PropTypes.shape({
-    "get": _Get,
+    "get": (...args) => _Get.isRequired(...args),
 });
 _Paths = PropTypes.shape({
-    "/market_research_library/search": _MarketResearchLibrarySearch,
+    "/market_research_library/search": (...args) => _MarketResearchLibrarySearch.isRequired(...args),
 });
 _Info = PropTypes.shape({
-    "description": PropTypes.string,
-    "title": PropTypes.string,
-    "version": PropTypes.string,
+    "description": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "version": PropTypes.string.isRequired,
 });
 _ClickURL = PropTypes.shape({
-    "description": PropTypes.string,
-    "type": _Type,
+    "description": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
 });
 _Properties = PropTypes.shape({
-    "click_url": _ClickURL,
-    "country": _ClickURL,
-    "description": _ClickURL,
-    "expiration_date": _ClickURL,
-    "id": _ClickURL,
-    "industry": _ClickURL,
-    "report_type": _ClickURL,
-    "source_industry": _ClickURL,
-    "title": _ClickURL,
-    "url": _ClickURL,
+    "click_url": (...args) => _ClickURL.isRequired(...args),
+    "country": (...args) => _ClickURL.isRequired(...args),
+    "description": (...args) => _ClickURL.isRequired(...args),
+    "expiration_date": (...args) => _ClickURL.isRequired(...args),
+    "id": (...args) => _ClickURL.isRequired(...args),
+    "industry": (...args) => _ClickURL.isRequired(...args),
+    "report_type": (...args) => _ClickURL.isRequired(...args),
+    "source_industry": (...args) => _ClickURL.isRequired(...args),
+    "title": (...args) => _ClickURL.isRequired(...args),
+    "url": (...args) => _ClickURL.isRequired(...args),
 });
 _Report = PropTypes.shape({
-    "properties": _Properties,
+    "properties": (...args) => _Properties.isRequired(...args),
 });
 _Definitions = PropTypes.shape({
-    "Report": _Report,
+    "Report": (...args) => _Report.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "basePath": PropTypes.string,
-    "definitions": _Definitions,
-    "host": PropTypes.string,
-    "info": _Info,
-    "paths": _Paths,
-    "produces": PropTypes.arrayOf(PropTypes.string),
-    "schemes": PropTypes.arrayOf(PropTypes.string),
-    "swagger": PropTypes.string,
+    "basePath": PropTypes.string.isRequired,
+    "definitions": (...args) => _Definitions.isRequired(...args),
+    "host": PropTypes.string.isRequired,
+    "info": (...args) => _Info.isRequired(...args),
+    "paths": (...args) => _Paths.isRequired(...args),
+    "produces": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "schemes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "swagger": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/f974d.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/f974d.json/default/toplevel.js
index 8279caf..487efb6 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/f974d.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/f974d.json/default/toplevel.js
@@ -14,11 +14,11 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "block_index": PropTypes.number,
-    "hash": PropTypes.string,
-    "height": PropTypes.number,
-    "time": PropTypes.number,
-    "txIndexes": PropTypes.arrayOf(PropTypes.number),
+    "block_index": PropTypes.number.isRequired,
+    "hash": PropTypes.string.isRequired,
+    "height": PropTypes.number.isRequired,
+    "time": PropTypes.number.isRequired,
+    "txIndexes": PropTypes.arrayOf(PropTypes.number).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/faff5.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/faff5.json/default/toplevel.js
index acaaa85..52ca85c 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/faff5.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/faff5.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Response;
 _Response = PropTypes.shape({
-    "player_count": PropTypes.number,
-    "result": PropTypes.number,
+    "player_count": PropTypes.number.isRequired,
+    "result": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "response": _Response,
+    "response": (...args) => _Response.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/fcca3.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/fcca3.json/default/toplevel.js
index 5825d61..3501d9e 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/fcca3.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/fcca3.json/default/toplevel.js
@@ -40,110 +40,110 @@ let _Owner;
 let _Query;
 let _OrderBy;
 let _Expression;
-const _TypeName = PropTypes.oneOfType(['metaData', 'number', 'text']);
+const _TypeName = PropTypes.oneOf(["meta_data", "number", "text"]);
 _Expression = PropTypes.shape({
-    "columnId": PropTypes.number,
-    "type": PropTypes.string,
+    "columnId": PropTypes.number.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _OrderBy = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "expression": _Expression,
+    "ascending": PropTypes.bool.isRequired,
+    "expression": (...args) => _Expression.isRequired(...args),
 });
 _Query = PropTypes.shape({
-    "orderBys": PropTypes.arrayOf(_OrderBy),
+    "orderBys": PropTypes.arrayOf((...args) => _OrderBy(...args)).isRequired,
 });
 _Owner = PropTypes.shape({
-    "displayName": PropTypes.string,
-    "id": PropTypes.string,
-    "profileImageUrlLarge": PropTypes.string,
-    "profileImageUrlMedium": PropTypes.string,
-    "profileImageUrlSmall": PropTypes.string,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "roleName": PropTypes.string,
-    "screenName": PropTypes.string,
+    "displayName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "profileImageUrlLarge": PropTypes.string.isRequired,
+    "profileImageUrlMedium": PropTypes.string.isRequired,
+    "profileImageUrlSmall": PropTypes.string.isRequired,
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "roleName": PropTypes.string.isRequired,
+    "screenName": PropTypes.string.isRequired,
 });
 _Visible = PropTypes.shape({
-    "table": PropTypes.bool,
+    "table": PropTypes.bool.isRequired,
 });
 _RenderTypeConfig = PropTypes.shape({
-    "visible": _Visible,
+    "visible": (...args) => _Visible.isRequired(...args),
 });
 _Order = PropTypes.shape({
-    "ascending": PropTypes.bool,
-    "columnFieldName": PropTypes.string,
+    "ascending": PropTypes.bool.isRequired,
+    "columnFieldName": PropTypes.string.isRequired,
 });
 _JSONQuery = PropTypes.shape({
-    "order": PropTypes.arrayOf(_Order),
+    "order": PropTypes.arrayOf((...args) => _Order(...args)).isRequired,
 });
 _FilterConditionMetadata = PropTypes.shape({
-    "advanced": PropTypes.bool,
-    "unifiedVersion": PropTypes.number,
+    "advanced": PropTypes.bool.isRequired,
+    "unifiedVersion": PropTypes.number.isRequired,
 });
 _TableColumnID = PropTypes.shape({
-    "703610": PropTypes.number,
+    "703610": PropTypes.number.isRequired,
 });
 _ChildMetadata = PropTypes.shape({
-    "customValues": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),
-    "operator": PropTypes.string,
-    "tableColumnId": _TableColumnID,
+    "customValues": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)).isRequired,
+    "operator": PropTypes.string.isRequired,
+    "tableColumnId": (...args) => _TableColumnID.isRequired(...args),
 });
 _Child = PropTypes.shape({
-    "metadata": _ChildMetadata,
-    "type": PropTypes.string,
-    "value": PropTypes.string,
+    "metadata": (...args) => _ChildMetadata.isRequired(...args),
+    "type": PropTypes.string.isRequired,
+    "value": PropTypes.string.isRequired,
 });
 _FilterCondition = PropTypes.shape({
-    "children": PropTypes.arrayOf(_Child),
-    "metadata": _FilterConditionMetadata,
-    "type": PropTypes.string,
-    "value": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "metadata": (...args) => _FilterConditionMetadata.isRequired(...args),
+    "type": PropTypes.string.isRequired,
+    "value": PropTypes.string.isRequired,
 });
 _Disclaimers = PropTypes.shape({
-    "Disclaimer": PropTypes.string,
-    "Limitations": PropTypes.string,
+    "Disclaimer": PropTypes.string.isRequired,
+    "Limitations": PropTypes.string.isRequired,
 });
 _DatasetSummary = PropTypes.shape({
-    "Contact Information": PropTypes.string,
-    "Coverage": PropTypes.string,
-    "Granularity": PropTypes.string,
-    "Organization": PropTypes.string,
-    "Posting Frequency": PropTypes.string,
-    "Time Period": PropTypes.string,
+    "Contact Information": PropTypes.string.isRequired,
+    "Coverage": PropTypes.string.isRequired,
+    "Granularity": PropTypes.string.isRequired,
+    "Organization": PropTypes.string.isRequired,
+    "Posting Frequency": PropTypes.string.isRequired,
+    "Time Period": PropTypes.string.isRequired,
 });
 _DatasetInformation = PropTypes.shape({
-    "Agency": PropTypes.string,
+    "Agency": PropTypes.string.isRequired,
 });
 _CommonCore = PropTypes.shape({
-    "Contact Email": PropTypes.string,
-    "Contact Name": PropTypes.string,
-    "Publisher": PropTypes.string,
+    "Contact Email": PropTypes.string.isRequired,
+    "Contact Name": PropTypes.string.isRequired,
+    "Publisher": PropTypes.string.isRequired,
 });
 _CustomFields = PropTypes.shape({
-    "Common Core": _CommonCore,
-    "Dataset Information": _DatasetInformation,
-    "Dataset Summary": _DatasetSummary,
-    "Disclaimers": _Disclaimers,
+    "Common Core": (...args) => _CommonCore.isRequired(...args),
+    "Dataset Information": (...args) => _DatasetInformation.isRequired(...args),
+    "Dataset Summary": (...args) => _DatasetSummary.isRequired(...args),
+    "Disclaimers": (...args) => _Disclaimers.isRequired(...args),
 });
 _Attachment = PropTypes.shape({
-    "assetId": PropTypes.string,
-    "blobId": PropTypes.string,
-    "filename": PropTypes.string,
-    "name": PropTypes.string,
+    "assetId": PropTypes.string.isRequired,
+    "blobId": PropTypes.string.isRequired,
+    "filename": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _ViewMetadata = PropTypes.shape({
-    "attachments": PropTypes.arrayOf(_Attachment),
-    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string),
-    "custom_fields": _CustomFields,
-    "filterCondition": _FilterCondition,
-    "jsonQuery": _JSONQuery,
-    "rdfSubject": PropTypes.string,
-    "renderTypeConfig": _RenderTypeConfig,
-    "rowLabel": PropTypes.string,
+    "attachments": PropTypes.arrayOf((...args) => _Attachment(...args)).isRequired,
+    "availableDisplayTypes": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "custom_fields": (...args) => _CustomFields.isRequired(...args),
+    "filterCondition": (...args) => _FilterCondition.isRequired(...args),
+    "jsonQuery": (...args) => _JSONQuery.isRequired(...args),
+    "rdfSubject": PropTypes.string.isRequired,
+    "renderTypeConfig": (...args) => _RenderTypeConfig.isRequired(...args),
+    "rowLabel": PropTypes.string.isRequired,
 });
 _Grant = PropTypes.shape({
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "inherited": PropTypes.bool,
-    "type": PropTypes.string,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "inherited": PropTypes.bool.isRequired,
+    "type": PropTypes.string.isRequired,
 });
 _Format = PropTypes.shape({
     "align": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -151,77 +151,77 @@ _Format = PropTypes.shape({
     "precisionStyle": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Top = PropTypes.shape({
-    "count": PropTypes.number,
-    "item": PropTypes.string,
+    "count": PropTypes.number.isRequired,
+    "item": PropTypes.string.isRequired,
 });
 _CachedContents = PropTypes.shape({
     "average": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "largest": PropTypes.string,
-    "non_null": PropTypes.number,
-    "null": PropTypes.number,
-    "smallest": PropTypes.string,
+    "largest": PropTypes.string.isRequired,
+    "non_null": PropTypes.number.isRequired,
+    "null": PropTypes.number.isRequired,
+    "smallest": PropTypes.string.isRequired,
     "sum": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "top": PropTypes.arrayOf(_Top),
+    "top": PropTypes.arrayOf((...args) => _Top(...args)).isRequired,
 });
 _Column = PropTypes.shape({
-    "cachedContents": PropTypes.oneOfType([_CachedContents, PropTypes.any]),
-    "dataTypeName": _TypeName,
+    "cachedContents": PropTypes.oneOfType([(...args) => _CachedContents(...args), PropTypes.any]),
+    "dataTypeName": _TypeName.isRequired,
     "description": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "fieldName": PropTypes.string,
+    "fieldName": PropTypes.string.isRequired,
     "flags": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.any]),
-    "format": _Format,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "position": PropTypes.number,
-    "renderTypeName": _TypeName,
+    "format": (...args) => _Format.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "position": PropTypes.number.isRequired,
+    "renderTypeName": _TypeName.isRequired,
     "tableColumnId": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "width": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _View = PropTypes.shape({
-    "attribution": PropTypes.string,
-    "averageRating": PropTypes.number,
-    "category": PropTypes.string,
-    "columns": PropTypes.arrayOf(_Column),
-    "createdAt": PropTypes.number,
-    "description": PropTypes.string,
-    "displayType": PropTypes.string,
-    "downloadCount": PropTypes.number,
-    "flags": PropTypes.arrayOf(PropTypes.string),
-    "grants": PropTypes.arrayOf(_Grant),
-    "hideFromCatalog": PropTypes.bool,
-    "hideFromDataJson": PropTypes.bool,
-    "id": PropTypes.string,
-    "indexUpdatedAt": PropTypes.number,
-    "locale": PropTypes.string,
-    "metadata": _ViewMetadata,
-    "name": PropTypes.string,
-    "newBackend": PropTypes.bool,
-    "numberOfComments": PropTypes.number,
-    "oid": PropTypes.number,
-    "owner": _Owner,
-    "provenance": PropTypes.string,
-    "publicationAppendEnabled": PropTypes.bool,
-    "publicationDate": PropTypes.number,
-    "publicationGroup": PropTypes.number,
-    "publicationStage": PropTypes.string,
-    "query": _Query,
-    "rights": PropTypes.arrayOf(PropTypes.string),
-    "rowsUpdatedAt": PropTypes.number,
-    "rowsUpdatedBy": PropTypes.string,
-    "tableAuthor": _Owner,
-    "tableId": PropTypes.number,
-    "tags": PropTypes.arrayOf(PropTypes.string),
-    "totalTimesRated": PropTypes.number,
-    "viewCount": PropTypes.number,
-    "viewLastModified": PropTypes.number,
-    "viewType": PropTypes.string,
+    "attribution": PropTypes.string.isRequired,
+    "averageRating": PropTypes.number.isRequired,
+    "category": PropTypes.string.isRequired,
+    "columns": PropTypes.arrayOf((...args) => _Column(...args)).isRequired,
+    "createdAt": PropTypes.number.isRequired,
+    "description": PropTypes.string.isRequired,
+    "displayType": PropTypes.string.isRequired,
+    "downloadCount": PropTypes.number.isRequired,
+    "flags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "grants": PropTypes.arrayOf((...args) => _Grant(...args)).isRequired,
+    "hideFromCatalog": PropTypes.bool.isRequired,
+    "hideFromDataJson": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "indexUpdatedAt": PropTypes.number.isRequired,
+    "locale": PropTypes.string.isRequired,
+    "metadata": (...args) => _ViewMetadata.isRequired(...args),
+    "name": PropTypes.string.isRequired,
+    "newBackend": PropTypes.bool.isRequired,
+    "numberOfComments": PropTypes.number.isRequired,
+    "oid": PropTypes.number.isRequired,
+    "owner": (...args) => _Owner.isRequired(...args),
+    "provenance": PropTypes.string.isRequired,
+    "publicationAppendEnabled": PropTypes.bool.isRequired,
+    "publicationDate": PropTypes.number.isRequired,
+    "publicationGroup": PropTypes.number.isRequired,
+    "publicationStage": PropTypes.string.isRequired,
+    "query": (...args) => _Query.isRequired(...args),
+    "rights": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "rowsUpdatedAt": PropTypes.number.isRequired,
+    "rowsUpdatedBy": PropTypes.string.isRequired,
+    "tableAuthor": (...args) => _Owner.isRequired(...args),
+    "tableId": PropTypes.number.isRequired,
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "totalTimesRated": PropTypes.number.isRequired,
+    "viewCount": PropTypes.number.isRequired,
+    "viewLastModified": PropTypes.number.isRequired,
+    "viewType": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "view": _View,
+    "view": (...args) => _View.isRequired(...args),
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))),
-    "meta": _Meta,
+    "data": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]))).isRequired,
+    "meta": (...args) => _Meta.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/misc/fd329.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/misc/fd329.json/default/toplevel.js
index e95d109..7f6dd0a 100644
--- a/base/javascript-prop-types/test/inputs/json/misc/fd329.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/misc/fd329.json/default/toplevel.js
@@ -16,18 +16,18 @@ let _TopLevel;
 let _Datum;
 let _Description;
 _Description = PropTypes.shape({
-    "base_period": PropTypes.string,
-    "missing": PropTypes.number,
-    "title": PropTypes.string,
-    "units": PropTypes.string,
+    "base_period": PropTypes.string.isRequired,
+    "missing": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "units": PropTypes.string.isRequired,
 });
 _Datum = PropTypes.shape({
-    "anomaly": PropTypes.string,
-    "value": PropTypes.string,
+    "anomaly": PropTypes.string.isRequired,
+    "value": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.object,
-    "description": _Description,
+    "data": PropTypes.object.isRequired,
+    "description": (...args) => _Description.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/blns-object.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/blns-object.json/default/toplevel.js
index 7d92a09..06a2000 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/blns-object.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/blns-object.json/default/toplevel.js
@@ -17,599 +17,599 @@ let _A;
 let _B;
 let _C;
 _C = PropTypes.shape({
-    "\"\"": PropTypes.string,
-    "\"'\"'\"''''\"": PropTypes.string,
-    "\"''''\"'\"": PropTypes.string,
-    "\"`'><script>-javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x0Ajavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x0Bjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x20javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x2Bjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x7Ejavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x80javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x82javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x83javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x84javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x88javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x8Bjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xEF\\xBF\\xAEjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xEF\\xBF\\xBEjavascript:alert(1)</script>": PropTypes.string,
-    "#\tEmoji": PropTypes.string,
-    "#\tRight-To-Left Strings": PropTypes.string,
-    "#\tServer Code Injection": PropTypes.string,
-    "#\tSpecial Characters": PropTypes.string,
-    "#\tStrings which can be interpreted as numeric": PropTypes.string,
-    "#\tStrings which can cause a SQL injection if inputs are not sanitized": PropTypes.string,
-    "#\tStrings which can cause user to pull in files that should not be a part of a web server": PropTypes.string,
-    "#\tStrings which can cause user to run code on server as a privileged user (c.f. https://news.ycombinator.com/item?id=7665153)": PropTypes.string,
-    "#\tStrings which contain \"corrupted\" text. The corruption will not appear in non-HTML text, however. (via http://www.eeemo.net)": PropTypes.string,
-    "#\tStrings which contain unicode with an \"upsidedown\" effect (via http://www.upsidedowntext.com)": PropTypes.string,
-    "#\tStrings which contain unicode with unusual properties (e.g. Right-to-left override) (c.f. http://www.unicode.org/charts/PDF/U2000.pdf)": PropTypes.string,
-    "#\tStrings which punish the fools who use cat/type on this file": PropTypes.string,
-    "#\tTrick Unicode": PropTypes.string,
-    "#\tUnicode Subscript/Superscript/Accents": PropTypes.string,
-    "#\tUnicode Upsidedown": PropTypes.string,
-    "#\tZalgo Text": PropTypes.string,
-    "#      XXE Injection (XML)": PropTypes.string,
-    "# ASCII punctuation.  All of these characters may need to be escaped in some": PropTypes.string,
-    "# Non-whitespace C0 controls: U+0001 through U+0008, U+000E through U+001F,": PropTypes.string,
-    "# Unicode additional control characters: all of the characters with": PropTypes.string,
-    "# Whitespace: all of the characters with category Zs, Zl, or Zp (in Unicode": PropTypes.string,
-    "# and U+007F (DEL)": PropTypes.string,
-    "# or reused for internal delimiters on the theory that they should never": PropTypes.string,
-    "# treated as whitespace in some contexts.": PropTypes.string,
-    "# version 8.0.0), plus U+0009 (HT), U+000B (VT), U+000C (FF), U+0085 (NEL),": PropTypes.string,
-    "$USER": PropTypes.string,
-    "%": PropTypes.string,
-    "%*.*s": PropTypes.string,
-    "&lt;script&gt;alert(&#39;123&#39;);&lt;/script&gt;": PropTypes.string,
-    "' onfocus=JaVaSCript:alert(123) autofocus": PropTypes.string,
-    "''": PropTypes.string,
-    "'><script>alert(123);</script x='": PropTypes.string,
-    "'><script>alert(123)</script>": PropTypes.string,
-    "() { 0; }; touch /tmp/blns.shellshock1.fail;": PropTypes.string,
-    "(ﾉಥ益ಥ）ﾉ\ufeff ┻━┻": PropTypes.string,
-    "+0.0": PropTypes.string,
-    ",。・:*:・゜’( ☻ ω ☻ )。・:*:・゜’": PropTypes.string,
-    "-": PropTypes.string,
-    "-$1.00": PropTypes.string,
-    "--": PropTypes.string,
-    "--1": PropTypes.string,
-    "--version": PropTypes.string,
-    "-0.0": PropTypes.string,
-    "-1#IND": PropTypes.string,
-    "-1.00": PropTypes.string,
-    "-1/2": PropTypes.string,
-    "-1E+02": PropTypes.string,
-    "-1E2": PropTypes.string,
-    "-9223372036854775808/-1": PropTypes.string,
-    ".": PropTypes.string,
-    "0,,0": PropTypes.string,
-    "0.0.0": PropTypes.string,
-    "0.0/0": PropTypes.string,
-    "0/0": PropTypes.string,
-    "0xabad1dea": PropTypes.string,
-    "0xffffffff": PropTypes.string,
-    "0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ \ud83d\udd1f": PropTypes.string,
-    "1 000,00": PropTypes.string,
-    "1'000'000,00": PropTypes.string,
-    "1,000,000.00": PropTypes.string,
-    "1,000.00": PropTypes.string,
-    "1.000,00": PropTypes.string,
-    "1.000.000,00": PropTypes.string,
-    "1E+02": PropTypes.string,
-    "< / script >< script >alert(123)< / script >": PropTypes.string,
-    "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY xxe SYSTEM \"file:///etc/passwd\" >]><foo>&xxe;</foo>": PropTypes.string,
-    "<BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"XSS\")>": PropTypes.string,
-    "<IMG \"\"\"><SCRIPT>alert(\"XSS\")</SCRIPT>\">": PropTypes.string,
-    "<IMG SRC=\"javascript:alert('XSS')\"": PropTypes.string,
-    "<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>": PropTypes.string,
-    "<IMG onmouseover=\"alert('xxs')\">": PropTypes.string,
-    "<a href=\"\\x00javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x03javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x06javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x07javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x0Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x12javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x14javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x15javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x18javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x1Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x1Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x20javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x85javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x88javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x89javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x8Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x81\\x9Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE3\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<foo val=“bar” />": PropTypes.string,
-    "<i onwheel=alert(1)> Scroll over me </i>": PropTypes.string,
-    "<img \\x34src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src onerror /\" '\"= alt=javascript:alert(1)//\">": PropTypes.string,
-    "<img src=\"x` `<script>javascript:alert(1)</script>\"` `>": PropTypes.string,
-    "<img src=x onerror=\\x10\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x onerror=\\x32\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x onerror=alert(123) />": PropTypes.string,
-    "<img src\\x10=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src\\x12=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src\\x13=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src\\x32=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src\\x47=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img[a][b][c]src[d]=x[e]onerror=[f]\"alert(1)\">": PropTypes.string,
-    "<img\\x11src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img\\x47src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<plaintext>": PropTypes.string,
-    "<script src=\"/\\%(jscript)s\"></script>": PropTypes.string,
-    "<script\\x0Ctype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string,
-    "<script\\x2Ftype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string,
-    "<svg><script>123<1>alert(123)</script>": PropTypes.string,
-    "<title onpropertychange=javascript:alert(1)></title><title title=>": PropTypes.string,
-    "><script>alert(123)</script>": PropTypes.string,
-    "@{[system \"touch /tmp/blns.fail\"]}": PropTypes.string,
-    "A:": PropTypes.string,
-    "ABC<div style=\"x:\\x00expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\x0Cexpression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x81expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x86expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x88expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE3\\x80\\x80expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xEF\\xBB\\xBFexpression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:expression\\x00(javascript:alert(1)\">DEF": PropTypes.string,
-    "CLOCK$": PropTypes.string,
-    "COM2": PropTypes.string,
-    "COM4": PropTypes.string,
-    "Craig Cockburn, Software Specialist": PropTypes.string,
-    "DCC SEND STARTKEYLOGGER 0 0 0": PropTypes.string,
-    "Horniman Museum": PropTypes.string,
-    "Infinity": PropTypes.string,
-    "JavaSCript:alert(123)": PropTypes.string,
-    "LPT1": PropTypes.string,
-    "NULL": PropTypes.string,
-    "NaN": PropTypes.string,
-    "Powerلُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ冗": PropTypes.string,
-    "Roses are \u001b[0;31mred\u001b[0m, violets are \u001b[0;34mblue. Hope you enjoy terminal hue": PropTypes.string,
-    "Scunthorpe General Hospital": PropTypes.string,
-    "System(\"ls -al /\")": PropTypes.string,
-    "ZZ:": PropTypes.string,
-    "\\\\": PropTypes.string,
-    "_": PropTypes.string,
-    "`\"'><img src=xxx:x \\x09onerror=javascript:alert(1)>": PropTypes.string,
-    "`\"'><img src=xxx:x \\x20onerror=javascript:alert(1)>": PropTypes.string,
-    "`\"'><img src=xxx:x \\x22onerror=javascript:alert(1)>": PropTypes.string,
-    "`\"'><img src=xxx:x \\x27onerror=javascript:alert(1)>": PropTypes.string,
-    "dontMakeAMap": PropTypes.bool,
-    "evaluate": PropTypes.string,
-    "hasOwnProperty": PropTypes.string,
-    "http://www.cum.qc.ca/": PropTypes.string,
-    "magna cum laude": PropTypes.string,
-    "medieval erection of parapets": PropTypes.string,
-    "mocha": PropTypes.string,
-    "shitake mushrooms": PropTypes.string,
-    "src=JaVaSCript:prompt(132)": PropTypes.string,
-    "test\u2060test\u202b": PropTypes.string,
-    "true": PropTypes.string,
-    "undefined": PropTypes.string,
-    "ÅÍÎÏ˝ÓÔ\uf8ffÒÚÆ☃": PropTypes.string,
-    "̗̺͖̹̯͓Ṯ̤͍̥͇͈h̲́e͏͓̼̗̙̼̣͔ ͇̜̱̠͓͍ͅN͕͠e̗̱z̘̝̜̺͙p̤̺̹͍̯͚e̠̻̠͜r̨̤͍̺̖͔̖̖d̠̟̭̬̝͟i̦͖̩͓͔̤a̠̗̬͉̙n͚͜ ̻̞̰͚ͅh̵͉i̳̞v̢͇ḙ͎͟-҉̭̩̼͔m̤̭̫i͕͇̝̦n̗͙ḍ̟ ̯̲͕͞ǫ̟̯̰̲͙̻̝f ̪̰̰̗̖̭̘͘c̦͍̲̞͍̩̙ḥ͚a̮͎̟̙͜ơ̩̹͎s̤.̝̝ ҉Z̡̖̜͖̰̣͉̜a͖̰͙̬͡l̲̫̳͍̩g̡̟̼̱͚̞̬ͅo̗͜.̟": PropTypes.string,
-    "ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя": PropTypes.string,
-    "בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ": PropTypes.string,
-    "مُنَاقَشَةُ سُبُلِ اِسْتِخْدَامِ اللُّغَةِ فِي النُّظُمِ الْقَائِمَةِ وَفِيم يَخُصَّ التَّطْبِيقَاتُ الْحاسُوبِيَّةُ، ": PropTypes.string,
-    "١٢٣": PropTypes.string,
-    "\u2029test\u2029": PropTypes.string,
-    "⁰⁴⁵": PropTypes.string,
-    "⅛⅜⅝⅞": PropTypes.string,
-    "┬─┬ノ( º _ ºノ)": PropTypes.string,
-    "✋\ud83c\udfff \ud83d\udcaa\ud83c\udfff \ud83d\udc50\ud83c\udfff \ud83d\ude4c\ud83c\udfff \ud83d\udc4f\ud83c\udfff \ud83d\ude4f\ud83c\udfff": PropTypes.string,
-    "・(￣∀￣)・:*:": PropTypes.string,
-    "울란바토르": PropTypes.string,
-    "\ud835\udc13\ud835\udc21\ud835\udc1e \ud835\udc2a\ud835\udc2e\ud835\udc22\ud835\udc1c\ud835\udc24 \ud835\udc1b\ud835\udc2b\ud835\udc28\ud835\udc30\ud835\udc27 \ud835\udc1f\ud835\udc28\ud835\udc31 \ud835\udc23\ud835\udc2e\ud835\udc26\ud835\udc29\ud835\udc2c \ud835\udc28\ud835\udc2f\ud835\udc1e\ud835\udc2b \ud835\udc2d\ud835\udc21\ud835\udc1e \ud835\udc25\ud835\udc1a\ud835\udc33\ud835\udc32 \ud835\udc1d\ud835\udc28\ud835\udc20": PropTypes.string,
-    "\ud835\ude83\ud835\ude91\ud835\ude8e \ud835\ude9a\ud835\ude9e\ud835\ude92\ud835\ude8c\ud835\ude94 \ud835\ude8b\ud835\ude9b\ud835\ude98\ud835\udea0\ud835\ude97 \ud835\ude8f\ud835\ude98\ud835\udea1 \ud835\ude93\ud835\ude9e\ud835\ude96\ud835\ude99\ud835\ude9c \ud835\ude98\ud835\ude9f\ud835\ude8e\ud835\ude9b \ud835\ude9d\ud835\ude91\ud835\ude8e \ud835\ude95\ud835\ude8a\ud835\udea3\ud835\udea2 \ud835\ude8d\ud835\ude98\ud835\ude90": PropTypes.string,
-    "\ud83c\udff30\ud83c\udf08️": PropTypes.string,
-    "\ud83d\udc35 \ud83d\ude48 \ud83d\ude49 \ud83d\ude4a": PropTypes.string,
-    "\ud83d\udc7e \ud83d\ude47 \ud83d\udc81 \ud83d\ude45 \ud83d\ude46 \ud83d\ude4b \ud83d\ude4e \ud83d\ude4d": PropTypes.string,
-    "\ud841\udf0e\ud841\udf31\ud841\udf79\ud843\udc53\ud843\udc78\ud843\udc96\ud843\udccf": PropTypes.string,
-    "＜script＞alert(123)＜/script＞": PropTypes.string,
-    "Ｔｈｅ ｑｕｉｃｋ ｂｒｏｗｎ ｆｏｘ ｊｕｍｐｓ ｏｖｅｒ ｔｈｅ ｌａｚｙ ｄｏｇ": PropTypes.string,
+    "\"\"": PropTypes.string.isRequired,
+    "\"'\"'\"''''\"": PropTypes.string.isRequired,
+    "\"''''\"'\"": PropTypes.string.isRequired,
+    "\"`'><script>-javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x0Ajavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x0Bjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x20javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x2Bjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x7Ejavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x80javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x82javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x83javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x84javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x88javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x8Bjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xEF\\xBF\\xAEjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xEF\\xBF\\xBEjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "#\tEmoji": PropTypes.string.isRequired,
+    "#\tRight-To-Left Strings": PropTypes.string.isRequired,
+    "#\tServer Code Injection": PropTypes.string.isRequired,
+    "#\tSpecial Characters": PropTypes.string.isRequired,
+    "#\tStrings which can be interpreted as numeric": PropTypes.string.isRequired,
+    "#\tStrings which can cause a SQL injection if inputs are not sanitized": PropTypes.string.isRequired,
+    "#\tStrings which can cause user to pull in files that should not be a part of a web server": PropTypes.string.isRequired,
+    "#\tStrings which can cause user to run code on server as a privileged user (c.f. https://news.ycombinator.com/item?id=7665153)": PropTypes.string.isRequired,
+    "#\tStrings which contain \"corrupted\" text. The corruption will not appear in non-HTML text, however. (via http://www.eeemo.net)": PropTypes.string.isRequired,
+    "#\tStrings which contain unicode with an \"upsidedown\" effect (via http://www.upsidedowntext.com)": PropTypes.string.isRequired,
+    "#\tStrings which contain unicode with unusual properties (e.g. Right-to-left override) (c.f. http://www.unicode.org/charts/PDF/U2000.pdf)": PropTypes.string.isRequired,
+    "#\tStrings which punish the fools who use cat/type on this file": PropTypes.string.isRequired,
+    "#\tTrick Unicode": PropTypes.string.isRequired,
+    "#\tUnicode Subscript/Superscript/Accents": PropTypes.string.isRequired,
+    "#\tUnicode Upsidedown": PropTypes.string.isRequired,
+    "#\tZalgo Text": PropTypes.string.isRequired,
+    "#      XXE Injection (XML)": PropTypes.string.isRequired,
+    "# ASCII punctuation.  All of these characters may need to be escaped in some": PropTypes.string.isRequired,
+    "# Non-whitespace C0 controls: U+0001 through U+0008, U+000E through U+001F,": PropTypes.string.isRequired,
+    "# Unicode additional control characters: all of the characters with": PropTypes.string.isRequired,
+    "# Whitespace: all of the characters with category Zs, Zl, or Zp (in Unicode": PropTypes.string.isRequired,
+    "# and U+007F (DEL)": PropTypes.string.isRequired,
+    "# or reused for internal delimiters on the theory that they should never": PropTypes.string.isRequired,
+    "# treated as whitespace in some contexts.": PropTypes.string.isRequired,
+    "# version 8.0.0), plus U+0009 (HT), U+000B (VT), U+000C (FF), U+0085 (NEL),": PropTypes.string.isRequired,
+    "$USER": PropTypes.string.isRequired,
+    "%": PropTypes.string.isRequired,
+    "%*.*s": PropTypes.string.isRequired,
+    "&lt;script&gt;alert(&#39;123&#39;);&lt;/script&gt;": PropTypes.string.isRequired,
+    "' onfocus=JaVaSCript:alert(123) autofocus": PropTypes.string.isRequired,
+    "''": PropTypes.string.isRequired,
+    "'><script>alert(123);</script x='": PropTypes.string.isRequired,
+    "'><script>alert(123)</script>": PropTypes.string.isRequired,
+    "() { 0; }; touch /tmp/blns.shellshock1.fail;": PropTypes.string.isRequired,
+    "(ﾉಥ益ಥ）ﾉ\ufeff ┻━┻": PropTypes.string.isRequired,
+    "+0.0": PropTypes.string.isRequired,
+    ",。・:*:・゜’( ☻ ω ☻ )。・:*:・゜’": PropTypes.string.isRequired,
+    "-": PropTypes.string.isRequired,
+    "-$1.00": PropTypes.string.isRequired,
+    "--": PropTypes.string.isRequired,
+    "--1": PropTypes.string.isRequired,
+    "--version": PropTypes.string.isRequired,
+    "-0.0": PropTypes.string.isRequired,
+    "-1#IND": PropTypes.string.isRequired,
+    "-1.00": PropTypes.string.isRequired,
+    "-1/2": PropTypes.string.isRequired,
+    "-1E+02": PropTypes.string.isRequired,
+    "-1E2": PropTypes.string.isRequired,
+    "-9223372036854775808/-1": PropTypes.string.isRequired,
+    ".": PropTypes.string.isRequired,
+    "0,,0": PropTypes.string.isRequired,
+    "0.0.0": PropTypes.string.isRequired,
+    "0.0/0": PropTypes.string.isRequired,
+    "0/0": PropTypes.string.isRequired,
+    "0xabad1dea": PropTypes.string.isRequired,
+    "0xffffffff": PropTypes.string.isRequired,
+    "0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ \ud83d\udd1f": PropTypes.string.isRequired,
+    "1 000,00": PropTypes.string.isRequired,
+    "1'000'000,00": PropTypes.string.isRequired,
+    "1,000,000.00": PropTypes.string.isRequired,
+    "1,000.00": PropTypes.string.isRequired,
+    "1.000,00": PropTypes.string.isRequired,
+    "1.000.000,00": PropTypes.string.isRequired,
+    "1E+02": PropTypes.string.isRequired,
+    "< / script >< script >alert(123)< / script >": PropTypes.string.isRequired,
+    "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY xxe SYSTEM \"file:///etc/passwd\" >]><foo>&xxe;</foo>": PropTypes.string.isRequired,
+    "<BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"XSS\")>": PropTypes.string.isRequired,
+    "<IMG \"\"\"><SCRIPT>alert(\"XSS\")</SCRIPT>\">": PropTypes.string.isRequired,
+    "<IMG SRC=\"javascript:alert('XSS')\"": PropTypes.string.isRequired,
+    "<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>": PropTypes.string.isRequired,
+    "<IMG onmouseover=\"alert('xxs')\">": PropTypes.string.isRequired,
+    "<a href=\"\\x00javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x03javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x06javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x07javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x0Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x12javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x14javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x15javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x18javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x1Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x1Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x20javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x85javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x88javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x89javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x8Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x81\\x9Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE3\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<foo val=“bar” />": PropTypes.string.isRequired,
+    "<i onwheel=alert(1)> Scroll over me </i>": PropTypes.string.isRequired,
+    "<img \\x34src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src onerror /\" '\"= alt=javascript:alert(1)//\">": PropTypes.string.isRequired,
+    "<img src=\"x` `<script>javascript:alert(1)</script>\"` `>": PropTypes.string.isRequired,
+    "<img src=x onerror=\\x10\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x onerror=\\x32\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x onerror=alert(123) />": PropTypes.string.isRequired,
+    "<img src\\x10=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src\\x12=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src\\x13=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src\\x32=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src\\x47=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img[a][b][c]src[d]=x[e]onerror=[f]\"alert(1)\">": PropTypes.string.isRequired,
+    "<img\\x11src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img\\x47src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<plaintext>": PropTypes.string.isRequired,
+    "<script src=\"/\\%(jscript)s\"></script>": PropTypes.string.isRequired,
+    "<script\\x0Ctype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string.isRequired,
+    "<script\\x2Ftype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string.isRequired,
+    "<svg><script>123<1>alert(123)</script>": PropTypes.string.isRequired,
+    "<title onpropertychange=javascript:alert(1)></title><title title=>": PropTypes.string.isRequired,
+    "><script>alert(123)</script>": PropTypes.string.isRequired,
+    "@{[system \"touch /tmp/blns.fail\"]}": PropTypes.string.isRequired,
+    "A:": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\x00expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\x0Cexpression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x81expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x86expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x88expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE3\\x80\\x80expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xEF\\xBB\\xBFexpression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:expression\\x00(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "CLOCK$": PropTypes.string.isRequired,
+    "COM2": PropTypes.string.isRequired,
+    "COM4": PropTypes.string.isRequired,
+    "Craig Cockburn, Software Specialist": PropTypes.string.isRequired,
+    "DCC SEND STARTKEYLOGGER 0 0 0": PropTypes.string.isRequired,
+    "Horniman Museum": PropTypes.string.isRequired,
+    "Infinity": PropTypes.string.isRequired,
+    "JavaSCript:alert(123)": PropTypes.string.isRequired,
+    "LPT1": PropTypes.string.isRequired,
+    "NULL": PropTypes.string.isRequired,
+    "NaN": PropTypes.string.isRequired,
+    "Powerلُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ冗": PropTypes.string.isRequired,
+    "Roses are \u001b[0;31mred\u001b[0m, violets are \u001b[0;34mblue. Hope you enjoy terminal hue": PropTypes.string.isRequired,
+    "Scunthorpe General Hospital": PropTypes.string.isRequired,
+    "System(\"ls -al /\")": PropTypes.string.isRequired,
+    "ZZ:": PropTypes.string.isRequired,
+    "\\\\": PropTypes.string.isRequired,
+    "_": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x09onerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x20onerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x22onerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x27onerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "dontMakeAMap": PropTypes.bool.isRequired,
+    "evaluate": PropTypes.string.isRequired,
+    "hasOwnProperty": PropTypes.string.isRequired,
+    "http://www.cum.qc.ca/": PropTypes.string.isRequired,
+    "magna cum laude": PropTypes.string.isRequired,
+    "medieval erection of parapets": PropTypes.string.isRequired,
+    "mocha": PropTypes.string.isRequired,
+    "shitake mushrooms": PropTypes.string.isRequired,
+    "src=JaVaSCript:prompt(132)": PropTypes.string.isRequired,
+    "test\u2060test\u202b": PropTypes.string.isRequired,
+    "true": PropTypes.string.isRequired,
+    "undefined": PropTypes.string.isRequired,
+    "ÅÍÎÏ˝ÓÔ\uf8ffÒÚÆ☃": PropTypes.string.isRequired,
+    "̗̺͖̹̯͓Ṯ̤͍̥͇͈h̲́e͏͓̼̗̙̼̣͔ ͇̜̱̠͓͍ͅN͕͠e̗̱z̘̝̜̺͙p̤̺̹͍̯͚e̠̻̠͜r̨̤͍̺̖͔̖̖d̠̟̭̬̝͟i̦͖̩͓͔̤a̠̗̬͉̙n͚͜ ̻̞̰͚ͅh̵͉i̳̞v̢͇ḙ͎͟-҉̭̩̼͔m̤̭̫i͕͇̝̦n̗͙ḍ̟ ̯̲͕͞ǫ̟̯̰̲͙̻̝f ̪̰̰̗̖̭̘͘c̦͍̲̞͍̩̙ḥ͚a̮͎̟̙͜ơ̩̹͎s̤.̝̝ ҉Z̡̖̜͖̰̣͉̜a͖̰͙̬͡l̲̫̳͍̩g̡̟̼̱͚̞̬ͅo̗͜.̟": PropTypes.string.isRequired,
+    "ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя": PropTypes.string.isRequired,
+    "בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ": PropTypes.string.isRequired,
+    "مُنَاقَشَةُ سُبُلِ اِسْتِخْدَامِ اللُّغَةِ فِي النُّظُمِ الْقَائِمَةِ وَفِيم يَخُصَّ التَّطْبِيقَاتُ الْحاسُوبِيَّةُ، ": PropTypes.string.isRequired,
+    "١٢٣": PropTypes.string.isRequired,
+    "\u2029test\u2029": PropTypes.string.isRequired,
+    "⁰⁴⁵": PropTypes.string.isRequired,
+    "⅛⅜⅝⅞": PropTypes.string.isRequired,
+    "┬─┬ノ( º _ ºノ)": PropTypes.string.isRequired,
+    "✋\ud83c\udfff \ud83d\udcaa\ud83c\udfff \ud83d\udc50\ud83c\udfff \ud83d\ude4c\ud83c\udfff \ud83d\udc4f\ud83c\udfff \ud83d\ude4f\ud83c\udfff": PropTypes.string.isRequired,
+    "・(￣∀￣)・:*:": PropTypes.string.isRequired,
+    "울란바토르": PropTypes.string.isRequired,
+    "\ud835\udc13\ud835\udc21\ud835\udc1e \ud835\udc2a\ud835\udc2e\ud835\udc22\ud835\udc1c\ud835\udc24 \ud835\udc1b\ud835\udc2b\ud835\udc28\ud835\udc30\ud835\udc27 \ud835\udc1f\ud835\udc28\ud835\udc31 \ud835\udc23\ud835\udc2e\ud835\udc26\ud835\udc29\ud835\udc2c \ud835\udc28\ud835\udc2f\ud835\udc1e\ud835\udc2b \ud835\udc2d\ud835\udc21\ud835\udc1e \ud835\udc25\ud835\udc1a\ud835\udc33\ud835\udc32 \ud835\udc1d\ud835\udc28\ud835\udc20": PropTypes.string.isRequired,
+    "\ud835\ude83\ud835\ude91\ud835\ude8e \ud835\ude9a\ud835\ude9e\ud835\ude92\ud835\ude8c\ud835\ude94 \ud835\ude8b\ud835\ude9b\ud835\ude98\ud835\udea0\ud835\ude97 \ud835\ude8f\ud835\ude98\ud835\udea1 \ud835\ude93\ud835\ude9e\ud835\ude96\ud835\ude99\ud835\ude9c \ud835\ude98\ud835\ude9f\ud835\ude8e\ud835\ude9b \ud835\ude9d\ud835\ude91\ud835\ude8e \ud835\ude95\ud835\ude8a\ud835\udea3\ud835\udea2 \ud835\ude8d\ud835\ude98\ud835\ude90": PropTypes.string.isRequired,
+    "\ud83c\udff30\ud83c\udf08️": PropTypes.string.isRequired,
+    "\ud83d\udc35 \ud83d\ude48 \ud83d\ude49 \ud83d\ude4a": PropTypes.string.isRequired,
+    "\ud83d\udc7e \ud83d\ude47 \ud83d\udc81 \ud83d\ude45 \ud83d\ude46 \ud83d\ude4b \ud83d\ude4e \ud83d\ude4d": PropTypes.string.isRequired,
+    "\ud841\udf0e\ud841\udf31\ud841\udf79\ud843\udc53\ud843\udc78\ud843\udc96\ud843\udccf": PropTypes.string.isRequired,
+    "＜script＞alert(123)＜/script＞": PropTypes.string.isRequired,
+    "Ｔｈｅ ｑｕｉｃｋ ｂｒｏｗｎ ｆｏｘ ｊｕｍｐｓ ｏｖｅｒ ｔｈｅ ｌａｚｙ ｄｏｇ": PropTypes.string.isRequired,
 });
 _B = PropTypes.shape({
-    "\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f\u007f": PropTypes.string,
-    "\t\u000b\u000c \u0085             \u200b\u2028\u2029  　": PropTypes.string,
-    "\"": PropTypes.string,
-    "\" onfocus=JaVaSCript:alert(123) autofocus": PropTypes.string,
-    "\"><script>alert(123)</script>": PropTypes.string,
-    "\"`'><script>\\x09javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x21javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x3Bjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x85javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x87javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x8Ajavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\xA8javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\xA9javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\xAFjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE3\\x80\\x80javascript:alert(1)</script>": PropTypes.string,
-    "#": PropTypes.string,
-    "#\tCredit: https://twitter.com/jifa/status/625776454479970304": PropTypes.string,
-    "#\tFile Inclusion": PropTypes.string,
-    "#\tJapanese Emoticons": PropTypes.string,
-    "#\tNumeric Strings": PropTypes.string,
-    "#\tQuotation Marks": PropTypes.string,
-    "#\tReserved Strings": PropTypes.string,
-    "#\tScunthorpe Problem": PropTypes.string,
-    "#\tStrings which are reserved characters in MSDOS/Windows": PropTypes.string,
-    "#\tStrings which attempt to invoke a benign script injection; shows vulnerability to XSS": PropTypes.string,
-    "#\tStrings which contain text that should be rendered RTL if possible (e.g. Arabic, Hebrew)": PropTypes.string,
-    "#\tStrings which contain two-byte characters: can cause rendering issues or character-length issues": PropTypes.string,
-    "#\tStrings which contain unicode numbers; if the code is localized, it should see the input as numeric": PropTypes.string,
-    "#\tStrings which may be used elsewhere in code": PropTypes.string,
-    "#\tTerminal escape codes": PropTypes.string,
-    "#\tUnicode Symbols": PropTypes.string,
-    "#\tiOS Vulnerabilities": PropTypes.string,
-    "#       Regional Indicator Symbols": PropTypes.string,
-    "#       Regional Indicator Symbols can be displayed differently across": PropTypes.string,
-    "#   IRC specific strings": PropTypes.string,
-    "#   Strings that may occur on IRC clients that make security products freak out": PropTypes.string,
-    "# \"Byte order marks\", U+FEFF and U+FFFE, each on its own line.": PropTypes.string,
-    "# Commonly misinterpreted as additional graphic characters.": PropTypes.string,
-    "# Often forbidden to appear in various text-based file formats (e.g. XML),": PropTypes.string,
-    "# The next line may appear to be blank or mojibake in some viewers.": PropTypes.string,
-    "# The next line may appear to be blank, mojibake, or dingbats in some viewers.": PropTypes.string,
-    "# The next line may be flagged for \"trailing whitespace\" in some viewers.": PropTypes.string,
-    "# This file unfortunately cannot express strings containing": PropTypes.string,
-    "# appear in input.": PropTypes.string,
-    "# contexts.  Divided into three groups based on (US-layout) keyboard position.": PropTypes.string,
-    "# general category Cf (in Unicode 8.0.0).": PropTypes.string,
-    "$(touch /tmp/blns.fail)": PropTypes.string,
-    "$1.00": PropTypes.string,
-    "' OR 1=1 -- 1": PropTypes.string,
-    "' autofocus onkeyup='javascript:alert(123)": PropTypes.string,
-    "'`\"><\\x00script>javascript:alert(1)</script>": PropTypes.string,
-    "'`\"><\\x3Cscript>javascript:alert(1)</script>": PropTypes.string,
-    "() { _; } >_[$($())] { touch /tmp/blns.shellshock2.fail; }": PropTypes.string,
-    "(｡◕ ∀ ◕｡)": PropTypes.string,
-    "+++ATH0": PropTypes.string,
-    "--><script>alert(123)</script>": PropTypes.string,
-    "--help": PropTypes.string,
-    "-2147483648/-1": PropTypes.string,
-    "/dev/null; touch /tmp/blns.fail ; echo": PropTypes.string,
-    "0.00": PropTypes.string,
-    "01000": PropTypes.string,
-    "08": PropTypes.string,
-    "09": PropTypes.string,
-    "0xffffffffffffffff": PropTypes.string,
-    "1 000 000,00": PropTypes.string,
-    "1 000.00": PropTypes.string,
-    "1#IND": PropTypes.string,
-    "1#INF": PropTypes.string,
-    "1'000.00": PropTypes.string,
-    "1'; DROP TABLE users-- 1": PropTypes.string,
-    "1,0/0,0": PropTypes.string,
-    "2.2250738585072011e-308": PropTypes.string,
-    "<<SCRIPT>alert(\"XSS\");//<</SCRIPT>": PropTypes.string,
-    "<IMG SRC= onmouseover=\"alert('xxs')\">": PropTypes.string,
-    "<IMG SRC=\" &#14;  javascript:alert('XSS');\">": PropTypes.string,
-    "<IMG SRC=\"jav&#x09;ascript:alert('XSS');\">": PropTypes.string,
-    "<IMG SRC=# onmouseover=\"alert('xxs')\">": PropTypes.string,
-    "<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>": PropTypes.string,
-    "<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>": PropTypes.string,
-    "<SCRIPT SRC=//ha.ckers.org/.j>": PropTypes.string,
-    "<a href=\"\\x02javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x04javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x0Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x0Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x0Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x0Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x16javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x19javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x1Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x1Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x1Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x81javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x82javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\xA9javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\xAFjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"javascript\\x00:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"javascript\\x0D:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=javascript:alert(1)></a>\">": PropTypes.string,
-    "<foo val=”bar“ />": PropTypes.string,
-    "<iframe src=http://ha.ckers.org/scriptlet.html <": PropTypes.string,
-    "<img \\x00src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img \\x11src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img \\x12src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img \\x47src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x onerror=\\x11\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x onerror=\\x12\"javascript:alert(1)\">": PropTypes.string,
-    "<img src\\x00=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<script src=\"\\\\%(jscript)s\"></script>": PropTypes.string,
-    "<script>alert(123)</script>": PropTypes.string,
-    "<script\\x0Atype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string,
-    "<script\\x0Dtype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string,
-    "><script>alert(123);</script x=": PropTypes.string,
-    "ABC<div style=\"x:\\x0Aexpression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\x0Dexpression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x82expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x83expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x85expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x87expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x8Aexpression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:expression\\x5C(javascript:alert(1)\">DEF": PropTypes.string,
-    "But now...\u001b[20Cfor my greatest trick...\u001b[8m": PropTypes.string,
-    "COM1": PropTypes.string,
-    "COM3": PropTypes.string,
-    "CON": PropTypes.string,
-    "FALSE": PropTypes.string,
-    "File:///": PropTypes.string,
-    "If you're reading this, you've been in a coma for almost 20 years now. We're trying a new technique. We don't know where this message will end up in your dream, but we hope it works. Please wake up, we miss you.": PropTypes.string,
-    "Kernel.exec(\"ls -al /\")": PropTypes.string,
-    "Linda Callahan": PropTypes.string,
-    "NIL": PropTypes.string,
-    "NUL": PropTypes.string,
-    "Tyson Gay": PropTypes.string,
-    "__ﾛ(,_,*)": PropTypes.string,
-    "`\"'><img src=xxx:x \\x0Aonerror=javascript:alert(1)>": PropTypes.string,
-    "`\"'><img src=xxx:x \\x0Conerror=javascript:alert(1)>": PropTypes.string,
-    "`\"'><img src=xxx:x \\x0Donerror=javascript:alert(1)>": PropTypes.string,
-    "`touch /tmp/blns.fail`": PropTypes.string,
-    "basement": PropTypes.string,
-    "dontMakeAMap": PropTypes.bool,
-    "eval(\"puts 'hello world'\")": PropTypes.string,
-    "expression": PropTypes.string,
-    "http://a/%%30%30": PropTypes.string,
-    "null": PropTypes.string,
-    "åß∂ƒ©˙∆˚¬…æ": PropTypes.string,
-    "˙ɐnbᴉlɐ ɐuƃɐɯ ǝɹolop ʇǝ ǝɹoqɐl ʇn ʇunpᴉpᴉɔuᴉ ɹodɯǝʇ poɯsnᴉǝ op pǝs 'ʇᴉlǝ ƃuᴉɔsᴉdᴉpɐ ɹnʇǝʇɔǝsuoɔ 'ʇǝɯɐ ʇᴉs ɹolop ɯnsdᴉ ɯǝɹo˥": PropTypes.string,
-    "̦H̬̤̗̤͝e͜ ̜̥̝̻͍̟́w̕h̖̯͓o̝͙̖͎̱̮ ҉̺̙̞̟͈W̷̼̭a̺̪͍į͈͕̭͙̯̜t̶̼̮s̘͙͖̕ ̠̫̠B̻͍͙͉̳ͅe̵h̵̬͇̫͙i̹͓̳̳̮͎̫̕n͟d̴̪̜̖ ̰͉̩͇͙̲͞ͅT͖̼͓̪͢h͏͓̮̻e̬̝̟ͅ ̤̹̝W͙̞̝͔͇͝ͅa͏͓͔̹̼̣l̴͔̰̤̟͔ḽ̫.͕": PropTypes.string,
-    "Ω≈ç√∫˜µ≤≥÷": PropTypes.string,
-    "Ṱ̺̺̕o͞ ̷i̲̬͇̪͙n̝̗͕v̟̜̘̦͟o̶̙̰̠kè͚̮̺̪̹̱̤ ̖t̝͕̳̣̻̪͞h̼͓̲̦̳̘̲e͇̣̰̦̬͎ ̢̼̻̱̘h͚͎͙̜̣̲ͅi̦̲̣̰̤v̻͍e̺̭̳̪̰-m̢iͅn̖̺̞̲̯̰d̵̼̟͙̩̼̘̳ ̞̥̱̳̭r̛̗̘e͙p͠r̼̞̻̭̗e̺̠̣͟s̘͇̳͍̝͉e͉̥̯̞̲͚̬͜ǹ̬͎͎̟̖͇̤t͍̬̤͓̼̭͘ͅi̪̱n͠g̴͉ ͏͉ͅc̬̟h͡a̫̻̯͘o̫̟̖͍̙̝͉s̗̦̲.̨̹͈̣": PropTypes.string,
-    "⁰⁴⁵₀₁₂": PropTypes.string,
-    "❤️ \ud83d\udc94 \ud83d\udc8c \ud83d\udc95 \ud83d\udc9e \ud83d\udc93 \ud83d\udc97 \ud83d\udc96 \ud83d\udc98 \ud83d\udc9d \ud83d\udc9f \ud83d\udc9c \ud83d\udc9b \ud83d\udc9a \ud83d\udc99": PropTypes.string,
-    "ヽ༼ຈل͜ຈ༽ﾉ ヽ༼ຈل͜ຈ༽ﾉ": PropTypes.string,
-    "社會科學院語學研究所": PropTypes.string,
-    "部落格": PropTypes.string,
-    "사회과학원 어학연구소": PropTypes.string,
-    "찦차를 타고 온 펲시맨과 쑛다리 똠방각하": PropTypes.string,
-    "\ud835\udd4b\ud835\udd59\ud835\udd56 \ud835\udd62\ud835\udd66\ud835\udd5a\ud835\udd54\ud835\udd5c \ud835\udd53\ud835\udd63\ud835\udd60\ud835\udd68\ud835\udd5f \ud835\udd57\ud835\udd60\ud835\udd69 \ud835\udd5b\ud835\udd66\ud835\udd5e\ud835\udd61\ud835\udd64 \ud835\udd60\ud835\udd67\ud835\udd56\ud835\udd63 \ud835\udd65\ud835\udd59\ud835\udd56 \ud835\udd5d\ud835\udd52\ud835\udd6b\ud835\udd6a \ud835\udd55\ud835\udd60\ud835\udd58": PropTypes.string,
-    "\ud83d\ude0d": PropTypes.string,
-    "ﷺ": PropTypes.string,
-    "１２３": PropTypes.string,
+    "\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f\u007f": PropTypes.string.isRequired,
+    "\t\u000b\u000c \u0085             \u200b\u2028\u2029  　": PropTypes.string.isRequired,
+    "\"": PropTypes.string.isRequired,
+    "\" onfocus=JaVaSCript:alert(123) autofocus": PropTypes.string.isRequired,
+    "\"><script>alert(123)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x09javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x21javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x3Bjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x85javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x87javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x8Ajavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\xA8javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\xA9javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\xAFjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE3\\x80\\x80javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "#": PropTypes.string.isRequired,
+    "#\tCredit: https://twitter.com/jifa/status/625776454479970304": PropTypes.string.isRequired,
+    "#\tFile Inclusion": PropTypes.string.isRequired,
+    "#\tJapanese Emoticons": PropTypes.string.isRequired,
+    "#\tNumeric Strings": PropTypes.string.isRequired,
+    "#\tQuotation Marks": PropTypes.string.isRequired,
+    "#\tReserved Strings": PropTypes.string.isRequired,
+    "#\tScunthorpe Problem": PropTypes.string.isRequired,
+    "#\tStrings which are reserved characters in MSDOS/Windows": PropTypes.string.isRequired,
+    "#\tStrings which attempt to invoke a benign script injection; shows vulnerability to XSS": PropTypes.string.isRequired,
+    "#\tStrings which contain text that should be rendered RTL if possible (e.g. Arabic, Hebrew)": PropTypes.string.isRequired,
+    "#\tStrings which contain two-byte characters: can cause rendering issues or character-length issues": PropTypes.string.isRequired,
+    "#\tStrings which contain unicode numbers; if the code is localized, it should see the input as numeric": PropTypes.string.isRequired,
+    "#\tStrings which may be used elsewhere in code": PropTypes.string.isRequired,
+    "#\tTerminal escape codes": PropTypes.string.isRequired,
+    "#\tUnicode Symbols": PropTypes.string.isRequired,
+    "#\tiOS Vulnerabilities": PropTypes.string.isRequired,
+    "#       Regional Indicator Symbols": PropTypes.string.isRequired,
+    "#       Regional Indicator Symbols can be displayed differently across": PropTypes.string.isRequired,
+    "#   IRC specific strings": PropTypes.string.isRequired,
+    "#   Strings that may occur on IRC clients that make security products freak out": PropTypes.string.isRequired,
+    "# \"Byte order marks\", U+FEFF and U+FFFE, each on its own line.": PropTypes.string.isRequired,
+    "# Commonly misinterpreted as additional graphic characters.": PropTypes.string.isRequired,
+    "# Often forbidden to appear in various text-based file formats (e.g. XML),": PropTypes.string.isRequired,
+    "# The next line may appear to be blank or mojibake in some viewers.": PropTypes.string.isRequired,
+    "# The next line may appear to be blank, mojibake, or dingbats in some viewers.": PropTypes.string.isRequired,
+    "# The next line may be flagged for \"trailing whitespace\" in some viewers.": PropTypes.string.isRequired,
+    "# This file unfortunately cannot express strings containing": PropTypes.string.isRequired,
+    "# appear in input.": PropTypes.string.isRequired,
+    "# contexts.  Divided into three groups based on (US-layout) keyboard position.": PropTypes.string.isRequired,
+    "# general category Cf (in Unicode 8.0.0).": PropTypes.string.isRequired,
+    "$(touch /tmp/blns.fail)": PropTypes.string.isRequired,
+    "$1.00": PropTypes.string.isRequired,
+    "' OR 1=1 -- 1": PropTypes.string.isRequired,
+    "' autofocus onkeyup='javascript:alert(123)": PropTypes.string.isRequired,
+    "'`\"><\\x00script>javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "'`\"><\\x3Cscript>javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "() { _; } >_[$($())] { touch /tmp/blns.shellshock2.fail; }": PropTypes.string.isRequired,
+    "(｡◕ ∀ ◕｡)": PropTypes.string.isRequired,
+    "+++ATH0": PropTypes.string.isRequired,
+    "--><script>alert(123)</script>": PropTypes.string.isRequired,
+    "--help": PropTypes.string.isRequired,
+    "-2147483648/-1": PropTypes.string.isRequired,
+    "/dev/null; touch /tmp/blns.fail ; echo": PropTypes.string.isRequired,
+    "0.00": PropTypes.string.isRequired,
+    "01000": PropTypes.string.isRequired,
+    "08": PropTypes.string.isRequired,
+    "09": PropTypes.string.isRequired,
+    "0xffffffffffffffff": PropTypes.string.isRequired,
+    "1 000 000,00": PropTypes.string.isRequired,
+    "1 000.00": PropTypes.string.isRequired,
+    "1#IND": PropTypes.string.isRequired,
+    "1#INF": PropTypes.string.isRequired,
+    "1'000.00": PropTypes.string.isRequired,
+    "1'; DROP TABLE users-- 1": PropTypes.string.isRequired,
+    "1,0/0,0": PropTypes.string.isRequired,
+    "2.2250738585072011e-308": PropTypes.string.isRequired,
+    "<<SCRIPT>alert(\"XSS\");//<</SCRIPT>": PropTypes.string.isRequired,
+    "<IMG SRC= onmouseover=\"alert('xxs')\">": PropTypes.string.isRequired,
+    "<IMG SRC=\" &#14;  javascript:alert('XSS');\">": PropTypes.string.isRequired,
+    "<IMG SRC=\"jav&#x09;ascript:alert('XSS');\">": PropTypes.string.isRequired,
+    "<IMG SRC=# onmouseover=\"alert('xxs')\">": PropTypes.string.isRequired,
+    "<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>": PropTypes.string.isRequired,
+    "<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>": PropTypes.string.isRequired,
+    "<SCRIPT SRC=//ha.ckers.org/.j>": PropTypes.string.isRequired,
+    "<a href=\"\\x02javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x04javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x0Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x0Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x0Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x0Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x16javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x19javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x1Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x1Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x1Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x81javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x82javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\xA9javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\xAFjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"javascript\\x00:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"javascript\\x0D:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=javascript:alert(1)></a>\">": PropTypes.string.isRequired,
+    "<foo val=”bar“ />": PropTypes.string.isRequired,
+    "<iframe src=http://ha.ckers.org/scriptlet.html <": PropTypes.string.isRequired,
+    "<img \\x00src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img \\x11src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img \\x12src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img \\x47src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x onerror=\\x11\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x onerror=\\x12\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src\\x00=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<script src=\"\\\\%(jscript)s\"></script>": PropTypes.string.isRequired,
+    "<script>alert(123)</script>": PropTypes.string.isRequired,
+    "<script\\x0Atype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string.isRequired,
+    "<script\\x0Dtype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string.isRequired,
+    "><script>alert(123);</script x=": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\x0Aexpression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\x0Dexpression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x82expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x83expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x85expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x87expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x8Aexpression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:expression\\x5C(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "But now...\u001b[20Cfor my greatest trick...\u001b[8m": PropTypes.string.isRequired,
+    "COM1": PropTypes.string.isRequired,
+    "COM3": PropTypes.string.isRequired,
+    "CON": PropTypes.string.isRequired,
+    "FALSE": PropTypes.string.isRequired,
+    "File:///": PropTypes.string.isRequired,
+    "If you're reading this, you've been in a coma for almost 20 years now. We're trying a new technique. We don't know where this message will end up in your dream, but we hope it works. Please wake up, we miss you.": PropTypes.string.isRequired,
+    "Kernel.exec(\"ls -al /\")": PropTypes.string.isRequired,
+    "Linda Callahan": PropTypes.string.isRequired,
+    "NIL": PropTypes.string.isRequired,
+    "NUL": PropTypes.string.isRequired,
+    "Tyson Gay": PropTypes.string.isRequired,
+    "__ﾛ(,_,*)": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x0Aonerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x0Conerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x0Donerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`touch /tmp/blns.fail`": PropTypes.string.isRequired,
+    "basement": PropTypes.string.isRequired,
+    "dontMakeAMap": PropTypes.bool.isRequired,
+    "eval(\"puts 'hello world'\")": PropTypes.string.isRequired,
+    "expression": PropTypes.string.isRequired,
+    "http://a/%%30%30": PropTypes.string.isRequired,
+    "null": PropTypes.string.isRequired,
+    "åß∂ƒ©˙∆˚¬…æ": PropTypes.string.isRequired,
+    "˙ɐnbᴉlɐ ɐuƃɐɯ ǝɹolop ʇǝ ǝɹoqɐl ʇn ʇunpᴉpᴉɔuᴉ ɹodɯǝʇ poɯsnᴉǝ op pǝs 'ʇᴉlǝ ƃuᴉɔsᴉdᴉpɐ ɹnʇǝʇɔǝsuoɔ 'ʇǝɯɐ ʇᴉs ɹolop ɯnsdᴉ ɯǝɹo˥": PropTypes.string.isRequired,
+    "̦H̬̤̗̤͝e͜ ̜̥̝̻͍̟́w̕h̖̯͓o̝͙̖͎̱̮ ҉̺̙̞̟͈W̷̼̭a̺̪͍į͈͕̭͙̯̜t̶̼̮s̘͙͖̕ ̠̫̠B̻͍͙͉̳ͅe̵h̵̬͇̫͙i̹͓̳̳̮͎̫̕n͟d̴̪̜̖ ̰͉̩͇͙̲͞ͅT͖̼͓̪͢h͏͓̮̻e̬̝̟ͅ ̤̹̝W͙̞̝͔͇͝ͅa͏͓͔̹̼̣l̴͔̰̤̟͔ḽ̫.͕": PropTypes.string.isRequired,
+    "Ω≈ç√∫˜µ≤≥÷": PropTypes.string.isRequired,
+    "Ṱ̺̺̕o͞ ̷i̲̬͇̪͙n̝̗͕v̟̜̘̦͟o̶̙̰̠kè͚̮̺̪̹̱̤ ̖t̝͕̳̣̻̪͞h̼͓̲̦̳̘̲e͇̣̰̦̬͎ ̢̼̻̱̘h͚͎͙̜̣̲ͅi̦̲̣̰̤v̻͍e̺̭̳̪̰-m̢iͅn̖̺̞̲̯̰d̵̼̟͙̩̼̘̳ ̞̥̱̳̭r̛̗̘e͙p͠r̼̞̻̭̗e̺̠̣͟s̘͇̳͍̝͉e͉̥̯̞̲͚̬͜ǹ̬͎͎̟̖͇̤t͍̬̤͓̼̭͘ͅi̪̱n͠g̴͉ ͏͉ͅc̬̟h͡a̫̻̯͘o̫̟̖͍̙̝͉s̗̦̲.̨̹͈̣": PropTypes.string.isRequired,
+    "⁰⁴⁵₀₁₂": PropTypes.string.isRequired,
+    "❤️ \ud83d\udc94 \ud83d\udc8c \ud83d\udc95 \ud83d\udc9e \ud83d\udc93 \ud83d\udc97 \ud83d\udc96 \ud83d\udc98 \ud83d\udc9d \ud83d\udc9f \ud83d\udc9c \ud83d\udc9b \ud83d\udc9a \ud83d\udc99": PropTypes.string.isRequired,
+    "ヽ༼ຈل͜ຈ༽ﾉ ヽ༼ຈل͜ຈ༽ﾉ": PropTypes.string.isRequired,
+    "社會科學院語學研究所": PropTypes.string.isRequired,
+    "部落格": PropTypes.string.isRequired,
+    "사회과학원 어학연구소": PropTypes.string.isRequired,
+    "찦차를 타고 온 펲시맨과 쑛다리 똠방각하": PropTypes.string.isRequired,
+    "\ud835\udd4b\ud835\udd59\ud835\udd56 \ud835\udd62\ud835\udd66\ud835\udd5a\ud835\udd54\ud835\udd5c \ud835\udd53\ud835\udd63\ud835\udd60\ud835\udd68\ud835\udd5f \ud835\udd57\ud835\udd60\ud835\udd69 \ud835\udd5b\ud835\udd66\ud835\udd5e\ud835\udd61\ud835\udd64 \ud835\udd60\ud835\udd67\ud835\udd56\ud835\udd63 \ud835\udd65\ud835\udd59\ud835\udd56 \ud835\udd5d\ud835\udd52\ud835\udd6b\ud835\udd6a \ud835\udd55\ud835\udd60\ud835\udd58": PropTypes.string.isRequired,
+    "\ud83d\ude0d": PropTypes.string.isRequired,
+    "ﷺ": PropTypes.string.isRequired,
+    "１２３": PropTypes.string.isRequired,
 });
 _A = PropTypes.shape({
-    " ": PropTypes.string,
-    " onfocus=JaVaSCript:alert(123) autofocus": PropTypes.string,
-    "!@#$%^&*()`~": PropTypes.string,
-    "\" autofocus onkeyup=\"javascript:alert(123)": PropTypes.string,
-    "\";alert(123);t=\"": PropTypes.string,
-    "\"><script>alert(123);</script x=\"": PropTypes.string,
-    "\"`'><script>\\x00javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x0Cjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\x0Djavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xC2\\x85javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xC2\\xA0javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE1\\x9A\\x80javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE1\\xA0\\x8Ejavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x81javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x86javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x80\\x89javascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xE2\\x81\\x9Fjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xEF\\xBB\\xBFjavascript:alert(1)</script>": PropTypes.string,
-    "\"`'><script>\\xF0\\x90\\x96\\x9Ajavascript:alert(1)</script>": PropTypes.string,
-    "#\tChanging length when lowercased": PropTypes.string,
-    "#\tCharacters which increase in length (2 to 3 bytes) when lowercased": PropTypes.string,
-    "#\tCommand Injection (Ruby)": PropTypes.string,
-    "#\tHuman injection": PropTypes.string,
-    "#\tInnocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)": PropTypes.string,
-    "#\tKnown CVEs and Vulnerabilities": PropTypes.string,
-    "#\tMSDOS/Windows Special Filenames": PropTypes.string,
-    "#\tSQL Injection": PropTypes.string,
-    "#\tScript Injection": PropTypes.string,
-    "#\tString which can reveal system files when parsed by a badly configured XML parser": PropTypes.string,
-    "#\tStrings that test for known vulnerabilities": PropTypes.string,
-    "#\tStrings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.": PropTypes.string,
-    "#\tStrings which can call system commands within Ruby/Rails applications": PropTypes.string,
-    "#\tStrings which consists of Japanese-style emoticons which are popular on the web": PropTypes.string,
-    "#\tStrings which contain Emoji; should be the same behavior as two-byte characters, but not always": PropTypes.string,
-    "#\tStrings which contain bold/italic/etc. versions of normal characters": PropTypes.string,
-    "#\tStrings which contain common unicode symbols (e.g. smart quotes)": PropTypes.string,
-    "#\tStrings which contain misplaced quotation marks; can cause encoding errors": PropTypes.string,
-    "#\tStrings which contain unicode subscripts/superscripts; can cause rendering issues": PropTypes.string,
-    "#\tStrings which crashed iMessage in various versions of iOS": PropTypes.string,
-    "#\tStrings which may cause human to reinterpret worldview": PropTypes.string,
-    "#\tTwo-Byte Characters": PropTypes.string,
-    "#\tUnicode Numbers": PropTypes.string,
-    "#\tUnicode font": PropTypes.string,
-    "#\tUnwanted Interpolation": PropTypes.string,
-    "#       fonts, and have a number of special behaviors": PropTypes.string,
-    "# Non-whitespace C1 controls: U+0080 through U+0084 and U+0086 through U+009F.": PropTypes.string,
-    "# The next two lines may appear to be blank or mojibake in some viewers.": PropTypes.string,
-    "# U+0000, U+000A, or U+000D (NUL, LF, CR).": PropTypes.string,
-    "# and U+200B (ZERO WIDTH SPACE), which are in the C categories but are often": PropTypes.string,
-    "$ENV{'HOME'}": PropTypes.string,
-    "$HOME": PropTypes.string,
-    "%d": PropTypes.string,
-    "%s": PropTypes.string,
-    "%x('ls -al /')": PropTypes.string,
-    "'": PropTypes.string,
-    "' OR '1'='1": PropTypes.string,
-    "'\"'": PropTypes.string,
-    "';alert(123);t='": PropTypes.string,
-    "( ͡° ͜ʖ ͡°)": PropTypes.string,
-    "(null)": PropTypes.string,
-    "(╯°□°）╯︵ ┻━┻)": PropTypes.string,
-    "+0": PropTypes.string,
-    ",": PropTypes.string,
-    ",./;'[]\\-=": PropTypes.string,
-    "-,": PropTypes.string,
-    "-.": PropTypes.string,
-    "-0": PropTypes.string,
-    "-1": PropTypes.string,
-    "-1E02": PropTypes.string,
-    "-Infinity": PropTypes.string,
-    "../../../../../../../../../../../etc/hosts": PropTypes.string,
-    "../../../../../../../../../../../etc/passwd%00": PropTypes.string,
-    "0": PropTypes.string,
-    "0,0,0": PropTypes.string,
-    "0,0/0,0": PropTypes.string,
-    "0,00": PropTypes.string,
-    "0..0": PropTypes.string,
-    "0.0/0.0": PropTypes.string,
-    "00˙Ɩ$-": PropTypes.string,
-    "0x0": PropTypes.string,
-    "1": PropTypes.string,
-    "1 000 000.00": PropTypes.string,
-    "1#QNAN": PropTypes.string,
-    "1#SNAN": PropTypes.string,
-    "1'000'000.00": PropTypes.string,
-    "1'000,00": PropTypes.string,
-    "1.0/0.0": PropTypes.string,
-    "1.00": PropTypes.string,
-    "1/0": PropTypes.string,
-    "1/2": PropTypes.string,
-    "123456789012345678901234567890123456789": PropTypes.string,
-    "1;DROP TABLE users": PropTypes.string,
-    "1E02": PropTypes.string,
-    "1E2": PropTypes.string,
-    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999": PropTypes.string,
-    ";alert(123);": PropTypes.string,
-    "<!--[if<img src=x onerror=javascript:alert(1)//]> -->": PropTypes.string,
-    "<!--[if]><script>javascript:alert(1)</script -->": PropTypes.string,
-    "</script><script>alert(123)</script>": PropTypes.string,
-    "</textarea><script>alert(123)</script>": PropTypes.string,
-    "<<< %s(un='%s') = %u": PropTypes.string,
-    "<>?:\"{}|_+": PropTypes.string,
-    "<IMG SRC=\"jav   ascript:alert('XSS');\">": PropTypes.string,
-    "<IMG SRC=\"jav&#x0A;ascript:alert('XSS');\">": PropTypes.string,
-    "<IMG SRC=\"jav&#x0D;ascript:alert('XSS');\">": PropTypes.string,
-    "<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>": PropTypes.string,
-    "<SCRIPT SRC=http://ha.ckers.org/xss.js?< B >": PropTypes.string,
-    "<SCRIPT/SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>": PropTypes.string,
-    "<SCRIPT/XSS SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>": PropTypes.string,
-    "<a href=\"\\x01javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x05javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x08javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x09javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x0Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x10javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x11javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x13javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x17javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\x1Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xC2\\xA0javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE1\\x9A\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE1\\xA0\\x8Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x83javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x84javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x86javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\x87javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"\\xE2\\x80\\xA8javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"javascript\\x09:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"javascript\\x0A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=\"javascript\\x3A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string,
-    "<a href=java&#1&#2&#3&#4&#5&#6&#7&#8&#11&#12script:javascript:alert(1)>XXX</a>": PropTypes.string,
-    "<foo val=`bar' />": PropTypes.string,
-    "<img \\x00src=x onerror=\"alert(1)\">": PropTypes.string,
-    "<img \\x39src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x onerror=\\x00\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x onerror=\\x09\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x\\x09onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x\\x10onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x\\x11onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x\\x12onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src=x\\x13onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src\\x09=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img src\\x11=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img\\x10src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img\\x13src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<img\\x32src=x onerror=\"javascript:alert(1)\">": PropTypes.string,
-    "<sc<script>ript>alert(123)</sc</script>ript>": PropTypes.string,
-    "<script\\x09type=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string,
-    "<script\\x20type=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string,
-    "<script\\x3Etype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string,
-    "<u oncopy=alert()> Copy me</u>": PropTypes.string,
-    "ABC<div style=\"x:\\x09expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\x0Bexpression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\x20expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xC2\\xA0expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x80expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x84expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x89expression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:\\xE2\\x80\\x8Bexpression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:exp\\x00ression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x:exp\\x5Cression(javascript:alert(1)\">DEF": PropTypes.string,
-    "ABC<div style=\"x\\x3Aexpression(javascript:alert(1)\">DEF": PropTypes.string,
-    "AUX": PropTypes.string,
-    "Arsenal canal": PropTypes.string,
-    "Dick Van Dyke": PropTypes.string,
-    "Dr. Herman I. Libshitz": PropTypes.string,
-    "False": PropTypes.string,
-    "INF": PropTypes.string,
-    "Jimmy Clitheroe": PropTypes.string,
-    "Kernel.exit(1)": PropTypes.string,
-    "LPT2": PropTypes.string,
-    "LPT3": PropTypes.string,
-    "Lightwater Country Park": PropTypes.string,
-    "None": PropTypes.string,
-    "PRN": PropTypes.string,
-    "Penistone Community Church": PropTypes.string,
-    "RomansInSussex.co.uk": PropTypes.string,
-    "Super Bowl XXX": PropTypes.string,
-    "TRUE": PropTypes.string,
-    "The quic\u0008\u0008\u0008\u0008\u0008\u0008k brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]": PropTypes.string,
-    "True": PropTypes.string,
-    "Z̮̞̠͙͔ͅḀ̗̞͈̻̗Ḷ͙͎̯̹̞͓G̻O̭̗̮": PropTypes.string,
-    "\\": PropTypes.string,
-    "\\\";alert('XSS');//": PropTypes.string,
-    "`\"'><img src=xxx:x \\x00onerror=javascript:alert(1)>": PropTypes.string,
-    "`\"'><img src=xxx:x \\x0Bonerror=javascript:alert(1)>": PropTypes.string,
-    "`\"'><img src=xxx:x \\x2Fonerror=javascript:alert(1)>": PropTypes.string,
-    "`ls -al /`": PropTypes.string,
-    "`⁄€‹›ﬁﬂ‡°·‚—±": PropTypes.string,
-    "classic": PropTypes.string,
-    "dontMakeAMap": PropTypes.bool,
-    "false": PropTypes.string,
-    "nil": PropTypes.string,
-    "perl -e 'print \"<IMG SRC=java\\0script:alert(\\\"XSS\\\")>\";' > out": PropTypes.string,
-    "undef": PropTypes.string,
-    "{0}": PropTypes.string,
-    "\u0080\u0081\u0082\u0083\u0084\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f": PropTypes.string,
-    "¡™£¢∞§¶•ªº–≠": PropTypes.string,
-    "\u00ad\u0600\u0601\u0602\u0603\u0604\u0605\u061c\u06dd\u070f\u180e\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u2064\u2066\u2067\u2068\u2069\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb\ud804\udcbd\ud82f\udca0\ud82f\udca1\ud82f\udca2\ud82f\udca3\ud834\udd73\ud834\udd74\ud834\udd75\ud834\udd76\ud834\udd77\ud834\udd78\ud834\udd79\ud834\udd7a\udb40\udc01\udb40\udc20\udb40\udc21\udb40\udc22\udb40\udc23\udb40\udc24\udb40\udc25\udb40\udc26\udb40\udc27\udb40\udc28\udb40\udc29\udb40\udc2a\udb40\udc2b\udb40\udc2c\udb40\udc2d\udb40\udc2e\udb40\udc2f\udb40\udc30\udb40\udc31\udb40\udc32\udb40\udc33\udb40\udc34\udb40\udc35\udb40\udc36\udb40\udc37\udb40\udc38\udb40\udc39\udb40\udc3a\udb40\udc3b\udb40\udc3c\udb40\udc3d\udb40\udc3e\udb40\udc3f\udb40\udc40\udb40\udc41\udb40\udc42\udb40\udc43\udb40\udc44\udb40\udc45\udb40\udc46\udb40\udc47\udb40\udc48\udb40\udc49\udb40\udc4a\udb40\udc4b\udb40\udc4c\udb40\udc4d\udb40\udc4e\udb40\udc4f\udb40\udc50\udb40\udc51\udb40\udc52\udb40\udc53\udb40\udc54\udb40\udc55\udb40\udc56\udb40\udc57\udb40\udc58\udb40\udc59\udb40\udc5a\udb40\udc5b\udb40\udc5c\udb40\udc5d\udb40\udc5e\udb40\udc5f\udb40\udc60\udb40\udc61\udb40\udc62\udb40\udc63\udb40\udc64\udb40\udc65\udb40\udc66\udb40\udc67\udb40\udc68\udb40\udc69\udb40\udc6a\udb40\udc6b\udb40\udc6c\udb40\udc6d\udb40\udc6e\udb40\udc6f\udb40\udc70\udb40\udc71\udb40\udc72\udb40\udc73\udb40\udc74\udb40\udc75\udb40\udc76\udb40\udc77\udb40\udc78\udb40\udc79\udb40\udc7a\udb40\udc7b\udb40\udc7c\udb40\udc7d\udb40\udc7e\udb40\udc7f": PropTypes.string,
-    "¸˛Ç◊ı˜Â¯˘¿": PropTypes.string,
-    "Œ„´‰ˇÁ¨ˆØ∏”’": PropTypes.string,
-    "œ∑´®†¥¨ˆøπ“‘": PropTypes.string,
-    "Ⱥ": PropTypes.string,
-    "Ⱦ": PropTypes.string,
-    "̡͓̞ͅI̗̘̦͝n͇͇͙v̮̫ok̲̫̙͈i̖͙̭̹̠̞n̡̻̮̣̺g̲͈͙̭͙̬͎ ̰t͔̦h̞̲e̢̤ ͍̬̲͖f̴̘͕̣è͖ẹ̥̩l͖͔͚i͓͚̦͠n͖͍̗͓̳̮g͍ ̨o͚̪͡f̘̣̬ ̖̘͖̟͙̮c҉͔̫͖͓͇͖ͅh̵̤̣͚͔á̗̼͕ͅo̼̣̥s̱͈̺̖̦̻͢.̛̖̞̠̫̰": PropTypes.string,
-    "הָיְתָהtestالصفحات التّحول": PropTypes.string,
-    "ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.": PropTypes.string,
-    "٠١٢٣٤٥٦٧٨٩": PropTypes.string,
-    "ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็": PropTypes.string,
-    "\u202a\u202atest\u202a": PropTypes.string,
-    "\u202btest\u202b": PropTypes.string,
-    "\u2066test\u2067": PropTypes.string,
-    "₀₁₂": PropTypes.string,
-    "⒯⒣⒠ ⒬⒰⒤⒞⒦ ⒝⒭⒪⒲⒩ ⒡⒪⒳ ⒥⒰⒨⒫⒮ ⒪⒱⒠⒭ ⒯⒣⒠ ⒧⒜⒵⒴ ⒟⒪⒢": PropTypes.string,
-    "パーティーへ行かないか": PropTypes.string,
-    "和製漢語": PropTypes.string,
-    "田中さんにあげて下さい": PropTypes.string,
-    "\ud835\udc7b\ud835\udc89\ud835\udc86 \ud835\udc92\ud835\udc96\ud835\udc8a\ud835\udc84\ud835\udc8c \ud835\udc83\ud835\udc93\ud835\udc90\ud835\udc98\ud835\udc8f \ud835\udc87\ud835\udc90\ud835\udc99 \ud835\udc8b\ud835\udc96\ud835\udc8e\ud835\udc91\ud835\udc94 \ud835\udc90\ud835\udc97\ud835\udc86\ud835\udc93 \ud835\udc95\ud835\udc89\ud835\udc86 \ud835\udc8d\ud835\udc82\ud835\udc9b\ud835\udc9a \ud835\udc85\ud835\udc90\ud835\udc88": PropTypes.string,
-    "\ud835\udce3\ud835\udcf1\ud835\udcee \ud835\udcfa\ud835\udcfe\ud835\udcf2\ud835\udcec\ud835\udcf4 \ud835\udceb\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7 \ud835\udcef\ud835\udcf8\ud835\udd01 \ud835\udcf3\ud835\udcfe\ud835\udcf6\ud835\udcf9\ud835\udcfc \ud835\udcf8\ud835\udcff\ud835\udcee\ud835\udcfb \ud835\udcfd\ud835\udcf1\ud835\udcee \ud835\udcf5\ud835\udcea\ud835\udd03\ud835\udd02 \ud835\udced\ud835\udcf8\ud835\udcf0": PropTypes.string,
-    "\ud835\udd7f\ud835\udd8d\ud835\udd8a \ud835\udd96\ud835\udd9a\ud835\udd8e\ud835\udd88\ud835\udd90 \ud835\udd87\ud835\udd97\ud835\udd94\ud835\udd9c\ud835\udd93 \ud835\udd8b\ud835\udd94\ud835\udd9d \ud835\udd8f\ud835\udd9a\ud835\udd92\ud835\udd95\ud835\udd98 \ud835\udd94\ud835\udd9b\ud835\udd8a\ud835\udd97 \ud835\udd99\ud835\udd8d\ud835\udd8a \ud835\udd91\ud835\udd86\ud835\udd9f\ud835\udd9e \ud835\udd89\ud835\udd94\ud835\udd8c": PropTypes.string,
-    "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8 \ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2\ud83c\uddf8": PropTypes.string,
-    "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6": PropTypes.string,
-    "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2": PropTypes.string,
-    "\ud83d\udc69\ud83c\udffd": PropTypes.string,
-    "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7": PropTypes.string,
-    "﷽": PropTypes.string,
-    "\ufeff": PropTypes.string,
-    "｀ｨ(´∀｀∩": PropTypes.string,
-    "ﾟ･✿ヾ╲(｡◕‿◕｡)╱✿･ﾟ": PropTypes.string,
-    "\ufffe": PropTypes.string,
+    " ": PropTypes.string.isRequired,
+    " onfocus=JaVaSCript:alert(123) autofocus": PropTypes.string.isRequired,
+    "!@#$%^&*()`~": PropTypes.string.isRequired,
+    "\" autofocus onkeyup=\"javascript:alert(123)": PropTypes.string.isRequired,
+    "\";alert(123);t=\"": PropTypes.string.isRequired,
+    "\"><script>alert(123);</script x=\"": PropTypes.string.isRequired,
+    "\"`'><script>\\x00javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x0Cjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\x0Djavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xC2\\x85javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xC2\\xA0javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE1\\x9A\\x80javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE1\\xA0\\x8Ejavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x81javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x86javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x80\\x89javascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xE2\\x81\\x9Fjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xEF\\xBB\\xBFjavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "\"`'><script>\\xF0\\x90\\x96\\x9Ajavascript:alert(1)</script>": PropTypes.string.isRequired,
+    "#\tChanging length when lowercased": PropTypes.string.isRequired,
+    "#\tCharacters which increase in length (2 to 3 bytes) when lowercased": PropTypes.string.isRequired,
+    "#\tCommand Injection (Ruby)": PropTypes.string.isRequired,
+    "#\tHuman injection": PropTypes.string.isRequired,
+    "#\tInnocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)": PropTypes.string.isRequired,
+    "#\tKnown CVEs and Vulnerabilities": PropTypes.string.isRequired,
+    "#\tMSDOS/Windows Special Filenames": PropTypes.string.isRequired,
+    "#\tSQL Injection": PropTypes.string.isRequired,
+    "#\tScript Injection": PropTypes.string.isRequired,
+    "#\tString which can reveal system files when parsed by a badly configured XML parser": PropTypes.string.isRequired,
+    "#\tStrings that test for known vulnerabilities": PropTypes.string.isRequired,
+    "#\tStrings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.": PropTypes.string.isRequired,
+    "#\tStrings which can call system commands within Ruby/Rails applications": PropTypes.string.isRequired,
+    "#\tStrings which consists of Japanese-style emoticons which are popular on the web": PropTypes.string.isRequired,
+    "#\tStrings which contain Emoji; should be the same behavior as two-byte characters, but not always": PropTypes.string.isRequired,
+    "#\tStrings which contain bold/italic/etc. versions of normal characters": PropTypes.string.isRequired,
+    "#\tStrings which contain common unicode symbols (e.g. smart quotes)": PropTypes.string.isRequired,
+    "#\tStrings which contain misplaced quotation marks; can cause encoding errors": PropTypes.string.isRequired,
+    "#\tStrings which contain unicode subscripts/superscripts; can cause rendering issues": PropTypes.string.isRequired,
+    "#\tStrings which crashed iMessage in various versions of iOS": PropTypes.string.isRequired,
+    "#\tStrings which may cause human to reinterpret worldview": PropTypes.string.isRequired,
+    "#\tTwo-Byte Characters": PropTypes.string.isRequired,
+    "#\tUnicode Numbers": PropTypes.string.isRequired,
+    "#\tUnicode font": PropTypes.string.isRequired,
+    "#\tUnwanted Interpolation": PropTypes.string.isRequired,
+    "#       fonts, and have a number of special behaviors": PropTypes.string.isRequired,
+    "# Non-whitespace C1 controls: U+0080 through U+0084 and U+0086 through U+009F.": PropTypes.string.isRequired,
+    "# The next two lines may appear to be blank or mojibake in some viewers.": PropTypes.string.isRequired,
+    "# U+0000, U+000A, or U+000D (NUL, LF, CR).": PropTypes.string.isRequired,
+    "# and U+200B (ZERO WIDTH SPACE), which are in the C categories but are often": PropTypes.string.isRequired,
+    "$ENV{'HOME'}": PropTypes.string.isRequired,
+    "$HOME": PropTypes.string.isRequired,
+    "%d": PropTypes.string.isRequired,
+    "%s": PropTypes.string.isRequired,
+    "%x('ls -al /')": PropTypes.string.isRequired,
+    "'": PropTypes.string.isRequired,
+    "' OR '1'='1": PropTypes.string.isRequired,
+    "'\"'": PropTypes.string.isRequired,
+    "';alert(123);t='": PropTypes.string.isRequired,
+    "( ͡° ͜ʖ ͡°)": PropTypes.string.isRequired,
+    "(null)": PropTypes.string.isRequired,
+    "(╯°□°）╯︵ ┻━┻)": PropTypes.string.isRequired,
+    "+0": PropTypes.string.isRequired,
+    ",": PropTypes.string.isRequired,
+    ",./;'[]\\-=": PropTypes.string.isRequired,
+    "-,": PropTypes.string.isRequired,
+    "-.": PropTypes.string.isRequired,
+    "-0": PropTypes.string.isRequired,
+    "-1": PropTypes.string.isRequired,
+    "-1E02": PropTypes.string.isRequired,
+    "-Infinity": PropTypes.string.isRequired,
+    "../../../../../../../../../../../etc/hosts": PropTypes.string.isRequired,
+    "../../../../../../../../../../../etc/passwd%00": PropTypes.string.isRequired,
+    "0": PropTypes.string.isRequired,
+    "0,0,0": PropTypes.string.isRequired,
+    "0,0/0,0": PropTypes.string.isRequired,
+    "0,00": PropTypes.string.isRequired,
+    "0..0": PropTypes.string.isRequired,
+    "0.0/0.0": PropTypes.string.isRequired,
+    "00˙Ɩ$-": PropTypes.string.isRequired,
+    "0x0": PropTypes.string.isRequired,
+    "1": PropTypes.string.isRequired,
+    "1 000 000.00": PropTypes.string.isRequired,
+    "1#QNAN": PropTypes.string.isRequired,
+    "1#SNAN": PropTypes.string.isRequired,
+    "1'000'000.00": PropTypes.string.isRequired,
+    "1'000,00": PropTypes.string.isRequired,
+    "1.0/0.0": PropTypes.string.isRequired,
+    "1.00": PropTypes.string.isRequired,
+    "1/0": PropTypes.string.isRequired,
+    "1/2": PropTypes.string.isRequired,
+    "123456789012345678901234567890123456789": PropTypes.string.isRequired,
+    "1;DROP TABLE users": PropTypes.string.isRequired,
+    "1E02": PropTypes.string.isRequired,
+    "1E2": PropTypes.string.isRequired,
+    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999": PropTypes.string.isRequired,
+    ";alert(123);": PropTypes.string.isRequired,
+    "<!--[if<img src=x onerror=javascript:alert(1)//]> -->": PropTypes.string.isRequired,
+    "<!--[if]><script>javascript:alert(1)</script -->": PropTypes.string.isRequired,
+    "</script><script>alert(123)</script>": PropTypes.string.isRequired,
+    "</textarea><script>alert(123)</script>": PropTypes.string.isRequired,
+    "<<< %s(un='%s') = %u": PropTypes.string.isRequired,
+    "<>?:\"{}|_+": PropTypes.string.isRequired,
+    "<IMG SRC=\"jav   ascript:alert('XSS');\">": PropTypes.string.isRequired,
+    "<IMG SRC=\"jav&#x0A;ascript:alert('XSS');\">": PropTypes.string.isRequired,
+    "<IMG SRC=\"jav&#x0D;ascript:alert('XSS');\">": PropTypes.string.isRequired,
+    "<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>": PropTypes.string.isRequired,
+    "<SCRIPT SRC=http://ha.ckers.org/xss.js?< B >": PropTypes.string.isRequired,
+    "<SCRIPT/SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>": PropTypes.string.isRequired,
+    "<SCRIPT/XSS SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>": PropTypes.string.isRequired,
+    "<a href=\"\\x01javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x05javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x08javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x09javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x0Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x10javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x11javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x13javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x17javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\x1Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xC2\\xA0javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE1\\x9A\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE1\\xA0\\x8Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x83javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x84javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x86javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\x87javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"\\xE2\\x80\\xA8javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"javascript\\x09:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"javascript\\x0A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=\"javascript\\x3A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>": PropTypes.string.isRequired,
+    "<a href=java&#1&#2&#3&#4&#5&#6&#7&#8&#11&#12script:javascript:alert(1)>XXX</a>": PropTypes.string.isRequired,
+    "<foo val=`bar' />": PropTypes.string.isRequired,
+    "<img \\x00src=x onerror=\"alert(1)\">": PropTypes.string.isRequired,
+    "<img \\x39src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x onerror=\\x00\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x onerror=\\x09\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x\\x09onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x\\x10onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x\\x11onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x\\x12onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src=x\\x13onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src\\x09=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img src\\x11=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img\\x10src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img\\x13src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<img\\x32src=x onerror=\"javascript:alert(1)\">": PropTypes.string.isRequired,
+    "<sc<script>ript>alert(123)</sc</script>ript>": PropTypes.string.isRequired,
+    "<script\\x09type=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string.isRequired,
+    "<script\\x20type=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string.isRequired,
+    "<script\\x3Etype=\"text/javascript\">javascript:alert(1);</script>": PropTypes.string.isRequired,
+    "<u oncopy=alert()> Copy me</u>": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\x09expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\x0Bexpression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\x20expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xC2\\xA0expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x80expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x84expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x89expression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:\\xE2\\x80\\x8Bexpression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:exp\\x00ression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x:exp\\x5Cression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "ABC<div style=\"x\\x3Aexpression(javascript:alert(1)\">DEF": PropTypes.string.isRequired,
+    "AUX": PropTypes.string.isRequired,
+    "Arsenal canal": PropTypes.string.isRequired,
+    "Dick Van Dyke": PropTypes.string.isRequired,
+    "Dr. Herman I. Libshitz": PropTypes.string.isRequired,
+    "False": PropTypes.string.isRequired,
+    "INF": PropTypes.string.isRequired,
+    "Jimmy Clitheroe": PropTypes.string.isRequired,
+    "Kernel.exit(1)": PropTypes.string.isRequired,
+    "LPT2": PropTypes.string.isRequired,
+    "LPT3": PropTypes.string.isRequired,
+    "Lightwater Country Park": PropTypes.string.isRequired,
+    "None": PropTypes.string.isRequired,
+    "PRN": PropTypes.string.isRequired,
+    "Penistone Community Church": PropTypes.string.isRequired,
+    "RomansInSussex.co.uk": PropTypes.string.isRequired,
+    "Super Bowl XXX": PropTypes.string.isRequired,
+    "TRUE": PropTypes.string.isRequired,
+    "The quic\u0008\u0008\u0008\u0008\u0008\u0008k brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]": PropTypes.string.isRequired,
+    "True": PropTypes.string.isRequired,
+    "Z̮̞̠͙͔ͅḀ̗̞͈̻̗Ḷ͙͎̯̹̞͓G̻O̭̗̮": PropTypes.string.isRequired,
+    "\\": PropTypes.string.isRequired,
+    "\\\";alert('XSS');//": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x00onerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x0Bonerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`\"'><img src=xxx:x \\x2Fonerror=javascript:alert(1)>": PropTypes.string.isRequired,
+    "`ls -al /`": PropTypes.string.isRequired,
+    "`⁄€‹›ﬁﬂ‡°·‚—±": PropTypes.string.isRequired,
+    "classic": PropTypes.string.isRequired,
+    "dontMakeAMap": PropTypes.bool.isRequired,
+    "false": PropTypes.string.isRequired,
+    "nil": PropTypes.string.isRequired,
+    "perl -e 'print \"<IMG SRC=java\\0script:alert(\\\"XSS\\\")>\";' > out": PropTypes.string.isRequired,
+    "undef": PropTypes.string.isRequired,
+    "{0}": PropTypes.string.isRequired,
+    "\u0080\u0081\u0082\u0083\u0084\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f": PropTypes.string.isRequired,
+    "¡™£¢∞§¶•ªº–≠": PropTypes.string.isRequired,
+    "\u00ad\u0600\u0601\u0602\u0603\u0604\u0605\u061c\u06dd\u070f\u180e\u200b\u200c\u200d\u200e\u200f\u202a\u202b\u202c\u202d\u202e\u2060\u2061\u2062\u2063\u2064\u2066\u2067\u2068\u2069\u206a\u206b\u206c\u206d\u206e\u206f\ufeff\ufff9\ufffa\ufffb\ud804\udcbd\ud82f\udca0\ud82f\udca1\ud82f\udca2\ud82f\udca3\ud834\udd73\ud834\udd74\ud834\udd75\ud834\udd76\ud834\udd77\ud834\udd78\ud834\udd79\ud834\udd7a\udb40\udc01\udb40\udc20\udb40\udc21\udb40\udc22\udb40\udc23\udb40\udc24\udb40\udc25\udb40\udc26\udb40\udc27\udb40\udc28\udb40\udc29\udb40\udc2a\udb40\udc2b\udb40\udc2c\udb40\udc2d\udb40\udc2e\udb40\udc2f\udb40\udc30\udb40\udc31\udb40\udc32\udb40\udc33\udb40\udc34\udb40\udc35\udb40\udc36\udb40\udc37\udb40\udc38\udb40\udc39\udb40\udc3a\udb40\udc3b\udb40\udc3c\udb40\udc3d\udb40\udc3e\udb40\udc3f\udb40\udc40\udb40\udc41\udb40\udc42\udb40\udc43\udb40\udc44\udb40\udc45\udb40\udc46\udb40\udc47\udb40\udc48\udb40\udc49\udb40\udc4a\udb40\udc4b\udb40\udc4c\udb40\udc4d\udb40\udc4e\udb40\udc4f\udb40\udc50\udb40\udc51\udb40\udc52\udb40\udc53\udb40\udc54\udb40\udc55\udb40\udc56\udb40\udc57\udb40\udc58\udb40\udc59\udb40\udc5a\udb40\udc5b\udb40\udc5c\udb40\udc5d\udb40\udc5e\udb40\udc5f\udb40\udc60\udb40\udc61\udb40\udc62\udb40\udc63\udb40\udc64\udb40\udc65\udb40\udc66\udb40\udc67\udb40\udc68\udb40\udc69\udb40\udc6a\udb40\udc6b\udb40\udc6c\udb40\udc6d\udb40\udc6e\udb40\udc6f\udb40\udc70\udb40\udc71\udb40\udc72\udb40\udc73\udb40\udc74\udb40\udc75\udb40\udc76\udb40\udc77\udb40\udc78\udb40\udc79\udb40\udc7a\udb40\udc7b\udb40\udc7c\udb40\udc7d\udb40\udc7e\udb40\udc7f": PropTypes.string.isRequired,
+    "¸˛Ç◊ı˜Â¯˘¿": PropTypes.string.isRequired,
+    "Œ„´‰ˇÁ¨ˆØ∏”’": PropTypes.string.isRequired,
+    "œ∑´®†¥¨ˆøπ“‘": PropTypes.string.isRequired,
+    "Ⱥ": PropTypes.string.isRequired,
+    "Ⱦ": PropTypes.string.isRequired,
+    "̡͓̞ͅI̗̘̦͝n͇͇͙v̮̫ok̲̫̙͈i̖͙̭̹̠̞n̡̻̮̣̺g̲͈͙̭͙̬͎ ̰t͔̦h̞̲e̢̤ ͍̬̲͖f̴̘͕̣è͖ẹ̥̩l͖͔͚i͓͚̦͠n͖͍̗͓̳̮g͍ ̨o͚̪͡f̘̣̬ ̖̘͖̟͙̮c҉͔̫͖͓͇͖ͅh̵̤̣͚͔á̗̼͕ͅo̼̣̥s̱͈̺̖̦̻͢.̛̖̞̠̫̰": PropTypes.string.isRequired,
+    "הָיְתָהtestالصفحات التّحول": PropTypes.string.isRequired,
+    "ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.": PropTypes.string.isRequired,
+    "٠١٢٣٤٥٦٧٨٩": PropTypes.string.isRequired,
+    "ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็": PropTypes.string.isRequired,
+    "\u202a\u202atest\u202a": PropTypes.string.isRequired,
+    "\u202btest\u202b": PropTypes.string.isRequired,
+    "\u2066test\u2067": PropTypes.string.isRequired,
+    "₀₁₂": PropTypes.string.isRequired,
+    "⒯⒣⒠ ⒬⒰⒤⒞⒦ ⒝⒭⒪⒲⒩ ⒡⒪⒳ ⒥⒰⒨⒫⒮ ⒪⒱⒠⒭ ⒯⒣⒠ ⒧⒜⒵⒴ ⒟⒪⒢": PropTypes.string.isRequired,
+    "パーティーへ行かないか": PropTypes.string.isRequired,
+    "和製漢語": PropTypes.string.isRequired,
+    "田中さんにあげて下さい": PropTypes.string.isRequired,
+    "\ud835\udc7b\ud835\udc89\ud835\udc86 \ud835\udc92\ud835\udc96\ud835\udc8a\ud835\udc84\ud835\udc8c \ud835\udc83\ud835\udc93\ud835\udc90\ud835\udc98\ud835\udc8f \ud835\udc87\ud835\udc90\ud835\udc99 \ud835\udc8b\ud835\udc96\ud835\udc8e\ud835\udc91\ud835\udc94 \ud835\udc90\ud835\udc97\ud835\udc86\ud835\udc93 \ud835\udc95\ud835\udc89\ud835\udc86 \ud835\udc8d\ud835\udc82\ud835\udc9b\ud835\udc9a \ud835\udc85\ud835\udc90\ud835\udc88": PropTypes.string.isRequired,
+    "\ud835\udce3\ud835\udcf1\ud835\udcee \ud835\udcfa\ud835\udcfe\ud835\udcf2\ud835\udcec\ud835\udcf4 \ud835\udceb\ud835\udcfb\ud835\udcf8\ud835\udd00\ud835\udcf7 \ud835\udcef\ud835\udcf8\ud835\udd01 \ud835\udcf3\ud835\udcfe\ud835\udcf6\ud835\udcf9\ud835\udcfc \ud835\udcf8\ud835\udcff\ud835\udcee\ud835\udcfb \ud835\udcfd\ud835\udcf1\ud835\udcee \ud835\udcf5\ud835\udcea\ud835\udd03\ud835\udd02 \ud835\udced\ud835\udcf8\ud835\udcf0": PropTypes.string.isRequired,
+    "\ud835\udd7f\ud835\udd8d\ud835\udd8a \ud835\udd96\ud835\udd9a\ud835\udd8e\ud835\udd88\ud835\udd90 \ud835\udd87\ud835\udd97\ud835\udd94\ud835\udd9c\ud835\udd93 \ud835\udd8b\ud835\udd94\ud835\udd9d \ud835\udd8f\ud835\udd9a\ud835\udd92\ud835\udd95\ud835\udd98 \ud835\udd94\ud835\udd9b\ud835\udd8a\ud835\udd97 \ud835\udd99\ud835\udd8d\ud835\udd8a \ud835\udd91\ud835\udd86\ud835\udd9f\ud835\udd9e \ud835\udd89\ud835\udd94\ud835\udd8c": PropTypes.string.isRequired,
+    "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8 \ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2\ud83c\uddf8": PropTypes.string.isRequired,
+    "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6": PropTypes.string.isRequired,
+    "\ud83c\uddfa\ud83c\uddf8\ud83c\uddf7\ud83c\uddfa\ud83c\uddf8\ud83c\udde6\ud83c\uddeb\ud83c\udde6\ud83c\uddf2": PropTypes.string.isRequired,
+    "\ud83d\udc69\ud83c\udffd": PropTypes.string.isRequired,
+    "\ud83d\udebe \ud83c\udd92 \ud83c\udd93 \ud83c\udd95 \ud83c\udd96 \ud83c\udd97 \ud83c\udd99 \ud83c\udfe7": PropTypes.string.isRequired,
+    "﷽": PropTypes.string.isRequired,
+    "\ufeff": PropTypes.string.isRequired,
+    "｀ｨ(´∀｀∩": PropTypes.string.isRequired,
+    "ﾟ･✿ヾ╲(｡◕‿◕｡)╱✿･ﾟ": PropTypes.string.isRequired,
+    "\ufffe": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "a": _A,
-    "b": _B,
-    "c": _C,
+    "a": (...args) => _A.isRequired(...args),
+    "b": (...args) => _B.isRequired(...args),
+    "c": (...args) => _C.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/bug2037.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/bug2037.json/default/toplevel.js
index b702f9d..8d80113 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/bug2037.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/bug2037.json/default/toplevel.js
@@ -19,13 +19,13 @@ let _Reward;
 _Reward = PropTypes.shape({
 });
 _Objective = PropTypes.shape({
-    "rewards": PropTypes.object,
+    "rewards": PropTypes.object.isRequired,
 });
 _MissionSpec = PropTypes.shape({
-    "objectives": PropTypes.object,
+    "objectives": PropTypes.object.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "mission_specs": PropTypes.object,
+    "mission_specs": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/bug2521.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/bug2521.json/default/toplevel.js
index f526e12..18ae0ad 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/bug2521.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/bug2521.json/default/toplevel.js
@@ -16,10 +16,10 @@ let _TopLevel;
 let _Option;
 _Option = PropTypes.shape({
     "foo": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "options": PropTypes.arrayOf(_Option),
+    "options": PropTypes.arrayOf((...args) => _Option(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/bug2590.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/bug2590.json/default/toplevel.js
index 23696a8..8070afb 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/bug2590.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/bug2590.json/default/toplevel.js
@@ -17,10 +17,10 @@ let _Invoice;
 _Invoice = PropTypes.shape({
     "createdAt": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "dueDate": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "invoices": PropTypes.arrayOf(_Invoice),
+    "invoices": PropTypes.arrayOf((...args) => _Invoice(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/bug2663.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/bug2663.json/default/toplevel.js
index 8e6fa23..c20d7a9 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/bug2663.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/bug2663.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "birthday": PropTypes.string,
-    "lastSeen": PropTypes.string,
-    "name": PropTypes.string,
+    "birthday": PropTypes.string.isRequired,
+    "lastSeen": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/bug2793.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/bug2793.json/default/toplevel.js
index bfb0f53..01ce10b 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/bug2793.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/bug2793.json/default/toplevel.js
@@ -16,14 +16,14 @@ let _TopLevel;
 let _Hints;
 let _Labels;
 _Labels = PropTypes.shape({
-    "AccountNumber": PropTypes.string,
-    "Title": PropTypes.string,
+    "AccountNumber": PropTypes.string.isRequired,
+    "Title": PropTypes.string.isRequired,
 });
 _Hints = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "Hints": _Hints,
-    "Labels": _Labels,
+    "Hints": (...args) => _Hints.isRequired(...args),
+    "Labels": (...args) => _Labels.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/bug427.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/bug427.json/default/toplevel.js
index 3b1932c..6bfbd4e 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/bug427.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/bug427.json/default/toplevel.js
@@ -73,144 +73,144 @@ let _FluffyTypeArgument;
 let _TypeParameter;
 let _MischievousType;
 let _IndecentComment;
-const _PurpleKindString = PropTypes.oneOfType(['variable', 'function', 'property', 'method', 'constructor', 'accessor', 'enumerationMember', 'module', 'objectLiteral']);
-const _SignatureKindString = PropTypes.oneOfType(['callSignature', 'constructorSignature']);
-const _Name = PropTypes.oneOfType(['string', 'number', 'void', 't', 'boolean', 'baseClass', 'any', 'array', 'myNumber']);
-const _TypeEnum = PropTypes.oneOfType(['intrinsic', 'reflection', 'array', 'reference', 'typeParameter', 'tuple', 'union', 'stringLiteral']);
-const _FileName = PropTypes.oneOfType(['modulesTs', 'classesTs', 'flattenedTs', 'accessTs', 'defaultExportTs', 'enumerationsTs', 'functionsTs', 'genericsTs', 'singleExportTs', 'typescript13Ts', 'typescript14Ts', 'typescript15Ts', 'variablesTs']);
-const _ParameterKindString = PropTypes.oneOfType(['parameter']);
-const _FluffyKindString = PropTypes.oneOfType(['module', 'class', 'variable', 'function', 'interface', 'enumeration', 'objectLiteral', 'typeAlias']);
-const _TentacledKindString = PropTypes.oneOfType(['externalModule']);
+const _PurpleKindString = PropTypes.oneOf(["Variable", "Function", "Property", "Method", "Constructor", "Accessor", "Enumeration member", "Module", "Object literal"]);
+const _SignatureKindString = PropTypes.oneOf(["Call signature", "Constructor signature"]);
+const _Name = PropTypes.oneOf(["string", "number", "void", "T", "boolean", "BaseClass", "any", "Array", "MyNumber"]);
+const _TypeEnum = PropTypes.oneOf(["intrinsic", "reflection", "array", "reference", "typeParameter", "tuple", "union", "stringLiteral"]);
+const _FileName = PropTypes.oneOf(["modules.ts", "classes.ts", "flattened.ts", "access.ts", "default-export.ts", "enumerations.ts", "functions.ts", "generics.ts", "single-export.ts", "typescript-1.3.ts", "typescript-1.4.ts", "typescript-1.5.ts", "variables.ts"]);
+const _ParameterKindString = PropTypes.oneOf(["Parameter"]);
+const _FluffyKindString = PropTypes.oneOf(["Module", "Class", "Variable", "Function", "Interface", "Enumeration", "Object literal", "Type alias"]);
+const _TentacledKindString = PropTypes.oneOf(["External module"]);
 _IndecentComment = PropTypes.shape({
-    "shortText": PropTypes.string,
-    "tags": PropTypes.oneOfType([PropTypes.arrayOf(_Tag), PropTypes.any]),
+    "shortText": PropTypes.string.isRequired,
+    "tags": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Tag(...args)), PropTypes.any]),
 });
 _MischievousType = PropTypes.shape({
     "id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
     "operator": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "target": PropTypes.oneOfType([_ElementType, PropTypes.any]),
-    "type": PropTypes.string,
+    "target": PropTypes.oneOfType([(...args) => _ElementType(...args), PropTypes.any]),
+    "type": PropTypes.string.isRequired,
 });
 _TypeParameter = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_PurpleComment, PropTypes.any]),
-    "flags": _GetSignatureFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "type": PropTypes.oneOfType([_MischievousType, PropTypes.any]),
+    "comment": PropTypes.oneOfType([(...args) => _PurpleComment(...args), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "type": PropTypes.oneOfType([(...args) => _MischievousType(...args), PropTypes.any]),
 });
 _FluffyTypeArgument = PropTypes.shape({
-    "type": _TypeEnum,
-    "types": PropTypes.arrayOf(_ElementType),
+    "type": _TypeEnum.isRequired,
+    "types": PropTypes.arrayOf((...args) => _ElementType(...args)).isRequired,
 });
 _IndigoDeclaration = PropTypes.shape({
-    "children": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignature), PropTypes.any]),
-    "flags": _GetSignatureFlags,
-    "groups": PropTypes.oneOfType([PropTypes.arrayOf(_Group), PropTypes.any]),
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "signatures": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignature), PropTypes.any]),
-    "sources": PropTypes.arrayOf(_Source),
+    "children": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignature(...args)), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "groups": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Group(...args)), PropTypes.any]),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "signatures": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignature(...args)), PropTypes.any]),
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
 });
 _FriskyType = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_IndigoDeclaration, PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _IndigoDeclaration(...args), PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
-    "type": _TypeEnum,
+    "type": _TypeEnum.isRequired,
 });
 _IndecentChild = PropTypes.shape({
-    "flags": _FluffyFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _PurpleKindString,
-    "name": PropTypes.string,
-    "sources": PropTypes.arrayOf(_Source),
-    "type": _FriskyType,
+    "flags": (...args) => _FluffyFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _PurpleKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "type": (...args) => _FriskyType.isRequired(...args),
 });
 _StickyDeclaration = PropTypes.shape({
-    "children": PropTypes.oneOfType([PropTypes.arrayOf(_IndecentChild), PropTypes.any]),
-    "flags": _GetSignatureFlags,
-    "groups": PropTypes.oneOfType([PropTypes.arrayOf(_Group), PropTypes.any]),
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "signatures": PropTypes.arrayOf(_GetSignature),
-    "sources": PropTypes.arrayOf(_Source),
+    "children": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _IndecentChild(...args)), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "groups": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Group(...args)), PropTypes.any]),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "signatures": PropTypes.arrayOf((...args) => _GetSignature(...args)).isRequired,
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
 });
 _MagentaType = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_StickyDeclaration, PropTypes.any]),
-    "elementType": PropTypes.oneOfType([_ElementType, PropTypes.any]),
-    "elements": PropTypes.oneOfType([PropTypes.arrayOf(_ExtendedBy), PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _StickyDeclaration(...args), PropTypes.any]),
+    "elementType": PropTypes.oneOfType([(...args) => _ElementType(...args), PropTypes.any]),
+    "elements": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ExtendedBy(...args)), PropTypes.any]),
     "id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "name": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "type": _TypeEnum,
-    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf(_FluffyTypeArgument), PropTypes.any]),
-    "types": PropTypes.oneOfType([PropTypes.arrayOf(_ExtendedBy), PropTypes.any]),
+    "type": _TypeEnum.isRequired,
+    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _FluffyTypeArgument(...args)), PropTypes.any]),
+    "types": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ExtendedBy(...args)), PropTypes.any]),
     "value": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _CunningType = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_PurpleDeclaration, PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _PurpleDeclaration(...args), PropTypes.any]),
     "id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
-    "type": _TypeEnum,
-    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf(_ElementType), PropTypes.any]),
+    "type": _TypeEnum.isRequired,
+    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ElementType(...args)), PropTypes.any]),
 });
 _IndigoChild = PropTypes.shape({
-    "comment": _FluffyComment,
+    "comment": (...args) => _FluffyComment.isRequired(...args),
     "defaultValue": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "flags": _FluffyFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _PurpleKindString,
-    "name": PropTypes.string,
-    "sources": PropTypes.arrayOf(_Source),
-    "type": _IndecentType,
+    "flags": (...args) => _FluffyFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _PurpleKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "type": (...args) => _IndecentType.isRequired(...args),
 });
 _TentacledDeclaration = PropTypes.shape({
-    "children": PropTypes.oneOfType([PropTypes.arrayOf(_IndigoChild), PropTypes.any]),
-    "flags": _GetSignatureFlags,
-    "groups": PropTypes.oneOfType([PropTypes.arrayOf(_Group), PropTypes.any]),
-    "id": PropTypes.number,
-    "indexSignature": PropTypes.oneOfType([_IndexSignatureElement, PropTypes.any]),
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "signatures": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignature), PropTypes.any]),
-    "sources": PropTypes.arrayOf(_Source),
+    "children": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _IndigoChild(...args)), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "groups": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Group(...args)), PropTypes.any]),
+    "id": PropTypes.number.isRequired,
+    "indexSignature": PropTypes.oneOfType([(...args) => _IndexSignatureElement(...args), PropTypes.any]),
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "signatures": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignature(...args)), PropTypes.any]),
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
 });
 _AmbitiousType = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_TentacledDeclaration, PropTypes.any]),
-    "elementType": PropTypes.oneOfType([_ElementType, PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _TentacledDeclaration(...args), PropTypes.any]),
+    "elementType": PropTypes.oneOfType([(...args) => _ElementType(...args), PropTypes.any]),
     "id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "name": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "type": _TypeEnum,
-    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf(_ElementType), PropTypes.any]),
+    "type": _TypeEnum.isRequired,
+    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ElementType(...args)), PropTypes.any]),
 });
 _TentacledParameter = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_TentacledComment, PropTypes.any]),
+    "comment": PropTypes.oneOfType([(...args) => _TentacledComment(...args), PropTypes.any]),
     "defaultValue": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "flags": _TentacledFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _ParameterKindString,
-    "name": PropTypes.string,
+    "flags": (...args) => _TentacledFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _ParameterKindString.isRequired,
+    "name": PropTypes.string.isRequired,
     "originalName": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "type": _AmbitiousType,
+    "type": (...args) => _AmbitiousType.isRequired(...args),
 });
 _StickySignature = PropTypes.shape({
-    "comment": _StickyComment,
-    "flags": _IndigoFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _SignatureKindString,
-    "name": PropTypes.string,
-    "parameters": PropTypes.oneOfType([PropTypes.arrayOf(_TentacledParameter), PropTypes.any]),
-    "type": _CunningType,
-    "typeParameter": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignature), PropTypes.any]),
+    "comment": (...args) => _StickyComment.isRequired(...args),
+    "flags": (...args) => _IndigoFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _SignatureKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "parameters": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TentacledParameter(...args)), PropTypes.any]),
+    "type": (...args) => _CunningType.isRequired(...args),
+    "typeParameter": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignature(...args)), PropTypes.any]),
 });
 _IndecentFlags = PropTypes.shape({
     "hasExportAssignment": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
@@ -222,129 +222,129 @@ _IndecentFlags = PropTypes.shape({
     "isProtected": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
 });
 _PurpleTypeArgument = PropTypes.shape({
-    "operator": PropTypes.string,
-    "target": _ElementType,
-    "type": PropTypes.string,
+    "operator": PropTypes.string.isRequired,
+    "target": (...args) => _ElementType.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 _FluffyParameter = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_FluffyComment, PropTypes.any]),
-    "flags": _FluffyFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "sources": PropTypes.oneOfType([PropTypes.arrayOf(_Source), PropTypes.any]),
-    "type": _ElementType,
+    "comment": PropTypes.oneOfType([(...args) => _FluffyComment(...args), PropTypes.any]),
+    "flags": (...args) => _FluffyFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "sources": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Source(...args)), PropTypes.any]),
+    "type": (...args) => _ElementType.isRequired(...args),
 });
 _IndigoComment = PropTypes.shape({
-    "returns": PropTypes.string,
-    "shortText": PropTypes.string,
+    "returns": PropTypes.string.isRequired,
+    "shortText": PropTypes.string.isRequired,
 });
 _TentacledSignature = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_IndigoComment, PropTypes.any]),
-    "flags": _GetSignatureFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _SignatureKindString,
-    "name": PropTypes.string,
-    "parameters": PropTypes.oneOfType([PropTypes.arrayOf(_FluffyParameter), PropTypes.any]),
-    "type": _ExtendedBy,
+    "comment": PropTypes.oneOfType([(...args) => _IndigoComment(...args), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _SignatureKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "parameters": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _FluffyParameter(...args)), PropTypes.any]),
+    "type": (...args) => _ExtendedBy.isRequired(...args),
 });
 _HilariousType = PropTypes.shape({
-    "declaration": _GetSignature,
-    "type": _TypeEnum,
+    "declaration": (...args) => _GetSignature.isRequired(...args),
+    "type": _TypeEnum.isRequired,
 });
 _IndexSignature = PropTypes.shape({
-    "flags": _GetSignatureFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "parameters": PropTypes.arrayOf(_GetSignature),
-    "type": _HilariousType,
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "parameters": PropTypes.arrayOf((...args) => _GetSignature(...args)).isRequired,
+    "type": (...args) => _HilariousType.isRequired(...args),
 });
 _IndecentType = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_GetSignature, PropTypes.any]),
-    "elements": PropTypes.oneOfType([PropTypes.arrayOf(_ElementType), PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _GetSignature(...args), PropTypes.any]),
+    "elements": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ElementType(...args)), PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
-    "type": _TypeEnum,
+    "type": _TypeEnum.isRequired,
 });
 _StickyChild = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_FluffyComment, PropTypes.any]),
-    "flags": _FluffyFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _PurpleKindString,
-    "name": PropTypes.string,
-    "sources": PropTypes.arrayOf(_Source),
-    "type": _IndecentType,
+    "comment": PropTypes.oneOfType([(...args) => _FluffyComment(...args), PropTypes.any]),
+    "flags": (...args) => _FluffyFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _PurpleKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "type": (...args) => _IndecentType.isRequired(...args),
 });
 _FluffyDeclaration = PropTypes.shape({
-    "children": PropTypes.oneOfType([PropTypes.arrayOf(_StickyChild), PropTypes.any]),
-    "flags": _GetSignatureFlags,
-    "groups": PropTypes.oneOfType([PropTypes.arrayOf(_Group), PropTypes.any]),
-    "id": PropTypes.number,
-    "indexSignature": PropTypes.oneOfType([_IndexSignature, PropTypes.any]),
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "signatures": PropTypes.oneOfType([PropTypes.arrayOf(_TentacledSignature), PropTypes.any]),
-    "sources": PropTypes.arrayOf(_Source),
+    "children": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _StickyChild(...args)), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "groups": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Group(...args)), PropTypes.any]),
+    "id": PropTypes.number.isRequired,
+    "indexSignature": PropTypes.oneOfType([(...args) => _IndexSignature(...args), PropTypes.any]),
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "signatures": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TentacledSignature(...args)), PropTypes.any]),
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
 });
 _IndigoType = PropTypes.shape({
-    "constraint": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "declaration": PropTypes.oneOfType([_FluffyDeclaration, PropTypes.any]),
-    "elementType": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "elements": PropTypes.oneOfType([PropTypes.arrayOf(_ElementType), PropTypes.any]),
+    "constraint": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _FluffyDeclaration(...args), PropTypes.any]),
+    "elementType": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "elements": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ElementType(...args)), PropTypes.any]),
     "id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "name": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "type": _TypeEnum,
-    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf(_PurpleTypeArgument), PropTypes.any]),
-    "types": PropTypes.oneOfType([PropTypes.arrayOf(_TypeElement), PropTypes.any]),
+    "type": _TypeEnum.isRequired,
+    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _PurpleTypeArgument(...args)), PropTypes.any]),
+    "types": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TypeElement(...args)), PropTypes.any]),
 });
 _StickyType = PropTypes.shape({
-    "constraint": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "declaration": PropTypes.oneOfType([_GetSignature, PropTypes.any]),
-    "elementType": PropTypes.oneOfType([_ElementType, PropTypes.any]),
-    "elements": PropTypes.oneOfType([PropTypes.arrayOf(_ExtendedBy), PropTypes.any]),
+    "constraint": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _GetSignature(...args), PropTypes.any]),
+    "elementType": PropTypes.oneOfType([(...args) => _ElementType(...args), PropTypes.any]),
+    "elements": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ExtendedBy(...args)), PropTypes.any]),
     "id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "name": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "type": _TypeEnum,
-    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf(_ElementType), PropTypes.any]),
+    "type": _TypeEnum.isRequired,
+    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ElementType(...args)), PropTypes.any]),
 });
 _PurpleParameter = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_TentacledComment, PropTypes.any]),
-    "flags": _GetSignatureFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _ParameterKindString,
-    "name": PropTypes.string,
-    "type": _StickyType,
+    "comment": PropTypes.oneOfType([(...args) => _TentacledComment(...args), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _ParameterKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "type": (...args) => _StickyType.isRequired(...args),
 });
 _IndigoFlags = PropTypes.shape({
     "isPrivate": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
     "isProtected": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
 });
 _FluffySignature = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_StickyComment, PropTypes.any]),
-    "flags": _IndigoFlags,
-    "id": PropTypes.number,
-    "implementationOf": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "inheritedFrom": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "kind": PropTypes.number,
-    "kindString": _SignatureKindString,
-    "name": PropTypes.string,
-    "overwrites": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "parameters": PropTypes.oneOfType([PropTypes.arrayOf(_PurpleParameter), PropTypes.any]),
-    "type": _ExtendedBy,
-    "typeParameter": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignature), PropTypes.any]),
+    "comment": PropTypes.oneOfType([(...args) => _StickyComment(...args), PropTypes.any]),
+    "flags": (...args) => _IndigoFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "implementationOf": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "inheritedFrom": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "kind": PropTypes.number.isRequired,
+    "kindString": _SignatureKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "overwrites": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "parameters": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _PurpleParameter(...args)), PropTypes.any]),
+    "type": (...args) => _ExtendedBy.isRequired(...args),
+    "typeParameter": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignature(...args)), PropTypes.any]),
 });
 _ExtendedBy = PropTypes.shape({
-    "constraint": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
+    "constraint": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
     "id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "name": PropTypes.string,
-    "type": _TypeEnum,
-    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf(_ExtendedBy), PropTypes.any]),
+    "name": PropTypes.string.isRequired,
+    "type": _TypeEnum.isRequired,
+    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ExtendedBy(...args)), PropTypes.any]),
 });
 _StickyFlags = PropTypes.shape({
     "isAbstract": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
@@ -356,41 +356,41 @@ _StickyFlags = PropTypes.shape({
     "isStatic": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
 });
 _Tag = PropTypes.shape({
-    "tag": PropTypes.string,
-    "text": PropTypes.string,
+    "tag": PropTypes.string.isRequired,
+    "text": PropTypes.string.isRequired,
 });
 _StickyComment = PropTypes.shape({
     "returns": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "shortText": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "tags": PropTypes.oneOfType([PropTypes.arrayOf(_Tag), PropTypes.any]),
+    "tags": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Tag(...args)), PropTypes.any]),
     "text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _TypeElement = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_GetSignature, PropTypes.any]),
-    "elementType": PropTypes.oneOfType([_ElementType, PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _GetSignature(...args), PropTypes.any]),
+    "elementType": PropTypes.oneOfType([(...args) => _ElementType(...args), PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
-    "type": _TypeEnum,
-    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf(_ElementType), PropTypes.any]),
+    "type": _TypeEnum.isRequired,
+    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ElementType(...args)), PropTypes.any]),
 });
 _PurpleDeclaration = PropTypes.shape({
-    "children": PropTypes.arrayOf(_GetSignature),
-    "flags": _GetSignatureFlags,
-    "groups": PropTypes.arrayOf(_Group),
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _GetSignature(...args)).isRequired,
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "groups": PropTypes.arrayOf((...args) => _Group(...args)).isRequired,
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _TentacledType = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_PurpleDeclaration, PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _PurpleDeclaration(...args), PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
-    "type": _TypeEnum,
+    "type": _TypeEnum.isRequired,
 });
 _FluffyType = PropTypes.shape({
-    "elementType": PropTypes.oneOfType([_ElementType, PropTypes.any]),
+    "elementType": PropTypes.oneOfType([(...args) => _ElementType(...args), PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
-    "type": _TypeEnum,
-    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf(_ElementType), PropTypes.any]),
+    "type": _TypeEnum.isRequired,
+    "typeArguments": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ElementType(...args)), PropTypes.any]),
 });
 _TentacledFlags = PropTypes.shape({
     "isOptional": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
@@ -401,18 +401,18 @@ _TentacledComment = PropTypes.shape({
     "text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _GetSignatureParameter = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_TentacledComment, PropTypes.any]),
-    "flags": _TentacledFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _ParameterKindString,
-    "name": PropTypes.string,
-    "type": _FluffyType,
+    "comment": PropTypes.oneOfType([(...args) => _TentacledComment(...args), PropTypes.any]),
+    "flags": (...args) => _TentacledFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _ParameterKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "type": (...args) => _FluffyType.isRequired(...args),
 });
 _Group = PropTypes.shape({
-    "children": PropTypes.arrayOf(PropTypes.number),
-    "kind": PropTypes.number,
-    "title": PropTypes.string,
+    "children": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "kind": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
 });
 _GetSignatureComment = PropTypes.shape({
     "returns": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -420,153 +420,153 @@ _GetSignatureComment = PropTypes.shape({
     "text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Source = PropTypes.shape({
-    "character": PropTypes.number,
-    "fileName": _FileName,
-    "line": PropTypes.number,
+    "character": PropTypes.number.isRequired,
+    "fileName": _FileName.isRequired,
+    "line": PropTypes.number.isRequired,
 });
 _FluffyFlags = PropTypes.shape({
     "isOptional": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
 });
 _FluffyComment = PropTypes.shape({
-    "text": PropTypes.string,
+    "text": PropTypes.string.isRequired,
 });
 _ElementType = PropTypes.shape({
-    "name": _Name,
-    "type": _TypeEnum,
+    "name": _Name.isRequired,
+    "type": _TypeEnum.isRequired,
 });
 _GetSignature = PropTypes.shape({
-    "children": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignatureChild), PropTypes.any]),
-    "comment": PropTypes.oneOfType([_GetSignatureComment, PropTypes.any]),
+    "children": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignatureChild(...args)), PropTypes.any]),
+    "comment": PropTypes.oneOfType([(...args) => _GetSignatureComment(...args), PropTypes.any]),
     "defaultValue": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "flags": _GetSignatureFlags,
-    "groups": PropTypes.oneOfType([PropTypes.arrayOf(_Group), PropTypes.any]),
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "parameters": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignatureParameter), PropTypes.any]),
-    "signatures": PropTypes.oneOfType([PropTypes.arrayOf(_IndexSignatureElement), PropTypes.any]),
-    "sources": PropTypes.oneOfType([PropTypes.arrayOf(_Source), PropTypes.any]),
-    "type": PropTypes.oneOfType([_GetSignatureType, PropTypes.any]),
-    "typeParameter": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignature), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "groups": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Group(...args)), PropTypes.any]),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "parameters": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignatureParameter(...args)), PropTypes.any]),
+    "signatures": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _IndexSignatureElement(...args)), PropTypes.any]),
+    "sources": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Source(...args)), PropTypes.any]),
+    "type": PropTypes.oneOfType([(...args) => _GetSignatureType(...args), PropTypes.any]),
+    "typeParameter": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignature(...args)), PropTypes.any]),
 });
 _GetSignatureChild = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_FluffyComment, PropTypes.any]),
-    "flags": _FluffyFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _PurpleKindString,
-    "name": PropTypes.string,
-    "sources": PropTypes.arrayOf(_Source),
-    "type": _PurpleType,
+    "comment": PropTypes.oneOfType([(...args) => _FluffyComment(...args), PropTypes.any]),
+    "flags": (...args) => _FluffyFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _PurpleKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "type": (...args) => _PurpleType.isRequired(...args),
 });
 _PurpleType = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_GetSignature, PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _GetSignature(...args), PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
-    "type": _TypeEnum,
+    "type": _TypeEnum.isRequired,
 });
 _IndexSignatureElement = PropTypes.shape({
-    "flags": _GetSignatureFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": PropTypes.string,
-    "name": PropTypes.string,
-    "parameters": PropTypes.oneOfType([PropTypes.arrayOf(_GetSignature), PropTypes.any]),
-    "type": _PurpleType,
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "parameters": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _GetSignature(...args)), PropTypes.any]),
+    "type": (...args) => _PurpleType.isRequired(...args),
 });
 _GetSignatureType = PropTypes.shape({
-    "declaration": PropTypes.oneOfType([_GetSignature, PropTypes.any]),
-    "elementType": PropTypes.oneOfType([_ElementType, PropTypes.any]),
+    "declaration": PropTypes.oneOfType([(...args) => _GetSignature(...args), PropTypes.any]),
+    "elementType": PropTypes.oneOfType([(...args) => _ElementType(...args), PropTypes.any]),
     "name": PropTypes.oneOfType([_Name, PropTypes.any]),
-    "type": _TypeEnum,
+    "type": _TypeEnum.isRequired,
 });
 _GetSignatureFlags = PropTypes.shape({
 });
 _PurpleSignature = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_PurpleComment, PropTypes.any]),
-    "flags": _GetSignatureFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _SignatureKindString,
-    "name": PropTypes.string,
-    "parameters": PropTypes.arrayOf(_GetSignature),
-    "type": _TentacledType,
+    "comment": PropTypes.oneOfType([(...args) => _PurpleComment(...args), PropTypes.any]),
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _SignatureKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "parameters": PropTypes.arrayOf((...args) => _GetSignature(...args)).isRequired,
+    "type": (...args) => _TentacledType.isRequired(...args),
 });
 _PurpleFlags = PropTypes.shape({
     "isExported": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
 });
 _PurpleComment = PropTypes.shape({
-    "shortText": PropTypes.string,
+    "shortText": PropTypes.string.isRequired,
 });
 _TentacledChild = PropTypes.shape({
-    "comment": PropTypes.oneOfType([_PurpleComment, PropTypes.any]),
+    "comment": PropTypes.oneOfType([(...args) => _PurpleComment(...args), PropTypes.any]),
     "defaultValue": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "flags": _PurpleFlags,
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _PurpleKindString,
-    "name": PropTypes.string,
-    "signatures": PropTypes.oneOfType([PropTypes.arrayOf(_PurpleSignature), PropTypes.any]),
-    "sources": PropTypes.arrayOf(_Source),
-    "type": PropTypes.oneOfType([_TypeElement, PropTypes.any]),
+    "flags": (...args) => _PurpleFlags.isRequired(...args),
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _PurpleKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "signatures": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _PurpleSignature(...args)), PropTypes.any]),
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "type": PropTypes.oneOfType([(...args) => _TypeElement(...args), PropTypes.any]),
 });
 _FluffyChild = PropTypes.shape({
-    "children": PropTypes.oneOfType([PropTypes.arrayOf(_TentacledChild), PropTypes.any]),
-    "comment": PropTypes.oneOfType([_StickyComment, PropTypes.any]),
+    "children": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TentacledChild(...args)), PropTypes.any]),
+    "comment": PropTypes.oneOfType([(...args) => _StickyComment(...args), PropTypes.any]),
     "defaultValue": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "flags": _StickyFlags,
-    "getSignature": PropTypes.oneOfType([_GetSignature, PropTypes.any]),
-    "groups": PropTypes.oneOfType([PropTypes.arrayOf(_Group), PropTypes.any]),
-    "id": PropTypes.number,
-    "implementationOf": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "inheritedFrom": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "kind": PropTypes.number,
-    "kindString": _PurpleKindString,
-    "name": PropTypes.string,
-    "overwrites": PropTypes.oneOfType([_ExtendedBy, PropTypes.any]),
-    "setSignature": PropTypes.oneOfType([_GetSignature, PropTypes.any]),
-    "signatures": PropTypes.oneOfType([PropTypes.arrayOf(_FluffySignature), PropTypes.any]),
-    "sources": PropTypes.arrayOf(_Source),
-    "type": PropTypes.oneOfType([_IndigoType, PropTypes.any]),
+    "flags": (...args) => _StickyFlags.isRequired(...args),
+    "getSignature": PropTypes.oneOfType([(...args) => _GetSignature(...args), PropTypes.any]),
+    "groups": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Group(...args)), PropTypes.any]),
+    "id": PropTypes.number.isRequired,
+    "implementationOf": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "inheritedFrom": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "kind": PropTypes.number.isRequired,
+    "kindString": _PurpleKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "overwrites": PropTypes.oneOfType([(...args) => _ExtendedBy(...args), PropTypes.any]),
+    "setSignature": PropTypes.oneOfType([(...args) => _GetSignature(...args), PropTypes.any]),
+    "signatures": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _FluffySignature(...args)), PropTypes.any]),
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "type": PropTypes.oneOfType([(...args) => _IndigoType(...args), PropTypes.any]),
 });
 _PurpleChild = PropTypes.shape({
-    "children": PropTypes.oneOfType([PropTypes.arrayOf(_FluffyChild), PropTypes.any]),
-    "comment": PropTypes.oneOfType([_StickyComment, PropTypes.any]),
+    "children": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _FluffyChild(...args)), PropTypes.any]),
+    "comment": PropTypes.oneOfType([(...args) => _StickyComment(...args), PropTypes.any]),
     "defaultValue": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "extendedBy": PropTypes.oneOfType([PropTypes.arrayOf(_ExtendedBy), PropTypes.any]),
-    "extendedTypes": PropTypes.oneOfType([PropTypes.arrayOf(_ExtendedBy), PropTypes.any]),
-    "flags": _IndecentFlags,
-    "groups": PropTypes.oneOfType([PropTypes.arrayOf(_Group), PropTypes.any]),
-    "id": PropTypes.number,
-    "implementedBy": PropTypes.oneOfType([PropTypes.arrayOf(_ExtendedBy), PropTypes.any]),
-    "implementedTypes": PropTypes.oneOfType([PropTypes.arrayOf(_ExtendedBy), PropTypes.any]),
-    "kind": PropTypes.number,
-    "kindString": _FluffyKindString,
-    "name": PropTypes.string,
-    "signatures": PropTypes.oneOfType([PropTypes.arrayOf(_StickySignature), PropTypes.any]),
-    "sources": PropTypes.arrayOf(_Source),
-    "type": PropTypes.oneOfType([_MagentaType, PropTypes.any]),
-    "typeParameter": PropTypes.oneOfType([PropTypes.arrayOf(_TypeParameter), PropTypes.any]),
+    "extendedBy": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ExtendedBy(...args)), PropTypes.any]),
+    "extendedTypes": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ExtendedBy(...args)), PropTypes.any]),
+    "flags": (...args) => _IndecentFlags.isRequired(...args),
+    "groups": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Group(...args)), PropTypes.any]),
+    "id": PropTypes.number.isRequired,
+    "implementedBy": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ExtendedBy(...args)), PropTypes.any]),
+    "implementedTypes": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _ExtendedBy(...args)), PropTypes.any]),
+    "kind": PropTypes.number.isRequired,
+    "kindString": _FluffyKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "signatures": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _StickySignature(...args)), PropTypes.any]),
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "type": PropTypes.oneOfType([(...args) => _MagentaType(...args), PropTypes.any]),
+    "typeParameter": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TypeParameter(...args)), PropTypes.any]),
 });
 _TopLevelChild = PropTypes.shape({
-    "children": PropTypes.arrayOf(_PurpleChild),
-    "comment": PropTypes.oneOfType([_IndecentComment, PropTypes.any]),
-    "flags": _PurpleFlags,
-    "groups": PropTypes.arrayOf(_Group),
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "kindString": _TentacledKindString,
-    "name": PropTypes.string,
-    "originalName": PropTypes.string,
-    "sources": PropTypes.arrayOf(_Source),
+    "children": PropTypes.arrayOf((...args) => _PurpleChild(...args)).isRequired,
+    "comment": PropTypes.oneOfType([(...args) => _IndecentComment(...args), PropTypes.any]),
+    "flags": (...args) => _PurpleFlags.isRequired(...args),
+    "groups": PropTypes.arrayOf((...args) => _Group(...args)).isRequired,
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "kindString": _TentacledKindString.isRequired,
+    "name": PropTypes.string.isRequired,
+    "originalName": PropTypes.string.isRequired,
+    "sources": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "children": PropTypes.arrayOf(_TopLevelChild),
-    "flags": _GetSignatureFlags,
-    "groups": PropTypes.arrayOf(_Group),
-    "id": PropTypes.number,
-    "kind": PropTypes.number,
-    "name": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _TopLevelChild(...args)).isRequired,
+    "flags": (...args) => _GetSignatureFlags.isRequired(...args),
+    "groups": PropTypes.arrayOf((...args) => _Group(...args)).isRequired,
+    "id": PropTypes.number.isRequired,
+    "kind": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/bug855-short.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/bug855-short.json/default/toplevel.js
index ccaaff3..db045bb 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/bug855-short.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/bug855-short.json/default/toplevel.js
@@ -14,11 +14,11 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "channel_id": PropTypes.string,
-    "channel_name": PropTypes.string,
-    "code": PropTypes.string,
-    "emoticon_set": PropTypes.number,
-    "id": PropTypes.number,
+    "channel_id": PropTypes.string.isRequired,
+    "channel_name": PropTypes.string.isRequired,
+    "code": PropTypes.string.isRequired,
+    "emoticon_set": PropTypes.number.isRequired,
+    "id": PropTypes.number.isRequired,
 });
 
-export const TopLevel = _TopLevel;
+export const TopLevel = PropTypes.objectOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/priority/bug863.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/bug863.json/default/toplevel.js
index b72fdac..8ccf33b 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/bug863.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/bug863.json/default/toplevel.js
@@ -14,67 +14,67 @@ import PropTypes from "prop-types";
 
 let _TopLevelElement;
 let _PurpleTopLevel;
-const _Breed = PropTypes.oneOfType(['atrox', 'solitus', 'opifex', 'nano']);
-const _Firstname = PropTypes.oneOfType(['empty', 'chi']);
-const _Lastname = PropTypes.oneOfType(['empty', 'washko']);
-const _Pvptitle = PropTypes.oneOfType(['freshman']);
-const _RankTitle = PropTypes.oneOfType(['president', 'advisor', 'veteran', 'applicant']);
-const _Sex = PropTypes.oneOfType(['neuter', 'male', 'female']);
+const _Breed = PropTypes.oneOf(["Atrox", "Solitus", "Opifex", "Nano"]);
+const _Firstname = PropTypes.oneOf(["", "Chi"]);
+const _Lastname = PropTypes.oneOf(["", "Washko"]);
+const _Pvptitle = PropTypes.oneOf(["Freshman"]);
+const _RankTitle = PropTypes.oneOf(["President", "Advisor", "Veteran", "Applicant"]);
+const _Sex = PropTypes.oneOf(["Neuter", "Male", "Female"]);
 _PurpleTopLevel = PropTypes.shape({
-    "ADVENTURERCOUNT": PropTypes.number,
-    "AGENTCOUNT": PropTypes.number,
-    "ATROXCOUNT": PropTypes.number,
-    "AVGLVL": PropTypes.number,
-    "BTCOUNT": PropTypes.number,
-    "DESCRIPTION": PropTypes.string,
-    "DOCTORCOUNT": PropTypes.number,
-    "ENFCOUNT": PropTypes.number,
-    "ENGINEEERCOUNT": PropTypes.number,
-    "FEMALECOUNT": PropTypes.number,
-    "FIXERCOUNT": PropTypes.number,
-    "GOVERNINGNAME": PropTypes.string,
-    "HISTORY": PropTypes.string,
-    "KEEPERCOUNT": PropTypes.number,
-    "MACOUNT": PropTypes.number,
-    "MALECOUNT": PropTypes.number,
-    "MAXLVL": PropTypes.number,
-    "METACOUNT": PropTypes.number,
-    "MINLVL": PropTypes.number,
-    "MONSTERCOUNT": PropTypes.number,
-    "NAME": PropTypes.string,
-    "NANOCOUNT": PropTypes.number,
-    "NANORACECOUNT": PropTypes.number,
-    "NEUTERCOUNT": PropTypes.number,
-    "NUMMEMBERS": PropTypes.number,
-    "OBJECTIVE": PropTypes.string,
-    "OPIFEXCOUNT": PropTypes.number,
-    "ORG_DIMENSION": PropTypes.number,
-    "ORG_INSTANCE": PropTypes.number,
-    "SHADECOUNT": PropTypes.number,
-    "SIDE": PropTypes.number,
-    "SIDE_NAME": PropTypes.string,
-    "SOLIDERCOUNT": PropTypes.number,
-    "SOLITUSCOUNT": PropTypes.number,
-    "TRADERCOUNT": PropTypes.number,
+    "ADVENTURERCOUNT": PropTypes.number.isRequired,
+    "AGENTCOUNT": PropTypes.number.isRequired,
+    "ATROXCOUNT": PropTypes.number.isRequired,
+    "AVGLVL": PropTypes.number.isRequired,
+    "BTCOUNT": PropTypes.number.isRequired,
+    "DESCRIPTION": PropTypes.string.isRequired,
+    "DOCTORCOUNT": PropTypes.number.isRequired,
+    "ENFCOUNT": PropTypes.number.isRequired,
+    "ENGINEEERCOUNT": PropTypes.number.isRequired,
+    "FEMALECOUNT": PropTypes.number.isRequired,
+    "FIXERCOUNT": PropTypes.number.isRequired,
+    "GOVERNINGNAME": PropTypes.string.isRequired,
+    "HISTORY": PropTypes.string.isRequired,
+    "KEEPERCOUNT": PropTypes.number.isRequired,
+    "MACOUNT": PropTypes.number.isRequired,
+    "MALECOUNT": PropTypes.number.isRequired,
+    "MAXLVL": PropTypes.number.isRequired,
+    "METACOUNT": PropTypes.number.isRequired,
+    "MINLVL": PropTypes.number.isRequired,
+    "MONSTERCOUNT": PropTypes.number.isRequired,
+    "NAME": PropTypes.string.isRequired,
+    "NANOCOUNT": PropTypes.number.isRequired,
+    "NANORACECOUNT": PropTypes.number.isRequired,
+    "NEUTERCOUNT": PropTypes.number.isRequired,
+    "NUMMEMBERS": PropTypes.number.isRequired,
+    "OBJECTIVE": PropTypes.string.isRequired,
+    "OPIFEXCOUNT": PropTypes.number.isRequired,
+    "ORG_DIMENSION": PropTypes.number.isRequired,
+    "ORG_INSTANCE": PropTypes.number.isRequired,
+    "SHADECOUNT": PropTypes.number.isRequired,
+    "SIDE": PropTypes.number.isRequired,
+    "SIDE_NAME": PropTypes.string.isRequired,
+    "SOLIDERCOUNT": PropTypes.number.isRequired,
+    "SOLITUSCOUNT": PropTypes.number.isRequired,
+    "TRADERCOUNT": PropTypes.number.isRequired,
 });
 _TopLevelElement = PropTypes.shape({
-    "ALIENLEVEL": PropTypes.number,
-    "BREED": _Breed,
-    "CHAR_DIMENSION": PropTypes.number,
-    "CHAR_INSTANCE": PropTypes.number,
-    "DEFENDER_RANK_TITLE": PropTypes.string,
-    "FIRSTNAME": _Firstname,
-    "HEADID": PropTypes.number,
-    "LASTNAME": _Lastname,
-    "LEVELX": PropTypes.number,
-    "NAME": PropTypes.string,
-    "PROF": PropTypes.string,
-    "PROF_TITLE": PropTypes.string,
-    "PVPRATING": PropTypes.number,
-    "PVPTITLE": _Pvptitle,
-    "RANK": PropTypes.number,
-    "RANK_TITLE": _RankTitle,
-    "SEX": _Sex,
+    "ALIENLEVEL": PropTypes.number.isRequired,
+    "BREED": _Breed.isRequired,
+    "CHAR_DIMENSION": PropTypes.number.isRequired,
+    "CHAR_INSTANCE": PropTypes.number.isRequired,
+    "DEFENDER_RANK_TITLE": PropTypes.string.isRequired,
+    "FIRSTNAME": _Firstname.isRequired,
+    "HEADID": PropTypes.number.isRequired,
+    "LASTNAME": _Lastname.isRequired,
+    "LEVELX": PropTypes.number.isRequired,
+    "NAME": PropTypes.string.isRequired,
+    "PROF": PropTypes.string.isRequired,
+    "PROF_TITLE": PropTypes.string.isRequired,
+    "PVPRATING": PropTypes.number.isRequired,
+    "PVPTITLE": _Pvptitle.isRequired,
+    "RANK": PropTypes.number.isRequired,
+    "RANK_TITLE": _RankTitle.isRequired,
+    "SEX": _Sex.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(_TopLevelElement), _PurpleTopLevel, PropTypes.string]));
+export const TopLevel = PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf((...args) => _TopLevelElement(...args)), (...args) => _PurpleTopLevel(...args), PropTypes.string]));
diff --git a/base/javascript-prop-types/test/inputs/json/priority/coin-pairs.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/coin-pairs.json/default/toplevel.js
index a97b21e..66f7b56 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/coin-pairs.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/coin-pairs.json/default/toplevel.js
@@ -15,18 +15,18 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Pair;
 _Pair = PropTypes.shape({
-    "decimal_places": PropTypes.number,
-    "fee": PropTypes.number,
-    "hidden": PropTypes.number,
-    "max_amount": PropTypes.number,
-    "max_price": PropTypes.number,
-    "min_amount": PropTypes.number,
-    "min_price": PropTypes.number,
-    "min_total": PropTypes.number,
+    "decimal_places": PropTypes.number.isRequired,
+    "fee": PropTypes.number.isRequired,
+    "hidden": PropTypes.number.isRequired,
+    "max_amount": PropTypes.number.isRequired,
+    "max_price": PropTypes.number.isRequired,
+    "min_amount": PropTypes.number.isRequired,
+    "min_price": PropTypes.number.isRequired,
+    "min_total": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "pairs": PropTypes.object,
-    "server_time": PropTypes.number,
+    "pairs": PropTypes.object.isRequired,
+    "server_time": PropTypes.number.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/toplevel.js
index 51878f6..3300844 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/toplevel.js
@@ -27,10 +27,10 @@ let _FlagmakingClass;
 let _HemocoeleClass;
 let _Interacinar;
 _Interacinar = PropTypes.shape({
-    "assapan": PropTypes.number,
-    "benefactorship": PropTypes.bool,
-    "triseriatim": PropTypes.string,
-    "tubbing": PropTypes.number,
+    "assapan": PropTypes.number.isRequired,
+    "benefactorship": PropTypes.bool.isRequired,
+    "triseriatim": PropTypes.string.isRequired,
+    "tubbing": PropTypes.number.isRequired,
     "untrimmed": PropTypes.any,
 });
 _HemocoeleClass = PropTypes.shape({
@@ -242,10 +242,10 @@ _CoadjustClass = PropTypes.shape({
     "unchargeable": PropTypes.any,
 });
 _CimeliaClass = PropTypes.shape({
-    "Chirotherium": PropTypes.number,
-    "catharticalness": PropTypes.number,
-    "disdiapason": PropTypes.string,
-    "homocerc": PropTypes.bool,
+    "Chirotherium": PropTypes.number.isRequired,
+    "catharticalness": PropTypes.number.isRequired,
+    "disdiapason": PropTypes.string.isRequired,
+    "homocerc": PropTypes.bool.isRequired,
     "nonbookish": PropTypes.any,
 });
 _ChemotherapeuticClass = PropTypes.shape({
@@ -298,49 +298,49 @@ _CerographClass = PropTypes.shape({
     "unriveting": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "centrodesmose": PropTypes.string,
-    "cerograph": PropTypes.arrayOf(PropTypes.oneOfType([_CerographClass, PropTypes.any, PropTypes.string])),
-    "chemotherapeutics": PropTypes.arrayOf(PropTypes.oneOfType([_ChemotherapeuticClass, PropTypes.number])),
-    "cimelia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _CimeliaClass, PropTypes.any])),
-    "citrated": PropTypes.number,
-    "clinodome": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])),
-    "coadjust": PropTypes.arrayOf(PropTypes.oneOfType([_CoadjustClass, PropTypes.number])),
-    "consilience": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "constructor": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object])),
-    "continuative": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])),
-    "credulity": PropTypes.arrayOf(PropTypes.oneOfType([_CredulityClass, PropTypes.number, PropTypes.string])),
-    "creviced": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.string])),
-    "cubiculum": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any]))),
-    "deruralize": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, _DeruralizeClass])),
-    "diaereses": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, _DiaereseClass])),
-    "dissolution": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any])),
-    "downstroke": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.string])),
-    "electrotautomerism": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])),
-    "eleutheromania": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.string])),
-    "encrust": _Encrust,
-    "entomoid": PropTypes.arrayOf(PropTypes.oneOfType([_CimeliaClass, PropTypes.number])),
-    "epipaleolithic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])),
-    "expropriable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _CimeliaClass, PropTypes.number])),
-    "faggingly": PropTypes.arrayOf(PropTypes.oneOfType([_FagginglyClass, PropTypes.number])),
-    "fenks": PropTypes.arrayOf(PropTypes.oneOfType([_FenkClass, PropTypes.string])),
-    "flagmaking": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _FlagmakingClass, PropTypes.number])),
-    "fluorometer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])),
-    "fulsome": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])),
-    "fuzzy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "gardenwards": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.string])),
-    "generalissimo": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.any])),
-    "habeas": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any])),
-    "hemicrystalline": PropTypes.arrayOf(PropTypes.oneOfType([_CimeliaClass, PropTypes.string])),
-    "hemocoele": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _HemocoeleClass])),
-    "hoister": PropTypes.arrayOf(PropTypes.oneOfType([_CimeliaClass, PropTypes.any, PropTypes.string])),
-    "hyperpiesis": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _CimeliaClass, PropTypes.any])),
-    "hyppish": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.any, PropTypes.string])),
-    "idealizer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _CimeliaClass, PropTypes.number])),
-    "incrustator": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.string])),
-    "intentiveness": PropTypes.arrayOf(PropTypes.oneOfType([_CimeliaClass, PropTypes.number, PropTypes.string])),
-    "interacinar": _Interacinar,
-    "intercorrelation": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any])),
-    "jacutinga": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object])),
+    "centrodesmose": PropTypes.string.isRequired,
+    "cerograph": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CerographClass(...args), PropTypes.any, PropTypes.string])).isRequired,
+    "chemotherapeutics": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _ChemotherapeuticClass(...args), PropTypes.number])).isRequired,
+    "cimelia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _CimeliaClass(...args), PropTypes.any])).isRequired,
+    "citrated": PropTypes.number.isRequired,
+    "clinodome": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
+    "coadjust": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CoadjustClass(...args), PropTypes.number])).isRequired,
+    "consilience": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "constructor": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object])).isRequired,
+    "continuative": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])).isRequired,
+    "credulity": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CredulityClass(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "creviced": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.string])).isRequired,
+    "cubiculum": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any]))).isRequired,
+    "deruralize": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, (...args) => _DeruralizeClass(...args)])).isRequired,
+    "diaereses": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, (...args) => _DiaereseClass(...args)])).isRequired,
+    "dissolution": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any])).isRequired,
+    "downstroke": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.string])).isRequired,
+    "electrotautomerism": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])).isRequired,
+    "eleutheromania": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.string])).isRequired,
+    "encrust": (...args) => _Encrust.isRequired(...args),
+    "entomoid": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CimeliaClass(...args), PropTypes.number])).isRequired,
+    "epipaleolithic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])).isRequired,
+    "expropriable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _CimeliaClass(...args), PropTypes.number])).isRequired,
+    "faggingly": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _FagginglyClass(...args), PropTypes.number])).isRequired,
+    "fenks": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _FenkClass(...args), PropTypes.string])).isRequired,
+    "flagmaking": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _FlagmakingClass(...args), PropTypes.number])).isRequired,
+    "fluorometer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])).isRequired,
+    "fulsome": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])).isRequired,
+    "fuzzy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "gardenwards": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.string])).isRequired,
+    "generalissimo": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.any])).isRequired,
+    "habeas": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any])).isRequired,
+    "hemicrystalline": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CimeliaClass(...args), PropTypes.string])).isRequired,
+    "hemocoele": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _HemocoeleClass(...args)])).isRequired,
+    "hoister": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CimeliaClass(...args), PropTypes.any, PropTypes.string])).isRequired,
+    "hyperpiesis": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _CimeliaClass(...args), PropTypes.any])).isRequired,
+    "hyppish": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.any, PropTypes.string])).isRequired,
+    "idealizer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _CimeliaClass(...args), PropTypes.number])).isRequired,
+    "incrustator": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.string])).isRequired,
+    "intentiveness": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CimeliaClass(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "interacinar": (...args) => _Interacinar.isRequired(...args),
+    "intercorrelation": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any])).isRequired,
+    "jacutinga": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combinations1.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combinations1.json/default/toplevel.js
index 51878f6..3300844 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combinations1.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combinations1.json/default/toplevel.js
@@ -27,10 +27,10 @@ let _FlagmakingClass;
 let _HemocoeleClass;
 let _Interacinar;
 _Interacinar = PropTypes.shape({
-    "assapan": PropTypes.number,
-    "benefactorship": PropTypes.bool,
-    "triseriatim": PropTypes.string,
-    "tubbing": PropTypes.number,
+    "assapan": PropTypes.number.isRequired,
+    "benefactorship": PropTypes.bool.isRequired,
+    "triseriatim": PropTypes.string.isRequired,
+    "tubbing": PropTypes.number.isRequired,
     "untrimmed": PropTypes.any,
 });
 _HemocoeleClass = PropTypes.shape({
@@ -242,10 +242,10 @@ _CoadjustClass = PropTypes.shape({
     "unchargeable": PropTypes.any,
 });
 _CimeliaClass = PropTypes.shape({
-    "Chirotherium": PropTypes.number,
-    "catharticalness": PropTypes.number,
-    "disdiapason": PropTypes.string,
-    "homocerc": PropTypes.bool,
+    "Chirotherium": PropTypes.number.isRequired,
+    "catharticalness": PropTypes.number.isRequired,
+    "disdiapason": PropTypes.string.isRequired,
+    "homocerc": PropTypes.bool.isRequired,
     "nonbookish": PropTypes.any,
 });
 _ChemotherapeuticClass = PropTypes.shape({
@@ -298,49 +298,49 @@ _CerographClass = PropTypes.shape({
     "unriveting": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "centrodesmose": PropTypes.string,
-    "cerograph": PropTypes.arrayOf(PropTypes.oneOfType([_CerographClass, PropTypes.any, PropTypes.string])),
-    "chemotherapeutics": PropTypes.arrayOf(PropTypes.oneOfType([_ChemotherapeuticClass, PropTypes.number])),
-    "cimelia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _CimeliaClass, PropTypes.any])),
-    "citrated": PropTypes.number,
-    "clinodome": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])),
-    "coadjust": PropTypes.arrayOf(PropTypes.oneOfType([_CoadjustClass, PropTypes.number])),
-    "consilience": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "constructor": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object])),
-    "continuative": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])),
-    "credulity": PropTypes.arrayOf(PropTypes.oneOfType([_CredulityClass, PropTypes.number, PropTypes.string])),
-    "creviced": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.string])),
-    "cubiculum": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any]))),
-    "deruralize": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, _DeruralizeClass])),
-    "diaereses": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, _DiaereseClass])),
-    "dissolution": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any])),
-    "downstroke": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.string])),
-    "electrotautomerism": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])),
-    "eleutheromania": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.string])),
-    "encrust": _Encrust,
-    "entomoid": PropTypes.arrayOf(PropTypes.oneOfType([_CimeliaClass, PropTypes.number])),
-    "epipaleolithic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])),
-    "expropriable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _CimeliaClass, PropTypes.number])),
-    "faggingly": PropTypes.arrayOf(PropTypes.oneOfType([_FagginglyClass, PropTypes.number])),
-    "fenks": PropTypes.arrayOf(PropTypes.oneOfType([_FenkClass, PropTypes.string])),
-    "flagmaking": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _FlagmakingClass, PropTypes.number])),
-    "fluorometer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])),
-    "fulsome": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])),
-    "fuzzy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "gardenwards": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.string])),
-    "generalissimo": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.any])),
-    "habeas": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any])),
-    "hemicrystalline": PropTypes.arrayOf(PropTypes.oneOfType([_CimeliaClass, PropTypes.string])),
-    "hemocoele": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _HemocoeleClass])),
-    "hoister": PropTypes.arrayOf(PropTypes.oneOfType([_CimeliaClass, PropTypes.any, PropTypes.string])),
-    "hyperpiesis": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _CimeliaClass, PropTypes.any])),
-    "hyppish": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.any, PropTypes.string])),
-    "idealizer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _CimeliaClass, PropTypes.number])),
-    "incrustator": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.string])),
-    "intentiveness": PropTypes.arrayOf(PropTypes.oneOfType([_CimeliaClass, PropTypes.number, PropTypes.string])),
-    "interacinar": _Interacinar,
-    "intercorrelation": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any])),
-    "jacutinga": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object])),
+    "centrodesmose": PropTypes.string.isRequired,
+    "cerograph": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CerographClass(...args), PropTypes.any, PropTypes.string])).isRequired,
+    "chemotherapeutics": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _ChemotherapeuticClass(...args), PropTypes.number])).isRequired,
+    "cimelia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _CimeliaClass(...args), PropTypes.any])).isRequired,
+    "citrated": PropTypes.number.isRequired,
+    "clinodome": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
+    "coadjust": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CoadjustClass(...args), PropTypes.number])).isRequired,
+    "consilience": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "constructor": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object])).isRequired,
+    "continuative": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])).isRequired,
+    "credulity": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CredulityClass(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "creviced": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.string])).isRequired,
+    "cubiculum": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any]))).isRequired,
+    "deruralize": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, (...args) => _DeruralizeClass(...args)])).isRequired,
+    "diaereses": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, (...args) => _DiaereseClass(...args)])).isRequired,
+    "dissolution": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any])).isRequired,
+    "downstroke": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.string])).isRequired,
+    "electrotautomerism": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])).isRequired,
+    "eleutheromania": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.string])).isRequired,
+    "encrust": (...args) => _Encrust.isRequired(...args),
+    "entomoid": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CimeliaClass(...args), PropTypes.number])).isRequired,
+    "epipaleolithic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])).isRequired,
+    "expropriable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _CimeliaClass(...args), PropTypes.number])).isRequired,
+    "faggingly": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _FagginglyClass(...args), PropTypes.number])).isRequired,
+    "fenks": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _FenkClass(...args), PropTypes.string])).isRequired,
+    "flagmaking": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _FlagmakingClass(...args), PropTypes.number])).isRequired,
+    "fluorometer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])).isRequired,
+    "fulsome": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])).isRequired,
+    "fuzzy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "gardenwards": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.string])).isRequired,
+    "generalissimo": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object, PropTypes.any])).isRequired,
+    "habeas": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any])).isRequired,
+    "hemicrystalline": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CimeliaClass(...args), PropTypes.string])).isRequired,
+    "hemocoele": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _HemocoeleClass(...args)])).isRequired,
+    "hoister": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CimeliaClass(...args), PropTypes.any, PropTypes.string])).isRequired,
+    "hyperpiesis": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _CimeliaClass(...args), PropTypes.any])).isRequired,
+    "hyppish": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.any, PropTypes.string])).isRequired,
+    "idealizer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _CimeliaClass(...args), PropTypes.number])).isRequired,
+    "incrustator": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.string])).isRequired,
+    "intentiveness": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _CimeliaClass(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "interacinar": (...args) => _Interacinar.isRequired(...args),
+    "intercorrelation": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any])).isRequired,
+    "jacutinga": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/toplevel.js
index 171f963..6d49f91 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/toplevel.js
@@ -95,10 +95,10 @@ _AlleviateClass = PropTypes.shape({
     "wherewithal": PropTypes.any,
 });
 _Rebecca = PropTypes.shape({
-    "Chirotherium": PropTypes.number,
-    "catharticalness": PropTypes.number,
-    "disdiapason": PropTypes.string,
-    "homocerc": PropTypes.bool,
+    "Chirotherium": PropTypes.number.isRequired,
+    "catharticalness": PropTypes.number.isRequired,
+    "disdiapason": PropTypes.string.isRequired,
+    "homocerc": PropTypes.bool.isRequired,
     "nonbookish": PropTypes.any,
 });
 _OskarClass = PropTypes.shape({
@@ -244,51 +244,51 @@ _AnsarieClass = PropTypes.shape({
     "zincic": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "Abranchiata": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.any])),
-    "Andriana": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any, PropTypes.string])),
-    "Ansarie": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _AnsarieClass, PropTypes.any])),
-    "Chytridiaceae": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _ChytridiaceaeClass, PropTypes.any])),
-    "Discordia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _DiscordiaClass])),
-    "Endomyces": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])),
-    "Epinephelidae": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string])),
-    "Eupatorium": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object])),
-    "Gryphosaurus": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _GryphosaurusClass, PropTypes.string])),
-    "Koryak": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])),
-    "Lavinia": PropTypes.arrayOf(PropTypes.oneOfType([_LaviniaClass, PropTypes.string])),
-    "Oskar": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _OskarClass])),
-    "Rebecca": PropTypes.arrayOf(PropTypes.oneOfType([_Rebecca, PropTypes.number, PropTypes.string])),
-    "Rhomboganoidei": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _Rebecca, PropTypes.string])),
-    "Rigsmal": PropTypes.bool,
-    "Ruellia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _Rebecca, PropTypes.string])),
-    "School": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.any])),
-    "Shakespearolater": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.string])),
-    "Svan": PropTypes.arrayOf(PropTypes.number),
-    "Wayao": PropTypes.object,
-    "academe": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object])),
-    "acquirable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.object])),
-    "aerometry": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])),
-    "alexin": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool])),
-    "alleviate": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), _AlleviateClass])),
-    "amaas": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _Rebecca, PropTypes.number])),
-    "ambassage": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.string])),
-    "amphithyron": PropTypes.arrayOf(PropTypes.oneOfType([_Amphithyron, PropTypes.any])),
-    "ankee": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _AnkeeClass, PropTypes.number])),
-    "annihilator": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any])),
+    "Abranchiata": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.any])).isRequired,
+    "Andriana": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any, PropTypes.string])).isRequired,
+    "Ansarie": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _AnsarieClass(...args), PropTypes.any])).isRequired,
+    "Chytridiaceae": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _ChytridiaceaeClass(...args), PropTypes.any])).isRequired,
+    "Discordia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _DiscordiaClass(...args)])).isRequired,
+    "Endomyces": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
+    "Epinephelidae": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string])).isRequired,
+    "Eupatorium": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object])).isRequired,
+    "Gryphosaurus": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _GryphosaurusClass(...args), PropTypes.string])).isRequired,
+    "Koryak": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])).isRequired,
+    "Lavinia": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _LaviniaClass(...args), PropTypes.string])).isRequired,
+    "Oskar": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _OskarClass(...args)])).isRequired,
+    "Rebecca": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _Rebecca(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "Rhomboganoidei": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _Rebecca(...args), PropTypes.string])).isRequired,
+    "Rigsmal": PropTypes.bool.isRequired,
+    "Ruellia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _Rebecca(...args), PropTypes.string])).isRequired,
+    "School": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.any])).isRequired,
+    "Shakespearolater": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.string])).isRequired,
+    "Svan": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "Wayao": PropTypes.object.isRequired,
+    "academe": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object])).isRequired,
+    "acquirable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.object])).isRequired,
+    "aerometry": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])).isRequired,
+    "alexin": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool])).isRequired,
+    "alleviate": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), (...args) => _AlleviateClass(...args)])).isRequired,
+    "amaas": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _Rebecca(...args), PropTypes.number])).isRequired,
+    "ambassage": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.string])).isRequired,
+    "amphithyron": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _Amphithyron(...args), PropTypes.any])).isRequired,
+    "ankee": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _AnkeeClass(...args), PropTypes.number])).isRequired,
+    "annihilator": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any])).isRequired,
     "annulose": PropTypes.any,
-    "aphasia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])),
-    "asprawl": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])),
-    "attractive": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.any])),
-    "barksome": PropTypes.object,
-    "bedesman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string])),
-    "belard": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _Rebecca, PropTypes.number])),
-    "bocking": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.object])),
-    "brawlingly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object])),
-    "brookie": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _Rebecca])),
-    "bumboatman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any, PropTypes.string])),
-    "bystreet": PropTypes.arrayOf(PropTypes.any),
-    "calaverite": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.string])),
-    "catallactic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.object])),
-    "cemental": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object])),
+    "aphasia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])).isRequired,
+    "asprawl": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
+    "attractive": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.any])).isRequired,
+    "barksome": PropTypes.object.isRequired,
+    "bedesman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string])).isRequired,
+    "belard": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _Rebecca(...args), PropTypes.number])).isRequired,
+    "bocking": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.object])).isRequired,
+    "brawlingly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object])).isRequired,
+    "brookie": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _Rebecca(...args)])).isRequired,
+    "bumboatman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any, PropTypes.string])).isRequired,
+    "bystreet": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "calaverite": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.string])).isRequired,
+    "catallactic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.object])).isRequired,
+    "cemental": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combinations2.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combinations2.json/default/toplevel.js
index 171f963..6d49f91 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combinations2.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combinations2.json/default/toplevel.js
@@ -95,10 +95,10 @@ _AlleviateClass = PropTypes.shape({
     "wherewithal": PropTypes.any,
 });
 _Rebecca = PropTypes.shape({
-    "Chirotherium": PropTypes.number,
-    "catharticalness": PropTypes.number,
-    "disdiapason": PropTypes.string,
-    "homocerc": PropTypes.bool,
+    "Chirotherium": PropTypes.number.isRequired,
+    "catharticalness": PropTypes.number.isRequired,
+    "disdiapason": PropTypes.string.isRequired,
+    "homocerc": PropTypes.bool.isRequired,
     "nonbookish": PropTypes.any,
 });
 _OskarClass = PropTypes.shape({
@@ -244,51 +244,51 @@ _AnsarieClass = PropTypes.shape({
     "zincic": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "Abranchiata": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.any])),
-    "Andriana": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any, PropTypes.string])),
-    "Ansarie": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _AnsarieClass, PropTypes.any])),
-    "Chytridiaceae": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _ChytridiaceaeClass, PropTypes.any])),
-    "Discordia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _DiscordiaClass])),
-    "Endomyces": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])),
-    "Epinephelidae": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string])),
-    "Eupatorium": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object])),
-    "Gryphosaurus": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _GryphosaurusClass, PropTypes.string])),
-    "Koryak": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])),
-    "Lavinia": PropTypes.arrayOf(PropTypes.oneOfType([_LaviniaClass, PropTypes.string])),
-    "Oskar": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _OskarClass])),
-    "Rebecca": PropTypes.arrayOf(PropTypes.oneOfType([_Rebecca, PropTypes.number, PropTypes.string])),
-    "Rhomboganoidei": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _Rebecca, PropTypes.string])),
-    "Rigsmal": PropTypes.bool,
-    "Ruellia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _Rebecca, PropTypes.string])),
-    "School": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.any])),
-    "Shakespearolater": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.string])),
-    "Svan": PropTypes.arrayOf(PropTypes.number),
-    "Wayao": PropTypes.object,
-    "academe": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object])),
-    "acquirable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.object])),
-    "aerometry": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])),
-    "alexin": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool])),
-    "alleviate": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), _AlleviateClass])),
-    "amaas": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _Rebecca, PropTypes.number])),
-    "ambassage": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.string])),
-    "amphithyron": PropTypes.arrayOf(PropTypes.oneOfType([_Amphithyron, PropTypes.any])),
-    "ankee": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _AnkeeClass, PropTypes.number])),
-    "annihilator": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any])),
+    "Abranchiata": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.any])).isRequired,
+    "Andriana": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.any, PropTypes.string])).isRequired,
+    "Ansarie": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _AnsarieClass(...args), PropTypes.any])).isRequired,
+    "Chytridiaceae": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _ChytridiaceaeClass(...args), PropTypes.any])).isRequired,
+    "Discordia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _DiscordiaClass(...args)])).isRequired,
+    "Endomyces": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
+    "Epinephelidae": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string])).isRequired,
+    "Eupatorium": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object])).isRequired,
+    "Gryphosaurus": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _GryphosaurusClass(...args), PropTypes.string])).isRequired,
+    "Koryak": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.string])).isRequired,
+    "Lavinia": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _LaviniaClass(...args), PropTypes.string])).isRequired,
+    "Oskar": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _OskarClass(...args)])).isRequired,
+    "Rebecca": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _Rebecca(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "Rhomboganoidei": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _Rebecca(...args), PropTypes.string])).isRequired,
+    "Rigsmal": PropTypes.bool.isRequired,
+    "Ruellia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _Rebecca(...args), PropTypes.string])).isRequired,
+    "School": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.any])).isRequired,
+    "Shakespearolater": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.string])).isRequired,
+    "Svan": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "Wayao": PropTypes.object.isRequired,
+    "academe": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object])).isRequired,
+    "acquirable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.object])).isRequired,
+    "aerometry": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])).isRequired,
+    "alexin": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool])).isRequired,
+    "alleviate": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), (...args) => _AlleviateClass(...args)])).isRequired,
+    "amaas": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _Rebecca(...args), PropTypes.number])).isRequired,
+    "ambassage": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.string])).isRequired,
+    "amphithyron": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _Amphithyron(...args), PropTypes.any])).isRequired,
+    "ankee": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _AnkeeClass(...args), PropTypes.number])).isRequired,
+    "annihilator": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any])).isRequired,
     "annulose": PropTypes.any,
-    "aphasia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])),
-    "asprawl": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])),
-    "attractive": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.any])),
-    "barksome": PropTypes.object,
-    "bedesman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string])),
-    "belard": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _Rebecca, PropTypes.number])),
-    "bocking": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.object])),
-    "brawlingly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object])),
-    "brookie": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _Rebecca])),
-    "bumboatman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any, PropTypes.string])),
-    "bystreet": PropTypes.arrayOf(PropTypes.any),
-    "calaverite": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.string])),
-    "catallactic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.object])),
-    "cemental": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object])),
+    "aphasia": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])).isRequired,
+    "asprawl": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
+    "attractive": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.any])).isRequired,
+    "barksome": PropTypes.object.isRequired,
+    "bedesman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string])).isRequired,
+    "belard": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _Rebecca(...args), PropTypes.number])).isRequired,
+    "bocking": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.object])).isRequired,
+    "brawlingly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object])).isRequired,
+    "brookie": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _Rebecca(...args)])).isRequired,
+    "bumboatman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.any, PropTypes.string])).isRequired,
+    "bystreet": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "calaverite": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.string])).isRequired,
+    "catallactic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.object])).isRequired,
+    "cemental": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.object])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/toplevel.js
index 7b68249..fd1ea3f 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/toplevel.js
@@ -170,10 +170,10 @@ _OccupationalistClass = PropTypes.shape({
     "unpocketed": PropTypes.any,
 });
 _Noncontributing = PropTypes.shape({
-    "estevin": PropTypes.string,
-    "jolterhead": PropTypes.number,
-    "sauternes": PropTypes.number,
-    "sparsely": PropTypes.bool,
+    "estevin": PropTypes.string.isRequired,
+    "jolterhead": PropTypes.number.isRequired,
+    "sauternes": PropTypes.number.isRequired,
+    "sparsely": PropTypes.bool.isRequired,
     "unrequested": PropTypes.any,
 });
 _MonotheisticallyClass = PropTypes.shape({
@@ -204,10 +204,10 @@ _MonotheisticallyClass = PropTypes.shape({
     "whitestone": PropTypes.any,
 });
 _MonaziteClass = PropTypes.shape({
-    "Chirotherium": PropTypes.number,
-    "catharticalness": PropTypes.number,
-    "disdiapason": PropTypes.string,
-    "homocerc": PropTypes.bool,
+    "Chirotherium": PropTypes.number.isRequired,
+    "catharticalness": PropTypes.number.isRequired,
+    "disdiapason": PropTypes.string.isRequired,
+    "homocerc": PropTypes.bool.isRequired,
     "nonbookish": PropTypes.any,
 });
 _Maslin = PropTypes.shape({
@@ -351,48 +351,48 @@ _JurorClass = PropTypes.shape({
     "uninhabitedness": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "juror": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _JurorClass])),
-    "kongoni": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object])),
-    "ladronism": PropTypes.arrayOf(PropTypes.oneOfType([_LadronismClass, PropTypes.number, PropTypes.string])),
-    "landlubberly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _LandlubberlyClass, PropTypes.number])),
-    "listener": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])),
-    "lupus": PropTypes.arrayOf(PropTypes.oneOfType([_LupusClass, PropTypes.number])),
-    "maslin": PropTypes.arrayOf(_Maslin),
-    "monazite": PropTypes.arrayOf(PropTypes.oneOfType([_MonaziteClass, PropTypes.number])),
-    "monoliteral": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool])),
-    "monotheistically": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _MonotheisticallyClass])),
-    "montage": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.string])),
-    "moralness": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.any])),
-    "mowra": PropTypes.arrayOf(PropTypes.oneOfType([_MonaziteClass, PropTypes.any])),
-    "mulishly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.any])),
-    "myoscope": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.number])),
-    "nach": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.any])),
-    "neuromastic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])),
-    "noncontributing": PropTypes.arrayOf(_Noncontributing),
-    "nonnervous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])),
-    "nonvaluation": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.number])),
-    "occupationalist": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _OccupationalistClass, PropTypes.any])),
-    "outrival": PropTypes.arrayOf(PropTypes.oneOfType([_OutrivalClass, PropTypes.number, PropTypes.any])),
-    "paleographically": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "pamphletwise": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.string])),
-    "pediatrics": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.any])),
-    "perceptive": PropTypes.arrayOf(PropTypes.bool),
-    "piaculum": PropTypes.arrayOf(PropTypes.oneOfType([_PiaculumClass, PropTypes.number])),
-    "piccadilly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])),
-    "piffler": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _MonaziteClass])),
-    "pithful": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.any])),
-    "placuntitis": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "plectopterous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "pneumocele": PropTypes.arrayOf(PropTypes.oneOfType([_Pneumocele, PropTypes.any])),
-    "poliorcetic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _MonaziteClass])),
-    "poormaster": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object, PropTypes.any])),
-    "potwhisky": PropTypes.arrayOf(PropTypes.oneOfType([_PotwhiskyClass, PropTypes.number, PropTypes.any])),
-    "practicalizer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _MonaziteClass, PropTypes.string])),
-    "prefreshman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _PrefreshmanClass, PropTypes.string])),
-    "prehensility": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, _MonaziteClass])),
-    "prevoidance": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _MonaziteClass, PropTypes.number])),
-    "probant": PropTypes.arrayOf(PropTypes.object),
-    "protext": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, _MonaziteClass])),
+    "juror": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _JurorClass(...args)])).isRequired,
+    "kongoni": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object])).isRequired,
+    "ladronism": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _LadronismClass(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "landlubberly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _LandlubberlyClass(...args), PropTypes.number])).isRequired,
+    "listener": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])).isRequired,
+    "lupus": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _LupusClass(...args), PropTypes.number])).isRequired,
+    "maslin": PropTypes.arrayOf((...args) => _Maslin(...args)).isRequired,
+    "monazite": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _MonaziteClass(...args), PropTypes.number])).isRequired,
+    "monoliteral": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool])).isRequired,
+    "monotheistically": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _MonotheisticallyClass(...args)])).isRequired,
+    "montage": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.string])).isRequired,
+    "moralness": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.any])).isRequired,
+    "mowra": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _MonaziteClass(...args), PropTypes.any])).isRequired,
+    "mulishly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.any])).isRequired,
+    "myoscope": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.number])).isRequired,
+    "nach": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.any])).isRequired,
+    "neuromastic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])).isRequired,
+    "noncontributing": PropTypes.arrayOf((...args) => _Noncontributing(...args)).isRequired,
+    "nonnervous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])).isRequired,
+    "nonvaluation": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.number])).isRequired,
+    "occupationalist": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _OccupationalistClass(...args), PropTypes.any])).isRequired,
+    "outrival": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _OutrivalClass(...args), PropTypes.number, PropTypes.any])).isRequired,
+    "paleographically": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "pamphletwise": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.string])).isRequired,
+    "pediatrics": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.any])).isRequired,
+    "perceptive": PropTypes.arrayOf(PropTypes.bool).isRequired,
+    "piaculum": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _PiaculumClass(...args), PropTypes.number])).isRequired,
+    "piccadilly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])).isRequired,
+    "piffler": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _MonaziteClass(...args)])).isRequired,
+    "pithful": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.any])).isRequired,
+    "placuntitis": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "plectopterous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "pneumocele": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _Pneumocele(...args), PropTypes.any])).isRequired,
+    "poliorcetic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _MonaziteClass(...args)])).isRequired,
+    "poormaster": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object, PropTypes.any])).isRequired,
+    "potwhisky": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _PotwhiskyClass(...args), PropTypes.number, PropTypes.any])).isRequired,
+    "practicalizer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _MonaziteClass(...args), PropTypes.string])).isRequired,
+    "prefreshman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _PrefreshmanClass(...args), PropTypes.string])).isRequired,
+    "prehensility": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, (...args) => _MonaziteClass(...args)])).isRequired,
+    "prevoidance": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _MonaziteClass(...args), PropTypes.number])).isRequired,
+    "probant": PropTypes.arrayOf(PropTypes.object).isRequired,
+    "protext": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, (...args) => _MonaziteClass(...args)])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combinations3.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combinations3.json/default/toplevel.js
index 7b68249..fd1ea3f 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combinations3.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combinations3.json/default/toplevel.js
@@ -170,10 +170,10 @@ _OccupationalistClass = PropTypes.shape({
     "unpocketed": PropTypes.any,
 });
 _Noncontributing = PropTypes.shape({
-    "estevin": PropTypes.string,
-    "jolterhead": PropTypes.number,
-    "sauternes": PropTypes.number,
-    "sparsely": PropTypes.bool,
+    "estevin": PropTypes.string.isRequired,
+    "jolterhead": PropTypes.number.isRequired,
+    "sauternes": PropTypes.number.isRequired,
+    "sparsely": PropTypes.bool.isRequired,
     "unrequested": PropTypes.any,
 });
 _MonotheisticallyClass = PropTypes.shape({
@@ -204,10 +204,10 @@ _MonotheisticallyClass = PropTypes.shape({
     "whitestone": PropTypes.any,
 });
 _MonaziteClass = PropTypes.shape({
-    "Chirotherium": PropTypes.number,
-    "catharticalness": PropTypes.number,
-    "disdiapason": PropTypes.string,
-    "homocerc": PropTypes.bool,
+    "Chirotherium": PropTypes.number.isRequired,
+    "catharticalness": PropTypes.number.isRequired,
+    "disdiapason": PropTypes.string.isRequired,
+    "homocerc": PropTypes.bool.isRequired,
     "nonbookish": PropTypes.any,
 });
 _Maslin = PropTypes.shape({
@@ -351,48 +351,48 @@ _JurorClass = PropTypes.shape({
     "uninhabitedness": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "juror": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _JurorClass])),
-    "kongoni": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object])),
-    "ladronism": PropTypes.arrayOf(PropTypes.oneOfType([_LadronismClass, PropTypes.number, PropTypes.string])),
-    "landlubberly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _LandlubberlyClass, PropTypes.number])),
-    "listener": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])),
-    "lupus": PropTypes.arrayOf(PropTypes.oneOfType([_LupusClass, PropTypes.number])),
-    "maslin": PropTypes.arrayOf(_Maslin),
-    "monazite": PropTypes.arrayOf(PropTypes.oneOfType([_MonaziteClass, PropTypes.number])),
-    "monoliteral": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool])),
-    "monotheistically": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _MonotheisticallyClass])),
-    "montage": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.string])),
-    "moralness": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.any])),
-    "mowra": PropTypes.arrayOf(PropTypes.oneOfType([_MonaziteClass, PropTypes.any])),
-    "mulishly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.any])),
-    "myoscope": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.number])),
-    "nach": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.any])),
-    "neuromastic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])),
-    "noncontributing": PropTypes.arrayOf(_Noncontributing),
-    "nonnervous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])),
-    "nonvaluation": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.number])),
-    "occupationalist": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _OccupationalistClass, PropTypes.any])),
-    "outrival": PropTypes.arrayOf(PropTypes.oneOfType([_OutrivalClass, PropTypes.number, PropTypes.any])),
-    "paleographically": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "pamphletwise": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.string])),
-    "pediatrics": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.any])),
-    "perceptive": PropTypes.arrayOf(PropTypes.bool),
-    "piaculum": PropTypes.arrayOf(PropTypes.oneOfType([_PiaculumClass, PropTypes.number])),
-    "piccadilly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])),
-    "piffler": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _MonaziteClass])),
-    "pithful": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.any])),
-    "placuntitis": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "plectopterous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])),
-    "pneumocele": PropTypes.arrayOf(PropTypes.oneOfType([_Pneumocele, PropTypes.any])),
-    "poliorcetic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _MonaziteClass])),
-    "poormaster": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object, PropTypes.any])),
-    "potwhisky": PropTypes.arrayOf(PropTypes.oneOfType([_PotwhiskyClass, PropTypes.number, PropTypes.any])),
-    "practicalizer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _MonaziteClass, PropTypes.string])),
-    "prefreshman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _PrefreshmanClass, PropTypes.string])),
-    "prehensility": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, _MonaziteClass])),
-    "prevoidance": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _MonaziteClass, PropTypes.number])),
-    "probant": PropTypes.arrayOf(PropTypes.object),
-    "protext": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, _MonaziteClass])),
+    "juror": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _JurorClass(...args)])).isRequired,
+    "kongoni": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object])).isRequired,
+    "ladronism": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _LadronismClass(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "landlubberly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _LandlubberlyClass(...args), PropTypes.number])).isRequired,
+    "listener": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])).isRequired,
+    "lupus": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _LupusClass(...args), PropTypes.number])).isRequired,
+    "maslin": PropTypes.arrayOf((...args) => _Maslin(...args)).isRequired,
+    "monazite": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _MonaziteClass(...args), PropTypes.number])).isRequired,
+    "monoliteral": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool])).isRequired,
+    "monotheistically": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _MonotheisticallyClass(...args)])).isRequired,
+    "montage": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.string])).isRequired,
+    "moralness": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.any])).isRequired,
+    "mowra": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _MonaziteClass(...args), PropTypes.any])).isRequired,
+    "mulishly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number, PropTypes.any])).isRequired,
+    "myoscope": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.number])).isRequired,
+    "nach": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.any])).isRequired,
+    "neuromastic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])).isRequired,
+    "noncontributing": PropTypes.arrayOf((...args) => _Noncontributing(...args)).isRequired,
+    "nonnervous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])).isRequired,
+    "nonvaluation": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.number])).isRequired,
+    "occupationalist": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _OccupationalistClass(...args), PropTypes.any])).isRequired,
+    "outrival": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _OutrivalClass(...args), PropTypes.number, PropTypes.any])).isRequired,
+    "paleographically": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "pamphletwise": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.string])).isRequired,
+    "pediatrics": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.any])).isRequired,
+    "perceptive": PropTypes.arrayOf(PropTypes.bool).isRequired,
+    "piaculum": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _PiaculumClass(...args), PropTypes.number])).isRequired,
+    "piccadilly": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])).isRequired,
+    "piffler": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _MonaziteClass(...args)])).isRequired,
+    "pithful": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.any])).isRequired,
+    "placuntitis": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "plectopterous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object])).isRequired,
+    "pneumocele": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _Pneumocele(...args), PropTypes.any])).isRequired,
+    "poliorcetic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _MonaziteClass(...args)])).isRequired,
+    "poormaster": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object, PropTypes.any])).isRequired,
+    "potwhisky": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _PotwhiskyClass(...args), PropTypes.number, PropTypes.any])).isRequired,
+    "practicalizer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _MonaziteClass(...args), PropTypes.string])).isRequired,
+    "prefreshman": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _PrefreshmanClass(...args), PropTypes.string])).isRequired,
+    "prehensility": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, (...args) => _MonaziteClass(...args)])).isRequired,
+    "prevoidance": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _MonaziteClass(...args), PropTypes.number])).isRequired,
+    "probant": PropTypes.arrayOf(PropTypes.object).isRequired,
+    "protext": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, (...args) => _MonaziteClass(...args)])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/toplevel.js
index 1f19a18..a0679fe 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/toplevel.js
@@ -297,26 +297,26 @@ _RewriteClass = PropTypes.shape({
     "yardman": PropTypes.any,
 });
 _Ressaut = PropTypes.shape({
-    "Freesia": PropTypes.string,
-    "Genevieve": PropTypes.string,
-    "Mimosaceae": PropTypes.string,
-    "Theopaschitism": PropTypes.string,
-    "apperceptive": PropTypes.string,
-    "cuttoo": PropTypes.string,
-    "douser": PropTypes.string,
-    "drinkproof": PropTypes.string,
-    "forementioned": PropTypes.string,
-    "hyperdiabolical": PropTypes.string,
-    "hypocone": PropTypes.string,
-    "irreverentially": PropTypes.string,
-    "jumart": PropTypes.string,
-    "mollicrush": PropTypes.string,
-    "nedder": PropTypes.string,
-    "retinasphalt": PropTypes.string,
-    "sough": PropTypes.string,
-    "steading": PropTypes.string,
-    "undurableness": PropTypes.string,
-    "unmingleable": PropTypes.string,
+    "Freesia": PropTypes.string.isRequired,
+    "Genevieve": PropTypes.string.isRequired,
+    "Mimosaceae": PropTypes.string.isRequired,
+    "Theopaschitism": PropTypes.string.isRequired,
+    "apperceptive": PropTypes.string.isRequired,
+    "cuttoo": PropTypes.string.isRequired,
+    "douser": PropTypes.string.isRequired,
+    "drinkproof": PropTypes.string.isRequired,
+    "forementioned": PropTypes.string.isRequired,
+    "hyperdiabolical": PropTypes.string.isRequired,
+    "hypocone": PropTypes.string.isRequired,
+    "irreverentially": PropTypes.string.isRequired,
+    "jumart": PropTypes.string.isRequired,
+    "mollicrush": PropTypes.string.isRequired,
+    "nedder": PropTypes.string.isRequired,
+    "retinasphalt": PropTypes.string.isRequired,
+    "sough": PropTypes.string.isRequired,
+    "steading": PropTypes.string.isRequired,
+    "undurableness": PropTypes.string.isRequired,
+    "unmingleable": PropTypes.string.isRequired,
 });
 _Reimagine = PropTypes.shape({
     "Chirotherium": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
@@ -346,10 +346,10 @@ _Reimagine = PropTypes.shape({
     "waltzlike": PropTypes.any,
 });
 _QuebrachineClass = PropTypes.shape({
-    "Chirotherium": PropTypes.number,
-    "catharticalness": PropTypes.number,
-    "disdiapason": PropTypes.string,
-    "homocerc": PropTypes.bool,
+    "Chirotherium": PropTypes.number.isRequired,
+    "catharticalness": PropTypes.number.isRequired,
+    "disdiapason": PropTypes.string.isRequired,
+    "homocerc": PropTypes.bool.isRequired,
     "nonbookish": PropTypes.any,
 });
 _PyodermiaClass = PropTypes.shape({
@@ -397,58 +397,58 @@ _PulpitismClass = PropTypes.shape({
     "underburn": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "protrusive": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.number])),
-    "pulpitism": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _PulpitismClass, PropTypes.number])),
-    "pyodermia": PropTypes.arrayOf(PropTypes.oneOfType([_PyodermiaClass, PropTypes.number])),
-    "quebrachine": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _QuebrachineClass, PropTypes.any])),
-    "querier": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object])),
-    "rebarbative": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.number])),
-    "reimagine": PropTypes.arrayOf(_Reimagine),
-    "ressaut": _Ressaut,
-    "retrocervical": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.number])),
-    "revert": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.string])),
-    "rewrite": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _RewriteClass, PropTypes.number])),
-    "saccoderm": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any, PropTypes.string])),
-    "santir": PropTypes.arrayOf(PropTypes.oneOfType([_SantirClass, PropTypes.number])),
-    "saprophilous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any, PropTypes.string])),
-    "saxten": PropTypes.arrayOf(PropTypes.oneOfType([_SaxtenClass, PropTypes.string])),
-    "scatty": PropTypes.arrayOf(PropTypes.oneOfType([_Scatty, PropTypes.any])),
-    "scoffer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object, PropTypes.any])),
-    "scrampum": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.any])),
-    "semantic": PropTypes.number,
-    "serpentinic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])),
-    "shadowable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.bool])),
-    "sistering": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _SisteringClass, PropTypes.number])),
-    "staghunting": PropTypes.arrayOf(_Staghunting),
-    "stagmometer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.string])),
-    "stimulability": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.object])),
-    "strangleable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])),
-    "strenuosity": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _StrenuosityClass])),
-    "tabaxir": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])),
-    "talpiform": PropTypes.arrayOf(PropTypes.oneOfType([_QuebrachineClass, PropTypes.number, PropTypes.any])),
-    "thwack": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _QuebrachineClass, PropTypes.number])),
-    "to": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])),
-    "tortricine": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), _QuebrachineClass])),
-    "truantcy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _TruantcyClass])),
-    "turgesce": PropTypes.arrayOf(PropTypes.string),
-    "unbeginning": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object, PropTypes.string])),
-    "underdunged": PropTypes.arrayOf(PropTypes.number),
-    "undesirability": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object, PropTypes.string])),
-    "unerasing": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.object])),
-    "unguentarium": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.any])),
-    "unimpeachably": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _UnimpeachablyClass])),
-    "unmortgaged": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.any])),
-    "unobstructed": PropTypes.arrayOf(PropTypes.oneOfType([_QuebrachineClass, PropTypes.number, PropTypes.any])),
-    "unreceptivity": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.string])),
-    "unsatisfactoriness": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.number])),
-    "unsecurity": PropTypes.arrayOf(PropTypes.number),
-    "unstressed": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _UnstressedClass, PropTypes.string])),
-    "untasked": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.object])),
-    "unvarying": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.object])),
-    "vehemently": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.any])),
-    "warriorship": PropTypes.object,
-    "whitepot": PropTypes.arrayOf(PropTypes.oneOfType([_QuebrachineClass, PropTypes.number])),
-    "wrothy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _WrothyClass])),
+    "protrusive": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.number])).isRequired,
+    "pulpitism": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _PulpitismClass(...args), PropTypes.number])).isRequired,
+    "pyodermia": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _PyodermiaClass(...args), PropTypes.number])).isRequired,
+    "quebrachine": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _QuebrachineClass(...args), PropTypes.any])).isRequired,
+    "querier": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object])).isRequired,
+    "rebarbative": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.number])).isRequired,
+    "reimagine": PropTypes.arrayOf((...args) => _Reimagine(...args)).isRequired,
+    "ressaut": (...args) => _Ressaut.isRequired(...args),
+    "retrocervical": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.number])).isRequired,
+    "revert": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.string])).isRequired,
+    "rewrite": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _RewriteClass(...args), PropTypes.number])).isRequired,
+    "saccoderm": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any, PropTypes.string])).isRequired,
+    "santir": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _SantirClass(...args), PropTypes.number])).isRequired,
+    "saprophilous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any, PropTypes.string])).isRequired,
+    "saxten": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _SaxtenClass(...args), PropTypes.string])).isRequired,
+    "scatty": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _Scatty(...args), PropTypes.any])).isRequired,
+    "scoffer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object, PropTypes.any])).isRequired,
+    "scrampum": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.any])).isRequired,
+    "semantic": PropTypes.number.isRequired,
+    "serpentinic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])).isRequired,
+    "shadowable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.bool])).isRequired,
+    "sistering": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _SisteringClass(...args), PropTypes.number])).isRequired,
+    "staghunting": PropTypes.arrayOf((...args) => _Staghunting(...args)).isRequired,
+    "stagmometer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.string])).isRequired,
+    "stimulability": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.object])).isRequired,
+    "strangleable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])).isRequired,
+    "strenuosity": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _StrenuosityClass(...args)])).isRequired,
+    "tabaxir": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])).isRequired,
+    "talpiform": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _QuebrachineClass(...args), PropTypes.number, PropTypes.any])).isRequired,
+    "thwack": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _QuebrachineClass(...args), PropTypes.number])).isRequired,
+    "to": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])).isRequired,
+    "tortricine": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), (...args) => _QuebrachineClass(...args)])).isRequired,
+    "truantcy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _TruantcyClass(...args)])).isRequired,
+    "turgesce": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "unbeginning": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object, PropTypes.string])).isRequired,
+    "underdunged": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "undesirability": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object, PropTypes.string])).isRequired,
+    "unerasing": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.object])).isRequired,
+    "unguentarium": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.any])).isRequired,
+    "unimpeachably": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _UnimpeachablyClass(...args)])).isRequired,
+    "unmortgaged": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.any])).isRequired,
+    "unobstructed": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _QuebrachineClass(...args), PropTypes.number, PropTypes.any])).isRequired,
+    "unreceptivity": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.string])).isRequired,
+    "unsatisfactoriness": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.number])).isRequired,
+    "unsecurity": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "unstressed": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _UnstressedClass(...args), PropTypes.string])).isRequired,
+    "untasked": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.object])).isRequired,
+    "unvarying": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.object])).isRequired,
+    "vehemently": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.any])).isRequired,
+    "warriorship": PropTypes.object.isRequired,
+    "whitepot": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _QuebrachineClass(...args), PropTypes.number])).isRequired,
+    "wrothy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _WrothyClass(...args)])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combinations4.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combinations4.json/default/toplevel.js
index 1f19a18..a0679fe 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combinations4.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combinations4.json/default/toplevel.js
@@ -297,26 +297,26 @@ _RewriteClass = PropTypes.shape({
     "yardman": PropTypes.any,
 });
 _Ressaut = PropTypes.shape({
-    "Freesia": PropTypes.string,
-    "Genevieve": PropTypes.string,
-    "Mimosaceae": PropTypes.string,
-    "Theopaschitism": PropTypes.string,
-    "apperceptive": PropTypes.string,
-    "cuttoo": PropTypes.string,
-    "douser": PropTypes.string,
-    "drinkproof": PropTypes.string,
-    "forementioned": PropTypes.string,
-    "hyperdiabolical": PropTypes.string,
-    "hypocone": PropTypes.string,
-    "irreverentially": PropTypes.string,
-    "jumart": PropTypes.string,
-    "mollicrush": PropTypes.string,
-    "nedder": PropTypes.string,
-    "retinasphalt": PropTypes.string,
-    "sough": PropTypes.string,
-    "steading": PropTypes.string,
-    "undurableness": PropTypes.string,
-    "unmingleable": PropTypes.string,
+    "Freesia": PropTypes.string.isRequired,
+    "Genevieve": PropTypes.string.isRequired,
+    "Mimosaceae": PropTypes.string.isRequired,
+    "Theopaschitism": PropTypes.string.isRequired,
+    "apperceptive": PropTypes.string.isRequired,
+    "cuttoo": PropTypes.string.isRequired,
+    "douser": PropTypes.string.isRequired,
+    "drinkproof": PropTypes.string.isRequired,
+    "forementioned": PropTypes.string.isRequired,
+    "hyperdiabolical": PropTypes.string.isRequired,
+    "hypocone": PropTypes.string.isRequired,
+    "irreverentially": PropTypes.string.isRequired,
+    "jumart": PropTypes.string.isRequired,
+    "mollicrush": PropTypes.string.isRequired,
+    "nedder": PropTypes.string.isRequired,
+    "retinasphalt": PropTypes.string.isRequired,
+    "sough": PropTypes.string.isRequired,
+    "steading": PropTypes.string.isRequired,
+    "undurableness": PropTypes.string.isRequired,
+    "unmingleable": PropTypes.string.isRequired,
 });
 _Reimagine = PropTypes.shape({
     "Chirotherium": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
@@ -346,10 +346,10 @@ _Reimagine = PropTypes.shape({
     "waltzlike": PropTypes.any,
 });
 _QuebrachineClass = PropTypes.shape({
-    "Chirotherium": PropTypes.number,
-    "catharticalness": PropTypes.number,
-    "disdiapason": PropTypes.string,
-    "homocerc": PropTypes.bool,
+    "Chirotherium": PropTypes.number.isRequired,
+    "catharticalness": PropTypes.number.isRequired,
+    "disdiapason": PropTypes.string.isRequired,
+    "homocerc": PropTypes.bool.isRequired,
     "nonbookish": PropTypes.any,
 });
 _PyodermiaClass = PropTypes.shape({
@@ -397,58 +397,58 @@ _PulpitismClass = PropTypes.shape({
     "underburn": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "protrusive": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.number])),
-    "pulpitism": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _PulpitismClass, PropTypes.number])),
-    "pyodermia": PropTypes.arrayOf(PropTypes.oneOfType([_PyodermiaClass, PropTypes.number])),
-    "quebrachine": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _QuebrachineClass, PropTypes.any])),
-    "querier": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object])),
-    "rebarbative": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.number])),
-    "reimagine": PropTypes.arrayOf(_Reimagine),
-    "ressaut": _Ressaut,
-    "retrocervical": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.number])),
-    "revert": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.string])),
-    "rewrite": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _RewriteClass, PropTypes.number])),
-    "saccoderm": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any, PropTypes.string])),
-    "santir": PropTypes.arrayOf(PropTypes.oneOfType([_SantirClass, PropTypes.number])),
-    "saprophilous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any, PropTypes.string])),
-    "saxten": PropTypes.arrayOf(PropTypes.oneOfType([_SaxtenClass, PropTypes.string])),
-    "scatty": PropTypes.arrayOf(PropTypes.oneOfType([_Scatty, PropTypes.any])),
-    "scoffer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object, PropTypes.any])),
-    "scrampum": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.any])),
-    "semantic": PropTypes.number,
-    "serpentinic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])),
-    "shadowable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.bool])),
-    "sistering": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _SisteringClass, PropTypes.number])),
-    "staghunting": PropTypes.arrayOf(_Staghunting),
-    "stagmometer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.string])),
-    "stimulability": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.object])),
-    "strangleable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])),
-    "strenuosity": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _StrenuosityClass])),
-    "tabaxir": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])),
-    "talpiform": PropTypes.arrayOf(PropTypes.oneOfType([_QuebrachineClass, PropTypes.number, PropTypes.any])),
-    "thwack": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _QuebrachineClass, PropTypes.number])),
-    "to": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])),
-    "tortricine": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), _QuebrachineClass])),
-    "truantcy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _TruantcyClass])),
-    "turgesce": PropTypes.arrayOf(PropTypes.string),
-    "unbeginning": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object, PropTypes.string])),
-    "underdunged": PropTypes.arrayOf(PropTypes.number),
-    "undesirability": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object, PropTypes.string])),
-    "unerasing": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.object])),
-    "unguentarium": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.any])),
-    "unimpeachably": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _UnimpeachablyClass])),
-    "unmortgaged": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.any])),
-    "unobstructed": PropTypes.arrayOf(PropTypes.oneOfType([_QuebrachineClass, PropTypes.number, PropTypes.any])),
-    "unreceptivity": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.string])),
-    "unsatisfactoriness": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.number])),
-    "unsecurity": PropTypes.arrayOf(PropTypes.number),
-    "unstressed": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _UnstressedClass, PropTypes.string])),
-    "untasked": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.object])),
-    "unvarying": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.object])),
-    "vehemently": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.any])),
-    "warriorship": PropTypes.object,
-    "whitepot": PropTypes.arrayOf(PropTypes.oneOfType([_QuebrachineClass, PropTypes.number])),
-    "wrothy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), _WrothyClass])),
+    "protrusive": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.number])).isRequired,
+    "pulpitism": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _PulpitismClass(...args), PropTypes.number])).isRequired,
+    "pyodermia": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _PyodermiaClass(...args), PropTypes.number])).isRequired,
+    "quebrachine": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _QuebrachineClass(...args), PropTypes.any])).isRequired,
+    "querier": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.object])).isRequired,
+    "rebarbative": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.number])).isRequired,
+    "reimagine": PropTypes.arrayOf((...args) => _Reimagine(...args)).isRequired,
+    "ressaut": (...args) => _Ressaut.isRequired(...args),
+    "retrocervical": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.number])).isRequired,
+    "revert": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.string])).isRequired,
+    "rewrite": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _RewriteClass(...args), PropTypes.number])).isRequired,
+    "saccoderm": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any, PropTypes.string])).isRequired,
+    "santir": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _SantirClass(...args), PropTypes.number])).isRequired,
+    "saprophilous": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.any, PropTypes.string])).isRequired,
+    "saxten": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _SaxtenClass(...args), PropTypes.string])).isRequired,
+    "scatty": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _Scatty(...args), PropTypes.any])).isRequired,
+    "scoffer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object, PropTypes.any])).isRequired,
+    "scrampum": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.any])).isRequired,
+    "semantic": PropTypes.number.isRequired,
+    "serpentinic": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number])).isRequired,
+    "shadowable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.bool])).isRequired,
+    "sistering": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _SisteringClass(...args), PropTypes.number])).isRequired,
+    "staghunting": PropTypes.arrayOf((...args) => _Staghunting(...args)).isRequired,
+    "stagmometer": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), PropTypes.string])).isRequired,
+    "stimulability": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.object])).isRequired,
+    "strangleable": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number])).isRequired,
+    "strenuosity": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _StrenuosityClass(...args)])).isRequired,
+    "tabaxir": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])).isRequired,
+    "talpiform": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _QuebrachineClass(...args), PropTypes.number, PropTypes.any])).isRequired,
+    "thwack": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _QuebrachineClass(...args), PropTypes.number])).isRequired,
+    "to": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])).isRequired,
+    "tortricine": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])), (...args) => _QuebrachineClass(...args)])).isRequired,
+    "truantcy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _TruantcyClass(...args)])).isRequired,
+    "turgesce": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "unbeginning": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.object, PropTypes.string])).isRequired,
+    "underdunged": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "undesirability": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.object, PropTypes.string])).isRequired,
+    "unerasing": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.object])).isRequired,
+    "unguentarium": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.any])).isRequired,
+    "unimpeachably": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _UnimpeachablyClass(...args)])).isRequired,
+    "unmortgaged": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.object, PropTypes.any])).isRequired,
+    "unobstructed": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _QuebrachineClass(...args), PropTypes.number, PropTypes.any])).isRequired,
+    "unreceptivity": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.string])).isRequired,
+    "unsatisfactoriness": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool, PropTypes.number])).isRequired,
+    "unsecurity": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "unstressed": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _UnstressedClass(...args), PropTypes.string])).isRequired,
+    "untasked": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.number, PropTypes.object])).isRequired,
+    "unvarying": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.object])).isRequired,
+    "vehemently": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), PropTypes.bool, PropTypes.any])).isRequired,
+    "warriorship": PropTypes.object.isRequired,
+    "whitepot": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _QuebrachineClass(...args), PropTypes.number])).isRequired,
+    "wrothy": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.any), (...args) => _WrothyClass(...args)])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/combined-enum.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/combined-enum.json/default/toplevel.js
index f49d8a2..9c887b7 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/combined-enum.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/combined-enum.json/default/toplevel.js
@@ -14,13 +14,13 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 let _Bar;
-const _X = PropTypes.oneOfType(['three', 'one', 'two']);
+const _X = PropTypes.oneOf(["three", "one", "two"]);
 _Bar = PropTypes.shape({
-    "x": _X,
+    "x": _X.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "bar": PropTypes.arrayOf(_Bar),
-    "foo": PropTypes.arrayOf(_Bar),
+    "bar": PropTypes.arrayOf((...args) => _Bar(...args)).isRequired,
+    "foo": PropTypes.arrayOf((...args) => _Bar(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/direct-recursive.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/direct-recursive.json/default/toplevel.js
index aa87f15..7dcd47e 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/direct-recursive.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/direct-recursive.json/default/toplevel.js
@@ -14,11 +14,11 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "also": PropTypes.oneOfType([_TopLevel, PropTypes.any]),
-    "bar": PropTypes.bool,
-    "foo": PropTypes.number,
-    "moo": PropTypes.number,
-    "quux": PropTypes.string,
+    "also": PropTypes.oneOfType([(...args) => _TopLevel(...args), PropTypes.any]),
+    "bar": PropTypes.bool.isRequired,
+    "foo": PropTypes.number.isRequired,
+    "moo": PropTypes.number.isRequired,
+    "quux": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/empty-enum.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/empty-enum.json/default/toplevel.js
index 42ae87e..18236fa 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/empty-enum.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/empty-enum.json/default/toplevel.js
@@ -18,7 +18,7 @@ _Foo = PropTypes.shape({
     "bar": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _TopLevel = PropTypes.shape({
-    "foo": PropTypes.arrayOf(_Foo),
+    "foo": PropTypes.arrayOf((...args) => _Foo(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/identifiers.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/identifiers.json/default/toplevel.js
index a94661c..b6c5fa1 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/identifiers.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/identifiers.json/default/toplevel.js
@@ -22,30 +22,30 @@ let _FooBla;
 _FooBla = PropTypes.shape({
 });
 _Foo = PropTypes.shape({
-    "_": PropTypes.number,
-    "__": PropTypes.number,
-    "bla": _FooBla,
+    "_": PropTypes.number.isRequired,
+    "__": PropTypes.number.isRequired,
+    "bla": (...args) => _FooBla.isRequired(...args),
 });
 _TopLevelBla = PropTypes.shape({
-    "bar": PropTypes.number,
+    "bar": PropTypes.number.isRequired,
 });
 _ThisIsAToughOne = PropTypes.shape({
-    "\n\n\n": PropTypes.number,
-    "\"": PropTypes.number,
+    "\n\n\n": PropTypes.number.isRequired,
+    "\"": PropTypes.number.isRequired,
 });
 _EmptyClass = PropTypes.shape({
-    "y": PropTypes.number,
+    "y": PropTypes.number.isRequired,
 });
 _Empty = PropTypes.shape({
-    "x": PropTypes.number,
+    "x": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "": _Empty,
-    "!": PropTypes.number,
-    "Empty": _EmptyClass,
-    "ThisIsA\ud83d\ude1cTough\"\n\nOne": _ThisIsAToughOne,
-    "bla": _TopLevelBla,
-    "foo": _Foo,
+    "": (...args) => _Empty.isRequired(...args),
+    "!": PropTypes.number.isRequired,
+    "Empty": (...args) => _EmptyClass.isRequired(...args),
+    "ThisIsA\ud83d\ude1cTough\"\n\nOne": (...args) => _ThisIsAToughOne.isRequired(...args),
+    "bla": (...args) => _TopLevelBla.isRequired(...args),
+    "foo": (...args) => _Foo.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/issue2680-object-array.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/issue2680-object-array.json/default/toplevel.js
index 955ca73..fe61e27 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/issue2680-object-array.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/issue2680-object-array.json/default/toplevel.js
@@ -14,7 +14,7 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "key": PropTypes.string,
+    "key": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
index 5898bb4..53abccc 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
@@ -298,1143 +298,1143 @@ let _Xor;
 let _XorEq;
 let _Yield;
 _Yield = PropTypes.shape({
-    "yield": PropTypes.number,
+    "yield": PropTypes.number.isRequired,
 });
 _XorEq = PropTypes.shape({
-    "xor_eq": PropTypes.number,
+    "xor_eq": PropTypes.number.isRequired,
 });
 _Xor = PropTypes.shape({
-    "xor": PropTypes.number,
+    "xor": PropTypes.number.isRequired,
 });
 _With = PropTypes.shape({
-    "with": PropTypes.number,
+    "with": PropTypes.number.isRequired,
 });
 _WillSet = PropTypes.shape({
-    "willSet": PropTypes.number,
+    "willSet": PropTypes.number.isRequired,
 });
 _While = PropTypes.shape({
-    "while": PropTypes.number,
+    "while": PropTypes.number.isRequired,
 });
 _Where = PropTypes.shape({
-    "where": PropTypes.number,
+    "where": PropTypes.number.isRequired,
 });
 _Weak = PropTypes.shape({
-    "weak": PropTypes.number,
+    "weak": PropTypes.number.isRequired,
 });
 _WcharT = PropTypes.shape({
-    "wchar_t": PropTypes.number,
+    "wchar_t": PropTypes.number.isRequired,
 });
 _Volatile = PropTypes.shape({
-    "volatile": PropTypes.number,
+    "volatile": PropTypes.number.isRequired,
 });
 _Void = PropTypes.shape({
-    "void": PropTypes.number,
+    "void": PropTypes.number.isRequired,
 });
 _Virtual = PropTypes.shape({
-    "virtual": PropTypes.number,
+    "virtual": PropTypes.number.isRequired,
 });
 _Var = PropTypes.shape({
-    "var": PropTypes.number,
+    "var": PropTypes.number.isRequired,
 });
 _Using = PropTypes.shape({
-    "using": PropTypes.number,
+    "using": PropTypes.number.isRequired,
 });
 _Ushort = PropTypes.shape({
-    "ushort": PropTypes.number,
+    "ushort": PropTypes.number.isRequired,
 });
 _Unsigned = PropTypes.shape({
-    "unsigned": PropTypes.number,
+    "unsigned": PropTypes.number.isRequired,
 });
 _Unsafe = PropTypes.shape({
-    "unsafe": PropTypes.number,
+    "unsafe": PropTypes.number.isRequired,
 });
 _Unowned = PropTypes.shape({
-    "unowned": PropTypes.number,
+    "unowned": PropTypes.number.isRequired,
 });
 _Union = PropTypes.shape({
-    "union": PropTypes.number,
+    "union": PropTypes.number.isRequired,
 });
 _Yes = PropTypes.shape({
-    "YES": PropTypes.number,
+    "YES": PropTypes.number.isRequired,
 });
 _Obj5 = PropTypes.shape({
-    "YES": _Yes,
-    "dummy": PropTypes.number,
-    "union": _Union,
-    "unowned": _Unowned,
-    "unsafe": _Unsafe,
-    "unsigned": _Unsigned,
-    "ushort": _Ushort,
-    "using": _Using,
-    "var": _Var,
-    "virtual": _Virtual,
-    "void": _Void,
-    "volatile": _Volatile,
-    "wchar_t": _WcharT,
-    "weak": _Weak,
-    "where": _Where,
-    "while": _While,
-    "willSet": _WillSet,
-    "with": _With,
-    "xor": _Xor,
-    "xor_eq": _XorEq,
-    "yield": _Yield,
+    "YES": (...args) => _Yes.isRequired(...args),
+    "dummy": PropTypes.number.isRequired,
+    "union": (...args) => _Union.isRequired(...args),
+    "unowned": (...args) => _Unowned.isRequired(...args),
+    "unsafe": (...args) => _Unsafe.isRequired(...args),
+    "unsigned": (...args) => _Unsigned.isRequired(...args),
+    "ushort": (...args) => _Ushort.isRequired(...args),
+    "using": (...args) => _Using.isRequired(...args),
+    "var": (...args) => _Var.isRequired(...args),
+    "virtual": (...args) => _Virtual.isRequired(...args),
+    "void": (...args) => _Void.isRequired(...args),
+    "volatile": (...args) => _Volatile.isRequired(...args),
+    "wchar_t": (...args) => _WcharT.isRequired(...args),
+    "weak": (...args) => _Weak.isRequired(...args),
+    "where": (...args) => _Where.isRequired(...args),
+    "while": (...args) => _While.isRequired(...args),
+    "willSet": (...args) => _WillSet.isRequired(...args),
+    "with": (...args) => _With.isRequired(...args),
+    "xor": (...args) => _Xor.isRequired(...args),
+    "xor_eq": (...args) => _XorEq.isRequired(...args),
+    "yield": (...args) => _Yield.isRequired(...args),
 });
 _Undefined = PropTypes.shape({
-    "undefined": PropTypes.number,
+    "undefined": PropTypes.number.isRequired,
 });
 _Unchecked = PropTypes.shape({
-    "unchecked": PropTypes.number,
+    "unchecked": PropTypes.number.isRequired,
 });
 _Ulong = PropTypes.shape({
-    "ulong": PropTypes.number,
+    "ulong": PropTypes.number.isRequired,
 });
 _Uint = PropTypes.shape({
-    "uint": PropTypes.number,
+    "uint": PropTypes.number.isRequired,
 });
 _Typeof = PropTypes.shape({
-    "typeof": PropTypes.number,
+    "typeof": PropTypes.number.isRequired,
 });
 _Typename = PropTypes.shape({
-    "typename": PropTypes.number,
+    "typename": PropTypes.number.isRequired,
 });
 _Typeid = PropTypes.shape({
-    "typeid": PropTypes.number,
+    "typeid": PropTypes.number.isRequired,
 });
 _Typedef = PropTypes.shape({
-    "typedef": PropTypes.number,
+    "typedef": PropTypes.number.isRequired,
 });
 _Typealias = PropTypes.shape({
-    "typealias": PropTypes.number,
+    "typealias": PropTypes.number.isRequired,
 });
 _TypeClass = PropTypes.shape({
-    "type": PropTypes.number,
+    "type": PropTypes.number.isRequired,
 });
 _Try = PropTypes.shape({
-    "try": PropTypes.number,
+    "try": PropTypes.number.isRequired,
 });
 _TrueClass = PropTypes.shape({
-    "true": PropTypes.number,
+    "true": PropTypes.number.isRequired,
 });
 _Transient = PropTypes.shape({
-    "transient": PropTypes.number,
+    "transient": PropTypes.number.isRequired,
 });
 _TopLevelClass = PropTypes.shape({
-    "top_level": PropTypes.number,
+    "top_level": PropTypes.number.isRequired,
 });
 _ToJSON = PropTypes.shape({
-    "to_json": PropTypes.number,
+    "to_json": PropTypes.number.isRequired,
 });
 _Throws = PropTypes.shape({
-    "throws": PropTypes.number,
+    "throws": PropTypes.number.isRequired,
 });
 _Throw = PropTypes.shape({
-    "throw": PropTypes.number,
+    "throw": PropTypes.number.isRequired,
 });
 _ThreadLocal = PropTypes.shape({
-    "thread_local": PropTypes.number,
+    "thread_local": PropTypes.number.isRequired,
 });
 _This = PropTypes.shape({
-    "this": PropTypes.number,
+    "this": PropTypes.number.isRequired,
 });
 _Then = PropTypes.shape({
-    "then": PropTypes.number,
+    "then": PropTypes.number.isRequired,
 });
 _Template = PropTypes.shape({
-    "template": PropTypes.number,
+    "template": PropTypes.number.isRequired,
 });
 _System = PropTypes.shape({
-    "system": PropTypes.number,
+    "system": PropTypes.number.isRequired,
 });
 _Synchronized = PropTypes.shape({
-    "synchronized": PropTypes.number,
+    "synchronized": PropTypes.number.isRequired,
 });
 _Symbol = PropTypes.shape({
-    "symbol": PropTypes.number,
+    "symbol": PropTypes.number.isRequired,
 });
 _Switch = PropTypes.shape({
-    "switch": PropTypes.number,
+    "switch": PropTypes.number.isRequired,
 });
 _Super = PropTypes.shape({
-    "super": PropTypes.number,
+    "super": PropTypes.number.isRequired,
 });
 _Subscript = PropTypes.shape({
-    "subscript": PropTypes.number,
+    "subscript": PropTypes.number.isRequired,
 });
 _Struct = PropTypes.shape({
-    "struct": PropTypes.number,
+    "struct": PropTypes.number.isRequired,
 });
 _String = PropTypes.shape({
-    "string": PropTypes.number,
+    "string": PropTypes.number.isRequired,
 });
 _Strictfp = PropTypes.shape({
-    "strictfp": PropTypes.number,
+    "strictfp": PropTypes.number.isRequired,
 });
 _StaticCast = PropTypes.shape({
-    "static_cast": PropTypes.number,
+    "static_cast": PropTypes.number.isRequired,
 });
 _StaticAssert = PropTypes.shape({
-    "static_assert": PropTypes.number,
+    "static_assert": PropTypes.number.isRequired,
 });
 _Static = PropTypes.shape({
-    "static": PropTypes.number,
+    "static": PropTypes.number.isRequired,
 });
 _Stackalloc = PropTypes.shape({
-    "stackalloc": PropTypes.number,
+    "stackalloc": PropTypes.number.isRequired,
 });
 _Sizeof = PropTypes.shape({
-    "sizeof": PropTypes.number,
+    "sizeof": PropTypes.number.isRequired,
 });
 _Signed = PropTypes.shape({
-    "signed": PropTypes.number,
+    "signed": PropTypes.number.isRequired,
 });
 _Short = PropTypes.shape({
-    "short": PropTypes.number,
+    "short": PropTypes.number.isRequired,
 });
 _Set = PropTypes.shape({
-    "set": PropTypes.number,
+    "set": PropTypes.number.isRequired,
 });
 _Serialize = PropTypes.shape({
-    "serialize": PropTypes.number,
+    "serialize": PropTypes.number.isRequired,
 });
 _SelfClass = PropTypes.shape({
-    "self": PropTypes.number,
+    "self": PropTypes.number.isRequired,
 });
 _Select = PropTypes.shape({
-    "select": PropTypes.number,
+    "select": PropTypes.number.isRequired,
 });
 _Sealed = PropTypes.shape({
-    "sealed": PropTypes.number,
+    "sealed": PropTypes.number.isRequired,
 });
 _Sbyte = PropTypes.shape({
-    "sbyte": PropTypes.number,
+    "sbyte": PropTypes.number.isRequired,
 });
 _Right = PropTypes.shape({
-    "right": PropTypes.number,
+    "right": PropTypes.number.isRequired,
 });
 _Return = PropTypes.shape({
-    "return": PropTypes.number,
+    "return": PropTypes.number.isRequired,
 });
 _Rethrows = PropTypes.shape({
-    "rethrows": PropTypes.number,
+    "rethrows": PropTypes.number.isRequired,
 });
 _Retain = PropTypes.shape({
-    "retain": PropTypes.number,
+    "retain": PropTypes.number.isRequired,
 });
 _Restrict = PropTypes.shape({
-    "restrict": PropTypes.number,
+    "restrict": PropTypes.number.isRequired,
 });
 _Requires = PropTypes.shape({
-    "requires": PropTypes.number,
+    "requires": PropTypes.number.isRequired,
 });
 _Required = PropTypes.shape({
-    "required": PropTypes.number,
+    "required": PropTypes.number.isRequired,
 });
 _Require = PropTypes.shape({
-    "require": PropTypes.number,
+    "require": PropTypes.number.isRequired,
 });
 _Repeat = PropTypes.shape({
-    "repeat": PropTypes.number,
+    "repeat": PropTypes.number.isRequired,
 });
 _ReinterpretCast = PropTypes.shape({
-    "reinterpret_cast": PropTypes.number,
+    "reinterpret_cast": PropTypes.number.isRequired,
 });
 _Register = PropTypes.shape({
-    "register": PropTypes.number,
+    "register": PropTypes.number.isRequired,
 });
 _Ref = PropTypes.shape({
-    "ref": PropTypes.number,
+    "ref": PropTypes.number.isRequired,
 });
 _Readonly = PropTypes.shape({
-    "readonly": PropTypes.number,
+    "readonly": PropTypes.number.isRequired,
 });
 _Range = PropTypes.shape({
-    "range": PropTypes.number,
+    "range": PropTypes.number.isRequired,
 });
 _Raise = PropTypes.shape({
-    "raise": PropTypes.number,
+    "raise": PropTypes.number.isRequired,
 });
 _Quicktype = PropTypes.shape({
-    "quicktype": PropTypes.number,
+    "quicktype": PropTypes.number.isRequired,
 });
 _Public = PropTypes.shape({
-    "public": PropTypes.number,
+    "public": PropTypes.number.isRequired,
 });
 _Type = PropTypes.shape({
-    "Type": PropTypes.number,
+    "Type": PropTypes.number.isRequired,
 });
 _True = PropTypes.shape({
-    "True": PropTypes.number,
+    "True": PropTypes.number.isRequired,
 });
 _Self = PropTypes.shape({
-    "Self": PropTypes.number,
+    "Self": PropTypes.number.isRequired,
 });
 _Sel = PropTypes.shape({
-    "SEL": PropTypes.number,
+    "SEL": PropTypes.number.isRequired,
 });
 _Obj4 = PropTypes.shape({
-    "SEL": _Sel,
-    "Self": _Self,
-    "True": _True,
-    "Type": _Type,
-    "dummy": PropTypes.number,
-    "public": _Public,
-    "quicktype": _Quicktype,
-    "raise": _Raise,
-    "range": _Range,
-    "readonly": _Readonly,
-    "ref": _Ref,
-    "register": _Register,
-    "reinterpret_cast": _ReinterpretCast,
-    "repeat": _Repeat,
-    "require": _Require,
-    "required": _Required,
-    "requires": _Requires,
-    "restrict": _Restrict,
-    "retain": _Retain,
-    "rethrows": _Rethrows,
-    "return": _Return,
-    "right": _Right,
-    "sbyte": _Sbyte,
-    "sealed": _Sealed,
-    "select": _Select,
-    "self": _SelfClass,
-    "serialize": _Serialize,
-    "set": _Set,
-    "short": _Short,
-    "signed": _Signed,
-    "sizeof": _Sizeof,
-    "stackalloc": _Stackalloc,
-    "static": _Static,
-    "static_assert": _StaticAssert,
-    "static_cast": _StaticCast,
-    "strictfp": _Strictfp,
-    "string": _String,
-    "struct": _Struct,
-    "subscript": _Subscript,
-    "super": _Super,
-    "switch": _Switch,
-    "symbol": _Symbol,
-    "synchronized": _Synchronized,
-    "system": _System,
-    "template": _Template,
-    "then": _Then,
-    "this": _This,
-    "thread_local": _ThreadLocal,
-    "throw": _Throw,
-    "throws": _Throws,
-    "to_json": _ToJSON,
-    "top_level": _TopLevelClass,
-    "transient": _Transient,
-    "true": _TrueClass,
-    "try": _Try,
-    "type": _TypeClass,
-    "typealias": _Typealias,
-    "typedef": _Typedef,
-    "typeid": _Typeid,
-    "typename": _Typename,
-    "typeof": _Typeof,
-    "uint": _Uint,
-    "ulong": _Ulong,
-    "unchecked": _Unchecked,
-    "undefined": _Undefined,
+    "SEL": (...args) => _Sel.isRequired(...args),
+    "Self": (...args) => _Self.isRequired(...args),
+    "True": (...args) => _True.isRequired(...args),
+    "Type": (...args) => _Type.isRequired(...args),
+    "dummy": PropTypes.number.isRequired,
+    "public": (...args) => _Public.isRequired(...args),
+    "quicktype": (...args) => _Quicktype.isRequired(...args),
+    "raise": (...args) => _Raise.isRequired(...args),
+    "range": (...args) => _Range.isRequired(...args),
+    "readonly": (...args) => _Readonly.isRequired(...args),
+    "ref": (...args) => _Ref.isRequired(...args),
+    "register": (...args) => _Register.isRequired(...args),
+    "reinterpret_cast": (...args) => _ReinterpretCast.isRequired(...args),
+    "repeat": (...args) => _Repeat.isRequired(...args),
+    "require": (...args) => _Require.isRequired(...args),
+    "required": (...args) => _Required.isRequired(...args),
+    "requires": (...args) => _Requires.isRequired(...args),
+    "restrict": (...args) => _Restrict.isRequired(...args),
+    "retain": (...args) => _Retain.isRequired(...args),
+    "rethrows": (...args) => _Rethrows.isRequired(...args),
+    "return": (...args) => _Return.isRequired(...args),
+    "right": (...args) => _Right.isRequired(...args),
+    "sbyte": (...args) => _Sbyte.isRequired(...args),
+    "sealed": (...args) => _Sealed.isRequired(...args),
+    "select": (...args) => _Select.isRequired(...args),
+    "self": (...args) => _SelfClass.isRequired(...args),
+    "serialize": (...args) => _Serialize.isRequired(...args),
+    "set": (...args) => _Set.isRequired(...args),
+    "short": (...args) => _Short.isRequired(...args),
+    "signed": (...args) => _Signed.isRequired(...args),
+    "sizeof": (...args) => _Sizeof.isRequired(...args),
+    "stackalloc": (...args) => _Stackalloc.isRequired(...args),
+    "static": (...args) => _Static.isRequired(...args),
+    "static_assert": (...args) => _StaticAssert.isRequired(...args),
+    "static_cast": (...args) => _StaticCast.isRequired(...args),
+    "strictfp": (...args) => _Strictfp.isRequired(...args),
+    "string": (...args) => _String.isRequired(...args),
+    "struct": (...args) => _Struct.isRequired(...args),
+    "subscript": (...args) => _Subscript.isRequired(...args),
+    "super": (...args) => _Super.isRequired(...args),
+    "switch": (...args) => _Switch.isRequired(...args),
+    "symbol": (...args) => _Symbol.isRequired(...args),
+    "synchronized": (...args) => _Synchronized.isRequired(...args),
+    "system": (...args) => _System.isRequired(...args),
+    "template": (...args) => _Template.isRequired(...args),
+    "then": (...args) => _Then.isRequired(...args),
+    "this": (...args) => _This.isRequired(...args),
+    "thread_local": (...args) => _ThreadLocal.isRequired(...args),
+    "throw": (...args) => _Throw.isRequired(...args),
+    "throws": (...args) => _Throws.isRequired(...args),
+    "to_json": (...args) => _ToJSON.isRequired(...args),
+    "top_level": (...args) => _TopLevelClass.isRequired(...args),
+    "transient": (...args) => _Transient.isRequired(...args),
+    "true": (...args) => _TrueClass.isRequired(...args),
+    "try": (...args) => _Try.isRequired(...args),
+    "type": (...args) => _TypeClass.isRequired(...args),
+    "typealias": (...args) => _Typealias.isRequired(...args),
+    "typedef": (...args) => _Typedef.isRequired(...args),
+    "typeid": (...args) => _Typeid.isRequired(...args),
+    "typename": (...args) => _Typename.isRequired(...args),
+    "typeof": (...args) => _Typeof.isRequired(...args),
+    "uint": (...args) => _Uint.isRequired(...args),
+    "ulong": (...args) => _Ulong.isRequired(...args),
+    "unchecked": (...args) => _Unchecked.isRequired(...args),
+    "undefined": (...args) => _Undefined.isRequired(...args),
 });
 _ProtocolClass = PropTypes.shape({
-    "protocol": PropTypes.number,
+    "protocol": PropTypes.number.isRequired,
 });
 _Protected = PropTypes.shape({
-    "protected": PropTypes.number,
+    "protected": PropTypes.number.isRequired,
 });
 _Private = PropTypes.shape({
-    "private": PropTypes.number,
+    "private": PropTypes.number.isRequired,
 });
 _Printf = PropTypes.shape({
-    "printf": PropTypes.number,
+    "printf": PropTypes.number.isRequired,
 });
 _PrintMembers = PropTypes.shape({
-    "printMembers": PropTypes.number,
+    "printMembers": PropTypes.number.isRequired,
 });
 _Print = PropTypes.shape({
-    "print": PropTypes.number,
+    "print": PropTypes.number.isRequired,
 });
 _Prefix = PropTypes.shape({
-    "prefix": PropTypes.number,
+    "prefix": PropTypes.number.isRequired,
 });
 _Precedence = PropTypes.shape({
-    "precedence": PropTypes.number,
+    "precedence": PropTypes.number.isRequired,
 });
 _Postfix = PropTypes.shape({
-    "postfix": PropTypes.number,
+    "postfix": PropTypes.number.isRequired,
 });
 _Port = PropTypes.shape({
-    "port": PropTypes.number,
+    "port": PropTypes.number.isRequired,
 });
 _Pass = PropTypes.shape({
-    "pass": PropTypes.number,
+    "pass": PropTypes.number.isRequired,
 });
 _Params = PropTypes.shape({
-    "params": PropTypes.number,
+    "params": PropTypes.number.isRequired,
 });
 _Package = PropTypes.shape({
-    "package": PropTypes.number,
+    "package": PropTypes.number.isRequired,
 });
 _Override = PropTypes.shape({
-    "override": PropTypes.number,
+    "override": PropTypes.number.isRequired,
 });
 _Out = PropTypes.shape({
-    "out": PropTypes.number,
+    "out": PropTypes.number.isRequired,
 });
 _OrEq = PropTypes.shape({
-    "or_eq": PropTypes.number,
+    "or_eq": PropTypes.number.isRequired,
 });
 _Or = PropTypes.shape({
-    "or": PropTypes.number,
+    "or": PropTypes.number.isRequired,
 });
 _Optional = PropTypes.shape({
-    "optional": PropTypes.number,
+    "optional": PropTypes.number.isRequired,
 });
 _Operator = PropTypes.shape({
-    "operator": PropTypes.number,
+    "operator": PropTypes.number.isRequired,
 });
 _Open = PropTypes.shape({
-    "open": PropTypes.number,
+    "open": PropTypes.number.isRequired,
 });
 _Oneway = PropTypes.shape({
-    "oneway": PropTypes.number,
+    "oneway": PropTypes.number.isRequired,
 });
 _Of = PropTypes.shape({
-    "of": PropTypes.number,
+    "of": PropTypes.number.isRequired,
 });
 _Object = PropTypes.shape({
-    "object": PropTypes.number,
+    "object": PropTypes.number.isRequired,
 });
 _Number = PropTypes.shape({
-    "number": PropTypes.number,
+    "number": PropTypes.number.isRequired,
 });
 _Nullptr = PropTypes.shape({
-    "nullptr": PropTypes.number,
+    "nullptr": PropTypes.number.isRequired,
 });
 _NullClass = PropTypes.shape({
-    "null": PropTypes.number,
+    "null": PropTypes.number.isRequired,
 });
 _NotEq = PropTypes.shape({
-    "not_eq": PropTypes.number,
+    "not_eq": PropTypes.number.isRequired,
 });
 _Not = PropTypes.shape({
-    "not": PropTypes.number,
+    "not": PropTypes.number.isRequired,
 });
 _Nonmutating = PropTypes.shape({
-    "nonmutating": PropTypes.number,
+    "nonmutating": PropTypes.number.isRequired,
 });
 _Nonlocal = PropTypes.shape({
-    "nonlocal": PropTypes.number,
+    "nonlocal": PropTypes.number.isRequired,
 });
 _NoneClass = PropTypes.shape({
-    "none": PropTypes.number,
+    "none": PropTypes.number.isRequired,
 });
 _Nonatomic = PropTypes.shape({
-    "nonatomic": PropTypes.number,
+    "nonatomic": PropTypes.number.isRequired,
 });
 _Noexcept = PropTypes.shape({
-    "noexcept": PropTypes.number,
+    "noexcept": PropTypes.number.isRequired,
 });
 _Nil = PropTypes.shape({
-    "nil": PropTypes.number,
+    "nil": PropTypes.number.isRequired,
 });
 _Newtonsoft = PropTypes.shape({
-    "newtonsoft": PropTypes.number,
+    "newtonsoft": PropTypes.number.isRequired,
 });
 _New = PropTypes.shape({
-    "new": PropTypes.number,
+    "new": PropTypes.number.isRequired,
 });
 _Native = PropTypes.shape({
-    "native": PropTypes.number,
+    "native": PropTypes.number.isRequired,
 });
 _Namespace = PropTypes.shape({
-    "namespace": PropTypes.number,
+    "namespace": PropTypes.number.isRequired,
 });
 _Mutating = PropTypes.shape({
-    "mutating": PropTypes.number,
+    "mutating": PropTypes.number.isRequired,
 });
 _Mutable = PropTypes.shape({
-    "mutable": PropTypes.number,
+    "mutable": PropTypes.number.isRequired,
 });
 _Module = PropTypes.shape({
-    "module": PropTypes.number,
+    "module": PropTypes.number.isRequired,
 });
 _MetadataPropertyHandling = PropTypes.shape({
-    "metadata_property_handling": PropTypes.number,
+    "metadata_property_handling": PropTypes.number.isRequired,
 });
 _Map = PropTypes.shape({
-    "map": PropTypes.number,
+    "map": PropTypes.number.isRequired,
 });
 _Long = PropTypes.shape({
-    "long": PropTypes.number,
+    "long": PropTypes.number.isRequired,
 });
 _Lock = PropTypes.shape({
-    "lock": PropTypes.number,
+    "lock": PropTypes.number.isRequired,
 });
 _List = PropTypes.shape({
-    "list": PropTypes.number,
+    "list": PropTypes.number.isRequired,
 });
 _Let = PropTypes.shape({
-    "let": PropTypes.number,
+    "let": PropTypes.number.isRequired,
 });
 _Left = PropTypes.shape({
-    "left": PropTypes.number,
+    "left": PropTypes.number.isRequired,
 });
 _Lazy = PropTypes.shape({
-    "lazy": PropTypes.number,
+    "lazy": PropTypes.number.isRequired,
 });
 _Lambda = PropTypes.shape({
-    "lambda": PropTypes.number,
+    "lambda": PropTypes.number.isRequired,
 });
 _JSONWriter = PropTypes.shape({
-    "json_writer": PropTypes.number,
+    "json_writer": PropTypes.number.isRequired,
 });
 _JSONToken = PropTypes.shape({
-    "json_token": PropTypes.number,
+    "json_token": PropTypes.number.isRequired,
 });
 _JSONSerializer = PropTypes.shape({
-    "json_serializer": PropTypes.number,
+    "json_serializer": PropTypes.number.isRequired,
 });
 _JSONConverter = PropTypes.shape({
-    "json_converter": PropTypes.number,
+    "json_converter": PropTypes.number.isRequired,
 });
 _JSON = PropTypes.shape({
-    "json": PropTypes.number,
+    "json": PropTypes.number.isRequired,
 });
 _Jpipe = PropTypes.shape({
-    "jpipe": PropTypes.number,
+    "jpipe": PropTypes.number.isRequired,
 });
 _Jenc = PropTypes.shape({
-    "jenc": PropTypes.number,
+    "jenc": PropTypes.number.isRequired,
 });
 _Jdec = PropTypes.shape({
-    "jdec": PropTypes.number,
+    "jdec": PropTypes.number.isRequired,
 });
 _Iterable = PropTypes.shape({
-    "iterable": PropTypes.number,
+    "iterable": PropTypes.number.isRequired,
 });
 _Is = PropTypes.shape({
-    "is": PropTypes.number,
+    "is": PropTypes.number.isRequired,
 });
 _Protocol = PropTypes.shape({
-    "Protocol": PropTypes.number,
+    "Protocol": PropTypes.number.isRequired,
 });
 _None = PropTypes.shape({
-    "None": PropTypes.number,
+    "None": PropTypes.number.isRequired,
 });
 _Null = PropTypes.shape({
-    "NULL": PropTypes.number,
+    "NULL": PropTypes.number.isRequired,
 });
 _NSString = PropTypes.shape({
-    "NSString": PropTypes.number,
+    "NSString": PropTypes.number.isRequired,
 });
 _No = PropTypes.shape({
-    "NO": PropTypes.number,
+    "NO": PropTypes.number.isRequired,
 });
 _Obj3 = PropTypes.shape({
-    "NO": _No,
-    "NSString": _NSString,
-    "NULL": _Null,
-    "None": _None,
-    "Protocol": _Protocol,
-    "dummy": PropTypes.number,
-    "is": _Is,
-    "iterable": _Iterable,
-    "jdec": _Jdec,
-    "jenc": _Jenc,
-    "jpipe": _Jpipe,
-    "json": _JSON,
-    "json_converter": _JSONConverter,
-    "json_serializer": _JSONSerializer,
-    "json_token": _JSONToken,
-    "json_writer": _JSONWriter,
-    "lambda": _Lambda,
-    "lazy": _Lazy,
-    "left": _Left,
-    "let": _Let,
-    "list": _List,
-    "lock": _Lock,
-    "long": _Long,
-    "map": _Map,
-    "metadata_property_handling": _MetadataPropertyHandling,
-    "module": _Module,
-    "mutable": _Mutable,
-    "mutating": _Mutating,
-    "namespace": _Namespace,
-    "native": _Native,
-    "new": _New,
-    "newtonsoft": _Newtonsoft,
-    "nil": _Nil,
-    "noexcept": _Noexcept,
-    "nonatomic": _Nonatomic,
-    "none": _NoneClass,
-    "nonlocal": _Nonlocal,
-    "nonmutating": _Nonmutating,
-    "not": _Not,
-    "not_eq": _NotEq,
-    "null": _NullClass,
-    "nullptr": _Nullptr,
-    "number": _Number,
-    "object": _Object,
-    "of": _Of,
-    "oneway": _Oneway,
-    "open": _Open,
-    "operator": _Operator,
-    "optional": _Optional,
-    "or": _Or,
-    "or_eq": _OrEq,
-    "out": _Out,
-    "override": _Override,
-    "package": _Package,
-    "params": _Params,
-    "pass": _Pass,
-    "port": _Port,
-    "postfix": _Postfix,
-    "precedence": _Precedence,
-    "prefix": _Prefix,
-    "print": _Print,
-    "printMembers": _PrintMembers,
-    "printf": _Printf,
-    "private": _Private,
-    "protected": _Protected,
-    "protocol": _ProtocolClass,
+    "NO": (...args) => _No.isRequired(...args),
+    "NSString": (...args) => _NSString.isRequired(...args),
+    "NULL": (...args) => _Null.isRequired(...args),
+    "None": (...args) => _None.isRequired(...args),
+    "Protocol": (...args) => _Protocol.isRequired(...args),
+    "dummy": PropTypes.number.isRequired,
+    "is": (...args) => _Is.isRequired(...args),
+    "iterable": (...args) => _Iterable.isRequired(...args),
+    "jdec": (...args) => _Jdec.isRequired(...args),
+    "jenc": (...args) => _Jenc.isRequired(...args),
+    "jpipe": (...args) => _Jpipe.isRequired(...args),
+    "json": (...args) => _JSON.isRequired(...args),
+    "json_converter": (...args) => _JSONConverter.isRequired(...args),
+    "json_serializer": (...args) => _JSONSerializer.isRequired(...args),
+    "json_token": (...args) => _JSONToken.isRequired(...args),
+    "json_writer": (...args) => _JSONWriter.isRequired(...args),
+    "lambda": (...args) => _Lambda.isRequired(...args),
+    "lazy": (...args) => _Lazy.isRequired(...args),
+    "left": (...args) => _Left.isRequired(...args),
+    "let": (...args) => _Let.isRequired(...args),
+    "list": (...args) => _List.isRequired(...args),
+    "lock": (...args) => _Lock.isRequired(...args),
+    "long": (...args) => _Long.isRequired(...args),
+    "map": (...args) => _Map.isRequired(...args),
+    "metadata_property_handling": (...args) => _MetadataPropertyHandling.isRequired(...args),
+    "module": (...args) => _Module.isRequired(...args),
+    "mutable": (...args) => _Mutable.isRequired(...args),
+    "mutating": (...args) => _Mutating.isRequired(...args),
+    "namespace": (...args) => _Namespace.isRequired(...args),
+    "native": (...args) => _Native.isRequired(...args),
+    "new": (...args) => _New.isRequired(...args),
+    "newtonsoft": (...args) => _Newtonsoft.isRequired(...args),
+    "nil": (...args) => _Nil.isRequired(...args),
+    "noexcept": (...args) => _Noexcept.isRequired(...args),
+    "nonatomic": (...args) => _Nonatomic.isRequired(...args),
+    "none": (...args) => _NoneClass.isRequired(...args),
+    "nonlocal": (...args) => _Nonlocal.isRequired(...args),
+    "nonmutating": (...args) => _Nonmutating.isRequired(...args),
+    "not": (...args) => _Not.isRequired(...args),
+    "not_eq": (...args) => _NotEq.isRequired(...args),
+    "null": (...args) => _NullClass.isRequired(...args),
+    "nullptr": (...args) => _Nullptr.isRequired(...args),
+    "number": (...args) => _Number.isRequired(...args),
+    "object": (...args) => _Object.isRequired(...args),
+    "of": (...args) => _Of.isRequired(...args),
+    "oneway": (...args) => _Oneway.isRequired(...args),
+    "open": (...args) => _Open.isRequired(...args),
+    "operator": (...args) => _Operator.isRequired(...args),
+    "optional": (...args) => _Optional.isRequired(...args),
+    "or": (...args) => _Or.isRequired(...args),
+    "or_eq": (...args) => _OrEq.isRequired(...args),
+    "out": (...args) => _Out.isRequired(...args),
+    "override": (...args) => _Override.isRequired(...args),
+    "package": (...args) => _Package.isRequired(...args),
+    "params": (...args) => _Params.isRequired(...args),
+    "pass": (...args) => _Pass.isRequired(...args),
+    "port": (...args) => _Port.isRequired(...args),
+    "postfix": (...args) => _Postfix.isRequired(...args),
+    "precedence": (...args) => _Precedence.isRequired(...args),
+    "prefix": (...args) => _Prefix.isRequired(...args),
+    "print": (...args) => _Print.isRequired(...args),
+    "printMembers": (...args) => _PrintMembers.isRequired(...args),
+    "printf": (...args) => _Printf.isRequired(...args),
+    "private": (...args) => _Private.isRequired(...args),
+    "protected": (...args) => _Protected.isRequired(...args),
+    "protocol": (...args) => _ProtocolClass.isRequired(...args),
 });
 _Internal = PropTypes.shape({
-    "internal": PropTypes.number,
+    "internal": PropTypes.number.isRequired,
 });
 _Interface = PropTypes.shape({
-    "interface": PropTypes.number,
+    "interface": PropTypes.number.isRequired,
 });
 _Int = PropTypes.shape({
-    "int": PropTypes.number,
+    "int": PropTypes.number.isRequired,
 });
 _Instanceof = PropTypes.shape({
-    "instanceof": PropTypes.number,
+    "instanceof": PropTypes.number.isRequired,
 });
 _Inout = PropTypes.shape({
-    "inout": PropTypes.number,
+    "inout": PropTypes.number.isRequired,
 });
 _Inline = PropTypes.shape({
-    "inline": PropTypes.number,
+    "inline": PropTypes.number.isRequired,
 });
 _Init = PropTypes.shape({
-    "init": PropTypes.number,
+    "init": PropTypes.number.isRequired,
 });
 _Infix = PropTypes.shape({
-    "infix": PropTypes.number,
+    "infix": PropTypes.number.isRequired,
 });
 _Indirect = PropTypes.shape({
-    "indirect": PropTypes.number,
+    "indirect": PropTypes.number.isRequired,
 });
 _In = PropTypes.shape({
-    "in": PropTypes.number,
+    "in": PropTypes.number.isRequired,
 });
 _Import = PropTypes.shape({
-    "import": PropTypes.number,
+    "import": PropTypes.number.isRequired,
 });
 _Implicit = PropTypes.shape({
-    "implicit": PropTypes.number,
+    "implicit": PropTypes.number.isRequired,
 });
 _Implements = PropTypes.shape({
-    "implements": PropTypes.number,
+    "implements": PropTypes.number.isRequired,
 });
 _If = PropTypes.shape({
-    "if": PropTypes.number,
+    "if": PropTypes.number.isRequired,
 });
 _ID = PropTypes.shape({
-    "id": PropTypes.number,
+    "id": PropTypes.number.isRequired,
 });
 _HasOwnProperty = PropTypes.shape({
-    "hasOwnProperty": PropTypes.number,
+    "hasOwnProperty": PropTypes.number.isRequired,
 });
 _Guard = PropTypes.shape({
-    "guard": PropTypes.number,
+    "guard": PropTypes.number.isRequired,
 });
 _Goto = PropTypes.shape({
-    "goto": PropTypes.number,
+    "goto": PropTypes.number.isRequired,
 });
 _Go = PropTypes.shape({
-    "go": PropTypes.number,
+    "go": PropTypes.number.isRequired,
 });
 _Global = PropTypes.shape({
-    "global": PropTypes.number,
+    "global": PropTypes.number.isRequired,
 });
 _Get = PropTypes.shape({
-    "get": PropTypes.number,
+    "get": PropTypes.number.isRequired,
 });
 _Function = PropTypes.shape({
-    "function": PropTypes.number,
+    "function": PropTypes.number.isRequired,
 });
 _Func = PropTypes.shape({
-    "func": PropTypes.number,
+    "func": PropTypes.number.isRequired,
 });
 _FromJSON = PropTypes.shape({
-    "from_json": PropTypes.number,
+    "from_json": PropTypes.number.isRequired,
 });
 _From = PropTypes.shape({
-    "from": PropTypes.number,
+    "from": PropTypes.number.isRequired,
 });
 _Friend = PropTypes.shape({
-    "friend": PropTypes.number,
+    "friend": PropTypes.number.isRequired,
 });
 _Foreach = PropTypes.shape({
-    "foreach": PropTypes.number,
+    "foreach": PropTypes.number.isRequired,
 });
 _For = PropTypes.shape({
-    "for": PropTypes.number,
+    "for": PropTypes.number.isRequired,
 });
 _Float = PropTypes.shape({
-    "float": PropTypes.number,
+    "float": PropTypes.number.isRequired,
 });
 _Fixed = PropTypes.shape({
-    "fixed": PropTypes.number,
+    "fixed": PropTypes.number.isRequired,
 });
 _Finally = PropTypes.shape({
-    "finally": PropTypes.number,
+    "finally": PropTypes.number.isRequired,
 });
 _Final = PropTypes.shape({
-    "final": PropTypes.number,
+    "final": PropTypes.number.isRequired,
 });
 _Fileprivate = PropTypes.shape({
-    "fileprivate": PropTypes.number,
+    "fileprivate": PropTypes.number.isRequired,
 });
 _FalseClass = PropTypes.shape({
-    "false": PropTypes.number,
+    "false": PropTypes.number.isRequired,
 });
 _Fallthrough = PropTypes.shape({
-    "fallthrough": PropTypes.number,
+    "fallthrough": PropTypes.number.isRequired,
 });
 _Extern = PropTypes.shape({
-    "extern": PropTypes.number,
+    "extern": PropTypes.number.isRequired,
 });
 _Extension = PropTypes.shape({
-    "extension": PropTypes.number,
+    "extension": PropTypes.number.isRequired,
 });
 _Extends = PropTypes.shape({
-    "extends": PropTypes.number,
+    "extends": PropTypes.number.isRequired,
 });
 _Exposing = PropTypes.shape({
-    "exposing": PropTypes.number,
+    "exposing": PropTypes.number.isRequired,
 });
 _Export = PropTypes.shape({
-    "export": PropTypes.number,
+    "export": PropTypes.number.isRequired,
 });
 _Explicit = PropTypes.shape({
-    "explicit": PropTypes.number,
+    "explicit": PropTypes.number.isRequired,
 });
 _Exception = PropTypes.shape({
-    "exception": PropTypes.number,
+    "exception": PropTypes.number.isRequired,
 });
 _Except = PropTypes.shape({
-    "except": PropTypes.number,
+    "except": PropTypes.number.isRequired,
 });
 _Event = PropTypes.shape({
-    "event": PropTypes.number,
+    "event": PropTypes.number.isRequired,
 });
 _EqualityContract = PropTypes.shape({
-    "equalityContract": PropTypes.number,
+    "equalityContract": PropTypes.number.isRequired,
 });
 _Enum = PropTypes.shape({
-    "enum": PropTypes.number,
+    "enum": PropTypes.number.isRequired,
 });
 _EncodeQuickType = PropTypes.shape({
-    "encode_quick_type": PropTypes.number,
+    "encode_quick_type": PropTypes.number.isRequired,
 });
 _Else = PropTypes.shape({
-    "else": PropTypes.number,
+    "else": PropTypes.number.isRequired,
 });
 _Elif = PropTypes.shape({
-    "elif": PropTypes.number,
+    "elif": PropTypes.number.isRequired,
 });
 _DynamicCast = PropTypes.shape({
-    "dynamic_cast": PropTypes.number,
+    "dynamic_cast": PropTypes.number.isRequired,
 });
 _Dynamic = PropTypes.shape({
-    "dynamic": PropTypes.number,
+    "dynamic": PropTypes.number.isRequired,
 });
 _Double = PropTypes.shape({
-    "double": PropTypes.number,
+    "double": PropTypes.number.isRequired,
 });
 _Do = PropTypes.shape({
-    "do": PropTypes.number,
+    "do": PropTypes.number.isRequired,
 });
 _DidSet = PropTypes.shape({
-    "didSet": PropTypes.number,
+    "didSet": PropTypes.number.isRequired,
 });
 _Dictionary = PropTypes.shape({
-    "dictionary": PropTypes.number,
+    "dictionary": PropTypes.number.isRequired,
 });
 _Dict = PropTypes.shape({
-    "dict": PropTypes.number,
+    "dict": PropTypes.number.isRequired,
 });
 _Delete = PropTypes.shape({
-    "delete": PropTypes.number,
+    "delete": PropTypes.number.isRequired,
 });
 _Delegate = PropTypes.shape({
-    "delegate": PropTypes.number,
+    "delegate": PropTypes.number.isRequired,
 });
 _Del = PropTypes.shape({
-    "del": PropTypes.number,
+    "del": PropTypes.number.isRequired,
 });
 _Deinit = PropTypes.shape({
-    "deinit": PropTypes.number,
+    "deinit": PropTypes.number.isRequired,
 });
 _Defer = PropTypes.shape({
-    "defer": PropTypes.number,
+    "defer": PropTypes.number.isRequired,
 });
 _Default = PropTypes.shape({
-    "default": PropTypes.number,
+    "default": PropTypes.number.isRequired,
 });
 _Def = PropTypes.shape({
-    "def": PropTypes.number,
+    "def": PropTypes.number.isRequired,
 });
 _Imp = PropTypes.shape({
-    "IMP": PropTypes.number,
+    "IMP": PropTypes.number.isRequired,
 });
 _False = PropTypes.shape({
-    "False": PropTypes.number,
+    "False": PropTypes.number.isRequired,
 });
 _Obj2 = PropTypes.shape({
-    "False": _False,
-    "IMP": _Imp,
-    "def": _Def,
-    "default": _Default,
-    "defer": _Defer,
-    "deinit": _Deinit,
-    "del": _Del,
-    "delegate": _Delegate,
-    "delete": _Delete,
-    "dict": _Dict,
-    "dictionary": _Dictionary,
-    "didSet": _DidSet,
-    "do": _Do,
-    "double": _Double,
-    "dummy": PropTypes.number,
-    "dynamic": _Dynamic,
-    "dynamic_cast": _DynamicCast,
-    "elif": _Elif,
-    "else": _Else,
-    "encode_quick_type": _EncodeQuickType,
-    "enum": _Enum,
-    "equalityContract": _EqualityContract,
-    "event": _Event,
-    "except": _Except,
-    "exception": _Exception,
-    "explicit": _Explicit,
-    "export": _Export,
-    "exposing": _Exposing,
-    "extends": _Extends,
-    "extension": _Extension,
-    "extern": _Extern,
-    "fallthrough": _Fallthrough,
-    "false": _FalseClass,
-    "fileprivate": _Fileprivate,
-    "final": _Final,
-    "finally": _Finally,
-    "fixed": _Fixed,
-    "float": _Float,
-    "for": _For,
-    "foreach": _Foreach,
-    "friend": _Friend,
-    "from": _From,
-    "from_json": _FromJSON,
-    "func": _Func,
-    "function": _Function,
-    "get": _Get,
-    "global": _Global,
-    "go": _Go,
-    "goto": _Goto,
-    "guard": _Guard,
-    "hasOwnProperty": _HasOwnProperty,
-    "id": _ID,
-    "if": _If,
-    "implements": _Implements,
-    "implicit": _Implicit,
-    "import": _Import,
-    "in": _In,
-    "indirect": _Indirect,
-    "infix": _Infix,
-    "init": _Init,
-    "inline": _Inline,
-    "inout": _Inout,
-    "instanceof": _Instanceof,
-    "int": _Int,
-    "interface": _Interface,
-    "internal": _Internal,
+    "False": (...args) => _False.isRequired(...args),
+    "IMP": (...args) => _Imp.isRequired(...args),
+    "def": (...args) => _Def.isRequired(...args),
+    "default": (...args) => _Default.isRequired(...args),
+    "defer": (...args) => _Defer.isRequired(...args),
+    "deinit": (...args) => _Deinit.isRequired(...args),
+    "del": (...args) => _Del.isRequired(...args),
+    "delegate": (...args) => _Delegate.isRequired(...args),
+    "delete": (...args) => _Delete.isRequired(...args),
+    "dict": (...args) => _Dict.isRequired(...args),
+    "dictionary": (...args) => _Dictionary.isRequired(...args),
+    "didSet": (...args) => _DidSet.isRequired(...args),
+    "do": (...args) => _Do.isRequired(...args),
+    "double": (...args) => _Double.isRequired(...args),
+    "dummy": PropTypes.number.isRequired,
+    "dynamic": (...args) => _Dynamic.isRequired(...args),
+    "dynamic_cast": (...args) => _DynamicCast.isRequired(...args),
+    "elif": (...args) => _Elif.isRequired(...args),
+    "else": (...args) => _Else.isRequired(...args),
+    "encode_quick_type": (...args) => _EncodeQuickType.isRequired(...args),
+    "enum": (...args) => _Enum.isRequired(...args),
+    "equalityContract": (...args) => _EqualityContract.isRequired(...args),
+    "event": (...args) => _Event.isRequired(...args),
+    "except": (...args) => _Except.isRequired(...args),
+    "exception": (...args) => _Exception.isRequired(...args),
+    "explicit": (...args) => _Explicit.isRequired(...args),
+    "export": (...args) => _Export.isRequired(...args),
+    "exposing": (...args) => _Exposing.isRequired(...args),
+    "extends": (...args) => _Extends.isRequired(...args),
+    "extension": (...args) => _Extension.isRequired(...args),
+    "extern": (...args) => _Extern.isRequired(...args),
+    "fallthrough": (...args) => _Fallthrough.isRequired(...args),
+    "false": (...args) => _FalseClass.isRequired(...args),
+    "fileprivate": (...args) => _Fileprivate.isRequired(...args),
+    "final": (...args) => _Final.isRequired(...args),
+    "finally": (...args) => _Finally.isRequired(...args),
+    "fixed": (...args) => _Fixed.isRequired(...args),
+    "float": (...args) => _Float.isRequired(...args),
+    "for": (...args) => _For.isRequired(...args),
+    "foreach": (...args) => _Foreach.isRequired(...args),
+    "friend": (...args) => _Friend.isRequired(...args),
+    "from": (...args) => _From.isRequired(...args),
+    "from_json": (...args) => _FromJSON.isRequired(...args),
+    "func": (...args) => _Func.isRequired(...args),
+    "function": (...args) => _Function.isRequired(...args),
+    "get": (...args) => _Get.isRequired(...args),
+    "global": (...args) => _Global.isRequired(...args),
+    "go": (...args) => _Go.isRequired(...args),
+    "goto": (...args) => _Goto.isRequired(...args),
+    "guard": (...args) => _Guard.isRequired(...args),
+    "hasOwnProperty": (...args) => _HasOwnProperty.isRequired(...args),
+    "id": (...args) => _ID.isRequired(...args),
+    "if": (...args) => _If.isRequired(...args),
+    "implements": (...args) => _Implements.isRequired(...args),
+    "implicit": (...args) => _Implicit.isRequired(...args),
+    "import": (...args) => _Import.isRequired(...args),
+    "in": (...args) => _In.isRequired(...args),
+    "indirect": (...args) => _Indirect.isRequired(...args),
+    "infix": (...args) => _Infix.isRequired(...args),
+    "init": (...args) => _Init.isRequired(...args),
+    "inline": (...args) => _Inline.isRequired(...args),
+    "inout": (...args) => _Inout.isRequired(...args),
+    "instanceof": (...args) => _Instanceof.isRequired(...args),
+    "int": (...args) => _Int.isRequired(...args),
+    "interface": (...args) => _Interface.isRequired(...args),
+    "internal": (...args) => _Internal.isRequired(...args),
 });
 _DecodeString = PropTypes.shape({
-    "decode_string": PropTypes.number,
+    "decode_string": PropTypes.number.isRequired,
 });
 _Decltype = PropTypes.shape({
-    "decltype": PropTypes.number,
+    "decltype": PropTypes.number.isRequired,
 });
 _Declare = PropTypes.shape({
-    "declare": PropTypes.number,
+    "declare": PropTypes.number.isRequired,
 });
 _Decimal = PropTypes.shape({
-    "decimal": PropTypes.number,
+    "decimal": PropTypes.number.isRequired,
 });
 _Debugger = PropTypes.shape({
-    "debugger": PropTypes.number,
+    "debugger": PropTypes.number.isRequired,
 });
 _DateParseHandling = PropTypes.shape({
-    "date_parse_handling": PropTypes.number,
+    "date_parse_handling": PropTypes.number.isRequired,
 });
 _Date = PropTypes.shape({
-    "date": PropTypes.number,
+    "date": PropTypes.number.isRequired,
 });
 _Converter = PropTypes.shape({
-    "converter": PropTypes.number,
+    "converter": PropTypes.number.isRequired,
 });
 _Convert = PropTypes.shape({
-    "convert": PropTypes.number,
+    "convert": PropTypes.number.isRequired,
 });
 _Convenience = PropTypes.shape({
-    "convenience": PropTypes.number,
+    "convenience": PropTypes.number.isRequired,
 });
 _Continue = PropTypes.shape({
-    "continue": PropTypes.number,
+    "continue": PropTypes.number.isRequired,
 });
 _Constructor = PropTypes.shape({
-    "constructor": PropTypes.number,
+    "constructor": PropTypes.number.isRequired,
 });
 _Constexpr = PropTypes.shape({
-    "constexpr": PropTypes.number,
+    "constexpr": PropTypes.number.isRequired,
 });
 _ConstCast = PropTypes.shape({
-    "const_cast": PropTypes.number,
+    "const_cast": PropTypes.number.isRequired,
 });
 _Const = PropTypes.shape({
-    "const": PropTypes.number,
+    "const": PropTypes.number.isRequired,
 });
 _Console = PropTypes.shape({
-    "console": PropTypes.number,
+    "console": PropTypes.number.isRequired,
 });
 _Concept = PropTypes.shape({
-    "concept": PropTypes.number,
+    "concept": PropTypes.number.isRequired,
 });
 _Compl = PropTypes.shape({
-    "compl": PropTypes.number,
+    "compl": PropTypes.number.isRequired,
 });
 _CoYield = PropTypes.shape({
-    "co_yield": PropTypes.number,
+    "co_yield": PropTypes.number.isRequired,
 });
 _CoReturn = PropTypes.shape({
-    "co_return": PropTypes.number,
+    "co_return": PropTypes.number.isRequired,
 });
 _CoAwait = PropTypes.shape({
-    "co_await": PropTypes.number,
+    "co_await": PropTypes.number.isRequired,
 });
 _Clone = PropTypes.shape({
-    "clone": PropTypes.number,
+    "clone": PropTypes.number.isRequired,
 });
 _ClassClass = PropTypes.shape({
-    "class": PropTypes.number,
+    "class": PropTypes.number.isRequired,
 });
 _Checked = PropTypes.shape({
-    "checked": PropTypes.number,
+    "checked": PropTypes.number.isRequired,
 });
 _Char32T = PropTypes.shape({
-    "char32_t": PropTypes.number,
+    "char32_t": PropTypes.number.isRequired,
 });
 _Char16T = PropTypes.shape({
-    "char16_t": PropTypes.number,
+    "char16_t": PropTypes.number.isRequired,
 });
 _Char = PropTypes.shape({
-    "char": PropTypes.number,
+    "char": PropTypes.number.isRequired,
 });
 _Chan = PropTypes.shape({
-    "chan": PropTypes.number,
+    "chan": PropTypes.number.isRequired,
 });
 _Catch = PropTypes.shape({
-    "catch": PropTypes.number,
+    "catch": PropTypes.number.isRequired,
 });
 _Case = PropTypes.shape({
-    "case": PropTypes.number,
+    "case": PropTypes.number.isRequired,
 });
 _Byte = PropTypes.shape({
-    "byte": PropTypes.number,
+    "byte": PropTypes.number.isRequired,
 });
 _Byref = PropTypes.shape({
-    "byref": PropTypes.number,
+    "byref": PropTypes.number.isRequired,
 });
 _Bycopy = PropTypes.shape({
-    "bycopy": PropTypes.number,
+    "bycopy": PropTypes.number.isRequired,
 });
 _Break = PropTypes.shape({
-    "break": PropTypes.number,
+    "break": PropTypes.number.isRequired,
 });
 _Boolean = PropTypes.shape({
-    "boolean": PropTypes.number,
+    "boolean": PropTypes.number.isRequired,
 });
 _Obj1Bool = PropTypes.shape({
-    "bool": PropTypes.number,
+    "bool": PropTypes.number.isRequired,
 });
 _Bitor = PropTypes.shape({
-    "bitor": PropTypes.number,
+    "bitor": PropTypes.number.isRequired,
 });
 _Bitand = PropTypes.shape({
-    "bitand": PropTypes.number,
+    "bitand": PropTypes.number.isRequired,
 });
 _Base = PropTypes.shape({
-    "base": PropTypes.number,
+    "base": PropTypes.number.isRequired,
 });
 _Await = PropTypes.shape({
-    "await": PropTypes.number,
+    "await": PropTypes.number.isRequired,
 });
 _Auto = PropTypes.shape({
-    "auto": PropTypes.number,
+    "auto": PropTypes.number.isRequired,
 });
 _AtomicNoexcept = PropTypes.shape({
-    "atomic_noexcept": PropTypes.number,
+    "atomic_noexcept": PropTypes.number.isRequired,
 });
 _AtomicCommit = PropTypes.shape({
-    "atomic_commit": PropTypes.number,
+    "atomic_commit": PropTypes.number.isRequired,
 });
 _AtomicCancel = PropTypes.shape({
-    "atomic_cancel": PropTypes.number,
+    "atomic_cancel": PropTypes.number.isRequired,
 });
 _Atomic = PropTypes.shape({
-    "atomic": PropTypes.number,
+    "atomic": PropTypes.number.isRequired,
 });
 _Async = PropTypes.shape({
-    "async": PropTypes.number,
+    "async": PropTypes.number.isRequired,
 });
 _Associativity = PropTypes.shape({
-    "associativity": PropTypes.number,
+    "associativity": PropTypes.number.isRequired,
 });
 _Associatedtype = PropTypes.shape({
-    "associatedtype": PropTypes.number,
+    "associatedtype": PropTypes.number.isRequired,
 });
 _Assert = PropTypes.shape({
-    "assert": PropTypes.number,
+    "assert": PropTypes.number.isRequired,
 });
 _ASM = PropTypes.shape({
-    "asm": PropTypes.number,
+    "asm": PropTypes.number.isRequired,
 });
 _As = PropTypes.shape({
-    "as": PropTypes.number,
+    "as": PropTypes.number.isRequired,
 });
 _Array = PropTypes.shape({
-    "array": PropTypes.number,
+    "array": PropTypes.number.isRequired,
 });
 _AnyClass = PropTypes.shape({
-    "any": PropTypes.number,
+    "any": PropTypes.number.isRequired,
 });
 _AndEq = PropTypes.shape({
-    "and_eq": PropTypes.number,
+    "and_eq": PropTypes.number.isRequired,
 });
 _And = PropTypes.shape({
-    "and": PropTypes.number,
+    "and": PropTypes.number.isRequired,
 });
 _Alignof = PropTypes.shape({
-    "alignof": PropTypes.number,
+    "alignof": PropTypes.number.isRequired,
 });
 _Alignas = PropTypes.shape({
-    "alignas": PropTypes.number,
+    "alignas": PropTypes.number.isRequired,
 });
 _Abstract = PropTypes.shape({
-    "abstract": PropTypes.number,
+    "abstract": PropTypes.number.isRequired,
 });
 _Imaginery = PropTypes.shape({
-    "_Imaginery": PropTypes.number,
+    "_Imaginery": PropTypes.number.isRequired,
 });
 _Complex = PropTypes.shape({
-    "_Complex": PropTypes.number,
+    "_Complex": PropTypes.number.isRequired,
 });
 _BoolClass = PropTypes.shape({
-    "_Bool": PropTypes.number,
+    "_Bool": PropTypes.number.isRequired,
 });
 _Empty = PropTypes.shape({
-    "_": PropTypes.number,
+    "_": PropTypes.number.isRequired,
 });
 _Class = PropTypes.shape({
-    "Class": PropTypes.number,
+    "Class": PropTypes.number.isRequired,
 });
 _Bool = PropTypes.shape({
-    "BOOL": PropTypes.number,
+    "BOOL": PropTypes.number.isRequired,
 });
 _Any = PropTypes.shape({
-    "Any": PropTypes.number,
+    "Any": PropTypes.number.isRequired,
 });
 _Obj1 = PropTypes.shape({
-    "Any": _Any,
-    "BOOL": _Bool,
-    "Class": _Class,
-    "_": _Empty,
-    "_Bool": _BoolClass,
-    "_Complex": _Complex,
-    "_Imaginery": _Imaginery,
-    "abstract": _Abstract,
-    "alignas": _Alignas,
-    "alignof": _Alignof,
-    "and": _And,
-    "and_eq": _AndEq,
-    "any": _AnyClass,
-    "array": _Array,
-    "as": _As,
-    "asm": _ASM,
-    "assert": _Assert,
-    "associatedtype": _Associatedtype,
-    "associativity": _Associativity,
-    "async": _Async,
-    "atomic": _Atomic,
-    "atomic_cancel": _AtomicCancel,
-    "atomic_commit": _AtomicCommit,
-    "atomic_noexcept": _AtomicNoexcept,
-    "auto": _Auto,
-    "await": _Await,
-    "base": _Base,
-    "bitand": _Bitand,
-    "bitor": _Bitor,
-    "bool": _Obj1Bool,
-    "boolean": _Boolean,
-    "break": _Break,
-    "bycopy": _Bycopy,
-    "byref": _Byref,
-    "byte": _Byte,
-    "case": _Case,
-    "catch": _Catch,
-    "chan": _Chan,
-    "char": _Char,
-    "char16_t": _Char16T,
-    "char32_t": _Char32T,
-    "checked": _Checked,
-    "class": _ClassClass,
-    "clone": _Clone,
-    "co_await": _CoAwait,
-    "co_return": _CoReturn,
-    "co_yield": _CoYield,
-    "compl": _Compl,
-    "concept": _Concept,
-    "console": _Console,
-    "const": _Const,
-    "const_cast": _ConstCast,
-    "constexpr": _Constexpr,
-    "constructor": _Constructor,
-    "continue": _Continue,
-    "convenience": _Convenience,
-    "convert": _Convert,
-    "converter": _Converter,
-    "date": _Date,
-    "date_parse_handling": _DateParseHandling,
-    "debugger": _Debugger,
-    "decimal": _Decimal,
-    "declare": _Declare,
-    "decltype": _Decltype,
-    "decode_string": _DecodeString,
-    "dummy": PropTypes.number,
+    "Any": (...args) => _Any.isRequired(...args),
+    "BOOL": (...args) => _Bool.isRequired(...args),
+    "Class": (...args) => _Class.isRequired(...args),
+    "_": (...args) => _Empty.isRequired(...args),
+    "_Bool": (...args) => _BoolClass.isRequired(...args),
+    "_Complex": (...args) => _Complex.isRequired(...args),
+    "_Imaginery": (...args) => _Imaginery.isRequired(...args),
+    "abstract": (...args) => _Abstract.isRequired(...args),
+    "alignas": (...args) => _Alignas.isRequired(...args),
+    "alignof": (...args) => _Alignof.isRequired(...args),
+    "and": (...args) => _And.isRequired(...args),
+    "and_eq": (...args) => _AndEq.isRequired(...args),
+    "any": (...args) => _AnyClass.isRequired(...args),
+    "array": (...args) => _Array.isRequired(...args),
+    "as": (...args) => _As.isRequired(...args),
+    "asm": (...args) => _ASM.isRequired(...args),
+    "assert": (...args) => _Assert.isRequired(...args),
+    "associatedtype": (...args) => _Associatedtype.isRequired(...args),
+    "associativity": (...args) => _Associativity.isRequired(...args),
+    "async": (...args) => _Async.isRequired(...args),
+    "atomic": (...args) => _Atomic.isRequired(...args),
+    "atomic_cancel": (...args) => _AtomicCancel.isRequired(...args),
+    "atomic_commit": (...args) => _AtomicCommit.isRequired(...args),
+    "atomic_noexcept": (...args) => _AtomicNoexcept.isRequired(...args),
+    "auto": (...args) => _Auto.isRequired(...args),
+    "await": (...args) => _Await.isRequired(...args),
+    "base": (...args) => _Base.isRequired(...args),
+    "bitand": (...args) => _Bitand.isRequired(...args),
+    "bitor": (...args) => _Bitor.isRequired(...args),
+    "bool": (...args) => _Obj1Bool.isRequired(...args),
+    "boolean": (...args) => _Boolean.isRequired(...args),
+    "break": (...args) => _Break.isRequired(...args),
+    "bycopy": (...args) => _Bycopy.isRequired(...args),
+    "byref": (...args) => _Byref.isRequired(...args),
+    "byte": (...args) => _Byte.isRequired(...args),
+    "case": (...args) => _Case.isRequired(...args),
+    "catch": (...args) => _Catch.isRequired(...args),
+    "chan": (...args) => _Chan.isRequired(...args),
+    "char": (...args) => _Char.isRequired(...args),
+    "char16_t": (...args) => _Char16T.isRequired(...args),
+    "char32_t": (...args) => _Char32T.isRequired(...args),
+    "checked": (...args) => _Checked.isRequired(...args),
+    "class": (...args) => _ClassClass.isRequired(...args),
+    "clone": (...args) => _Clone.isRequired(...args),
+    "co_await": (...args) => _CoAwait.isRequired(...args),
+    "co_return": (...args) => _CoReturn.isRequired(...args),
+    "co_yield": (...args) => _CoYield.isRequired(...args),
+    "compl": (...args) => _Compl.isRequired(...args),
+    "concept": (...args) => _Concept.isRequired(...args),
+    "console": (...args) => _Console.isRequired(...args),
+    "const": (...args) => _Const.isRequired(...args),
+    "const_cast": (...args) => _ConstCast.isRequired(...args),
+    "constexpr": (...args) => _Constexpr.isRequired(...args),
+    "constructor": (...args) => _Constructor.isRequired(...args),
+    "continue": (...args) => _Continue.isRequired(...args),
+    "convenience": (...args) => _Convenience.isRequired(...args),
+    "convert": (...args) => _Convert.isRequired(...args),
+    "converter": (...args) => _Converter.isRequired(...args),
+    "date": (...args) => _Date.isRequired(...args),
+    "date_parse_handling": (...args) => _DateParseHandling.isRequired(...args),
+    "debugger": (...args) => _Debugger.isRequired(...args),
+    "decimal": (...args) => _Decimal.isRequired(...args),
+    "declare": (...args) => _Declare.isRequired(...args),
+    "decltype": (...args) => _Decltype.isRequired(...args),
+    "decode_string": (...args) => _DecodeString.isRequired(...args),
+    "dummy": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "dummy": PropTypes.number,
-    "obj1": _Obj1,
-    "obj2": _Obj2,
-    "obj3": _Obj3,
-    "obj4": _Obj4,
-    "obj5": _Obj5,
+    "dummy": PropTypes.number.isRequired,
+    "obj1": (...args) => _Obj1.isRequired(...args),
+    "obj2": (...args) => _Obj2.isRequired(...args),
+    "obj3": (...args) => _Obj3.isRequired(...args),
+    "obj4": (...args) => _Obj4.isRequired(...args),
+    "obj5": (...args) => _Obj5.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/toplevel.js
index c218bde..44ab1cb 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/toplevel.js
@@ -13,9 +13,9 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Category = PropTypes.oneOfType(['empty', 'category']);
+const _Category = PropTypes.oneOf([" ", ""]);
 _TopLevel = PropTypes.shape({
-    "category": _Category,
+    "category": _Category.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/priority/list.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/list.json/default/toplevel.js
index 9a4a9db..fd790a3 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/list.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/list.json/default/toplevel.js
@@ -14,8 +14,8 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.number,
-    "next": PropTypes.oneOfType([_TopLevel, PropTypes.any]),
+    "data": PropTypes.number.isRequired,
+    "next": PropTypes.oneOfType([(...args) => _TopLevel(...args), PropTypes.any]),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/name-style.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/name-style.json/default/toplevel.js
index d296b82..be8261e 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/name-style.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/name-style.json/default/toplevel.js
@@ -14,13 +14,13 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "   spaces are separators  too  ": PropTypes.bool,
-    "JSONString": PropTypes.string,
-    "PrettyEasyToo": PropTypes.bool,
-    "ZSR_HH_DEMO3_DELMATNR": PropTypes.bool,
-    "anEasyOne": PropTypes.number,
-    "isMNISTLetter": PropTypes.bool,
-    "should_know_that_id_is_an_initialism": PropTypes.string,
+    "   spaces are separators  too  ": PropTypes.bool.isRequired,
+    "JSONString": PropTypes.string.isRequired,
+    "PrettyEasyToo": PropTypes.bool.isRequired,
+    "ZSR_HH_DEMO3_DELMATNR": PropTypes.bool.isRequired,
+    "anEasyOne": PropTypes.number.isRequired,
+    "isMNISTLetter": PropTypes.bool.isRequired,
+    "should_know_that_id_is_an_initialism": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/nbl-stats.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/nbl-stats.json/default/toplevel.js
index 52fdf49..947dcac 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/nbl-stats.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/nbl-stats.json/default/toplevel.js
@@ -25,173 +25,173 @@ let _Pl;
 let _Comp;
 let _Shot;
 let _Totallds;
-const _LeaddatumEnum = PropTypes.oneOfType(['empty', 'p1', 'p2', 'p3', 'p4']);
-const _PerType = PropTypes.oneOfType(['regular']);
-const _ActionType = PropTypes.oneOfType(['game', 'period', 'the3Pt', 'the2Pt', 'rebound', 'timeout', 'foulon', 'foul', 'assist', 'substitution', 'freethrow', 'steal', 'turnover', 'block', 'jumpball']);
-const _FamilyNameInitial = PropTypes.oneOfType(['r', 'm', 's', 'c', 'o', 'w', 'a', 'p', 'v', 'i', 'j', 'familyNameInitialS', 'h', 'b']);
-const _FirstNameInitial = PropTypes.oneOfType(['d', 'j', 't', 'c', 'o', 'h', 'l', 'a', 'k', 'r', 'b', 'n']);
-const _ScoreboardName = PropTypes.oneOfType(['empty', 'tS', 'rIhata', 'dJones', 'bValentine']);
-const _SubType = PropTypes.oneOfType(['jumpshot', 'layup', 'dunk']);
+const _LeaddatumEnum = PropTypes.oneOf(["", "P1", "P2", "P3", "P4"]);
+const _PerType = PropTypes.oneOf(["REGULAR"]);
+const _ActionType = PropTypes.oneOf(["game", "period", "3pt", "2pt", "rebound", "timeout", "foulon", "foul", "assist", "substitution", "freethrow", "steal", "turnover", "block", "jumpball"]);
+const _FamilyNameInitial = PropTypes.oneOf(["R", "M", "s", "C", "O", "W", "A", "P", "V", "I", "J", "S", "H", "B"]);
+const _FirstNameInitial = PropTypes.oneOf(["D", "J", "T", "C", "O", "H", "L", "A", "K", "R", "B", "N"]);
+const _ScoreboardName = PropTypes.oneOf(["", "T. s", "R. Ihata", "D. Jones", "B. Valentine"]);
+const _SubType = PropTypes.oneOf(["jumpshot", "layup", "dunk"]);
 _Totallds = PropTypes.shape({
-    "sAssists": PropTypes.object,
-    "sBlocks": PropTypes.object,
-    "sPoints": PropTypes.object,
-    "sReboundsTotal": PropTypes.object,
-    "sSteals": PropTypes.object,
+    "sAssists": PropTypes.object.isRequired,
+    "sBlocks": PropTypes.object.isRequired,
+    "sPoints": PropTypes.object.isRequired,
+    "sReboundsTotal": PropTypes.object.isRequired,
+    "sSteals": PropTypes.object.isRequired,
 });
 _Shot = PropTypes.shape({
-    "actionType": _ActionType,
-    "p": PropTypes.number,
-    "per": PropTypes.number,
-    "perType": _PerType,
-    "player": PropTypes.string,
-    "pno": PropTypes.number,
-    "r": PropTypes.number,
-    "shirtNumber": PropTypes.string,
-    "subType": _SubType,
-    "tno": PropTypes.number,
-    "x": PropTypes.number,
-    "y": PropTypes.number,
+    "actionType": _ActionType.isRequired,
+    "p": PropTypes.number.isRequired,
+    "per": PropTypes.number.isRequired,
+    "perType": _PerType.isRequired,
+    "player": PropTypes.string.isRequired,
+    "pno": PropTypes.number.isRequired,
+    "r": PropTypes.number.isRequired,
+    "shirtNumber": PropTypes.string.isRequired,
+    "subType": _SubType.isRequired,
+    "tno": PropTypes.number.isRequired,
+    "x": PropTypes.number.isRequired,
+    "y": PropTypes.number.isRequired,
 });
 _Comp = PropTypes.shape({
-    "sAssistsAverage": PropTypes.number,
-    "sMinutesAverage": PropTypes.string,
-    "sPointsAverage": PropTypes.number,
-    "sReboundsTotalAverage": PropTypes.number,
+    "sAssistsAverage": PropTypes.number.isRequired,
+    "sMinutesAverage": PropTypes.string.isRequired,
+    "sPointsAverage": PropTypes.number.isRequired,
+    "sReboundsTotalAverage": PropTypes.number.isRequired,
 });
 _Pl = PropTypes.shape({
-    "active": PropTypes.number,
+    "active": PropTypes.number.isRequired,
     "captain": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "comp": PropTypes.oneOfType([_Comp, PropTypes.any]),
-    "eff_1": PropTypes.number,
-    "eff_2": PropTypes.number,
-    "eff_3": PropTypes.number,
-    "eff_4": PropTypes.number,
-    "eff_5": PropTypes.number,
-    "eff_6": PropTypes.number,
-    "eff_7": PropTypes.number,
-    "familyName": PropTypes.string,
-    "familyNameInitial": _FamilyNameInitial,
-    "firstName": PropTypes.string,
-    "firstNameInitial": _FirstNameInitial,
-    "internationalFamilyName": PropTypes.string,
-    "internationalFamilyNameInitial": _FamilyNameInitial,
-    "internationalFirstName": PropTypes.string,
-    "internationalFirstNameInitial": _FirstNameInitial,
-    "name": PropTypes.string,
-    "playingPosition": PropTypes.string,
-    "sAssists": PropTypes.number,
-    "sBlocks": PropTypes.number,
-    "sBlocksReceived": PropTypes.number,
-    "sFieldGoalsAttempted": PropTypes.number,
-    "sFieldGoalsMade": PropTypes.number,
-    "sFieldGoalsPercentage": PropTypes.number,
-    "sFoulsOn": PropTypes.number,
-    "sFoulsPersonal": PropTypes.number,
-    "sFreeThrowsAttempted": PropTypes.number,
-    "sFreeThrowsMade": PropTypes.number,
-    "sFreeThrowsPercentage": PropTypes.number,
-    "sMinutes": PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
-    "sPlusMinusPoints": PropTypes.number,
-    "sPoints": PropTypes.number,
-    "sPointsFastBreak": PropTypes.number,
-    "sPointsInThePaint": PropTypes.number,
-    "sPointsSecondChance": PropTypes.number,
-    "sReboundsDefensive": PropTypes.number,
-    "sReboundsOffensive": PropTypes.number,
-    "sReboundsTotal": PropTypes.number,
-    "sSteals": PropTypes.number,
-    "sThreePointersAttempted": PropTypes.number,
-    "sThreePointersMade": PropTypes.number,
-    "sThreePointersPercentage": PropTypes.number,
-    "sTurnovers": PropTypes.number,
-    "sTwoPointersAttempted": PropTypes.number,
-    "sTwoPointersMade": PropTypes.number,
-    "sTwoPointersPercentage": PropTypes.number,
-    "shirtNumber": PropTypes.string,
-    "starter": PropTypes.number,
+    "comp": PropTypes.oneOfType([(...args) => _Comp(...args), PropTypes.any]),
+    "eff_1": PropTypes.number.isRequired,
+    "eff_2": PropTypes.number.isRequired,
+    "eff_3": PropTypes.number.isRequired,
+    "eff_4": PropTypes.number.isRequired,
+    "eff_5": PropTypes.number.isRequired,
+    "eff_6": PropTypes.number.isRequired,
+    "eff_7": PropTypes.number.isRequired,
+    "familyName": PropTypes.string.isRequired,
+    "familyNameInitial": _FamilyNameInitial.isRequired,
+    "firstName": PropTypes.string.isRequired,
+    "firstNameInitial": _FirstNameInitial.isRequired,
+    "internationalFamilyName": PropTypes.string.isRequired,
+    "internationalFamilyNameInitial": _FamilyNameInitial.isRequired,
+    "internationalFirstName": PropTypes.string.isRequired,
+    "internationalFirstNameInitial": _FirstNameInitial.isRequired,
+    "name": PropTypes.string.isRequired,
+    "playingPosition": PropTypes.string.isRequired,
+    "sAssists": PropTypes.number.isRequired,
+    "sBlocks": PropTypes.number.isRequired,
+    "sBlocksReceived": PropTypes.number.isRequired,
+    "sFieldGoalsAttempted": PropTypes.number.isRequired,
+    "sFieldGoalsMade": PropTypes.number.isRequired,
+    "sFieldGoalsPercentage": PropTypes.number.isRequired,
+    "sFoulsOn": PropTypes.number.isRequired,
+    "sFoulsPersonal": PropTypes.number.isRequired,
+    "sFreeThrowsAttempted": PropTypes.number.isRequired,
+    "sFreeThrowsMade": PropTypes.number.isRequired,
+    "sFreeThrowsPercentage": PropTypes.number.isRequired,
+    "sMinutes": PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
+    "sPlusMinusPoints": PropTypes.number.isRequired,
+    "sPoints": PropTypes.number.isRequired,
+    "sPointsFastBreak": PropTypes.number.isRequired,
+    "sPointsInThePaint": PropTypes.number.isRequired,
+    "sPointsSecondChance": PropTypes.number.isRequired,
+    "sReboundsDefensive": PropTypes.number.isRequired,
+    "sReboundsOffensive": PropTypes.number.isRequired,
+    "sReboundsTotal": PropTypes.number.isRequired,
+    "sSteals": PropTypes.number.isRequired,
+    "sThreePointersAttempted": PropTypes.number.isRequired,
+    "sThreePointersMade": PropTypes.number.isRequired,
+    "sThreePointersPercentage": PropTypes.number.isRequired,
+    "sTurnovers": PropTypes.number.isRequired,
+    "sTwoPointersAttempted": PropTypes.number.isRequired,
+    "sTwoPointersMade": PropTypes.number.isRequired,
+    "sTwoPointersPercentage": PropTypes.number.isRequired,
+    "shirtNumber": PropTypes.string.isRequired,
+    "starter": PropTypes.number.isRequired,
 });
 _SBlocks = PropTypes.shape({
-    "1": _Scorer,
+    "1": (...args) => _Scorer.isRequired(...args),
 });
 _Lds = PropTypes.shape({
-    "sAssists": PropTypes.object,
-    "sBlocks": _SBlocks,
-    "sPoints": PropTypes.object,
-    "sReboundsTotal": PropTypes.object,
-    "sSteals": PropTypes.object,
+    "sAssists": PropTypes.object.isRequired,
+    "sBlocks": (...args) => _SBlocks.isRequired(...args),
+    "sPoints": PropTypes.object.isRequired,
+    "sReboundsTotal": PropTypes.object.isRequired,
+    "sSteals": PropTypes.object.isRequired,
 });
 _Tm = PropTypes.shape({
-    "code": PropTypes.string,
-    "codeInternational": PropTypes.string,
-    "fouls": PropTypes.number,
-    "full_score": PropTypes.number,
-    "lds": _Lds,
-    "logo": PropTypes.string,
-    "name": PropTypes.string,
-    "nameInternational": PropTypes.string,
-    "p1_score": PropTypes.number,
-    "p2_score": PropTypes.number,
-    "p3_score": PropTypes.number,
-    "p4_score": PropTypes.number,
-    "pl": PropTypes.object,
-    "score": PropTypes.number,
-    "scoring": PropTypes.arrayOf(_Scorer),
-    "shortName": PropTypes.string,
-    "shortNameInternational": PropTypes.string,
-    "shot": PropTypes.arrayOf(_Shot),
-    "timeouts": PropTypes.number,
-    "tot_eff_1": PropTypes.number,
-    "tot_eff_2": PropTypes.number,
-    "tot_eff_3": PropTypes.number,
-    "tot_eff_4": PropTypes.number,
-    "tot_eff_5": PropTypes.number,
-    "tot_eff_6": PropTypes.number,
-    "tot_eff_7": PropTypes.number,
-    "tot_sAssists": PropTypes.number,
-    "tot_sBenchPoints": PropTypes.number,
-    "tot_sBiggestLead": PropTypes.number,
-    "tot_sBiggestScoringRun": PropTypes.number,
-    "tot_sBlocks": PropTypes.number,
-    "tot_sBlocksReceived": PropTypes.number,
-    "tot_sFieldGoalsAttempted": PropTypes.number,
-    "tot_sFieldGoalsMade": PropTypes.number,
-    "tot_sFieldGoalsPercentage": PropTypes.number,
-    "tot_sFoulsOn": PropTypes.number,
-    "tot_sFoulsPersonal": PropTypes.number,
-    "tot_sFoulsTeam": PropTypes.number,
-    "tot_sFreeThrowsAttempted": PropTypes.number,
-    "tot_sFreeThrowsMade": PropTypes.number,
-    "tot_sFreeThrowsPercentage": PropTypes.number,
-    "tot_sLeadChanges": PropTypes.number,
-    "tot_sMinutes": PropTypes.number,
-    "tot_sPoints": PropTypes.number,
-    "tot_sPointsFastBreak": PropTypes.number,
-    "tot_sPointsFromTurnovers": PropTypes.number,
-    "tot_sPointsInThePaint": PropTypes.number,
-    "tot_sPointsSecondChance": PropTypes.number,
-    "tot_sReboundsDefensive": PropTypes.number,
-    "tot_sReboundsOffensive": PropTypes.number,
-    "tot_sReboundsTeam": PropTypes.number,
-    "tot_sReboundsTeamDefensive": PropTypes.number,
-    "tot_sReboundsTeamOffensive": PropTypes.number,
-    "tot_sReboundsTotal": PropTypes.number,
-    "tot_sSteals": PropTypes.number,
-    "tot_sThreePointersAttempted": PropTypes.number,
-    "tot_sThreePointersMade": PropTypes.number,
-    "tot_sThreePointersPercentage": PropTypes.number,
-    "tot_sTimeLeading": PropTypes.number,
-    "tot_sTimesScoresLevel": PropTypes.number,
-    "tot_sTurnovers": PropTypes.number,
-    "tot_sTurnoversTeam": PropTypes.number,
-    "tot_sTwoPointersAttempted": PropTypes.number,
-    "tot_sTwoPointersMade": PropTypes.number,
-    "tot_sTwoPointersPercentage": PropTypes.number,
+    "code": PropTypes.string.isRequired,
+    "codeInternational": PropTypes.string.isRequired,
+    "fouls": PropTypes.number.isRequired,
+    "full_score": PropTypes.number.isRequired,
+    "lds": (...args) => _Lds.isRequired(...args),
+    "logo": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "nameInternational": PropTypes.string.isRequired,
+    "p1_score": PropTypes.number.isRequired,
+    "p2_score": PropTypes.number.isRequired,
+    "p3_score": PropTypes.number.isRequired,
+    "p4_score": PropTypes.number.isRequired,
+    "pl": PropTypes.object.isRequired,
+    "score": PropTypes.number.isRequired,
+    "scoring": PropTypes.arrayOf((...args) => _Scorer(...args)).isRequired,
+    "shortName": PropTypes.string.isRequired,
+    "shortNameInternational": PropTypes.string.isRequired,
+    "shot": PropTypes.arrayOf((...args) => _Shot(...args)).isRequired,
+    "timeouts": PropTypes.number.isRequired,
+    "tot_eff_1": PropTypes.number.isRequired,
+    "tot_eff_2": PropTypes.number.isRequired,
+    "tot_eff_3": PropTypes.number.isRequired,
+    "tot_eff_4": PropTypes.number.isRequired,
+    "tot_eff_5": PropTypes.number.isRequired,
+    "tot_eff_6": PropTypes.number.isRequired,
+    "tot_eff_7": PropTypes.number.isRequired,
+    "tot_sAssists": PropTypes.number.isRequired,
+    "tot_sBenchPoints": PropTypes.number.isRequired,
+    "tot_sBiggestLead": PropTypes.number.isRequired,
+    "tot_sBiggestScoringRun": PropTypes.number.isRequired,
+    "tot_sBlocks": PropTypes.number.isRequired,
+    "tot_sBlocksReceived": PropTypes.number.isRequired,
+    "tot_sFieldGoalsAttempted": PropTypes.number.isRequired,
+    "tot_sFieldGoalsMade": PropTypes.number.isRequired,
+    "tot_sFieldGoalsPercentage": PropTypes.number.isRequired,
+    "tot_sFoulsOn": PropTypes.number.isRequired,
+    "tot_sFoulsPersonal": PropTypes.number.isRequired,
+    "tot_sFoulsTeam": PropTypes.number.isRequired,
+    "tot_sFreeThrowsAttempted": PropTypes.number.isRequired,
+    "tot_sFreeThrowsMade": PropTypes.number.isRequired,
+    "tot_sFreeThrowsPercentage": PropTypes.number.isRequired,
+    "tot_sLeadChanges": PropTypes.number.isRequired,
+    "tot_sMinutes": PropTypes.number.isRequired,
+    "tot_sPoints": PropTypes.number.isRequired,
+    "tot_sPointsFastBreak": PropTypes.number.isRequired,
+    "tot_sPointsFromTurnovers": PropTypes.number.isRequired,
+    "tot_sPointsInThePaint": PropTypes.number.isRequired,
+    "tot_sPointsSecondChance": PropTypes.number.isRequired,
+    "tot_sReboundsDefensive": PropTypes.number.isRequired,
+    "tot_sReboundsOffensive": PropTypes.number.isRequired,
+    "tot_sReboundsTeam": PropTypes.number.isRequired,
+    "tot_sReboundsTeamDefensive": PropTypes.number.isRequired,
+    "tot_sReboundsTeamOffensive": PropTypes.number.isRequired,
+    "tot_sReboundsTotal": PropTypes.number.isRequired,
+    "tot_sSteals": PropTypes.number.isRequired,
+    "tot_sThreePointersAttempted": PropTypes.number.isRequired,
+    "tot_sThreePointersMade": PropTypes.number.isRequired,
+    "tot_sThreePointersPercentage": PropTypes.number.isRequired,
+    "tot_sTimeLeading": PropTypes.number.isRequired,
+    "tot_sTimesScoresLevel": PropTypes.number.isRequired,
+    "tot_sTurnovers": PropTypes.number.isRequired,
+    "tot_sTurnoversTeam": PropTypes.number.isRequired,
+    "tot_sTwoPointersAttempted": PropTypes.number.isRequired,
+    "tot_sTwoPointersMade": PropTypes.number.isRequired,
+    "tot_sTwoPointersPercentage": PropTypes.number.isRequired,
 });
 _Time = PropTypes.shape({
-    "gt": PropTypes.string,
-    "per": PropTypes.number,
-    "perType": _PerType,
+    "gt": PropTypes.string.isRequired,
+    "per": PropTypes.number.isRequired,
+    "perType": _PerType.isRequired,
 });
 _Scorer = PropTypes.shape({
     "familyName": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -207,80 +207,80 @@ _Scorer = PropTypes.shape({
     "per": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "perType": PropTypes.oneOfType([_PerType, PropTypes.any]),
     "player": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "pno": PropTypes.number,
+    "pno": PropTypes.number.isRequired,
     "scoreboardName": PropTypes.oneOfType([_ScoreboardName, PropTypes.any]),
-    "shirtNumber": PropTypes.string,
+    "shirtNumber": PropTypes.string.isRequired,
     "summary": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "times": PropTypes.oneOfType([PropTypes.arrayOf(_Time), PropTypes.any]),
-    "tno": PropTypes.number,
+    "times": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Time(...args)), PropTypes.any]),
+    "tno": PropTypes.number.isRequired,
     "tot": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Pbp = PropTypes.shape({
-    "actionType": _ActionType,
+    "actionType": _ActionType.isRequired,
     "familyName": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "familyNameInitial": PropTypes.oneOfType([_FamilyNameInitial, PropTypes.any]),
     "firstName": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "firstNameInitial": PropTypes.oneOfType([_FirstNameInitial, PropTypes.any]),
-    "gt": PropTypes.string,
+    "gt": PropTypes.string.isRequired,
     "internationalFamilyName": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "internationalFamilyNameInitial": PropTypes.oneOfType([_FamilyNameInitial, PropTypes.any]),
     "internationalFirstName": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "internationalFirstNameInitial": PropTypes.oneOfType([_FirstNameInitial, PropTypes.any]),
-    "lead": PropTypes.number,
-    "period": PropTypes.number,
-    "periodType": _PerType,
-    "player": PropTypes.string,
-    "pno": PropTypes.number,
-    "qualifier": PropTypes.string,
-    "s1": PropTypes.number,
-    "s2": PropTypes.number,
+    "lead": PropTypes.number.isRequired,
+    "period": PropTypes.number.isRequired,
+    "periodType": _PerType.isRequired,
+    "player": PropTypes.string.isRequired,
+    "pno": PropTypes.number.isRequired,
+    "qualifier": PropTypes.string.isRequired,
+    "s1": PropTypes.number.isRequired,
+    "s2": PropTypes.number.isRequired,
     "scoreboardName": PropTypes.oneOfType([_ScoreboardName, PropTypes.any]),
-    "scoring": PropTypes.number,
-    "shirtNumber": PropTypes.string,
-    "subType": PropTypes.string,
-    "success": PropTypes.number,
-    "tno": PropTypes.number,
+    "scoring": PropTypes.number.isRequired,
+    "shirtNumber": PropTypes.string.isRequired,
+    "subType": PropTypes.string.isRequired,
+    "success": PropTypes.number.isRequired,
+    "tno": PropTypes.number.isRequired,
 });
 _Team = PropTypes.shape({
-    "teamCode": PropTypes.string,
-    "teamCodeInternational": PropTypes.string,
-    "teamName": PropTypes.string,
-    "teamNameInternational": PropTypes.string,
+    "teamCode": PropTypes.string.isRequired,
+    "teamCodeInternational": PropTypes.string.isRequired,
+    "teamName": PropTypes.string.isRequired,
+    "teamNameInternational": PropTypes.string.isRequired,
 });
 _Othermatch = PropTypes.shape({
-    "clock": PropTypes.string,
-    "competitionName": PropTypes.string,
-    "id": PropTypes.string,
-    "period": PropTypes.number,
-    "periodType": _PerType,
-    "team1": _Team,
-    "team1Name": PropTypes.string,
-    "team1Score": PropTypes.number,
-    "team2": _Team,
-    "team2Name": PropTypes.string,
-    "team2Score": PropTypes.number,
+    "clock": PropTypes.string.isRequired,
+    "competitionName": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "period": PropTypes.number.isRequired,
+    "periodType": _PerType.isRequired,
+    "team1": (...args) => _Team.isRequired(...args),
+    "team1Name": PropTypes.string.isRequired,
+    "team1Score": PropTypes.number.isRequired,
+    "team2": (...args) => _Team.isRequired(...args),
+    "team2Name": PropTypes.string.isRequired,
+    "team2Score": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "attendance": PropTypes.number,
-    "clock": PropTypes.string,
-    "disableMatch": PropTypes.number,
-    "inOT": PropTypes.number,
-    "leaddata": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([_LeaddatumEnum, PropTypes.number]))),
-    "officials_referee1": PropTypes.string,
-    "officials_referee2": PropTypes.string,
-    "officials_referee3": PropTypes.string,
-    "othermatches": PropTypes.arrayOf(_Othermatch),
-    "pbp": PropTypes.arrayOf(_Pbp),
-    "period": PropTypes.number,
-    "periodLengthOVERTIME": PropTypes.number,
-    "periodLengthREGULAR": PropTypes.number,
-    "periodType": _PerType,
-    "periodsMax": PropTypes.number,
-    "scorers": PropTypes.object,
-    "timeline": PropTypes.arrayOf(PropTypes.any),
-    "tm": PropTypes.object,
-    "totalTimeAdded": PropTypes.number,
-    "totallds": _Totallds,
+    "attendance": PropTypes.number.isRequired,
+    "clock": PropTypes.string.isRequired,
+    "disableMatch": PropTypes.number.isRequired,
+    "inOT": PropTypes.number.isRequired,
+    "leaddata": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([_LeaddatumEnum, PropTypes.number]))).isRequired,
+    "officials_referee1": PropTypes.string.isRequired,
+    "officials_referee2": PropTypes.string.isRequired,
+    "officials_referee3": PropTypes.string.isRequired,
+    "othermatches": PropTypes.arrayOf((...args) => _Othermatch(...args)).isRequired,
+    "pbp": PropTypes.arrayOf((...args) => _Pbp(...args)).isRequired,
+    "period": PropTypes.number.isRequired,
+    "periodLengthOVERTIME": PropTypes.number.isRequired,
+    "periodLengthREGULAR": PropTypes.number.isRequired,
+    "periodType": _PerType.isRequired,
+    "periodsMax": PropTypes.number.isRequired,
+    "scorers": PropTypes.object.isRequired,
+    "timeline": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "tm": PropTypes.object.isRequired,
+    "totalTimeAdded": PropTypes.number.isRequired,
+    "totallds": (...args) => _Totallds.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/nested-objects.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/nested-objects.json/default/toplevel.js
index 777f214..1e04329 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/nested-objects.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/nested-objects.json/default/toplevel.js
@@ -14,8 +14,8 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "a": PropTypes.object,
-    "b": PropTypes.object,
+    "a": PropTypes.object.isRequired,
+    "b": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/nst-test-suite.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/nst-test-suite.json/default/toplevel.js
index 4c36710..d56c70d 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/nst-test-suite.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/nst-test-suite.json/default/toplevel.js
@@ -25,134 +25,134 @@ let _YObjectSimpleJSON;
 let _YObjectStringUnicodeJSON;
 let _YObjectWithNewlinesJSON;
 _YObjectWithNewlinesJSON = PropTypes.shape({
-    "a": PropTypes.string,
+    "a": PropTypes.string.isRequired,
 });
 _YObjectStringUnicodeJSON = PropTypes.shape({
-    "title": PropTypes.string,
+    "title": PropTypes.string.isRequired,
 });
 _YObjectSimpleJSON = PropTypes.shape({
-    "a": PropTypes.arrayOf(PropTypes.any),
+    "a": PropTypes.arrayOf(PropTypes.any).isRequired,
 });
 _X = PropTypes.shape({
-    "id": PropTypes.string,
+    "id": PropTypes.string.isRequired,
 });
 _YObjectLongStringsJSON = PropTypes.shape({
-    "id": PropTypes.string,
-    "x": PropTypes.arrayOf(_X),
+    "id": PropTypes.string.isRequired,
+    "x": PropTypes.arrayOf((...args) => _X(...args)).isRequired,
 });
 _YObjectExtremeNumbersJSON = PropTypes.shape({
-    "max": PropTypes.number,
-    "min": PropTypes.number,
+    "max": PropTypes.number.isRequired,
+    "min": PropTypes.number.isRequired,
 });
 _YObjectEscapedNullInKeyJSON = PropTypes.shape({
-    "foo\u0000bar": PropTypes.number,
+    "foo\u0000bar": PropTypes.number.isRequired,
 });
 _YObjectEmptyKeyJSON = PropTypes.shape({
-    "": PropTypes.number,
+    "": PropTypes.number.isRequired,
 });
 _YObjectBasicJSON = PropTypes.shape({
-    "asd": PropTypes.string,
+    "asd": PropTypes.string.isRequired,
 });
 _YObjectJSON = PropTypes.shape({
-    "asd": PropTypes.string,
-    "dfg": PropTypes.string,
+    "asd": PropTypes.string.isRequired,
+    "dfg": PropTypes.string.isRequired,
 });
 _JSON = PropTypes.shape({
 });
 _TopLevel = PropTypes.shape({
-    "y_array_arraysWithSpaces.json": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.any)),
-    "y_array_empty-string.json": PropTypes.arrayOf(PropTypes.string),
-    "y_array_empty.json": PropTypes.arrayOf(PropTypes.any),
-    "y_array_ending_with_newline.json": PropTypes.arrayOf(PropTypes.string),
-    "y_array_false.json": PropTypes.arrayOf(PropTypes.bool),
-    "y_array_heterogeneous.json": PropTypes.arrayOf(PropTypes.oneOfType([_JSON, PropTypes.number, PropTypes.any, PropTypes.string])),
-    "y_array_null.json": PropTypes.arrayOf(PropTypes.any),
-    "y_array_with_1_and_newline.json": PropTypes.arrayOf(PropTypes.number),
-    "y_array_with_leading_space.json": PropTypes.arrayOf(PropTypes.number),
-    "y_array_with_several_null.json": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])),
-    "y_array_with_trailing_space.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_0e+1.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_0e1.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_after_space.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_double_close_to_zero.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_int_with_exp.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_minus_zero.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_negative_int.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_negative_one.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_negative_zero.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_real_capital_e.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_real_capital_e_neg_exp.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_real_capital_e_pos_exp.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_real_exponent.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_real_fraction_exponent.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_real_neg_exp.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_real_pos_exponent.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_simple_int.json": PropTypes.arrayOf(PropTypes.number),
-    "y_number_simple_real.json": PropTypes.arrayOf(PropTypes.number),
-    "y_object.json": _YObjectJSON,
-    "y_object_basic.json": _YObjectBasicJSON,
-    "y_object_empty.json": _JSON,
-    "y_object_empty_key.json": _YObjectEmptyKeyJSON,
-    "y_object_escaped_null_in_key.json": _YObjectEscapedNullInKeyJSON,
-    "y_object_extreme_numbers.json": _YObjectExtremeNumbersJSON,
-    "y_object_long_strings.json": _YObjectLongStringsJSON,
-    "y_object_simple.json": _YObjectSimpleJSON,
-    "y_object_string_unicode.json": _YObjectStringUnicodeJSON,
-    "y_object_with_newlines.json": _YObjectWithNewlinesJSON,
-    "y_string_1_2_3_bytes_UTF-8_sequences.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_accepted_surrogate_pair.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_accepted_surrogate_pairs.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_allowed_escapes.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_backslash_and_u_escaped_zero.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_backslash_doublequotes.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_comments.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_double_escape_a.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_double_escape_n.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_escaped_control_character.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_escaped_noncharacter.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_in_array.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_in_array_with_leading_space.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_last_surrogates_1_and_2.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_nbsp_uescaped.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_nonCharacterInUTF-8_U+10FFFF.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_nonCharacterInUTF-8_U+1FFFF.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_nonCharacterInUTF-8_U+FFFF.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_null_escape.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_one-byte-utf-8.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_pi.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_simple_ascii.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_space.json": PropTypes.string,
-    "y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_three-byte-utf-8.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_two-byte-utf-8.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_u+2028_line_sep.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_u+2029_par_sep.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_uEscape.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_uescaped_newline.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unescaped_char_delete.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicodeEscapedBackslash.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode_2.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode_U+10FFFE_nonchar.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode_U+1FFFE_nonchar.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode_U+2064_invisible_plus.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode_U+FDD0_nonchar.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode_U+FFFE_nonchar.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_unicode_escaped_double_quote.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_utf8.json": PropTypes.arrayOf(PropTypes.string),
-    "y_string_with_del_character.json": PropTypes.arrayOf(PropTypes.string),
-    "y_structure_lonely_false.json": PropTypes.bool,
-    "y_structure_lonely_int.json": PropTypes.number,
-    "y_structure_lonely_negative_real.json": PropTypes.number,
+    "y_array_arraysWithSpaces.json": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.any)).isRequired,
+    "y_array_empty-string.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_array_empty.json": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "y_array_ending_with_newline.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_array_false.json": PropTypes.arrayOf(PropTypes.bool).isRequired,
+    "y_array_heterogeneous.json": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _JSON(...args), PropTypes.number, PropTypes.any, PropTypes.string])).isRequired,
+    "y_array_null.json": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "y_array_with_1_and_newline.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_array_with_leading_space.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_array_with_several_null.json": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])).isRequired,
+    "y_array_with_trailing_space.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_0e+1.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_0e1.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_after_space.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_double_close_to_zero.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_int_with_exp.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_minus_zero.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_negative_int.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_negative_one.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_negative_zero.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_real_capital_e.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_real_capital_e_neg_exp.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_real_capital_e_pos_exp.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_real_exponent.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_real_fraction_exponent.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_real_neg_exp.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_real_pos_exponent.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_simple_int.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_number_simple_real.json": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "y_object.json": (...args) => _YObjectJSON.isRequired(...args),
+    "y_object_basic.json": (...args) => _YObjectBasicJSON.isRequired(...args),
+    "y_object_empty.json": (...args) => _JSON.isRequired(...args),
+    "y_object_empty_key.json": (...args) => _YObjectEmptyKeyJSON.isRequired(...args),
+    "y_object_escaped_null_in_key.json": (...args) => _YObjectEscapedNullInKeyJSON.isRequired(...args),
+    "y_object_extreme_numbers.json": (...args) => _YObjectExtremeNumbersJSON.isRequired(...args),
+    "y_object_long_strings.json": (...args) => _YObjectLongStringsJSON.isRequired(...args),
+    "y_object_simple.json": (...args) => _YObjectSimpleJSON.isRequired(...args),
+    "y_object_string_unicode.json": (...args) => _YObjectStringUnicodeJSON.isRequired(...args),
+    "y_object_with_newlines.json": (...args) => _YObjectWithNewlinesJSON.isRequired(...args),
+    "y_string_1_2_3_bytes_UTF-8_sequences.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_accepted_surrogate_pair.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_accepted_surrogate_pairs.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_allowed_escapes.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_backslash_and_u_escaped_zero.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_backslash_doublequotes.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_comments.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_double_escape_a.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_double_escape_n.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_escaped_control_character.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_escaped_noncharacter.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_in_array.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_in_array_with_leading_space.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_last_surrogates_1_and_2.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_nbsp_uescaped.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_nonCharacterInUTF-8_U+10FFFF.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_nonCharacterInUTF-8_U+1FFFF.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_nonCharacterInUTF-8_U+FFFF.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_null_escape.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_one-byte-utf-8.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_pi.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_simple_ascii.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_space.json": PropTypes.string.isRequired,
+    "y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_three-byte-utf-8.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_two-byte-utf-8.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_u+2028_line_sep.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_u+2029_par_sep.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_uEscape.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_uescaped_newline.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unescaped_char_delete.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicodeEscapedBackslash.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode_2.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode_U+10FFFE_nonchar.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode_U+1FFFE_nonchar.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode_U+2064_invisible_plus.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode_U+FDD0_nonchar.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode_U+FFFE_nonchar.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_unicode_escaped_double_quote.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_utf8.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_string_with_del_character.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_structure_lonely_false.json": PropTypes.bool.isRequired,
+    "y_structure_lonely_int.json": PropTypes.number.isRequired,
+    "y_structure_lonely_negative_real.json": PropTypes.number.isRequired,
     "y_structure_lonely_null.json": PropTypes.any,
-    "y_structure_lonely_string.json": PropTypes.string,
-    "y_structure_lonely_true.json": PropTypes.bool,
-    "y_structure_string_empty.json": PropTypes.string,
-    "y_structure_trailing_newline.json": PropTypes.arrayOf(PropTypes.string),
-    "y_structure_true_in_array.json": PropTypes.arrayOf(PropTypes.bool),
-    "y_structure_whitespace_array.json": PropTypes.arrayOf(PropTypes.any),
+    "y_structure_lonely_string.json": PropTypes.string.isRequired,
+    "y_structure_lonely_true.json": PropTypes.bool.isRequired,
+    "y_structure_string_empty.json": PropTypes.string.isRequired,
+    "y_structure_trailing_newline.json": PropTypes.arrayOf(PropTypes.string).isRequired,
+    "y_structure_true_in_array.json": PropTypes.arrayOf(PropTypes.bool).isRequired,
+    "y_structure_whitespace_array.json": PropTypes.arrayOf(PropTypes.any).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/number-map.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/number-map.json/default/toplevel.js
index 60a8ad6..897436e 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/number-map.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/number-map.json/default/toplevel.js
@@ -14,7 +14,7 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "foo": PropTypes.object,
+    "foo": PropTypes.object.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/omit-empty.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/omit-empty.json/default/toplevel.js
index 6a73b26..949cd0d 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/omit-empty.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/omit-empty.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Result;
 _Result = PropTypes.shape({
-    "age": PropTypes.number,
+    "age": PropTypes.number.isRequired,
     "name": PropTypes.any,
 });
 _TopLevel = PropTypes.shape({
-    "results": PropTypes.arrayOf(_Result),
+    "results": PropTypes.arrayOf((...args) => _Result(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/optional-union.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/optional-union.json/default/toplevel.js
index 397edde..1e598a4 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/optional-union.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/optional-union.json/default/toplevel.js
@@ -17,4 +17,4 @@ _TopLevel = PropTypes.shape({
     "a": PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string]),
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/priority/php-mixed-union.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/php-mixed-union.json/default/toplevel.js
index 6a373ea..17e6081 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/php-mixed-union.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/php-mixed-union.json/default/toplevel.js
@@ -15,10 +15,10 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _MixedClass;
 _MixedClass = PropTypes.shape({
-    "nested": PropTypes.string,
+    "nested": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "mixed": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, _MixedClass, PropTypes.number, PropTypes.any, PropTypes.string])),
+    "mixed": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, (...args) => _MixedClass(...args), PropTypes.number, PropTypes.any, PropTypes.string])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/php-validation.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/php-validation.json/default/toplevel.js
index 8ec123e..329ca7f 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/php-validation.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/php-validation.json/default/toplevel.js
@@ -14,11 +14,11 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "boolean": PropTypes.bool,
-    "integer": PropTypes.number,
-    "integers": PropTypes.arrayOf(PropTypes.number),
-    "number": PropTypes.number,
-    "string": PropTypes.string,
+    "boolean": PropTypes.bool.isRequired,
+    "integer": PropTypes.number.isRequired,
+    "integers": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "number": PropTypes.number.isRequired,
+    "string": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/simple-identifiers.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/simple-identifiers.json/default/toplevel.js
index c78bfb8..16031ee 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/simple-identifiers.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/simple-identifiers.json/default/toplevel.js
@@ -14,15 +14,15 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "": PropTypes.string,
-    "continue": PropTypes.string,
-    "null": PropTypes.string,
-    "undefined": PropTypes.string,
-    "x": PropTypes.string,
-    "x y": PropTypes.string,
-    "x\"": PropTypes.string,
-    "x'": PropTypes.string,
-    "{}": PropTypes.string,
+    "": PropTypes.string.isRequired,
+    "continue": PropTypes.string.isRequired,
+    "null": PropTypes.string.isRequired,
+    "undefined": PropTypes.string.isRequired,
+    "x": PropTypes.string.isRequired,
+    "x y": PropTypes.string.isRequired,
+    "x\"": PropTypes.string.isRequired,
+    "x'": PropTypes.string.isRequired,
+    "{}": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/union-constructor-clash.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/union-constructor-clash.json/default/toplevel.js
index 431b2e0..1117cc5 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/union-constructor-clash.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/union-constructor-clash.json/default/toplevel.js
@@ -15,11 +15,11 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _BoolInUnion;
 _BoolInUnion = PropTypes.shape({
-    "a": PropTypes.bool,
+    "a": PropTypes.bool.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "BoolInUnion": _BoolInUnion,
-    "union": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])),
+    "BoolInUnion": (...args) => _BoolInUnion.isRequired(...args),
+    "union": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.bool, PropTypes.number])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/unions.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/unions.json/default/toplevel.js
index 6637a4e..25ec360 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/unions.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/unions.json/default/toplevel.js
@@ -15,12 +15,12 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _ZClass;
 _ZClass = PropTypes.shape({
-    "a": PropTypes.bool,
+    "a": PropTypes.bool.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "x": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])),
-    "y": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])),
-    "z": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), _ZClass, PropTypes.number])),
+    "x": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any, PropTypes.string])).isRequired,
+    "y": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.any])).isRequired,
+    "z": PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), (...args) => _ZClass(...args), PropTypes.number])).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/url.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/url.json/default/toplevel.js
index 2df3f81..3b0ead3 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/url.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/url.json/default/toplevel.js
@@ -14,8 +14,8 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "fromURL": PropTypes.string,
-    "url": PropTypes.string,
+    "fromURL": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/priority/uuids.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/uuids.json/default/toplevel.js
index e16faef..e07ea37 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/uuids.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/uuids.json/default/toplevel.js
@@ -14,12 +14,12 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "booleanValue": PropTypes.bool,
-    "doubleValue": PropTypes.number,
-    "intValue": PropTypes.number,
-    "stringValue": PropTypes.string,
-    "uuidValue": PropTypes.string,
-    "uuidValues": PropTypes.arrayOf(PropTypes.string),
+    "booleanValue": PropTypes.bool.isRequired,
+    "doubleValue": PropTypes.number.isRequired,
+    "intValue": PropTypes.number.isRequired,
+    "stringValue": PropTypes.string.isRequired,
+    "uuidValue": PropTypes.string.isRequired,
+    "uuidValues": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/bitcoin-block.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/bitcoin-block.json/default/toplevel.js
index 8279caf..487efb6 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/bitcoin-block.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/bitcoin-block.json/default/toplevel.js
@@ -14,11 +14,11 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "block_index": PropTypes.number,
-    "hash": PropTypes.string,
-    "height": PropTypes.number,
-    "time": PropTypes.number,
-    "txIndexes": PropTypes.arrayOf(PropTypes.number),
+    "block_index": PropTypes.number.isRequired,
+    "hash": PropTypes.string.isRequired,
+    "height": PropTypes.number.isRequired,
+    "time": PropTypes.number.isRequired,
+    "txIndexes": PropTypes.arrayOf(PropTypes.number).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/getting-started.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/getting-started.json/default/toplevel.js
index ba77c45..3492b11 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/getting-started.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/getting-started.json/default/toplevel.js
@@ -14,8 +14,8 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "greeting": PropTypes.string,
-    "instructions": PropTypes.arrayOf(PropTypes.string),
+    "greeting": PropTypes.string.isRequired,
+    "instructions": PropTypes.arrayOf(PropTypes.string).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/github-events.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/github-events.json/default/toplevel.js
index 2464421..368be08 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/github-events.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/github-events.json/default/toplevel.js
@@ -29,252 +29,252 @@ let _Comments;
 let _Base;
 let _BaseRepo;
 let _TopLevelRepo;
-const _Type = PropTypes.oneOfType(['user', 'organization']);
+const _Type = PropTypes.oneOf(["User", "Organization"]);
 _TopLevelRepo = PropTypes.shape({
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "url": PropTypes.string,
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _BaseRepo = PropTypes.shape({
-    "archive_url": PropTypes.string,
-    "assignees_url": PropTypes.string,
-    "blobs_url": PropTypes.string,
-    "branches_url": PropTypes.string,
-    "clone_url": PropTypes.string,
-    "collaborators_url": PropTypes.string,
-    "comments_url": PropTypes.string,
-    "commits_url": PropTypes.string,
-    "compare_url": PropTypes.string,
-    "contents_url": PropTypes.string,
-    "contributors_url": PropTypes.string,
-    "created_at": PropTypes.string,
-    "default_branch": PropTypes.string,
-    "deployments_url": PropTypes.string,
-    "description": PropTypes.string,
-    "downloads_url": PropTypes.string,
-    "events_url": PropTypes.string,
-    "fork": PropTypes.bool,
-    "forks": PropTypes.number,
-    "forks_count": PropTypes.number,
-    "forks_url": PropTypes.string,
-    "full_name": PropTypes.string,
-    "git_commits_url": PropTypes.string,
-    "git_refs_url": PropTypes.string,
-    "git_tags_url": PropTypes.string,
-    "git_url": PropTypes.string,
-    "has_downloads": PropTypes.bool,
-    "has_issues": PropTypes.bool,
-    "has_pages": PropTypes.bool,
-    "has_projects": PropTypes.bool,
-    "has_wiki": PropTypes.bool,
-    "homepage": PropTypes.string,
-    "hooks_url": PropTypes.string,
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "issue_comment_url": PropTypes.string,
-    "issue_events_url": PropTypes.string,
-    "issues_url": PropTypes.string,
-    "keys_url": PropTypes.string,
-    "labels_url": PropTypes.string,
-    "language": PropTypes.string,
-    "languages_url": PropTypes.string,
-    "merges_url": PropTypes.string,
-    "milestones_url": PropTypes.string,
+    "archive_url": PropTypes.string.isRequired,
+    "assignees_url": PropTypes.string.isRequired,
+    "blobs_url": PropTypes.string.isRequired,
+    "branches_url": PropTypes.string.isRequired,
+    "clone_url": PropTypes.string.isRequired,
+    "collaborators_url": PropTypes.string.isRequired,
+    "comments_url": PropTypes.string.isRequired,
+    "commits_url": PropTypes.string.isRequired,
+    "compare_url": PropTypes.string.isRequired,
+    "contents_url": PropTypes.string.isRequired,
+    "contributors_url": PropTypes.string.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "default_branch": PropTypes.string.isRequired,
+    "deployments_url": PropTypes.string.isRequired,
+    "description": PropTypes.string.isRequired,
+    "downloads_url": PropTypes.string.isRequired,
+    "events_url": PropTypes.string.isRequired,
+    "fork": PropTypes.bool.isRequired,
+    "forks": PropTypes.number.isRequired,
+    "forks_count": PropTypes.number.isRequired,
+    "forks_url": PropTypes.string.isRequired,
+    "full_name": PropTypes.string.isRequired,
+    "git_commits_url": PropTypes.string.isRequired,
+    "git_refs_url": PropTypes.string.isRequired,
+    "git_tags_url": PropTypes.string.isRequired,
+    "git_url": PropTypes.string.isRequired,
+    "has_downloads": PropTypes.bool.isRequired,
+    "has_issues": PropTypes.bool.isRequired,
+    "has_pages": PropTypes.bool.isRequired,
+    "has_projects": PropTypes.bool.isRequired,
+    "has_wiki": PropTypes.bool.isRequired,
+    "homepage": PropTypes.string.isRequired,
+    "hooks_url": PropTypes.string.isRequired,
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "issue_comment_url": PropTypes.string.isRequired,
+    "issue_events_url": PropTypes.string.isRequired,
+    "issues_url": PropTypes.string.isRequired,
+    "keys_url": PropTypes.string.isRequired,
+    "labels_url": PropTypes.string.isRequired,
+    "language": PropTypes.string.isRequired,
+    "languages_url": PropTypes.string.isRequired,
+    "merges_url": PropTypes.string.isRequired,
+    "milestones_url": PropTypes.string.isRequired,
     "mirror_url": PropTypes.any,
-    "name": PropTypes.string,
-    "notifications_url": PropTypes.string,
-    "open_issues": PropTypes.number,
-    "open_issues_count": PropTypes.number,
-    "owner": _User,
-    "private": PropTypes.bool,
-    "pulls_url": PropTypes.string,
-    "pushed_at": PropTypes.string,
-    "releases_url": PropTypes.string,
-    "size": PropTypes.number,
-    "ssh_url": PropTypes.string,
-    "stargazers_count": PropTypes.number,
-    "stargazers_url": PropTypes.string,
-    "statuses_url": PropTypes.string,
-    "subscribers_url": PropTypes.string,
-    "subscription_url": PropTypes.string,
-    "svn_url": PropTypes.string,
-    "tags_url": PropTypes.string,
-    "teams_url": PropTypes.string,
-    "trees_url": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "url": PropTypes.string,
-    "watchers": PropTypes.number,
-    "watchers_count": PropTypes.number,
+    "name": PropTypes.string.isRequired,
+    "notifications_url": PropTypes.string.isRequired,
+    "open_issues": PropTypes.number.isRequired,
+    "open_issues_count": PropTypes.number.isRequired,
+    "owner": (...args) => _User.isRequired(...args),
+    "private": PropTypes.bool.isRequired,
+    "pulls_url": PropTypes.string.isRequired,
+    "pushed_at": PropTypes.string.isRequired,
+    "releases_url": PropTypes.string.isRequired,
+    "size": PropTypes.number.isRequired,
+    "ssh_url": PropTypes.string.isRequired,
+    "stargazers_count": PropTypes.number.isRequired,
+    "stargazers_url": PropTypes.string.isRequired,
+    "statuses_url": PropTypes.string.isRequired,
+    "subscribers_url": PropTypes.string.isRequired,
+    "subscription_url": PropTypes.string.isRequired,
+    "svn_url": PropTypes.string.isRequired,
+    "tags_url": PropTypes.string.isRequired,
+    "teams_url": PropTypes.string.isRequired,
+    "trees_url": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "watchers": PropTypes.number.isRequired,
+    "watchers_count": PropTypes.number.isRequired,
 });
 _Base = PropTypes.shape({
-    "label": PropTypes.string,
-    "ref": PropTypes.string,
-    "repo": _BaseRepo,
-    "sha": PropTypes.string,
-    "user": _User,
+    "label": PropTypes.string.isRequired,
+    "ref": PropTypes.string.isRequired,
+    "repo": (...args) => _BaseRepo.isRequired(...args),
+    "sha": PropTypes.string.isRequired,
+    "user": (...args) => _User.isRequired(...args),
 });
 _Comments = PropTypes.shape({
-    "href": PropTypes.string,
+    "href": PropTypes.string.isRequired,
 });
 _Links = PropTypes.shape({
-    "comments": _Comments,
-    "commits": _Comments,
-    "html": _Comments,
-    "issue": _Comments,
-    "review_comment": _Comments,
-    "review_comments": _Comments,
-    "self": _Comments,
-    "statuses": _Comments,
+    "comments": (...args) => _Comments.isRequired(...args),
+    "commits": (...args) => _Comments.isRequired(...args),
+    "html": (...args) => _Comments.isRequired(...args),
+    "issue": (...args) => _Comments.isRequired(...args),
+    "review_comment": (...args) => _Comments.isRequired(...args),
+    "review_comments": (...args) => _Comments.isRequired(...args),
+    "self": (...args) => _Comments.isRequired(...args),
+    "statuses": (...args) => _Comments.isRequired(...args),
 });
 _PayloadPullRequest = PropTypes.shape({
-    "_links": _Links,
-    "additions": PropTypes.number,
+    "_links": (...args) => _Links.isRequired(...args),
+    "additions": PropTypes.number.isRequired,
     "assignee": PropTypes.any,
-    "assignees": PropTypes.arrayOf(PropTypes.any),
-    "base": _Base,
-    "body": PropTypes.string,
-    "changed_files": PropTypes.number,
-    "closed_at": PropTypes.string,
-    "comments": PropTypes.number,
-    "comments_url": PropTypes.string,
-    "commits": PropTypes.number,
-    "commits_url": PropTypes.string,
-    "created_at": PropTypes.string,
-    "deletions": PropTypes.number,
-    "diff_url": PropTypes.string,
-    "head": _Base,
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "issue_url": PropTypes.string,
-    "locked": PropTypes.bool,
-    "maintainer_can_modify": PropTypes.bool,
-    "merge_commit_sha": PropTypes.string,
+    "assignees": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "base": (...args) => _Base.isRequired(...args),
+    "body": PropTypes.string.isRequired,
+    "changed_files": PropTypes.number.isRequired,
+    "closed_at": PropTypes.string.isRequired,
+    "comments": PropTypes.number.isRequired,
+    "comments_url": PropTypes.string.isRequired,
+    "commits": PropTypes.number.isRequired,
+    "commits_url": PropTypes.string.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "deletions": PropTypes.number.isRequired,
+    "diff_url": PropTypes.string.isRequired,
+    "head": (...args) => _Base.isRequired(...args),
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "issue_url": PropTypes.string.isRequired,
+    "locked": PropTypes.bool.isRequired,
+    "maintainer_can_modify": PropTypes.bool.isRequired,
+    "merge_commit_sha": PropTypes.string.isRequired,
     "mergeable": PropTypes.any,
-    "mergeable_state": PropTypes.string,
-    "merged": PropTypes.bool,
-    "merged_at": PropTypes.string,
-    "merged_by": _User,
+    "mergeable_state": PropTypes.string.isRequired,
+    "merged": PropTypes.bool.isRequired,
+    "merged_at": PropTypes.string.isRequired,
+    "merged_by": (...args) => _User.isRequired(...args),
     "milestone": PropTypes.any,
-    "number": PropTypes.number,
-    "patch_url": PropTypes.string,
+    "number": PropTypes.number.isRequired,
+    "patch_url": PropTypes.string.isRequired,
     "rebaseable": PropTypes.any,
-    "requested_reviewers": PropTypes.arrayOf(PropTypes.any),
-    "review_comment_url": PropTypes.string,
-    "review_comments": PropTypes.number,
-    "review_comments_url": PropTypes.string,
-    "state": PropTypes.string,
-    "statuses_url": PropTypes.string,
-    "title": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "url": PropTypes.string,
-    "user": _User,
+    "requested_reviewers": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "review_comment_url": PropTypes.string.isRequired,
+    "review_comments": PropTypes.number.isRequired,
+    "review_comments_url": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "statuses_url": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": (...args) => _User.isRequired(...args),
 });
 _IssuePullRequest = PropTypes.shape({
-    "diff_url": PropTypes.string,
-    "html_url": PropTypes.string,
-    "patch_url": PropTypes.string,
-    "url": PropTypes.string,
+    "diff_url": PropTypes.string.isRequired,
+    "html_url": PropTypes.string.isRequired,
+    "patch_url": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Milestone = PropTypes.shape({
     "closed_at": PropTypes.any,
-    "closed_issues": PropTypes.number,
-    "created_at": PropTypes.string,
-    "creator": _User,
-    "description": PropTypes.string,
+    "closed_issues": PropTypes.number.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "creator": (...args) => _User.isRequired(...args),
+    "description": PropTypes.string.isRequired,
     "due_on": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "labels_url": PropTypes.string,
-    "number": PropTypes.number,
-    "open_issues": PropTypes.number,
-    "state": PropTypes.string,
-    "title": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "url": PropTypes.string,
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "labels_url": PropTypes.string.isRequired,
+    "number": PropTypes.number.isRequired,
+    "open_issues": PropTypes.number.isRequired,
+    "state": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Label = PropTypes.shape({
-    "color": PropTypes.string,
-    "default": PropTypes.bool,
-    "id": PropTypes.number,
-    "name": PropTypes.string,
-    "url": PropTypes.string,
+    "color": PropTypes.string.isRequired,
+    "default": PropTypes.bool.isRequired,
+    "id": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Issue = PropTypes.shape({
     "assignee": PropTypes.any,
-    "assignees": PropTypes.arrayOf(PropTypes.any),
-    "body": PropTypes.string,
+    "assignees": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "body": PropTypes.string.isRequired,
     "closed_at": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "comments": PropTypes.number,
-    "comments_url": PropTypes.string,
-    "created_at": PropTypes.string,
-    "events_url": PropTypes.string,
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "labels": PropTypes.arrayOf(_Label),
-    "labels_url": PropTypes.string,
-    "locked": PropTypes.bool,
-    "milestone": PropTypes.oneOfType([_Milestone, PropTypes.any]),
-    "number": PropTypes.number,
-    "pull_request": PropTypes.oneOfType([_IssuePullRequest, PropTypes.any]),
-    "repository_url": PropTypes.string,
-    "state": PropTypes.string,
-    "title": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "url": PropTypes.string,
-    "user": _User,
+    "comments": PropTypes.number.isRequired,
+    "comments_url": PropTypes.string.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "events_url": PropTypes.string.isRequired,
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "labels": PropTypes.arrayOf((...args) => _Label(...args)).isRequired,
+    "labels_url": PropTypes.string.isRequired,
+    "locked": PropTypes.bool.isRequired,
+    "milestone": PropTypes.oneOfType([(...args) => _Milestone(...args), PropTypes.any]),
+    "number": PropTypes.number.isRequired,
+    "pull_request": PropTypes.oneOfType([(...args) => _IssuePullRequest(...args), PropTypes.any]),
+    "repository_url": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "title": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": (...args) => _User.isRequired(...args),
 });
 _Author = PropTypes.shape({
-    "email": PropTypes.string,
-    "name": PropTypes.string,
+    "email": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _Commit = PropTypes.shape({
-    "author": _Author,
-    "distinct": PropTypes.bool,
-    "message": PropTypes.string,
-    "sha": PropTypes.string,
-    "url": PropTypes.string,
+    "author": (...args) => _Author.isRequired(...args),
+    "distinct": PropTypes.bool.isRequired,
+    "message": PropTypes.string.isRequired,
+    "sha": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _User = PropTypes.shape({
-    "avatar_url": PropTypes.string,
-    "events_url": PropTypes.string,
-    "followers_url": PropTypes.string,
-    "following_url": PropTypes.string,
-    "gists_url": PropTypes.string,
-    "gravatar_id": PropTypes.string,
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "login": PropTypes.string,
-    "organizations_url": PropTypes.string,
-    "received_events_url": PropTypes.string,
-    "repos_url": PropTypes.string,
-    "site_admin": PropTypes.bool,
-    "starred_url": PropTypes.string,
-    "subscriptions_url": PropTypes.string,
-    "type": _Type,
-    "url": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
+    "events_url": PropTypes.string.isRequired,
+    "followers_url": PropTypes.string.isRequired,
+    "following_url": PropTypes.string.isRequired,
+    "gists_url": PropTypes.string.isRequired,
+    "gravatar_id": PropTypes.string.isRequired,
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "login": PropTypes.string.isRequired,
+    "organizations_url": PropTypes.string.isRequired,
+    "received_events_url": PropTypes.string.isRequired,
+    "repos_url": PropTypes.string.isRequired,
+    "site_admin": PropTypes.bool.isRequired,
+    "starred_url": PropTypes.string.isRequired,
+    "subscriptions_url": PropTypes.string.isRequired,
+    "type": _Type.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _Comment = PropTypes.shape({
-    "body": PropTypes.string,
-    "created_at": PropTypes.string,
-    "html_url": PropTypes.string,
-    "id": PropTypes.number,
-    "issue_url": PropTypes.string,
-    "updated_at": PropTypes.string,
-    "url": PropTypes.string,
-    "user": _User,
+    "body": PropTypes.string.isRequired,
+    "created_at": PropTypes.string.isRequired,
+    "html_url": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "issue_url": PropTypes.string.isRequired,
+    "updated_at": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user": (...args) => _User.isRequired(...args),
 });
 _Payload = PropTypes.shape({
     "action": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "before": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "comment": PropTypes.oneOfType([_Comment, PropTypes.any]),
-    "commits": PropTypes.oneOfType([PropTypes.arrayOf(_Commit), PropTypes.any]),
+    "comment": PropTypes.oneOfType([(...args) => _Comment(...args), PropTypes.any]),
+    "commits": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Commit(...args)), PropTypes.any]),
     "description": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "distinct_size": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "head": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "issue": PropTypes.oneOfType([_Issue, PropTypes.any]),
+    "issue": PropTypes.oneOfType([(...args) => _Issue(...args), PropTypes.any]),
     "master_branch": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "number": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "pull_request": PropTypes.oneOfType([_PayloadPullRequest, PropTypes.any]),
+    "pull_request": PropTypes.oneOfType([(...args) => _PayloadPullRequest(...args), PropTypes.any]),
     "push_id": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
     "pusher_type": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "ref": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
@@ -282,22 +282,22 @@ _Payload = PropTypes.shape({
     "size": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _Actor = PropTypes.shape({
-    "avatar_url": PropTypes.string,
+    "avatar_url": PropTypes.string.isRequired,
     "display_login": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "gravatar_id": PropTypes.string,
-    "id": PropTypes.number,
-    "login": PropTypes.string,
-    "url": PropTypes.string,
+    "gravatar_id": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "login": PropTypes.string.isRequired,
+    "url": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "actor": _Actor,
-    "created_at": PropTypes.string,
-    "id": PropTypes.string,
-    "org": PropTypes.oneOfType([_Actor, PropTypes.any]),
-    "payload": _Payload,
-    "public": PropTypes.bool,
-    "repo": _TopLevelRepo,
-    "type": PropTypes.string,
+    "actor": (...args) => _Actor.isRequired(...args),
+    "created_at": PropTypes.string.isRequired,
+    "id": PropTypes.string.isRequired,
+    "org": PropTypes.oneOfType([(...args) => _Actor(...args), PropTypes.any]),
+    "payload": (...args) => _Payload.isRequired(...args),
+    "public": PropTypes.bool.isRequired,
+    "repo": (...args) => _TopLevelRepo.isRequired(...args),
+    "type": PropTypes.string.isRequired,
 });
 
-export const TopLevel = PropTypes.arrayOf(_TopLevel);
+export const TopLevel = PropTypes.arrayOf((...args) => _TopLevel(...args));
diff --git a/base/javascript-prop-types/test/inputs/json/samples/kitchen-sink.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/kitchen-sink.json/default/toplevel.js
index 78d30c5..b7c2fe8 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/kitchen-sink.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/kitchen-sink.json/default/toplevel.js
@@ -17,32 +17,32 @@ let _DifferentThingClass;
 let _PersonElement;
 let _PurplePerson;
 _PurplePerson = PropTypes.shape({
-    "intOrString": PropTypes.number,
-    "name": PropTypes.string,
+    "intOrString": PropTypes.number.isRequired,
+    "name": PropTypes.string.isRequired,
 });
 _PersonElement = PropTypes.shape({
-    "intOrString": PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
-    "name": PropTypes.string,
+    "intOrString": PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
+    "name": PropTypes.string.isRequired,
     "optionalValue": PropTypes.oneOfType([PropTypes.bool, PropTypes.any]),
 });
 _DifferentThingClass = PropTypes.shape({
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "booleanValue": PropTypes.bool,
-    "dateValue": PropTypes.string,
-    "differentThings": PropTypes.arrayOf(PropTypes.oneOfType([_DifferentThingClass, PropTypes.number, PropTypes.string])),
-    "doubleValue": PropTypes.number,
-    "intValue": PropTypes.number,
-    "mapValue": PropTypes.object,
+    "booleanValue": PropTypes.bool.isRequired,
+    "dateValue": PropTypes.string.isRequired,
+    "differentThings": PropTypes.arrayOf(PropTypes.oneOfType([(...args) => _DifferentThingClass(...args), PropTypes.number, PropTypes.string])).isRequired,
+    "doubleValue": PropTypes.number.isRequired,
+    "intValue": PropTypes.number.isRequired,
+    "mapValue": PropTypes.object.isRequired,
     "name with spaces": PropTypes.any,
     "nullValue": PropTypes.any,
-    "nullableMapValue": PropTypes.object,
-    "people": PropTypes.arrayOf(_PersonElement),
-    "person": _PurplePerson,
-    "stringValue": PropTypes.string,
-    "tuples": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string]))),
-    "uuidValue": PropTypes.string,
+    "nullableMapValue": PropTypes.object.isRequired,
+    "people": PropTypes.arrayOf((...args) => _PersonElement(...args)).isRequired,
+    "person": (...args) => _PurplePerson.isRequired(...args),
+    "stringValue": PropTypes.string.isRequired,
+    "tuples": PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string]))).isRequired,
+    "uuidValue": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/null-safe.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/null-safe.json/default/toplevel.js
index a956e99..35f28fd 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/null-safe.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/null-safe.json/default/toplevel.js
@@ -16,18 +16,18 @@ let _TopLevel;
 let _Item;
 let _Address;
 _Address = PropTypes.shape({
-    "city": PropTypes.string,
-    "country": PropTypes.string,
-    "street": PropTypes.string,
+    "city": PropTypes.string.isRequired,
+    "country": PropTypes.string.isRequired,
+    "street": PropTypes.string.isRequired,
 });
 _Item = PropTypes.shape({
-    "address": PropTypes.oneOfType([_Address, PropTypes.any]),
+    "address": PropTypes.oneOfType([(...args) => _Address(...args), PropTypes.any]),
     "created_at": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "name": PropTypes.string,
+    "name": PropTypes.string.isRequired,
     "sex": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
 });
 _TopLevel = PropTypes.shape({
-    "item": PropTypes.arrayOf(_Item),
+    "item": PropTypes.arrayOf((...args) => _Item(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/pokedex.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/pokedex.json/default/toplevel.js
index 6d7ef24..b7e1a14 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/pokedex.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/pokedex.json/default/toplevel.js
@@ -15,33 +15,33 @@ import PropTypes from "prop-types";
 let _TopLevel;
 let _Pokemon;
 let _Evolution;
-const _Egg = PropTypes.oneOfType(['the2KM', 'notInEggs', 'the5KM', 'the10KM', 'omanyteCandy']);
-const _Type = PropTypes.oneOfType(['fire', 'ice', 'flying', 'psychic', 'water', 'ground', 'rock', 'electric', 'grass', 'fighting', 'poison', 'bug', 'fairy', 'ghost', 'dark', 'steel', 'dragon', 'normal']);
+const _Egg = PropTypes.oneOf(["2 km", "Not in Eggs", "5 km", "10 km", "Omanyte Candy"]);
+const _Type = PropTypes.oneOf(["Fire", "Ice", "Flying", "Psychic", "Water", "Ground", "Rock", "Electric", "Grass", "Fighting", "Poison", "Bug", "Fairy", "Ghost", "Dark", "Steel", "Dragon", "Normal"]);
 _Evolution = PropTypes.shape({
-    "name": PropTypes.string,
-    "num": PropTypes.string,
+    "name": PropTypes.string.isRequired,
+    "num": PropTypes.string.isRequired,
 });
 _Pokemon = PropTypes.shape({
-    "avg_spawns": PropTypes.number,
-    "candy": PropTypes.string,
+    "avg_spawns": PropTypes.number.isRequired,
+    "candy": PropTypes.string.isRequired,
     "candy_count": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
-    "egg": _Egg,
-    "height": PropTypes.string,
-    "id": PropTypes.number,
-    "img": PropTypes.string,
+    "egg": _Egg.isRequired,
+    "height": PropTypes.string.isRequired,
+    "id": PropTypes.number.isRequired,
+    "img": PropTypes.string.isRequired,
     "multipliers": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.any]),
-    "name": PropTypes.string,
-    "next_evolution": PropTypes.oneOfType([PropTypes.arrayOf(_Evolution), PropTypes.any]),
-    "num": PropTypes.string,
-    "prev_evolution": PropTypes.oneOfType([PropTypes.arrayOf(_Evolution), PropTypes.any]),
-    "spawn_chance": PropTypes.number,
-    "spawn_time": PropTypes.string,
-    "type": PropTypes.arrayOf(_Type),
-    "weaknesses": PropTypes.arrayOf(_Type),
-    "weight": PropTypes.string,
+    "name": PropTypes.string.isRequired,
+    "next_evolution": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Evolution(...args)), PropTypes.any]),
+    "num": PropTypes.string.isRequired,
+    "prev_evolution": PropTypes.oneOfType([PropTypes.arrayOf((...args) => _Evolution(...args)), PropTypes.any]),
+    "spawn_chance": PropTypes.number.isRequired,
+    "spawn_time": PropTypes.string.isRequired,
+    "type": PropTypes.arrayOf(_Type).isRequired,
+    "weaknesses": PropTypes.arrayOf(_Type).isRequired,
+    "weight": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "pokemon": PropTypes.arrayOf(_Pokemon),
+    "pokemon": PropTypes.arrayOf((...args) => _Pokemon(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/reddit.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/reddit.json/default/toplevel.js
index 23731fa..cee3272 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/reddit.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/reddit.json/default/toplevel.js
@@ -22,120 +22,120 @@ let _Image;
 let _Source;
 let _Variants;
 let _GIF;
-const _Domain = PropTypes.oneOfType(['redditCOM', 'iImgurCOM', 'imgurCOM', 'iReddIt']);
-const _WhitelistStatus = PropTypes.oneOfType(['allAds']);
-const _PostHint = PropTypes.oneOfType(['link', 'image']);
-const _Subreddit = PropTypes.oneOfType(['funny']);
-const _SubredditID = PropTypes.oneOfType(['t52Qh33']);
-const _SubredditNamePrefixed = PropTypes.oneOfType(['rFunny']);
-const _SubredditType = PropTypes.oneOfType(['public']);
-const _Kind = PropTypes.oneOfType(['t3']);
+const _Domain = PropTypes.oneOf(["reddit.com", "i.imgur.com", "imgur.com", "i.redd.it"]);
+const _WhitelistStatus = PropTypes.oneOf(["all_ads"]);
+const _PostHint = PropTypes.oneOf(["link", "image"]);
+const _Subreddit = PropTypes.oneOf(["funny"]);
+const _SubredditID = PropTypes.oneOf(["t5_2qh33"]);
+const _SubredditNamePrefixed = PropTypes.oneOf(["r/funny"]);
+const _SubredditType = PropTypes.oneOf(["public"]);
+const _Kind = PropTypes.oneOf(["t3"]);
 _GIF = PropTypes.shape({
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
 });
 _Variants = PropTypes.shape({
-    "gif": PropTypes.oneOfType([_GIF, PropTypes.any]),
-    "mp4": PropTypes.oneOfType([_GIF, PropTypes.any]),
+    "gif": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
+    "mp4": PropTypes.oneOfType([(...args) => _GIF(...args), PropTypes.any]),
 });
 _Source = PropTypes.shape({
-    "height": PropTypes.number,
-    "url": PropTypes.string,
-    "width": PropTypes.number,
+    "height": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "width": PropTypes.number.isRequired,
 });
 _Image = PropTypes.shape({
-    "id": PropTypes.string,
-    "resolutions": PropTypes.arrayOf(_Source),
-    "source": _Source,
-    "variants": _Variants,
+    "id": PropTypes.string.isRequired,
+    "resolutions": PropTypes.arrayOf((...args) => _Source(...args)).isRequired,
+    "source": (...args) => _Source.isRequired(...args),
+    "variants": (...args) => _Variants.isRequired(...args),
 });
 _Preview = PropTypes.shape({
-    "enabled": PropTypes.bool,
-    "images": PropTypes.arrayOf(_Image),
+    "enabled": PropTypes.bool.isRequired,
+    "images": PropTypes.arrayOf((...args) => _Image(...args)).isRequired,
 });
 _MediaEmbed = PropTypes.shape({
 });
 _ChildData = PropTypes.shape({
     "approved_at_utc": PropTypes.any,
     "approved_by": PropTypes.any,
-    "archived": PropTypes.bool,
-    "author": PropTypes.string,
+    "archived": PropTypes.bool.isRequired,
+    "author": PropTypes.string.isRequired,
     "author_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "author_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "banned_at_utc": PropTypes.any,
     "banned_by": PropTypes.any,
-    "brand_safe": PropTypes.bool,
-    "can_gild": PropTypes.bool,
-    "can_mod_post": PropTypes.bool,
-    "clicked": PropTypes.bool,
-    "contest_mode": PropTypes.bool,
-    "created": PropTypes.number,
-    "created_utc": PropTypes.number,
+    "brand_safe": PropTypes.bool.isRequired,
+    "can_gild": PropTypes.bool.isRequired,
+    "can_mod_post": PropTypes.bool.isRequired,
+    "clicked": PropTypes.bool.isRequired,
+    "contest_mode": PropTypes.bool.isRequired,
+    "created": PropTypes.number.isRequired,
+    "created_utc": PropTypes.number.isRequired,
     "distinguished": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "domain": _Domain,
-    "downs": PropTypes.number,
-    "edited": PropTypes.bool,
-    "gilded": PropTypes.number,
-    "hidden": PropTypes.bool,
-    "hide_score": PropTypes.bool,
-    "id": PropTypes.string,
-    "is_self": PropTypes.bool,
-    "is_video": PropTypes.bool,
+    "domain": _Domain.isRequired,
+    "downs": PropTypes.number.isRequired,
+    "edited": PropTypes.bool.isRequired,
+    "gilded": PropTypes.number.isRequired,
+    "hidden": PropTypes.bool.isRequired,
+    "hide_score": PropTypes.bool.isRequired,
+    "id": PropTypes.string.isRequired,
+    "is_self": PropTypes.bool.isRequired,
+    "is_video": PropTypes.bool.isRequired,
     "likes": PropTypes.any,
     "link_flair_css_class": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "link_flair_text": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "locked": PropTypes.bool,
+    "locked": PropTypes.bool.isRequired,
     "media": PropTypes.any,
-    "media_embed": _MediaEmbed,
-    "mod_reports": PropTypes.arrayOf(PropTypes.any),
-    "name": PropTypes.string,
-    "num_comments": PropTypes.number,
+    "media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "mod_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
+    "name": PropTypes.string.isRequired,
+    "num_comments": PropTypes.number.isRequired,
     "num_reports": PropTypes.any,
-    "over_18": PropTypes.bool,
-    "parent_whitelist_status": _WhitelistStatus,
-    "permalink": PropTypes.string,
-    "post_hint": _PostHint,
-    "preview": _Preview,
-    "quarantine": PropTypes.bool,
+    "over_18": PropTypes.bool.isRequired,
+    "parent_whitelist_status": _WhitelistStatus.isRequired,
+    "permalink": PropTypes.string.isRequired,
+    "post_hint": _PostHint.isRequired,
+    "preview": (...args) => _Preview.isRequired(...args),
+    "quarantine": PropTypes.bool.isRequired,
     "removal_reason": PropTypes.any,
     "report_reasons": PropTypes.any,
-    "saved": PropTypes.bool,
-    "score": PropTypes.number,
+    "saved": PropTypes.bool.isRequired,
+    "score": PropTypes.number.isRequired,
     "secure_media": PropTypes.any,
-    "secure_media_embed": _MediaEmbed,
-    "selftext": PropTypes.string,
+    "secure_media_embed": (...args) => _MediaEmbed.isRequired(...args),
+    "selftext": PropTypes.string.isRequired,
     "selftext_html": PropTypes.any,
-    "spoiler": PropTypes.bool,
-    "stickied": PropTypes.bool,
-    "subreddit": _Subreddit,
-    "subreddit_id": _SubredditID,
-    "subreddit_name_prefixed": _SubredditNamePrefixed,
-    "subreddit_type": _SubredditType,
+    "spoiler": PropTypes.bool.isRequired,
+    "stickied": PropTypes.bool.isRequired,
+    "subreddit": _Subreddit.isRequired,
+    "subreddit_id": _SubredditID.isRequired,
+    "subreddit_name_prefixed": _SubredditNamePrefixed.isRequired,
+    "subreddit_type": _SubredditType.isRequired,
     "suggested_sort": PropTypes.any,
-    "thumbnail": PropTypes.string,
-    "thumbnail_height": PropTypes.number,
-    "thumbnail_width": PropTypes.number,
-    "title": PropTypes.string,
-    "ups": PropTypes.number,
-    "url": PropTypes.string,
-    "user_reports": PropTypes.arrayOf(PropTypes.any),
+    "thumbnail": PropTypes.string.isRequired,
+    "thumbnail_height": PropTypes.number.isRequired,
+    "thumbnail_width": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "ups": PropTypes.number.isRequired,
+    "url": PropTypes.string.isRequired,
+    "user_reports": PropTypes.arrayOf(PropTypes.any).isRequired,
     "view_count": PropTypes.any,
-    "visited": PropTypes.bool,
-    "whitelist_status": _WhitelistStatus,
+    "visited": PropTypes.bool.isRequired,
+    "whitelist_status": _WhitelistStatus.isRequired,
 });
 _Child = PropTypes.shape({
-    "data": _ChildData,
-    "kind": _Kind,
+    "data": (...args) => _ChildData.isRequired(...args),
+    "kind": _Kind.isRequired,
 });
 _TopLevelData = PropTypes.shape({
-    "after": PropTypes.string,
+    "after": PropTypes.string.isRequired,
     "before": PropTypes.any,
-    "children": PropTypes.arrayOf(_Child),
-    "modhash": PropTypes.string,
+    "children": PropTypes.arrayOf((...args) => _Child(...args)).isRequired,
+    "modhash": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": _TopLevelData,
-    "kind": PropTypes.string,
+    "data": (...args) => _TopLevelData.isRequired(...args),
+    "kind": PropTypes.string.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/simple-object.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/simple-object.json/default/toplevel.js
index dd3cd24..af519ea 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/simple-object.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/simple-object.json/default/toplevel.js
@@ -14,9 +14,9 @@ import PropTypes from "prop-types";
 
 let _TopLevel;
 _TopLevel = PropTypes.shape({
-    "date": PropTypes.number,
-    "title": PropTypes.string,
-    "validity": PropTypes.bool,
+    "date": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "validity": PropTypes.bool.isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/us-avg-temperatures.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/us-avg-temperatures.json/default/toplevel.js
index e95d109..7f6dd0a 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/us-avg-temperatures.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/us-avg-temperatures.json/default/toplevel.js
@@ -16,18 +16,18 @@ let _TopLevel;
 let _Datum;
 let _Description;
 _Description = PropTypes.shape({
-    "base_period": PropTypes.string,
-    "missing": PropTypes.number,
-    "title": PropTypes.string,
-    "units": PropTypes.string,
+    "base_period": PropTypes.string.isRequired,
+    "missing": PropTypes.number.isRequired,
+    "title": PropTypes.string.isRequired,
+    "units": PropTypes.string.isRequired,
 });
 _Datum = PropTypes.shape({
-    "anomaly": PropTypes.string,
-    "value": PropTypes.string,
+    "anomaly": PropTypes.string.isRequired,
+    "value": PropTypes.string.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "data": PropTypes.object,
-    "description": _Description,
+    "data": PropTypes.object.isRequired,
+    "description": (...args) => _Description.isRequired(...args),
 });
 
 export const TopLevel = _TopLevel;
diff --git a/base/javascript-prop-types/test/inputs/json/samples/us-senators.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/us-senators.json/default/toplevel.js
index a018865..3f0f4e8 100644
--- a/base/javascript-prop-types/test/inputs/json/samples/us-senators.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/samples/us-senators.json/default/toplevel.js
@@ -17,75 +17,75 @@ let _Meta;
 let _Object;
 let _Extra;
 let _Person;
-const _Party = PropTypes.oneOfType(['democrat', 'republican', 'independent']);
-const _Gender = PropTypes.oneOfType(['female', 'male']);
-const _GenderLabel = PropTypes.oneOfType(['female', 'male']);
-const _Namemod = PropTypes.oneOfType(['empty', 'jr', 'iii']);
-const _RoleType = PropTypes.oneOfType(['senator']);
-const _RoleTypeLabel = PropTypes.oneOfType(['senator']);
-const _SenatorClass = PropTypes.oneOfType(['class1', 'class2', 'class3']);
-const _SenatorClassLabel = PropTypes.oneOfType(['class1', 'class2', 'class3']);
-const _SenatorRank = PropTypes.oneOfType(['junior', 'senior']);
-const _SenatorRankLabel = PropTypes.oneOfType(['junior', 'senior']);
-const _Title = PropTypes.oneOfType(['sen']);
+const _Party = PropTypes.oneOf(["Democrat", "Republican", "Independent"]);
+const _Gender = PropTypes.oneOf(["female", "male"]);
+const _GenderLabel = PropTypes.oneOf(["Female", "Male"]);
+const _Namemod = PropTypes.oneOf(["", "Jr.", "III"]);
+const _RoleType = PropTypes.oneOf(["senator"]);
+const _RoleTypeLabel = PropTypes.oneOf(["Senator"]);
+const _SenatorClass = PropTypes.oneOf(["class1", "class2", "class3"]);
+const _SenatorClassLabel = PropTypes.oneOf(["Class 1", "Class 2", "Class 3"]);
+const _SenatorRank = PropTypes.oneOf(["junior", "senior"]);
+const _SenatorRankLabel = PropTypes.oneOf(["Junior", "Senior"]);
+const _Title = PropTypes.oneOf(["Sen."]);
 _Person = PropTypes.shape({
-    "bioguideid": PropTypes.string,
-    "birthday": PropTypes.string,
-    "cspanid": PropTypes.number,
-    "firstname": PropTypes.string,
-    "gender": _Gender,
-    "gender_label": _GenderLabel,
-    "lastname": PropTypes.string,
-    "link": PropTypes.string,
-    "middlename": PropTypes.string,
-    "name": PropTypes.string,
-    "namemod": _Namemod,
-    "nickname": PropTypes.string,
-    "osid": PropTypes.string,
-    "pvsid": PropTypes.string,
-    "sortname": PropTypes.string,
+    "bioguideid": PropTypes.string.isRequired,
+    "birthday": PropTypes.string.isRequired,
+    "cspanid": PropTypes.number.isRequired,
+    "firstname": PropTypes.string.isRequired,
+    "gender": _Gender.isRequired,
+    "gender_label": _GenderLabel.isRequired,
+    "lastname": PropTypes.string.isRequired,
+    "link": PropTypes.string.isRequired,
+    "middlename": PropTypes.string.isRequired,
+    "name": PropTypes.string.isRequired,
+    "namemod": _Namemod.isRequired,
+    "nickname": PropTypes.string.isRequired,
+    "osid": PropTypes.string.isRequired,
+    "pvsid": PropTypes.string.isRequired,
+    "sortname": PropTypes.string.isRequired,
     "twitterid": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
     "youtubeid": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Extra = PropTypes.shape({
-    "address": PropTypes.string,
-    "contact_form": PropTypes.string,
+    "address": PropTypes.string.isRequired,
+    "contact_form": PropTypes.string.isRequired,
     "fax": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "office": PropTypes.string,
+    "office": PropTypes.string.isRequired,
     "rss_url": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
 });
 _Object = PropTypes.shape({
     "caucus": PropTypes.oneOfType([_Party, PropTypes.any]),
-    "congress_numbers": PropTypes.arrayOf(PropTypes.number),
-    "current": PropTypes.bool,
-    "description": PropTypes.string,
+    "congress_numbers": PropTypes.arrayOf(PropTypes.number).isRequired,
+    "current": PropTypes.bool.isRequired,
+    "description": PropTypes.string.isRequired,
     "district": PropTypes.any,
-    "enddate": PropTypes.string,
-    "extra": _Extra,
+    "enddate": PropTypes.string.isRequired,
+    "extra": (...args) => _Extra.isRequired(...args),
     "leadership_title": PropTypes.oneOfType([PropTypes.any, PropTypes.string]),
-    "party": _Party,
-    "person": _Person,
-    "phone": PropTypes.string,
-    "role_type": _RoleType,
-    "role_type_label": _RoleTypeLabel,
-    "senator_class": _SenatorClass,
-    "senator_class_label": _SenatorClassLabel,
-    "senator_rank": _SenatorRank,
-    "senator_rank_label": _SenatorRankLabel,
-    "startdate": PropTypes.string,
-    "state": PropTypes.string,
-    "title": _Title,
-    "title_long": _RoleTypeLabel,
-    "website": PropTypes.string,
+    "party": _Party.isRequired,
+    "person": (...args) => _Person.isRequired(...args),
+    "phone": PropTypes.string.isRequired,
+    "role_type": _RoleType.isRequired,
+    "role_type_label": _RoleTypeLabel.isRequired,
+    "senator_class": _SenatorClass.isRequired,
+    "senator_class_label": _SenatorClassLabel.isRequired,
+    "senator_rank": _SenatorRank.isRequired,
+    "senator_rank_label": _SenatorRankLabel.isRequired,
+    "startdate": PropTypes.string.isRequired,
+    "state": PropTypes.string.isRequired,
+    "title": _Title.isRequired,
+    "title_long": _RoleTypeLabel.isRequired,
+    "website": PropTypes.string.isRequired,
 });
 _Meta = PropTypes.shape({
-    "limit": PropTypes.number,
-    "offset": PropTypes.number,
-    "total_count": PropTypes.number,
+    "limit": PropTypes.number.isRequired,
+    "offset": PropTypes.number.isRequired,
+    "total_count": PropTypes.number.isRequired,
 });
 _TopLevel = PropTypes.shape({
-    "meta": _Meta,
-    "objects": PropTypes.arrayOf(_Object),
+    "meta": (...args) => _Meta.isRequired(...args),
+    "objects": PropTypes.arrayOf((...args) => _Object(...args)).isRequired,
 });
 
 export const TopLevel = _TopLevel;
diff --git a/head/schema-javascript-prop-types/test/inputs/schema/javascript-prop-types/javascript-prop-types-map.schema/default/toplevel.js b/head/schema-javascript-prop-types/test/inputs/schema/javascript-prop-types/javascript-prop-types-map.schema/default/toplevel.js
new file mode 100644
index 0000000..3eeecf2
--- /dev/null
+++ b/head/schema-javascript-prop-types/test/inputs/schema/javascript-prop-types/javascript-prop-types-map.schema/default/toplevel.js
@@ -0,0 +1,15 @@
+// Example usage:
+//
+// import { MyShape } from ./myShape.js;
+//
+// class MyComponent extends React.Component {
+//   //
+// }
+//
+// MyComponent.propTypes = {
+//   input: MyShape
+// };
+
+import PropTypes from "prop-types";
+
+export const TopLevel = PropTypes.objectOf(PropTypes.string);
diff --git a/head/schema-javascript-prop-types/test/inputs/schema/javascript-prop-types/javascript-prop-types-required.schema/default/toplevel.js b/head/schema-javascript-prop-types/test/inputs/schema/javascript-prop-types/javascript-prop-types-required.schema/default/toplevel.js
new file mode 100644
index 0000000..98c8813
--- /dev/null
+++ b/head/schema-javascript-prop-types/test/inputs/schema/javascript-prop-types/javascript-prop-types-required.schema/default/toplevel.js
@@ -0,0 +1,30 @@
+// Example usage:
+//
+// import { MyShape } from ./myShape.js;
+//
+// class MyComponent extends React.Component {
+//   //
+// }
+//
+// MyComponent.propTypes = {
+//   input: MyShape
+// };
+
+import PropTypes from "prop-types";
+
+let _TopLevel;
+let _Options;
+const _Kind = PropTypes.oneOf(["primary choice", "secondary"]);
+_Options = PropTypes.shape({
+    "label": PropTypes.string.isRequired,
+});
+_TopLevel = PropTypes.shape({
+    "anything": PropTypes.any.isRequired,
+    "disabled": PropTypes.bool.isRequired,
+    "kind": _Kind.isRequired,
+    "optional": PropTypes.oneOfType([PropTypes.number, PropTypes.any]),
+    "options": (...args) => _Options.isRequired(...args),
+    "tags": PropTypes.arrayOf(PropTypes.string).isRequired,
+});
+
+export const TopLevel = _TopLevel;
