graphile-build-pg 4.12.3 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -24,16 +24,16 @@ And please give some love to our featured sponsors 🤩:
|
|
|
24
24
|
|
|
25
25
|
<table><tr>
|
|
26
26
|
<td align="center"><a href="https://surge.io/"><img src="https://graphile.org/images/sponsors/surge.png" width="90" height="90" alt="Surge" /><br />Surge</a> *</td>
|
|
27
|
-
<td align="center"><a href="https://
|
|
28
|
-
<td align="center"><a href="
|
|
27
|
+
<td align="center"><a href="https://www.netflix.com/"><img src="https://graphile.org/images/sponsors/Netflix.png" width="90" height="90" alt="Netflix" /><br />Netflix</a> *</td>
|
|
28
|
+
<td align="center"><a href="https://qwick.com/"><img src="https://graphile.org/images/sponsors/qwick.png" width="90" height="90" alt="Qwick" /><br />Qwick</a> *</td>
|
|
29
29
|
<td align="center"><a href="https://www.the-guild.dev/"><img src="https://graphile.org/images/sponsors/theguild.png" width="90" height="90" alt="The Guild" /><br />The Guild</a> *</td>
|
|
30
30
|
</tr><tr>
|
|
31
|
-
<td align="center"><a href="
|
|
31
|
+
<td align="center"><a href="http://chads.website"><img src="https://graphile.org/images/sponsors/chadf.png" width="90" height="90" alt="Chad Furman" /><br />Chad Furman</a> *</td>
|
|
32
32
|
<td align="center"><a href="https://www.fanatics.com/"><img src="https://graphile.org/images/sponsors/fanatics.png" width="90" height="90" alt="Fanatics" /><br />Fanatics</a> *</td>
|
|
33
|
-
<td align="center"><a href="https://graphcdn.io/"><img src="https://graphile.org/images/sponsors/GraphCDN.png" width="90" height="90" alt="GraphCDN" /><br />GraphCDN</a> *</td>
|
|
34
33
|
<td align="center"><a href="https://dovetailapp.com/"><img src="https://graphile.org/images/sponsors/dovetail.png" width="90" height="90" alt="Dovetail" /><br />Dovetail</a> *</td>
|
|
35
|
-
</tr><tr>
|
|
36
34
|
<td align="center"><a href="https://www.enzuzo.com/"><img src="https://graphile.org/images/sponsors/enzuzo.png" width="90" height="90" alt="Enzuzo" /><br />Enzuzo</a> *</td>
|
|
35
|
+
</tr><tr>
|
|
36
|
+
<td align="center"><a href="https://stellate.co/"><img src="https://graphile.org/images/sponsors/Stellate.png" width="90" height="90" alt="Stellate" /><br />Stellate</a> *</td>
|
|
37
37
|
</tr></table>
|
|
38
38
|
|
|
39
39
|
<em>\* Sponsors the entire Graphile suite</em>
|
|
@@ -324,7 +324,7 @@ var PgTypesPlugin = function PgTypesPlugin(builder, {
|
|
|
324
324
|
const SimpleJSON = stringType(inflection.builtin("JSON"), build.wrapDescription("A JavaScript object encoded in the JSON format as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).", "type"));
|
|
325
325
|
const SimpleUUID = stringType(inflection.builtin("UUID"), build.wrapDescription("A universally unique identifier as defined by [RFC 4122](https://tools.ietf.org/html/rfc4122).", "type"), string => {
|
|
326
326
|
if (!/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i.test(string)) {
|
|
327
|
-
throw new Error("Invalid UUID, expected 32 hexadecimal characters, optionally with
|
|
327
|
+
throw new Error("Invalid UUID, expected 32 hexadecimal characters, optionally with hyphens");
|
|
328
328
|
}
|
|
329
329
|
|
|
330
330
|
return string;
|
|
@@ -398,7 +398,7 @@ var PgTypesPlugin = function PgTypesPlugin(builder, {
|
|
|
398
398
|
addType(RegDictionaryType, "graphile-build-pg built-in");
|
|
399
399
|
const oidLookup = {
|
|
400
400
|
20: stringType(inflection.builtin("BigInt"), build.wrapDescription("A signed eight-byte integer. The upper big integer values are greater than the max value for a JavaScript number. Therefore all big integers will be output as strings and not numbers.", "type")),
|
|
401
|
-
//
|
|
401
|
+
// bigint - even though this is int8, it's too big for JS int, so cast to string.
|
|
402
402
|
21: GraphQLInt,
|
|
403
403
|
// int2
|
|
404
404
|
23: GraphQLInt,
|
|
@@ -423,7 +423,7 @@ export default (function PgTypesPlugin(
|
|
|
423
423
|
)
|
|
424
424
|
) {
|
|
425
425
|
throw new Error(
|
|
426
|
-
"Invalid UUID, expected 32 hexadecimal characters, optionally with
|
|
426
|
+
"Invalid UUID, expected 32 hexadecimal characters, optionally with hyphens"
|
|
427
427
|
);
|
|
428
428
|
}
|
|
429
429
|
return string;
|
|
@@ -594,7 +594,7 @@ export default (function PgTypesPlugin(
|
|
|
594
594
|
"A signed eight-byte integer. The upper big integer values are greater than the max value for a JavaScript number. Therefore all big integers will be output as strings and not numbers.",
|
|
595
595
|
"type"
|
|
596
596
|
)
|
|
597
|
-
), //
|
|
597
|
+
), // bigint - even though this is int8, it's too big for JS int, so cast to string.
|
|
598
598
|
21: GraphQLInt, // int2
|
|
599
599
|
23: GraphQLInt, // int4
|
|
600
600
|
700: GraphQLFloat, // float4
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/PgTypesPlugin.js"],"names":["indent","str","replace","identity","value","PgTypesPlugin","builder","pgExtendedTypes","pgSkipHstore","pgGeometricTypes","pgUseCustomNetworkScalars","disableIssue390Fix","hook","build","pgIntrospectionResultsByKind","introspectionResultsByKind","getTypeByName","pgSql","sql","inflection","graphql","newWithHooks","args","addType","GraphQLNonNull","GraphQLString","GraphQLInt","GraphQLFloat","GraphQLBoolean","GraphQLList","GraphQLEnumType","GraphQLObjectType","GraphQLInputObjectType","GraphQLScalarType","isInputType","getNamedType","Kind","gqlTypeByTypeIdGenerator","gqlInputTypeByTypeIdGenerator","pgGqlTypeByTypeId","pgGqlInputTypeByTypeId","Error","gqlTypeByTypeIdAndModifier","pgGqlTypeByTypeIdAndModifier","gqlInputTypeByTypeIdAndModifier","pgGqlInputTypeByTypeIdAndModifier","isNull","val","__isNull","pg2GqlMapper","pg2gqlForType","type","id","map","domainBaseType","isPgArray","elementHandler","arrayItemType","Array","isArray","namespaceName","name","pg2gql","gql2pg","modifier","undefined","stack","e","console","warn","null","unmap","domainTypeModifier","fragment","join","v","isFake","identifier","makeIntervalFields","seconds","description","wrapDescription","minutes","hours","days","months","years","GQLInterval","builtin","fields","isIntervalType","GQLIntervalInput","inputType","isIntervalInputType","stringType","coerce","serialize","String","parseValue","parseLiteral","ast","kind","STRING","BigFloat","BitString","rawTypes","tweakToJson","tweakToJsonArray","tweakToText","tweakToTextArray","tweakToNumericText","tweakToNumericTextArray","pgTweaksByTypeIdAndModifer","pgTweaksByTypeId","reduce","memo","typeId","pgTweakFragmentForTypeAndModifier","typeModifier","resolveData","typeModifierKey","tweaker","domainBaseTypeModifierKey","domainBaseTypeModifier","arrayItemTweaker","sqlVal","innerFragment","error","process","env","NODE_ENV","SimpleDate","SimpleDatetime","SimpleTime","SimpleJSON","SimpleUUID","string","test","InetType","RegProcType","RegProcedureType","RegOperType","RegOperatorType","RegClassType","RegTypeType","RegRoleType","RegNamespaceType","RegConfigType","RegDictionaryType","CidrType","MacAddrType","MacAddr8Type","JSONType","UUIDType","DateType","DateTimeType","TimeType","Point","x","y","isPointType","PointInput","isPointInputType","oidLookup","oidInputLookup","jsonStringify","o","JSON","stringify","keys","parts","key","push","_","f","length","slice","split","parseFloat","depth","enforceGqlTypeByPgTypeId","find","t","reallyEnforceGqlTypeByPgTypeAndModifier","message","originalError","gqlType","gqlInputType","enumType","values","enumVariants","i","enumName","enumDescriptions","pgIntrospection","isPgEnumType","subtype","typeById","rangeSubTypeId","gqlRangeSubType","getGqlTypeByTypeIdAndModifier","gqlRangeInputSubType","getGqlInputTypeByTypeIdAndModifier","Range","rangeType","RangeInput","RangeBound","rangeBoundType","inclusive","isPgRangeBoundType","pgSubtypeIntrospection","pgTypeModifier","RangeBoundInput","isPgRangeBoundInputType","start","end","isPgRangeType","isPgRangeInputType","lower","upper","lowerInclusive","upperInclusive","literal","domainBaseTypeId","baseType","baseInputType","Object","assign","create","domainType","category","arrayEntryOutputType","arrayItemTypeId","arrayEntryInputType","useFallback","gen","set","Type","result","fallback","registerGqlTypeByTypeId","yieldToExisting","registerGqlInputTypeByTypeId","getGqlTypeByTypeId","getGqlInputTypeByTypeId","pgTweakFragmentForType","extend","pgRegisterGqlTypeByTypeId","pgRegisterGqlInputTypeByTypeId","pgGetGqlTypeByTypeIdAndModifier","pgGetGqlInputTypeByTypeIdAndModifier","pgGetGqlTypeByTypeId","pgGetGqlInputTypeByTypeId","hstoreType","hstoreExtension","extension","namespaceId","hstoreTypeName","GraphQLHStoreType","makeGraphQLHstoreType","hstoreStringify","LINE","LSEG","BOX","PATH","POLYGON","CIRCLE","a","b","A","B","C","x1","y1","x2","y2","points","isOpen","xsAndYs","l","openParen","closeParen","p","center","radius","r","isValidHstoreObject","obj","identityWithCheck","TypeError","parseValueLiteral","variables","INT","FLOAT","NULL","VARIABLE","OBJECT","field","GraphQLHStore","toHstoreString","encodeKeyValue"],"mappings":"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","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nimport makeGraphQLJSONType from \"../GraphQLJSON\";\n\nimport { parseInterval } from \"../postgresInterval\";\n\nfunction indent(str) {\n return \" \" + str.replace(/\\n/g, \"\\n \");\n}\n\nfunction identity(value) {\n return value;\n}\n\nexport default (function PgTypesPlugin(\n builder,\n {\n pgExtendedTypes = true,\n // Adding hstore support is technically a breaking change; this allows people to opt out easily:\n pgSkipHstore = false,\n pgGeometricTypes = false,\n pgUseCustomNetworkScalars = false,\n disableIssue390Fix = false,\n }\n) {\n // XXX: most of this should be in an \"init\" hook, not a \"build\" hook\n builder.hook(\n \"build\",\n build => {\n const {\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n getTypeByName,\n pgSql: sql,\n inflection,\n graphql,\n } = build;\n\n /*\n * Note these do not do `foo.bind(build)` because they want to reference\n * the *latest* value of foo (i.e. after all the build hooks run) rather\n * than the current value of foo in this current hook.\n *\n * Also don't use this in your own code, only construct types *after* the\n * build hook has completed (i.e. 'init' or later).\n *\n * TODO:v5: move this to the 'init' hook.\n */\n const newWithHooks = (...args) => build.newWithHooks(...args);\n const addType = (...args) => build.addType(...args);\n\n const {\n GraphQLNonNull,\n GraphQLString,\n GraphQLInt,\n GraphQLFloat,\n GraphQLBoolean,\n GraphQLList,\n GraphQLEnumType,\n GraphQLObjectType,\n GraphQLInputObjectType,\n GraphQLScalarType,\n isInputType,\n getNamedType,\n Kind,\n } = graphql;\n\n const gqlTypeByTypeIdGenerator = {};\n const gqlInputTypeByTypeIdGenerator = {};\n if (build.pgGqlTypeByTypeId || build.pgGqlInputTypeByTypeId) {\n // I don't expect anyone to receive this error, because I don't think anyone uses this interface.\n throw new Error(\n \"Sorry! This interface is no longer supported because it is not granular enough. It's not hard to port it to the new system - please contact Benjie and he'll walk you through it.\"\n );\n }\n const gqlTypeByTypeIdAndModifier = {\n ...build.pgGqlTypeByTypeIdAndModifier,\n };\n const gqlInputTypeByTypeIdAndModifier = {\n ...build.pgGqlInputTypeByTypeIdAndModifier,\n };\n const isNull = val => val == null || val.__isNull;\n const pg2GqlMapper = {};\n const pg2gqlForType = type => {\n if (pg2GqlMapper[type.id]) {\n const map = pg2GqlMapper[type.id].map;\n return val => (isNull(val) ? null : map(val));\n } else if (type.domainBaseType) {\n return pg2gqlForType(type.domainBaseType);\n } else if (type.isPgArray) {\n const elementHandler = pg2gqlForType(type.arrayItemType);\n return val => {\n if (isNull(val)) return null;\n if (!Array.isArray(val)) {\n throw new Error(\n `Expected array when converting PostgreSQL data into GraphQL; failing type: '${type.namespaceName}.${type.name}'`\n );\n }\n return val.map(elementHandler);\n };\n } else {\n return identity;\n }\n };\n const pg2gql = (val, type) => pg2gqlForType(type)(val);\n const gql2pg = (val, type, modifier) => {\n if (modifier === undefined) {\n let stack;\n try {\n throw new Error();\n } catch (e) {\n stack = e.stack;\n }\n // eslint-disable-next-line no-console\n console.warn(\n \"gql2pg should be called with three arguments, the third being the type modifier (or `null`); \" +\n (stack || \"\")\n );\n // Hack for backwards compatibility:\n modifier = null;\n }\n if (val == null) {\n return sql.null;\n }\n if (pg2GqlMapper[type.id]) {\n return pg2GqlMapper[type.id].unmap(val, modifier);\n } else if (type.domainBaseType) {\n return gql2pg(val, type.domainBaseType, type.domainTypeModifier);\n } else if (type.isPgArray) {\n if (!Array.isArray(val)) {\n throw new Error(\n `Expected array when converting GraphQL data into PostgreSQL data; failing type: '${\n type.namespaceName\n }.${type.name}' (type: ${type === null ? \"null\" : typeof type})`\n );\n }\n return sql.fragment`array[${sql.join(\n val.map(v => gql2pg(v, type.arrayItemType, modifier)),\n \", \"\n )}]::${\n type.isFake\n ? sql.identifier(\"unknown\")\n : sql.identifier(type.namespaceName, type.name)\n }`;\n } else {\n return sql.value(val);\n }\n };\n\n const makeIntervalFields = () => {\n return {\n seconds: {\n description: build.wrapDescription(\n \"A quantity of seconds. This is the only non-integer field, as all the other fields will dump their overflow into a smaller unit of time. Intervals don’t have a smaller unit than seconds.\",\n \"field\"\n ),\n type: GraphQLFloat,\n },\n minutes: {\n description: build.wrapDescription(\n \"A quantity of minutes.\",\n \"field\"\n ),\n type: GraphQLInt,\n },\n hours: {\n description: build.wrapDescription(\"A quantity of hours.\", \"field\"),\n type: GraphQLInt,\n },\n days: {\n description: build.wrapDescription(\"A quantity of days.\", \"field\"),\n type: GraphQLInt,\n },\n months: {\n description: build.wrapDescription(\n \"A quantity of months.\",\n \"field\"\n ),\n type: GraphQLInt,\n },\n years: {\n description: build.wrapDescription(\"A quantity of years.\", \"field\"),\n type: GraphQLInt,\n },\n };\n };\n const GQLInterval = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.builtin(\"Interval\"),\n description: build.wrapDescription(\n \"An interval of time that has passed where the smallest distinct unit is a second.\",\n \"type\"\n ),\n fields: makeIntervalFields(),\n },\n {\n isIntervalType: true,\n }\n );\n addType(GQLInterval, \"graphile-build-pg built-in\");\n\n const GQLIntervalInput = newWithHooks(\n GraphQLInputObjectType,\n {\n name: inflection.inputType(inflection.builtin(\"Interval\")),\n description: build.wrapDescription(\n \"An interval of time that has passed where the smallest distinct unit is a second.\",\n \"type\"\n ),\n fields: makeIntervalFields(),\n },\n {\n isIntervalInputType: true,\n }\n );\n addType(GQLIntervalInput, \"graphile-build-pg built-in\");\n\n const stringType = (name, description, coerce) =>\n new GraphQLScalarType({\n name,\n description,\n serialize: value => String(value),\n parseValue: coerce\n ? value => coerce(String(value))\n : value => String(value),\n parseLiteral: ast => {\n if (ast.kind !== Kind.STRING) {\n throw new Error(\"Can only parse string values\");\n }\n if (coerce) {\n return coerce(ast.value);\n } else {\n return ast.value;\n }\n },\n });\n\n const BigFloat = stringType(\n inflection.builtin(\"BigFloat\"),\n build.wrapDescription(\n \"A floating point number that requires more precision than IEEE 754 binary 64\",\n \"type\"\n )\n );\n const BitString = stringType(\n inflection.builtin(\"BitString\"),\n build.wrapDescription(\n \"A string representing a series of binary bits\",\n \"type\"\n )\n );\n addType(BigFloat, \"graphile-build-pg built-in\");\n addType(BitString, \"graphile-build-pg built-in\");\n\n const rawTypes = [\n 1186, // interval\n 1082, // date\n 1114, // timestamp\n 1184, // timestamptz\n 1083, // time\n 1266, // timetz\n ];\n\n const tweakToJson = fragment => fragment; // Since everything is to_json'd now, just pass through\n const tweakToJsonArray = fragment => fragment;\n const tweakToText = fragment => sql.fragment`(${fragment})::text`;\n const tweakToTextArray = fragment => sql.fragment`(${fragment})::text[]`;\n const tweakToNumericText = fragment =>\n sql.fragment`(${fragment})::numeric::text`;\n const tweakToNumericTextArray = fragment =>\n sql.fragment`(${fragment})::numeric[]::text[]`;\n const pgTweaksByTypeIdAndModifer = {};\n const pgTweaksByTypeId = {\n // '::text' rawTypes\n ...rawTypes.reduce((memo, typeId) => {\n memo[typeId] = tweakToText;\n return memo;\n }, {}),\n\n // cast numbers above our ken to strings to avoid loss of precision\n 20: tweakToText,\n 1700: tweakToText,\n // to_json all dates to make them ISO (overrides rawTypes above)\n 1082: tweakToJson,\n 1114: tweakToJson,\n 1184: tweakToJson,\n 1083: tweakToJson,\n 1266: tweakToJson,\n 790: tweakToNumericText,\n };\n\n const pgTweakFragmentForTypeAndModifier = (\n fragment,\n type,\n typeModifier = null,\n resolveData\n ) => {\n const typeModifierKey = typeModifier != null ? typeModifier : -1;\n const tweaker =\n (pgTweaksByTypeIdAndModifer[type.id] &&\n pgTweaksByTypeIdAndModifer[type.id][typeModifierKey]) ||\n pgTweaksByTypeId[type.id];\n if (tweaker) {\n return tweaker(fragment, resolveData);\n } else if (type.domainBaseType) {\n if (type.domainBaseType.isPgArray) {\n // If we have a domain that's for example an `int8[]`, we must\n // process it into a `text[]` otherwise we risk loss of accuracy\n // when taking PostgreSQL's JSON into Node.js.\n const arrayItemType = type.domainBaseType.arrayItemType;\n\n const domainBaseTypeModifierKey =\n type.domainBaseTypeModifier != null\n ? type.domainBaseTypeModifier\n : -1;\n const arrayItemTweaker =\n (pgTweaksByTypeIdAndModifer[arrayItemType.id] &&\n pgTweaksByTypeIdAndModifer[arrayItemType.id][\n domainBaseTypeModifierKey\n ]) ||\n pgTweaksByTypeId[arrayItemType.id];\n\n // If it's a domain over a known type array (e.g. `bigint[]`), use\n // the Array version of the tweaker.\n switch (arrayItemTweaker) {\n case tweakToText:\n return tweakToTextArray(fragment);\n case tweakToNumericText:\n return tweakToNumericTextArray(fragment);\n case tweakToJson:\n return tweakToJsonArray(fragment);\n }\n\n // If we get here, it's not a simple type, so use our\n // infrastructure to figure out what tweaks to apply to the array\n // item.\n\n const sqlVal = sql.fragment`val`;\n const innerFragment = pgTweakFragmentForTypeAndModifier(\n sqlVal,\n arrayItemType,\n type.domainBaseTypeModifier,\n resolveData\n );\n\n if (innerFragment === sqlVal) {\n // There was no tweak applied to the fragment, no change\n // necessary.\n return fragment;\n } else {\n // Tweaking was necessary, process each item in the array in this\n // way, and then return the resulting array, being careful that\n // nulls are preserved.\n return sql.fragment`(case when ${fragment} is null then null else array(select ${innerFragment} from unnest(${fragment}) as unnest(${sqlVal})) end)`;\n }\n } else {\n // TODO: check that domains don't support atttypemod\n return pgTweakFragmentForTypeAndModifier(\n fragment,\n type.domainBaseType,\n type.domainBaseTypeModifier,\n resolveData\n );\n }\n } else if (type.isPgArray) {\n const error = new Error(\n `Internal graphile-build-pg error: should not attempt to tweak an array, please process array before tweaking (type: \"${type.namespaceName}.${type.name}\")`\n );\n if (process.env.NODE_ENV === \"test\") {\n // This is to ensure that Graphile core does not introduce these problems\n throw error;\n }\n // eslint-disable-next-line no-console\n console.error(error);\n return fragment;\n } else {\n return fragment;\n }\n };\n /*\n Determined by running:\n\n select oid, typname, typarray, typcategory, typtype from pg_catalog.pg_type where typtype = 'b' order by oid;\n\n We only need to add oidLookups for types that don't have the correct fallback\n */\n const SimpleDate = stringType(\n inflection.builtin(\"Date\"),\n build.wrapDescription(\"The day, does not include a time.\", \"type\")\n );\n const SimpleDatetime = stringType(\n inflection.builtin(\"Datetime\"),\n build.wrapDescription(\n \"A point in time as described by the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) standard. May or may not include a timezone.\",\n \"type\"\n )\n );\n const SimpleTime = stringType(\n inflection.builtin(\"Time\"),\n build.wrapDescription(\n \"The exact time of day, does not include the date. May or may not have a timezone offset.\",\n \"type\"\n )\n );\n const SimpleJSON = stringType(\n inflection.builtin(\"JSON\"),\n build.wrapDescription(\n \"A JavaScript object encoded in the JSON format as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).\",\n \"type\"\n )\n );\n const SimpleUUID = stringType(\n inflection.builtin(\"UUID\"),\n build.wrapDescription(\n \"A universally unique identifier as defined by [RFC 4122](https://tools.ietf.org/html/rfc4122).\",\n \"type\"\n ),\n string => {\n if (\n !/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i.test(\n string\n )\n ) {\n throw new Error(\n \"Invalid UUID, expected 32 hexadecimal characters, optionally with hypens\"\n );\n }\n return string;\n }\n );\n const InetType = stringType(\n inflection.builtin(\"InternetAddress\"),\n build.wrapDescription(\n \"An IPv4 or IPv6 host address, and optionally its subnet.\",\n \"type\"\n )\n );\n const RegProcType = stringType(\n inflection.builtin(\"RegProc\"),\n build.wrapDescription(\n \"A builtin object identifier type for a function name\",\n \"type\"\n )\n );\n const RegProcedureType = stringType(\n inflection.builtin(\"RegProcedure\"),\n build.wrapDescription(\n \"A builtin object identifier type for a function with argument types\",\n \"type\"\n )\n );\n const RegOperType = stringType(\n inflection.builtin(\"RegOper\"),\n build.wrapDescription(\n \"A builtin object identifier type for an operator\",\n \"type\"\n )\n );\n const RegOperatorType = stringType(\n inflection.builtin(\"RegOperator\"),\n build.wrapDescription(\n \"A builtin object identifier type for an operator with argument types\",\n \"type\"\n )\n );\n const RegClassType = stringType(\n inflection.builtin(\"RegClass\"),\n build.wrapDescription(\n \"A builtin object identifier type for a relation name\",\n \"type\"\n )\n );\n const RegTypeType = stringType(\n inflection.builtin(\"RegType\"),\n build.wrapDescription(\n \"A builtin object identifier type for a data type name\",\n \"type\"\n )\n );\n const RegRoleType = stringType(\n inflection.builtin(\"RegRole\"),\n build.wrapDescription(\n \"A builtin object identifier type for a role name\",\n \"type\"\n )\n );\n const RegNamespaceType = stringType(\n inflection.builtin(\"RegNamespace\"),\n build.wrapDescription(\n \"A builtin object identifier type for a namespace name\",\n \"type\"\n )\n );\n const RegConfigType = stringType(\n inflection.builtin(\"RegConfig\"),\n build.wrapDescription(\n \"A builtin object identifier type for a text search configuration\",\n \"type\"\n )\n );\n const RegDictionaryType = stringType(\n inflection.builtin(\"RegDictionary\"),\n build.wrapDescription(\n \"A builtin object identifier type for a text search dictionary\",\n \"type\"\n )\n );\n const CidrType = pgUseCustomNetworkScalars\n ? stringType(\n inflection.builtin(\"CidrAddress\"),\n build.wrapDescription(\"An IPv4 or IPv6 CIDR address.\", \"type\")\n )\n : GraphQLString;\n const MacAddrType = pgUseCustomNetworkScalars\n ? stringType(\n inflection.builtin(\"MacAddress\"),\n build.wrapDescription(\"A 6-byte MAC address.\", \"type\")\n )\n : GraphQLString;\n const MacAddr8Type = pgUseCustomNetworkScalars\n ? stringType(\n inflection.builtin(\"MacAddress8\"),\n build.wrapDescription(\"An 8-byte MAC address.\", \"type\")\n )\n : GraphQLString;\n\n // pgExtendedTypes might change what types we use for things\n const JSONType = pgExtendedTypes\n ? makeGraphQLJSONType(graphql, inflection.builtin(\"JSON\"))\n : SimpleJSON;\n const UUIDType = SimpleUUID; // GraphQLUUID\n const DateType = SimpleDate; // GraphQLDate\n const DateTimeType = SimpleDatetime; // GraphQLDateTime\n const TimeType = SimpleTime; // GraphQLTime\n\n // 'point' in PostgreSQL is a 16-byte type that's comprised of two 8-byte floats.\n const Point = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.builtin(\"Point\"),\n fields: {\n x: {\n type: new GraphQLNonNull(GraphQLFloat),\n },\n y: {\n type: new GraphQLNonNull(GraphQLFloat),\n },\n },\n },\n {\n isPointType: true,\n }\n );\n const PointInput = newWithHooks(\n GraphQLInputObjectType,\n {\n name: inflection.inputType(inflection.builtin(\"Point\")),\n fields: {\n x: {\n type: new GraphQLNonNull(GraphQLFloat),\n },\n y: {\n type: new GraphQLNonNull(GraphQLFloat),\n },\n },\n },\n {\n isPointInputType: true,\n }\n );\n\n // Other plugins might want to use JSON\n addType(JSONType, \"graphile-build-pg built-in\");\n addType(UUIDType, \"graphile-build-pg built-in\");\n addType(DateType, \"graphile-build-pg built-in\");\n addType(DateTimeType, \"graphile-build-pg built-in\");\n addType(TimeType, \"graphile-build-pg built-in\");\n addType(RegProcType, \"graphile-build-pg built-in\");\n addType(RegProcedureType, \"graphile-build-pg built-in\");\n addType(RegOperType, \"graphile-build-pg built-in\");\n addType(RegOperatorType, \"graphile-build-pg built-in\");\n addType(RegClassType, \"graphile-build-pg built-in\");\n addType(RegTypeType, \"graphile-build-pg built-in\");\n addType(RegRoleType, \"graphile-build-pg built-in\");\n addType(RegNamespaceType, \"graphile-build-pg built-in\");\n addType(RegConfigType, \"graphile-build-pg built-in\");\n addType(RegDictionaryType, \"graphile-build-pg built-in\");\n\n const oidLookup = {\n 20: stringType(\n inflection.builtin(\"BigInt\"),\n build.wrapDescription(\n \"A signed eight-byte integer. The upper big integer values are greater than the max value for a JavaScript number. Therefore all big integers will be output as strings and not numbers.\",\n \"type\"\n )\n ), // bitint - even though this is int8, it's too big for JS int, so cast to string.\n 21: GraphQLInt, // int2\n 23: GraphQLInt, // int4\n 700: GraphQLFloat, // float4\n 701: GraphQLFloat, // float8\n 1700: BigFloat, // numeric\n 790: GraphQLFloat, // money\n\n 1186: GQLInterval, // interval\n 1082: DateType, // date\n 1114: DateTimeType, // timestamp\n 1184: DateTimeType, // timestamptz\n 1083: TimeType, // time\n 1266: TimeType, // timetz\n\n 114: JSONType, // json\n 3802: JSONType, // jsonb\n 2950: UUIDType, // uuid\n\n 1560: BitString, // bit\n 1562: BitString, // varbit\n\n 18: GraphQLString, // char\n 25: GraphQLString, // text\n 1043: GraphQLString, // varchar\n\n 600: Point, // point\n\n 869: InetType,\n 650: CidrType,\n 829: MacAddrType,\n 774: MacAddr8Type,\n 24: RegProcType,\n 2202: RegProcedureType,\n 2203: RegOperType,\n 2204: RegOperatorType,\n 2205: RegClassType,\n 2206: RegTypeType,\n 4096: RegRoleType,\n 4089: RegNamespaceType,\n 3734: RegConfigType,\n 3769: RegDictionaryType,\n };\n const oidInputLookup = {\n 1186: GQLIntervalInput, // interval\n 600: PointInput, // point\n };\n const jsonStringify = o => JSON.stringify(o);\n if (pgExtendedTypes) {\n pg2GqlMapper[114] = {\n map: identity,\n unmap: o => sql.value(jsonStringify(o)),\n };\n } else {\n pg2GqlMapper[114] = {\n map: jsonStringify,\n unmap: str => sql.value(str),\n };\n }\n pg2GqlMapper[3802] = pg2GqlMapper[114]; // jsonb\n\n // interval\n pg2GqlMapper[1186] = {\n map: str => parseInterval(str),\n unmap: o => {\n const keys = [\n \"seconds\",\n \"minutes\",\n \"hours\",\n \"days\",\n \"months\",\n \"years\",\n ];\n const parts = [];\n for (const key of keys) {\n if (o[key]) {\n parts.push(`${o[key]} ${key}`);\n }\n }\n return sql.value(parts.join(\" \") || \"0 seconds\");\n },\n };\n\n pg2GqlMapper[790] = {\n map: _ => _,\n unmap: val => sql.fragment`(${sql.value(val)})::money`,\n };\n\n // point\n pg2GqlMapper[600] = {\n map: f => {\n if (f[0] === \"(\" && f[f.length - 1] === \")\") {\n const [x, y] = f\n .slice(1, -1)\n .split(\",\")\n .map(f => parseFloat(f));\n return { x, y };\n }\n },\n unmap: o => sql.fragment`point(${sql.value(o.x)}, ${sql.value(o.y)})`,\n };\n\n // TODO: add more support for geometric types\n\n let depth = 0;\n\n /*\n * Enforce: this is the fallback when we can't find a specific GraphQL type\n * for a specific PG type. Use the generators from\n * `pgRegisterGqlTypeByTypeId` first, this is a last resort.\n */\n const enforceGqlTypeByPgTypeId = (typeId, typeModifier) => {\n const type = introspectionResultsByKind.type.find(t => t.id === typeId);\n depth++;\n if (depth > 50) {\n throw new Error(\"Type enforcement went too deep - infinite loop?\");\n }\n try {\n return reallyEnforceGqlTypeByPgTypeAndModifier(type, typeModifier);\n } catch (e) {\n const error = new Error(\n `Error occurred when processing database type '${\n type.namespaceName\n }.${type.name}' (type=${type.type}):\\n${indent(e.message)}`\n );\n // $FlowFixMe\n error.originalError = e;\n throw error;\n } finally {\n depth--;\n }\n };\n const reallyEnforceGqlTypeByPgTypeAndModifier = (type, typeModifier) => {\n if (!type.id) {\n throw new Error(\n `Invalid argument to enforceGqlTypeByPgTypeId - expected a full type, received '${type}'`\n );\n }\n if (!gqlTypeByTypeIdAndModifier[type.id]) {\n gqlTypeByTypeIdAndModifier[type.id] = {};\n }\n if (!gqlInputTypeByTypeIdAndModifier[type.id]) {\n gqlInputTypeByTypeIdAndModifier[type.id] = {};\n }\n const typeModifierKey = typeModifier != null ? typeModifier : -1;\n // Explicit overrides\n if (!gqlTypeByTypeIdAndModifier[type.id][typeModifierKey]) {\n const gqlType = oidLookup[type.id];\n if (gqlType) {\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = gqlType;\n }\n }\n if (!gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey]) {\n const gqlInputType = oidInputLookup[type.id];\n if (gqlInputType) {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n gqlInputType;\n }\n }\n // Enums\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.type === \"e\"\n ) {\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = newWithHooks(\n GraphQLEnumType,\n {\n name: inflection.enumType(type),\n description: type.description,\n values: type.enumVariants.reduce((memo, value, i) => {\n memo[inflection.enumName(value)] = {\n description: type.enumDescriptions\n ? type.enumDescriptions[i]\n : null,\n value: value,\n };\n return memo;\n }, {}),\n },\n {\n pgIntrospection: type,\n isPgEnumType: true,\n }\n );\n }\n // Ranges\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.type === \"r\"\n ) {\n const subtype =\n introspectionResultsByKind.typeById[type.rangeSubTypeId];\n const gqlRangeSubType = getGqlTypeByTypeIdAndModifier(\n subtype.id,\n typeModifier\n );\n const gqlRangeInputSubType = getGqlInputTypeByTypeIdAndModifier(\n subtype.id,\n typeModifier\n );\n if (!gqlRangeSubType) {\n throw new Error(\"Range of unsupported\");\n }\n if (!gqlRangeInputSubType) {\n throw new Error(\"Range of unsupported input type\");\n }\n\n let Range = getTypeByName(inflection.rangeType(gqlRangeSubType.name));\n let RangeInput;\n if (!Range) {\n const RangeBound = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.rangeBoundType(gqlRangeSubType.name),\n description: build.wrapDescription(\n \"The value at one end of a range. A range can either include this value, or not.\",\n \"type\"\n ),\n fields: {\n value: {\n description: build.wrapDescription(\n \"The value at one end of our range.\",\n \"field\"\n ),\n type: new GraphQLNonNull(gqlRangeSubType),\n },\n inclusive: {\n description: build.wrapDescription(\n \"Whether or not the value of this bound is included in the range.\",\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLBoolean),\n },\n },\n },\n {\n isPgRangeBoundType: true,\n pgIntrospection: type,\n pgSubtypeIntrospection: subtype,\n pgTypeModifier: typeModifier,\n }\n );\n const RangeBoundInput = newWithHooks(\n GraphQLInputObjectType,\n {\n name: inflection.inputType(RangeBound.name),\n description: build.wrapDescription(\n \"The value at one end of a range. A range can either include this value, or not.\",\n \"type\"\n ),\n fields: {\n value: {\n description: build.wrapDescription(\n \"The value at one end of our range.\",\n \"field\"\n ),\n type: new GraphQLNonNull(gqlRangeInputSubType),\n },\n inclusive: {\n description: build.wrapDescription(\n \"Whether or not the value of this bound is included in the range.\",\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLBoolean),\n },\n },\n },\n {\n isPgRangeBoundInputType: true,\n pgIntrospection: type,\n pgSubtypeIntrospection: subtype,\n pgTypeModifier: typeModifier,\n }\n );\n Range = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.rangeType(gqlRangeSubType.name),\n description: build.wrapDescription(\n `A range of \\`${gqlRangeSubType.name}\\`.`,\n \"type\"\n ),\n fields: {\n start: {\n description: build.wrapDescription(\n \"The starting bound of our range.\",\n \"field\"\n ),\n type: RangeBound,\n },\n end: {\n description: build.wrapDescription(\n \"The ending bound of our range.\",\n \"field\"\n ),\n type: RangeBound,\n },\n },\n },\n {\n isPgRangeType: true,\n pgIntrospection: type,\n pgSubtypeIntrospection: subtype,\n pgTypeModifier: typeModifier,\n }\n );\n RangeInput = newWithHooks(\n GraphQLInputObjectType,\n {\n name: inflection.inputType(Range.name),\n description: build.wrapDescription(\n `A range of \\`${gqlRangeSubType.name}\\`.`,\n \"type\"\n ),\n fields: {\n start: {\n description: build.wrapDescription(\n \"The starting bound of our range.\",\n \"field\"\n ),\n type: RangeBoundInput,\n },\n end: {\n description: build.wrapDescription(\n \"The ending bound of our range.\",\n \"field\"\n ),\n type: RangeBoundInput,\n },\n },\n },\n {\n isPgRangeInputType: true,\n pgIntrospection: type,\n pgSubtypeIntrospection: subtype,\n pgTypeModifier: typeModifier,\n }\n );\n addType(Range, \"graphile-build-pg built-in\");\n addType(RangeInput, \"graphile-build-pg built-in\");\n } else {\n RangeInput = getTypeByName(inflection.inputType(Range.name));\n }\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = Range;\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n RangeInput;\n if (pgTweaksByTypeIdAndModifer[type.id] === undefined) {\n pgTweaksByTypeIdAndModifer[type.id] = {};\n }\n pgTweaksByTypeIdAndModifer[type.id][typeModifierKey] =\n fragment => sql.fragment`\\\ncase\nwhen (${fragment}) is null then null\nelse json_build_object(\n 'start',\n case when lower(${fragment}) is null then null\n else json_build_object('value', ${pgTweakFragmentForTypeAndModifier(\n sql.fragment`lower(${fragment})`,\n subtype,\n typeModifier,\n {}\n )}, 'inclusive', lower_inc(${fragment}))\n end,\n 'end',\n case when upper(${fragment}) is null then null\n else json_build_object('value', ${pgTweakFragmentForTypeAndModifier(\n sql.fragment`upper(${fragment})`,\n subtype,\n typeModifier,\n {}\n )}, 'inclusive', upper_inc(${fragment}))\n end\n)\nend`;\n pg2GqlMapper[type.id] = {\n map: identity,\n unmap: ({ start, end }) => {\n // Ref: https://www.postgresql.org/docs/9.6/static/rangetypes.html#RANGETYPES-CONSTRUCT\n const lower =\n (start && gql2pg(start.value, subtype, null)) || sql.null;\n const upper =\n (end && gql2pg(end.value, subtype, null)) || sql.null;\n const lowerInclusive = start && !start.inclusive ? \"(\" : \"[\";\n const upperInclusive = end && !end.inclusive ? \")\" : \"]\";\n return sql.fragment`${sql.identifier(\n type.namespaceName,\n type.name\n )}(${lower}, ${upper}, ${sql.literal(\n lowerInclusive + upperInclusive\n )})`;\n },\n };\n }\n\n // Domains\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.type === \"d\" &&\n type.domainBaseTypeId\n ) {\n const baseType = getGqlTypeByTypeIdAndModifier(\n type.domainBaseTypeId,\n typeModifier\n );\n const baseInputType = getGqlInputTypeByTypeIdAndModifier(\n type.domainBaseTypeId,\n typeModifier\n );\n // Hack stolen from: https://github.com/graphile/postgraphile/blob/ade728ed8f8e3ecdc5fdad7d770c67aa573578eb/src/graphql/schema/type/aliasGqlType.ts#L16\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = Object.assign(\n Object.create(baseType),\n {\n name: inflection.domainType(type),\n description: type.description,\n }\n );\n if (baseInputType && baseInputType !== baseType) {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n Object.assign(Object.create(baseInputType), {\n name: inflection.inputType(\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey]\n ),\n description: type.description,\n });\n }\n }\n\n // Arrays\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.category === \"A\"\n ) {\n const arrayEntryOutputType = getGqlTypeByTypeIdAndModifier(\n type.arrayItemTypeId,\n typeModifier\n );\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n new GraphQLList(arrayEntryOutputType);\n if (!disableIssue390Fix) {\n const arrayEntryInputType = getGqlInputTypeByTypeIdAndModifier(\n type.arrayItemTypeId,\n typeModifier\n );\n if (arrayEntryInputType) {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n new GraphQLList(arrayEntryInputType);\n }\n }\n }\n\n // Booleans\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.category === \"B\"\n ) {\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = GraphQLBoolean;\n }\n\n // Numbers may be too large for GraphQL/JS to handle, so stringify by\n // default.\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.category === \"N\"\n ) {\n pgTweaksByTypeId[type.id] = tweakToText;\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = BigFloat;\n }\n\n // Nothing else worked; pass through as string!\n if (!gqlTypeByTypeIdAndModifier[type.id][typeModifierKey]) {\n // XXX: consider using stringType(upperFirst(camelCase(`fallback_${type.name}`)), type.description)?\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = GraphQLString;\n }\n // Now for input types, fall back to output types if possible\n if (!gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey]) {\n if (\n isInputType(gqlTypeByTypeIdAndModifier[type.id][typeModifierKey])\n ) {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey];\n }\n }\n addType(\n getNamedType(gqlTypeByTypeIdAndModifier[type.id][typeModifierKey])\n );\n return gqlTypeByTypeIdAndModifier[type.id][typeModifierKey];\n };\n\n function getGqlTypeByTypeIdAndModifier(\n typeId,\n typeModifier = null,\n useFallback = true\n ) {\n const typeModifierKey = typeModifier != null ? typeModifier : -1;\n if (!gqlTypeByTypeIdAndModifier[typeId]) {\n gqlTypeByTypeIdAndModifier[typeId] = {};\n }\n if (!gqlInputTypeByTypeIdAndModifier[typeId]) {\n gqlInputTypeByTypeIdAndModifier[typeId] = {};\n }\n if (!gqlTypeByTypeIdAndModifier[typeId][typeModifierKey]) {\n const type = introspectionResultsByKind.type.find(\n t => t.id === typeId\n );\n if (!type) {\n throw new Error(\n `Type '${typeId}' not present in introspection results`\n );\n }\n const gen = gqlTypeByTypeIdGenerator[type.id];\n if (gen) {\n const set = Type => {\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = Type;\n };\n const result = gen(set, typeModifier);\n if (result) {\n if (\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] !== result\n ) {\n throw new Error(\n `Callback and return types differ when defining type for '${type.id}'`\n );\n }\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = result;\n }\n }\n }\n if (\n !gqlTypeByTypeIdAndModifier[typeId][typeModifierKey] &&\n typeModifierKey > -1\n ) {\n // Fall back to `null` modifier, but if that still doesn't work, we\n // still want to pass the modifier to enforceGqlTypeByPgTypeId.\n const fallback = getGqlTypeByTypeIdAndModifier(typeId, null, false);\n if (fallback) {\n return fallback;\n }\n }\n if (\n useFallback &&\n !gqlTypeByTypeIdAndModifier[typeId][typeModifierKey]\n ) {\n return enforceGqlTypeByPgTypeId(typeId, typeModifier);\n }\n return gqlTypeByTypeIdAndModifier[typeId][typeModifierKey];\n }\n\n function getGqlInputTypeByTypeIdAndModifier(typeId, typeModifier = null) {\n // First, load the OUTPUT type (it might register an input type)\n getGqlTypeByTypeIdAndModifier(typeId, typeModifier);\n\n const typeModifierKey = typeModifier != null ? typeModifier : -1;\n if (!gqlInputTypeByTypeIdAndModifier[typeId]) {\n gqlInputTypeByTypeIdAndModifier[typeId] = {};\n }\n if (!gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey]) {\n const type = introspectionResultsByKind.typeById[typeId];\n\n if (!type) {\n throw new Error(\n `Type '${typeId}' not present in introspection results`\n );\n }\n const gen = gqlInputTypeByTypeIdGenerator[type.id];\n if (gen) {\n const set = Type => {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] = Type;\n };\n const result = gen(set, typeModifier);\n if (result) {\n if (\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] !==\n result\n ) {\n throw new Error(\n `Callback and return types differ when defining type for '${type.id}'`\n );\n }\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n result;\n }\n }\n }\n // Use the same type as the output type if it's valid input\n if (\n !gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey] &&\n gqlTypeByTypeIdAndModifier[typeId] &&\n gqlTypeByTypeIdAndModifier[typeId][typeModifierKey] &&\n isInputType(gqlTypeByTypeIdAndModifier[typeId][typeModifierKey])\n ) {\n gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey] =\n gqlTypeByTypeIdAndModifier[typeId][typeModifierKey];\n }\n if (\n !gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey] &&\n typeModifierKey > -1\n ) {\n // Fall back to default\n return getGqlInputTypeByTypeIdAndModifier(typeId, null);\n }\n return gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey];\n }\n function registerGqlTypeByTypeId(typeId, gen, yieldToExisting = false) {\n if (gqlTypeByTypeIdGenerator[typeId]) {\n if (yieldToExisting) {\n return;\n }\n throw new Error(\n `There's already a type generator registered for '${typeId}'`\n );\n }\n gqlTypeByTypeIdGenerator[typeId] = gen;\n }\n function registerGqlInputTypeByTypeId(\n typeId,\n gen,\n yieldToExisting = false\n ) {\n if (gqlInputTypeByTypeIdGenerator[typeId]) {\n if (yieldToExisting) {\n return;\n }\n throw new Error(\n `There's already an input type generator registered for '${typeId}'`\n );\n }\n gqlInputTypeByTypeIdGenerator[typeId] = gen;\n }\n\n // DEPRECATIONS!\n function getGqlTypeByTypeId(typeId, typeModifier) {\n if (typeModifier === undefined) {\n // eslint-disable-next-line no-console\n console.warn(\n \"DEPRECATION WARNING: getGqlTypeByTypeId should not be used - for some columns we also require typeModifier to be specified. Please update your code ASAP to pass `attribute.typeModifier` through as the second parameter (or null if it's not available).\"\n );\n }\n return getGqlTypeByTypeIdAndModifier(typeId, typeModifier);\n }\n function getGqlInputTypeByTypeId(typeId, typeModifier) {\n if (typeModifier === undefined) {\n // eslint-disable-next-line no-console\n console.warn(\n \"DEPRECATION WARNING: getGqlInputTypeByTypeId should not be used - for some columns we also require typeModifier to be specified. Please update your code ASAP to pass `attribute.typeModifier` through as the second parameter (or null if it's not available).\"\n );\n }\n return getGqlInputTypeByTypeIdAndModifier(typeId, typeModifier);\n }\n function pgTweakFragmentForType(\n fragment,\n type,\n typeModifier,\n resolveData\n ) {\n if (typeModifier === undefined) {\n // eslint-disable-next-line no-console\n console.warn(\n \"DEPRECATION WARNING: pgTweakFragmentForType should not be used - for some columns we also require typeModifier to be specified. Please update your code ASAP to pass `attribute.typeModifier` through as the third parameter (or null if it's not available).\"\n );\n }\n return pgTweakFragmentForTypeAndModifier(\n fragment,\n type,\n typeModifier,\n resolveData\n );\n }\n // END OF DEPRECATIONS!\n\n return build.extend(build, {\n pgRegisterGqlTypeByTypeId: registerGqlTypeByTypeId,\n pgRegisterGqlInputTypeByTypeId: registerGqlInputTypeByTypeId,\n pgGetGqlTypeByTypeIdAndModifier: getGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier:\n getGqlInputTypeByTypeIdAndModifier,\n pg2GqlMapper,\n pg2gql,\n pg2gqlForType,\n gql2pg,\n pgTweakFragmentForTypeAndModifier,\n pgTweaksByTypeId,\n pgTweaksByTypeIdAndModifer,\n\n // DEPRECATED METHODS:\n pgGetGqlTypeByTypeId: getGqlTypeByTypeId, // DEPRECATED, replaced by getGqlTypeByTypeIdAndModifier\n pgGetGqlInputTypeByTypeId: getGqlInputTypeByTypeId, // DEPRECATED, replaced by getGqlInputTypeByTypeIdAndModifier\n pgTweakFragmentForType, // DEPRECATED, replaced by pgTweakFragmentForTypeAndModifier\n });\n },\n [\"PgTypes\"],\n [],\n [\"PgIntrospection\", \"StandardTypes\"]\n );\n\n /* Start of hstore type */\n builder.hook(\n \"inflection\",\n (inflection, build) => {\n // This hook allows you to append a plugin which renames the KeyValueHash\n // (hstore) type name.\n if (pgSkipHstore) return build;\n return build.extend(inflection, {\n hstoreType() {\n return \"KeyValueHash\";\n },\n });\n },\n [\"PgTypesHstore\"]\n );\n builder.hook(\n \"build\",\n build => {\n // This hook tells graphile-build-pg about the hstore database type so it\n // knows how to express it in input/output.\n if (pgSkipHstore) return build;\n const {\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgRegisterGqlTypeByTypeId,\n pgRegisterGqlInputTypeByTypeId,\n pg2GqlMapper,\n pgSql: sql,\n } = build;\n\n // Check we have the hstore extension\n const hstoreExtension = introspectionResultsByKind.extension.find(\n e => e.name === \"hstore\"\n );\n if (!hstoreExtension) {\n return build;\n }\n\n // Get the 'hstore' type itself:\n const hstoreType = introspectionResultsByKind.type.find(\n t =>\n t.name === \"hstore\" && t.namespaceId === hstoreExtension.namespaceId\n );\n if (!hstoreType) {\n return build;\n }\n\n const hstoreTypeName = build.inflection.hstoreType();\n\n // We're going to use our own special HStore type for this so that we get\n // better validation; but you could just as easily use JSON directly if you\n // wanted to.\n const GraphQLHStoreType = makeGraphQLHstoreType(build, hstoreTypeName);\n\n // Now register the hstore type with the type system for both output and input.\n pgRegisterGqlTypeByTypeId(hstoreType.id, () => GraphQLHStoreType);\n pgRegisterGqlInputTypeByTypeId(hstoreType.id, () => GraphQLHStoreType);\n\n // Finally we must tell the system how to translate the data between PG-land and JS-land:\n pg2GqlMapper[hstoreType.id] = {\n // node-postgres parses hstore for us, no action required on map\n map: identity,\n // When unmapping we need to convert back to hstore\n unmap: o =>\n sql.fragment`(${sql.value(hstoreStringify(o))}::${sql.identifier(\n hstoreType.namespaceName,\n hstoreType.name\n )})`,\n };\n\n return build;\n },\n [\"PgTypesHstore\"],\n [],\n [\"PgTypes\"]\n );\n /* End of hstore type */\n\n /* Geometric types */\n builder.hook(\n \"build\",\n build => {\n // This hook tells graphile-build-pg about the hstore database type so it\n // knows how to express it in input/output.\n if (!pgGeometricTypes) return build;\n const {\n pgRegisterGqlTypeByTypeId,\n pgRegisterGqlInputTypeByTypeId,\n pgGetGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier,\n pg2GqlMapper,\n pgSql: sql,\n graphql: {\n GraphQLObjectType,\n GraphQLInputObjectType,\n GraphQLList,\n GraphQLBoolean,\n GraphQLFloat,\n },\n inflection,\n } = build;\n\n // Check we have the hstore extension\n const LINE = 628;\n const LSEG = 601;\n const BOX = 603;\n const PATH = 602;\n const POLYGON = 604;\n const CIRCLE = 718;\n\n pgRegisterGqlTypeByTypeId(LINE, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n if (!Point) {\n throw new Error(\"Need point type\");\n }\n return new GraphQLObjectType({\n name: inflection.builtin(\"Line\"),\n description: build.wrapDescription(\n \"An infinite line that passes through points 'a' and 'b'.\",\n \"type\"\n ),\n fields: {\n a: { type: Point },\n b: { type: Point },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(LINE, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"LineInput\"),\n description: build.wrapDescription(\n \"An infinite line that passes through points 'a' and 'b'.\",\n \"type\"\n ),\n fields: {\n a: { type: PointInput },\n b: { type: PointInput },\n },\n });\n });\n pg2GqlMapper[LINE] = {\n map: f => {\n if (f[0] === \"{\" && f[f.length - 1] === \"}\") {\n const [A, B, C] = f\n .slice(1, -1)\n .split(\",\")\n .map(f => parseFloat(f));\n // Lines have the form Ax + By + C = 0.\n // So if y = 0, Ax + C = 0; x = -C/A.\n // If x = 0, By + C = 0; y = -C/B.\n return {\n a: { x: -C / A, y: 0 },\n b: { x: 0, y: -C / B },\n };\n }\n },\n unmap: o =>\n sql.fragment`line(point(${sql.value(o.a.x)}, ${sql.value(\n o.a.y\n )}), point(${sql.value(o.b.x)}, ${sql.value(o.b.y)}))`,\n };\n\n pgRegisterGqlTypeByTypeId(LSEG, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"LineSegment\"),\n description: build.wrapDescription(\n \"An finite line between points 'a' and 'b'.\",\n \"type\"\n ),\n fields: {\n a: { type: Point },\n b: { type: Point },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(LSEG, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"LineSegmentInput\"),\n description: build.wrapDescription(\n \"An finite line between points 'a' and 'b'.\",\n \"type\"\n ),\n fields: {\n a: { type: PointInput },\n b: { type: PointInput },\n },\n });\n });\n pg2GqlMapper[LSEG] = {\n map: f => {\n if (f[0] === \"[\" && f[f.length - 1] === \"]\") {\n const [x1, y1, x2, y2] = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n return {\n a: { x: x1, y: y1 },\n b: { x: x2, y: y2 },\n };\n }\n },\n unmap: o =>\n sql.fragment`lseg(point(${sql.value(o.a.x)}, ${sql.value(\n o.a.y\n )}), point(${sql.value(o.b.x)}, ${sql.value(o.b.y)}))`,\n };\n\n pgRegisterGqlTypeByTypeId(BOX, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"Box\"),\n description: build.wrapDescription(\n \"A rectangular box defined by two opposite corners 'a' and 'b'\",\n \"type\"\n ),\n fields: {\n a: { type: Point },\n b: { type: Point },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(BOX, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"BoxInput\"),\n description: build.wrapDescription(\n \"A rectangular box defined by two opposite corners 'a' and 'b'\",\n \"type\"\n ),\n fields: {\n a: { type: PointInput },\n b: { type: PointInput },\n },\n });\n });\n pg2GqlMapper[BOX] = {\n map: f => {\n if (f[0] === \"(\" && f[f.length - 1] === \")\") {\n const [x1, y1, x2, y2] = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n return {\n a: { x: x1, y: y1 },\n b: { x: x2, y: y2 },\n };\n }\n },\n unmap: o =>\n sql.fragment`box(point(${sql.value(o.a.x)}, ${sql.value(\n o.a.y\n )}), point(${sql.value(o.b.x)}, ${sql.value(o.b.y)}))`,\n };\n\n pgRegisterGqlTypeByTypeId(PATH, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"Path\"),\n description: build.wrapDescription(\n \"A path (open or closed) made up of points\",\n \"type\"\n ),\n fields: {\n points: {\n type: new GraphQLList(Point),\n },\n isOpen: {\n description: build.wrapDescription(\n \"True if this is a closed path (similar to a polygon), false otherwise.\",\n \"field\"\n ),\n type: GraphQLBoolean,\n },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(PATH, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"PathInput\"),\n description: build.wrapDescription(\n \"A path (open or closed) made up of points\",\n \"type\"\n ),\n fields: {\n points: {\n type: new GraphQLList(PointInput),\n },\n isOpen: {\n description: build.wrapDescription(\n \"True if this is a closed path (similar to a polygon), false otherwise.\",\n \"field\"\n ),\n type: GraphQLBoolean,\n },\n },\n });\n });\n pg2GqlMapper[PATH] = {\n map: f => {\n let isOpen = null;\n if (f[0] === \"(\" && f[f.length - 1] === \")\") {\n isOpen = false;\n } else if (f[0] === \"[\" && f[f.length - 1] === \"]\") {\n isOpen = true;\n }\n if (isOpen !== null) {\n const xsAndYs = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n if (xsAndYs.length % 2 !== 0) {\n throw new Error(\"Invalid path representation\");\n }\n const points = [];\n for (let i = 0, l = xsAndYs.length; i < l; i += 2) {\n points.push({ x: xsAndYs[i], y: xsAndYs[i + 1] });\n }\n return {\n isOpen,\n points,\n };\n }\n },\n unmap: o => {\n const openParen = o.isOpen ? \"[\" : \"(\";\n const closeParen = o.isOpen ? \"]\" : \")\";\n const val = `${openParen}${o.points\n .map(p => `(${p.x},${p.y})`)\n .join(\",\")}${closeParen}`;\n return sql.value(val);\n },\n };\n\n pgRegisterGqlTypeByTypeId(POLYGON, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"Polygon\"),\n fields: {\n points: {\n type: new GraphQLList(Point),\n },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(POLYGON, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"PolygonInput\"),\n fields: {\n points: {\n type: new GraphQLList(PointInput),\n },\n },\n });\n });\n pg2GqlMapper[POLYGON] = {\n map: f => {\n if (f[0] === \"(\" && f[f.length - 1] === \")\") {\n const xsAndYs = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n if (xsAndYs.length % 2 !== 0) {\n throw new Error(\"Invalid polygon representation\");\n }\n const points = [];\n for (let i = 0, l = xsAndYs.length; i < l; i += 2) {\n points.push({ x: xsAndYs[i], y: xsAndYs[i + 1] });\n }\n return {\n points,\n };\n }\n },\n unmap: o => {\n const val = `(${o.points.map(p => `(${p.x},${p.y})`).join(\",\")})`;\n return sql.value(val);\n },\n };\n\n pgRegisterGqlTypeByTypeId(CIRCLE, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"Circle\"),\n fields: {\n center: { type: Point },\n radius: { type: GraphQLFloat },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(CIRCLE, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"CircleInput\"),\n fields: {\n center: { type: PointInput },\n radius: { type: GraphQLFloat },\n },\n });\n });\n pg2GqlMapper[CIRCLE] = {\n map: f => {\n if (f[0] === \"<\" && f[f.length - 1] === \">\") {\n const [x, y, r] = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n return {\n center: { x, y },\n radius: r,\n };\n }\n },\n unmap: o =>\n sql.fragment`circle(point(${sql.value(o.center.x)}, ${sql.value(\n o.center.y\n )}), ${sql.value(o.radius)})`,\n };\n\n // TODO: add the non-nulls!\n\n return build;\n },\n [\"PgGeometryTypes\"],\n [],\n [\"PgTypes\"]\n );\n /* End of geometric types */\n}: Plugin);\n\nfunction makeGraphQLHstoreType(build, hstoreTypeName) {\n const { graphql } = build;\n const { GraphQLScalarType, Kind } = graphql;\n\n function isValidHstoreObject(obj) {\n if (obj === null) {\n // Null is okay\n return true;\n } else if (typeof obj === \"object\") {\n // A hash with string/null values is also okay\n const keys = Object.keys(obj);\n for (const key of keys) {\n const val = obj[key];\n if (val === null) {\n // Null is okay\n } else if (typeof val === \"string\") {\n // String is okay\n } else {\n // Everything else is invalid.\n return false;\n }\n }\n return true;\n } else {\n // Everything else is invalid.\n return false;\n }\n }\n\n function identityWithCheck(obj) {\n if (isValidHstoreObject(obj)) {\n return obj;\n }\n throw new TypeError(\n `This is not a valid ${hstoreTypeName} object, it must be a key/value hash where keys and values are both strings (or null).`\n );\n }\n\n function parseValueLiteral(ast, variables) {\n switch (ast.kind) {\n case Kind.INT:\n case Kind.FLOAT:\n // Number isn't really okay, but we'll coerce it to a string anyway.\n return String(parseFloat(ast.value));\n case Kind.STRING:\n // String is okay.\n return String(ast.value);\n case Kind.NULL:\n // Null is okay.\n return null;\n case Kind.VARIABLE: {\n // Variable is okay if that variable is either a string or null.\n const name = ast.name.value;\n const value = variables ? variables[name] : undefined;\n if (value === null || typeof value === \"string\") {\n return value;\n }\n return undefined;\n }\n default:\n // Everything else is invalid.\n return undefined;\n }\n }\n\n function parseLiteral(ast, variables) {\n switch (ast.kind) {\n case Kind.OBJECT: {\n const value = ast.fields.reduce((memo, field) => {\n memo[field.name.value] = parseValueLiteral(field.value, variables);\n return memo;\n }, Object.create(null));\n\n if (!isValidHstoreObject(value)) {\n return undefined;\n }\n return value;\n }\n\n case Kind.NULL:\n return null;\n\n case Kind.VARIABLE: {\n const name = ast.name.value;\n const value = variables ? variables[name] : undefined;\n\n if (!isValidHstoreObject(value)) {\n return undefined;\n }\n return value;\n }\n\n default:\n return undefined;\n }\n }\n\n // TODO: use newWithHooks instead\n const GraphQLHStore = new GraphQLScalarType({\n name: hstoreTypeName,\n description: build.wrapDescription(\n \"A set of key/value pairs, keys are strings, values may be a string or null. Exposed as a JSON object.\",\n \"type\"\n ),\n serialize: identity,\n parseValue: identityWithCheck,\n parseLiteral,\n });\n return GraphQLHStore;\n}\n\n// To include a double quote or a backslash in a key or value, escape it\n// with a backslash.\n// -- https://www.postgresql.org/docs/10/static/hstore.html\nfunction toHstoreString(str) {\n return '\"' + str.replace(/([\"\\\\])/g, \"\\\\$1\") + '\"';\n}\n\nfunction hstoreStringify(o) {\n if (o === null) {\n return null;\n }\n if (typeof o !== \"object\") {\n throw new TypeError(\"Expected an hstore object\");\n }\n const keys = Object.keys(o);\n const encodeKeyValue = key => {\n const value = o[key];\n if (value === null) {\n return `${toHstoreString(key)} => NULL`;\n } else {\n return `${toHstoreString(key)} => ${toHstoreString(String(value))}`;\n }\n };\n return keys.map(encodeKeyValue).join(\", \");\n}\n"],"file":"PgTypesPlugin.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/PgTypesPlugin.js"],"names":["indent","str","replace","identity","value","PgTypesPlugin","builder","pgExtendedTypes","pgSkipHstore","pgGeometricTypes","pgUseCustomNetworkScalars","disableIssue390Fix","hook","build","pgIntrospectionResultsByKind","introspectionResultsByKind","getTypeByName","pgSql","sql","inflection","graphql","newWithHooks","args","addType","GraphQLNonNull","GraphQLString","GraphQLInt","GraphQLFloat","GraphQLBoolean","GraphQLList","GraphQLEnumType","GraphQLObjectType","GraphQLInputObjectType","GraphQLScalarType","isInputType","getNamedType","Kind","gqlTypeByTypeIdGenerator","gqlInputTypeByTypeIdGenerator","pgGqlTypeByTypeId","pgGqlInputTypeByTypeId","Error","gqlTypeByTypeIdAndModifier","pgGqlTypeByTypeIdAndModifier","gqlInputTypeByTypeIdAndModifier","pgGqlInputTypeByTypeIdAndModifier","isNull","val","__isNull","pg2GqlMapper","pg2gqlForType","type","id","map","domainBaseType","isPgArray","elementHandler","arrayItemType","Array","isArray","namespaceName","name","pg2gql","gql2pg","modifier","undefined","stack","e","console","warn","null","unmap","domainTypeModifier","fragment","join","v","isFake","identifier","makeIntervalFields","seconds","description","wrapDescription","minutes","hours","days","months","years","GQLInterval","builtin","fields","isIntervalType","GQLIntervalInput","inputType","isIntervalInputType","stringType","coerce","serialize","String","parseValue","parseLiteral","ast","kind","STRING","BigFloat","BitString","rawTypes","tweakToJson","tweakToJsonArray","tweakToText","tweakToTextArray","tweakToNumericText","tweakToNumericTextArray","pgTweaksByTypeIdAndModifer","pgTweaksByTypeId","reduce","memo","typeId","pgTweakFragmentForTypeAndModifier","typeModifier","resolveData","typeModifierKey","tweaker","domainBaseTypeModifierKey","domainBaseTypeModifier","arrayItemTweaker","sqlVal","innerFragment","error","process","env","NODE_ENV","SimpleDate","SimpleDatetime","SimpleTime","SimpleJSON","SimpleUUID","string","test","InetType","RegProcType","RegProcedureType","RegOperType","RegOperatorType","RegClassType","RegTypeType","RegRoleType","RegNamespaceType","RegConfigType","RegDictionaryType","CidrType","MacAddrType","MacAddr8Type","JSONType","UUIDType","DateType","DateTimeType","TimeType","Point","x","y","isPointType","PointInput","isPointInputType","oidLookup","oidInputLookup","jsonStringify","o","JSON","stringify","keys","parts","key","push","_","f","length","slice","split","parseFloat","depth","enforceGqlTypeByPgTypeId","find","t","reallyEnforceGqlTypeByPgTypeAndModifier","message","originalError","gqlType","gqlInputType","enumType","values","enumVariants","i","enumName","enumDescriptions","pgIntrospection","isPgEnumType","subtype","typeById","rangeSubTypeId","gqlRangeSubType","getGqlTypeByTypeIdAndModifier","gqlRangeInputSubType","getGqlInputTypeByTypeIdAndModifier","Range","rangeType","RangeInput","RangeBound","rangeBoundType","inclusive","isPgRangeBoundType","pgSubtypeIntrospection","pgTypeModifier","RangeBoundInput","isPgRangeBoundInputType","start","end","isPgRangeType","isPgRangeInputType","lower","upper","lowerInclusive","upperInclusive","literal","domainBaseTypeId","baseType","baseInputType","Object","assign","create","domainType","category","arrayEntryOutputType","arrayItemTypeId","arrayEntryInputType","useFallback","gen","set","Type","result","fallback","registerGqlTypeByTypeId","yieldToExisting","registerGqlInputTypeByTypeId","getGqlTypeByTypeId","getGqlInputTypeByTypeId","pgTweakFragmentForType","extend","pgRegisterGqlTypeByTypeId","pgRegisterGqlInputTypeByTypeId","pgGetGqlTypeByTypeIdAndModifier","pgGetGqlInputTypeByTypeIdAndModifier","pgGetGqlTypeByTypeId","pgGetGqlInputTypeByTypeId","hstoreType","hstoreExtension","extension","namespaceId","hstoreTypeName","GraphQLHStoreType","makeGraphQLHstoreType","hstoreStringify","LINE","LSEG","BOX","PATH","POLYGON","CIRCLE","a","b","A","B","C","x1","y1","x2","y2","points","isOpen","xsAndYs","l","openParen","closeParen","p","center","radius","r","isValidHstoreObject","obj","identityWithCheck","TypeError","parseValueLiteral","variables","INT","FLOAT","NULL","VARIABLE","OBJECT","field","GraphQLHStore","toHstoreString","encodeKeyValue"],"mappings":";;;;;;;AAGA;;AAEA;;;;AAEA,SAASA,MAAT,CAAgBC,GAAhB,EAAqB;AACnB,SAAO,OAAOA,GAAG,CAACC,OAAJ,CAAY,KAAZ,EAAmB,MAAnB,CAAd;AACD;;AAED,SAASC,QAAT,CAAkBC,KAAlB,EAAyB;AACvB,SAAOA,KAAP;AACD;;IAEwBC,a,GAAT,SAASA,aAAT,CACdC,OADc,EAEd;AACEC,EAAAA,eAAe,GAAG,IADpB;AAEE;AACAC,EAAAA,YAAY,GAAG,KAHjB;AAIEC,EAAAA,gBAAgB,GAAG,KAJrB;AAKEC,EAAAA,yBAAyB,GAAG,KAL9B;AAMEC,EAAAA,kBAAkB,GAAG;AANvB,CAFc,EAUd;AACA;AACAL,EAAAA,OAAO,CAACM,IAAR,CACE,OADF,EAEEC,KAAK,IAAI;AACP,UAAM;AACJC,MAAAA,4BAA4B,EAAEC,0BAD1B;AAEJC,MAAAA,aAFI;AAGJC,MAAAA,KAAK,EAAEC,GAHH;AAIJC,MAAAA,UAJI;AAKJC,MAAAA;AALI,QAMFP,KANJ;AAQA;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACM,UAAMQ,YAAY,GAAG,CAAC,GAAGC,IAAJ,KAAaT,KAAK,CAACQ,YAAN,CAAmB,GAAGC,IAAtB,CAAlC;;AACA,UAAMC,OAAO,GAAG,CAAC,GAAGD,IAAJ,KAAaT,KAAK,CAACU,OAAN,CAAc,GAAGD,IAAjB,CAA7B;;AAEA,UAAM;AACJE,MAAAA,cADI;AAEJC,MAAAA,aAFI;AAGJC,MAAAA,UAHI;AAIJC,MAAAA,YAJI;AAKJC,MAAAA,cALI;AAMJC,MAAAA,WANI;AAOJC,MAAAA,eAPI;AAQJC,MAAAA,iBARI;AASJC,MAAAA,sBATI;AAUJC,MAAAA,iBAVI;AAWJC,MAAAA,WAXI;AAYJC,MAAAA,YAZI;AAaJC,MAAAA;AAbI,QAcFhB,OAdJ;AAgBA,UAAMiB,wBAAwB,GAAG,EAAjC;AACA,UAAMC,6BAA6B,GAAG,EAAtC;;AACA,QAAIzB,KAAK,CAAC0B,iBAAN,IAA2B1B,KAAK,CAAC2B,sBAArC,EAA6D;AAC3D;AACA,YAAM,IAAIC,KAAJ,CACJ,mLADI,CAAN;AAGD;;AACD,UAAMC,0BAA0B,GAAG,EACjC,GAAG7B,KAAK,CAAC8B;AADwB,KAAnC;AAGA,UAAMC,+BAA+B,GAAG,EACtC,GAAG/B,KAAK,CAACgC;AAD6B,KAAxC;;AAGA,UAAMC,MAAM,GAAGC,GAAG,IAAIA,GAAG,IAAI,IAAP,IAAeA,GAAG,CAACC,QAAzC;;AACA,UAAMC,YAAY,GAAG,EAArB;;AACA,UAAMC,aAAa,GAAGC,IAAI,IAAI;AAC5B,UAAIF,YAAY,CAACE,IAAI,CAACC,EAAN,CAAhB,EAA2B;AACzB,cAAMC,GAAG,GAAGJ,YAAY,CAACE,IAAI,CAACC,EAAN,CAAZ,CAAsBC,GAAlC;AACA,eAAON,GAAG,IAAKD,MAAM,CAACC,GAAD,CAAN,GAAc,IAAd,GAAqBM,GAAG,CAACN,GAAD,CAAvC;AACD,OAHD,MAGO,IAAII,IAAI,CAACG,cAAT,EAAyB;AAC9B,eAAOJ,aAAa,CAACC,IAAI,CAACG,cAAN,CAApB;AACD,OAFM,MAEA,IAAIH,IAAI,CAACI,SAAT,EAAoB;AACzB,cAAMC,cAAc,GAAGN,aAAa,CAACC,IAAI,CAACM,aAAN,CAApC;AACA,eAAOV,GAAG,IAAI;AACZ,cAAID,MAAM,CAACC,GAAD,CAAV,EAAiB,OAAO,IAAP;;AACjB,cAAI,CAACW,KAAK,CAACC,OAAN,CAAcZ,GAAd,CAAL,EAAyB;AACvB,kBAAM,IAAIN,KAAJ,CACH,+EAA8EU,IAAI,CAACS,aAAc,IAAGT,IAAI,CAACU,IAAK,GAD3G,CAAN;AAGD;;AACD,iBAAOd,GAAG,CAACM,GAAJ,CAAQG,cAAR,CAAP;AACD,SARD;AASD,OAXM,MAWA;AACL,eAAOrD,QAAP;AACD;AACF,KApBD;;AAqBA,UAAM2D,MAAM,GAAG,CAACf,GAAD,EAAMI,IAAN,KAAeD,aAAa,CAACC,IAAD,CAAb,CAAoBJ,GAApB,CAA9B;;AACA,UAAMgB,MAAM,GAAG,CAAChB,GAAD,EAAMI,IAAN,EAAYa,QAAZ,KAAyB;AACtC,UAAIA,QAAQ,KAAKC,SAAjB,EAA4B;AAC1B,YAAIC,KAAJ;;AACA,YAAI;AACF,gBAAM,IAAIzB,KAAJ,EAAN;AACD,SAFD,CAEE,OAAO0B,CAAP,EAAU;AACVD,UAAAA,KAAK,GAAGC,CAAC,CAACD,KAAV;AACD,SANyB,CAO1B;;;AACAE,QAAAA,OAAO,CAACC,IAAR,CACE,mGACGH,KAAK,IAAI,EADZ,CADF,EAR0B,CAY1B;;AACAF,QAAAA,QAAQ,GAAG,IAAX;AACD;;AACD,UAAIjB,GAAG,IAAI,IAAX,EAAiB;AACf,eAAO7B,GAAG,CAACoD,IAAX;AACD;;AACD,UAAIrB,YAAY,CAACE,IAAI,CAACC,EAAN,CAAhB,EAA2B;AACzB,eAAOH,YAAY,CAACE,IAAI,CAACC,EAAN,CAAZ,CAAsBmB,KAAtB,CAA4BxB,GAA5B,EAAiCiB,QAAjC,CAAP;AACD,OAFD,MAEO,IAAIb,IAAI,CAACG,cAAT,EAAyB;AAC9B,eAAOS,MAAM,CAAChB,GAAD,EAAMI,IAAI,CAACG,cAAX,EAA2BH,IAAI,CAACqB,kBAAhC,CAAb;AACD,OAFM,MAEA,IAAIrB,IAAI,CAACI,SAAT,EAAoB;AACzB,YAAI,CAACG,KAAK,CAACC,OAAN,CAAcZ,GAAd,CAAL,EAAyB;AACvB,gBAAM,IAAIN,KAAJ,CACH,oFACCU,IAAI,CAACS,aACN,IAAGT,IAAI,CAACU,IAAK,YAAWV,IAAI,KAAK,IAAT,GAAgB,MAAhB,GAAyB,OAAOA,IAAK,GAH1D,CAAN;AAKD;;AACD,eAAOjC,GAAG,CAACuD,QAAS,SAAQvD,GAAG,CAACwD,IAAJ,CAC1B3B,GAAG,CAACM,GAAJ,CAAQsB,CAAC,IAAIZ,MAAM,CAACY,CAAD,EAAIxB,IAAI,CAACM,aAAT,EAAwBO,QAAxB,CAAnB,CAD0B,EAE1B,IAF0B,CAG1B,MACAb,IAAI,CAACyB,MAAL,GACI1D,GAAG,CAAC2D,UAAJ,CAAe,SAAf,CADJ,GAEI3D,GAAG,CAAC2D,UAAJ,CAAe1B,IAAI,CAACS,aAApB,EAAmCT,IAAI,CAACU,IAAxC,CACL,EAPD;AAQD,OAhBM,MAgBA;AACL,eAAO3C,GAAG,CAACd,KAAJ,CAAU2C,GAAV,CAAP;AACD;AACF,KA1CD;;AA4CA,UAAM+B,kBAAkB,GAAG,MAAM;AAC/B,aAAO;AACLC,QAAAA,OAAO,EAAE;AACPC,UAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,4LADW,EAEX,OAFW,CADN;AAKP9B,UAAAA,IAAI,EAAExB;AALC,SADJ;AAQLuD,QAAAA,OAAO,EAAE;AACPF,UAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,wBADW,EAEX,OAFW,CADN;AAKP9B,UAAAA,IAAI,EAAEzB;AALC,SARJ;AAeLyD,QAAAA,KAAK,EAAE;AACLH,UAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CAAsB,sBAAtB,EAA8C,OAA9C,CADR;AAEL9B,UAAAA,IAAI,EAAEzB;AAFD,SAfF;AAmBL0D,QAAAA,IAAI,EAAE;AACJJ,UAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CAAsB,qBAAtB,EAA6C,OAA7C,CADT;AAEJ9B,UAAAA,IAAI,EAAEzB;AAFF,SAnBD;AAuBL2D,QAAAA,MAAM,EAAE;AACNL,UAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,uBADW,EAEX,OAFW,CADP;AAKN9B,UAAAA,IAAI,EAAEzB;AALA,SAvBH;AA8BL4D,QAAAA,KAAK,EAAE;AACLN,UAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CAAsB,sBAAtB,EAA8C,OAA9C,CADR;AAEL9B,UAAAA,IAAI,EAAEzB;AAFD;AA9BF,OAAP;AAmCD,KApCD;;AAqCA,UAAM6D,WAAW,GAAGlE,YAAY,CAC9BU,iBAD8B,EAE9B;AACE8B,MAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,UAAnB,CADR;AAEER,MAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,mFADW,EAEX,MAFW,CAFf;AAMEQ,MAAAA,MAAM,EAAEX,kBAAkB;AAN5B,KAF8B,EAU9B;AACEY,MAAAA,cAAc,EAAE;AADlB,KAV8B,CAAhC;AAcAnE,IAAAA,OAAO,CAACgE,WAAD,EAAc,4BAAd,CAAP;AAEA,UAAMI,gBAAgB,GAAGtE,YAAY,CACnCW,sBADmC,EAEnC;AACE6B,MAAAA,IAAI,EAAE1C,UAAU,CAACyE,SAAX,CAAqBzE,UAAU,CAACqE,OAAX,CAAmB,UAAnB,CAArB,CADR;AAEER,MAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,mFADW,EAEX,MAFW,CAFf;AAMEQ,MAAAA,MAAM,EAAEX,kBAAkB;AAN5B,KAFmC,EAUnC;AACEe,MAAAA,mBAAmB,EAAE;AADvB,KAVmC,CAArC;AAcAtE,IAAAA,OAAO,CAACoE,gBAAD,EAAmB,4BAAnB,CAAP;;AAEA,UAAMG,UAAU,GAAG,CAACjC,IAAD,EAAOmB,WAAP,EAAoBe,MAApB,KACjB,IAAI9D,iBAAJ,CAAsB;AACpB4B,MAAAA,IADoB;AAEpBmB,MAAAA,WAFoB;AAGpBgB,MAAAA,SAAS,EAAE5F,KAAK,IAAI6F,MAAM,CAAC7F,KAAD,CAHN;AAIpB8F,MAAAA,UAAU,EAAEH,MAAM,GACd3F,KAAK,IAAI2F,MAAM,CAACE,MAAM,CAAC7F,KAAD,CAAP,CADD,GAEdA,KAAK,IAAI6F,MAAM,CAAC7F,KAAD,CANC;AAOpB+F,MAAAA,YAAY,EAAEC,GAAG,IAAI;AACnB,YAAIA,GAAG,CAACC,IAAJ,KAAajE,IAAI,CAACkE,MAAtB,EAA8B;AAC5B,gBAAM,IAAI7D,KAAJ,CAAU,8BAAV,CAAN;AACD;;AACD,YAAIsD,MAAJ,EAAY;AACV,iBAAOA,MAAM,CAACK,GAAG,CAAChG,KAAL,CAAb;AACD,SAFD,MAEO;AACL,iBAAOgG,GAAG,CAAChG,KAAX;AACD;AACF;AAhBmB,KAAtB,CADF;;AAoBA,UAAMmG,QAAQ,GAAGT,UAAU,CACzB3E,UAAU,CAACqE,OAAX,CAAmB,UAAnB,CADyB,EAEzB3E,KAAK,CAACoE,eAAN,CACE,8EADF,EAEE,MAFF,CAFyB,CAA3B;AAOA,UAAMuB,SAAS,GAAGV,UAAU,CAC1B3E,UAAU,CAACqE,OAAX,CAAmB,WAAnB,CAD0B,EAE1B3E,KAAK,CAACoE,eAAN,CACE,+CADF,EAEE,MAFF,CAF0B,CAA5B;AAOA1D,IAAAA,OAAO,CAACgF,QAAD,EAAW,4BAAX,CAAP;AACAhF,IAAAA,OAAO,CAACiF,SAAD,EAAY,4BAAZ,CAAP;AAEA,UAAMC,QAAQ,GAAG,CACf,IADe,EACT;AACN,QAFe,EAET;AACN,QAHe,EAGT;AACN,QAJe,EAIT;AACN,QALe,EAKT;AACN,QANe,CAMT;AANS,KAAjB;;AASA,UAAMC,WAAW,GAAGjC,QAAQ,IAAIA,QAAhC,CA3OO,CA2OmC;;;AAC1C,UAAMkC,gBAAgB,GAAGlC,QAAQ,IAAIA,QAArC;;AACA,UAAMmC,WAAW,GAAGnC,QAAQ,IAAIvD,GAAG,CAACuD,QAAS,IAAGA,QAAS,SAAzD;;AACA,UAAMoC,gBAAgB,GAAGpC,QAAQ,IAAIvD,GAAG,CAACuD,QAAS,IAAGA,QAAS,WAA9D;;AACA,UAAMqC,kBAAkB,GAAGrC,QAAQ,IACjCvD,GAAG,CAACuD,QAAS,IAAGA,QAAS,kBAD3B;;AAEA,UAAMsC,uBAAuB,GAAGtC,QAAQ,IACtCvD,GAAG,CAACuD,QAAS,IAAGA,QAAS,sBAD3B;;AAEA,UAAMuC,0BAA0B,GAAG,EAAnC;AACA,UAAMC,gBAAgB,GAAG,EACvB;AACA,SAAGR,QAAQ,CAACS,MAAT,CAAgB,CAACC,IAAD,EAAOC,MAAP,KAAkB;AACnCD,QAAAA,IAAI,CAACC,MAAD,CAAJ,GAAeR,WAAf;AACA,eAAOO,IAAP;AACD,OAHE,EAGA,EAHA,CAFoB;AAOvB;AACA,UAAIP,WARmB;AASvB,YAAMA,WATiB;AAUvB;AACA,YAAMF,WAXiB;AAYvB,YAAMA,WAZiB;AAavB,YAAMA,WAbiB;AAcvB,YAAMA,WAdiB;AAevB,YAAMA,WAfiB;AAgBvB,WAAKI;AAhBkB,KAAzB;;AAmBA,UAAMO,iCAAiC,GAAG,CACxC5C,QADwC,EAExCtB,IAFwC,EAGxCmE,YAAY,GAAG,IAHyB,EAIxCC,WAJwC,KAKrC;AACH,YAAMC,eAAe,GAAGF,YAAY,IAAI,IAAhB,GAAuBA,YAAvB,GAAsC,CAAC,CAA/D;AACA,YAAMG,OAAO,GACVT,0BAA0B,CAAC7D,IAAI,CAACC,EAAN,CAA1B,IACC4D,0BAA0B,CAAC7D,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CADF,IAEAP,gBAAgB,CAAC9D,IAAI,CAACC,EAAN,CAHlB;;AAIA,UAAIqE,OAAJ,EAAa;AACX,eAAOA,OAAO,CAAChD,QAAD,EAAW8C,WAAX,CAAd;AACD,OAFD,MAEO,IAAIpE,IAAI,CAACG,cAAT,EAAyB;AAC9B,YAAIH,IAAI,CAACG,cAAL,CAAoBC,SAAxB,EAAmC;AACjC;AACA;AACA;AACA,gBAAME,aAAa,GAAGN,IAAI,CAACG,cAAL,CAAoBG,aAA1C;AAEA,gBAAMiE,yBAAyB,GAC7BvE,IAAI,CAACwE,sBAAL,IAA+B,IAA/B,GACIxE,IAAI,CAACwE,sBADT,GAEI,CAAC,CAHP;AAIA,gBAAMC,gBAAgB,GACnBZ,0BAA0B,CAACvD,aAAa,CAACL,EAAf,CAA1B,IACC4D,0BAA0B,CAACvD,aAAa,CAACL,EAAf,CAA1B,CACEsE,yBADF,CADF,IAIAT,gBAAgB,CAACxD,aAAa,CAACL,EAAf,CALlB,CAViC,CAiBjC;AACA;;AACA,kBAAQwE,gBAAR;AACE,iBAAKhB,WAAL;AACE,qBAAOC,gBAAgB,CAACpC,QAAD,CAAvB;;AACF,iBAAKqC,kBAAL;AACE,qBAAOC,uBAAuB,CAACtC,QAAD,CAA9B;;AACF,iBAAKiC,WAAL;AACE,qBAAOC,gBAAgB,CAAClC,QAAD,CAAvB;AANJ,WAnBiC,CA4BjC;AACA;AACA;;;AAEA,gBAAMoD,MAAM,GAAG3G,GAAG,CAACuD,QAAS,KAA5B;AACA,gBAAMqD,aAAa,GAAGT,iCAAiC,CACrDQ,MADqD,EAErDpE,aAFqD,EAGrDN,IAAI,CAACwE,sBAHgD,EAIrDJ,WAJqD,CAAvD;;AAOA,cAAIO,aAAa,KAAKD,MAAtB,EAA8B;AAC5B;AACA;AACA,mBAAOpD,QAAP;AACD,WAJD,MAIO;AACL;AACA;AACA;AACA,mBAAOvD,GAAG,CAACuD,QAAS,cAAaA,QAAS,wCAAuCqD,aAAc,gBAAerD,QAAS,eAAcoD,MAAO,SAA5I;AACD;AACF,SAlDD,MAkDO;AACL;AACA,iBAAOR,iCAAiC,CACtC5C,QADsC,EAEtCtB,IAAI,CAACG,cAFiC,EAGtCH,IAAI,CAACwE,sBAHiC,EAItCJ,WAJsC,CAAxC;AAMD;AACF,OA5DM,MA4DA,IAAIpE,IAAI,CAACI,SAAT,EAAoB;AACzB,cAAMwE,KAAK,GAAG,IAAItF,KAAJ,CACX,wHAAuHU,IAAI,CAACS,aAAc,IAAGT,IAAI,CAACU,IAAK,IAD5I,CAAd;;AAGA,YAAImE,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,MAA7B,EAAqC;AACnC;AACA,gBAAMH,KAAN;AACD,SAPwB,CAQzB;;;AACA3D,QAAAA,OAAO,CAAC2D,KAAR,CAAcA,KAAd;AACA,eAAOtD,QAAP;AACD,OAXM,MAWA;AACL,eAAOA,QAAP;AACD;AACF,KAvFD;AAwFA;AACN;AACA;AACA;AACA;;;AAGM,UAAM0D,UAAU,GAAGrC,UAAU,CAC3B3E,UAAU,CAACqE,OAAX,CAAmB,MAAnB,CAD2B,EAE3B3E,KAAK,CAACoE,eAAN,CAAsB,mCAAtB,EAA2D,MAA3D,CAF2B,CAA7B;AAIA,UAAMmD,cAAc,GAAGtC,UAAU,CAC/B3E,UAAU,CAACqE,OAAX,CAAmB,UAAnB,CAD+B,EAE/B3E,KAAK,CAACoE,eAAN,CACE,qIADF,EAEE,MAFF,CAF+B,CAAjC;AAOA,UAAMoD,UAAU,GAAGvC,UAAU,CAC3B3E,UAAU,CAACqE,OAAX,CAAmB,MAAnB,CAD2B,EAE3B3E,KAAK,CAACoE,eAAN,CACE,0FADF,EAEE,MAFF,CAF2B,CAA7B;AAOA,UAAMqD,UAAU,GAAGxC,UAAU,CAC3B3E,UAAU,CAACqE,OAAX,CAAmB,MAAnB,CAD2B,EAE3B3E,KAAK,CAACoE,eAAN,CACE,uJADF,EAEE,MAFF,CAF2B,CAA7B;AAOA,UAAMsD,UAAU,GAAGzC,UAAU,CAC3B3E,UAAU,CAACqE,OAAX,CAAmB,MAAnB,CAD2B,EAE3B3E,KAAK,CAACoE,eAAN,CACE,gGADF,EAEE,MAFF,CAF2B,EAM3BuD,MAAM,IAAI;AACR,UACE,CAAC,sEAAsEC,IAAtE,CACCD,MADD,CADH,EAIE;AACA,cAAM,IAAI/F,KAAJ,CACJ,2EADI,CAAN;AAGD;;AACD,aAAO+F,MAAP;AACD,KAjB0B,CAA7B;AAmBA,UAAME,QAAQ,GAAG5C,UAAU,CACzB3E,UAAU,CAACqE,OAAX,CAAmB,iBAAnB,CADyB,EAEzB3E,KAAK,CAACoE,eAAN,CACE,0DADF,EAEE,MAFF,CAFyB,CAA3B;AAOA,UAAM0D,WAAW,GAAG7C,UAAU,CAC5B3E,UAAU,CAACqE,OAAX,CAAmB,SAAnB,CAD4B,EAE5B3E,KAAK,CAACoE,eAAN,CACE,sDADF,EAEE,MAFF,CAF4B,CAA9B;AAOA,UAAM2D,gBAAgB,GAAG9C,UAAU,CACjC3E,UAAU,CAACqE,OAAX,CAAmB,cAAnB,CADiC,EAEjC3E,KAAK,CAACoE,eAAN,CACE,qEADF,EAEE,MAFF,CAFiC,CAAnC;AAOA,UAAM4D,WAAW,GAAG/C,UAAU,CAC5B3E,UAAU,CAACqE,OAAX,CAAmB,SAAnB,CAD4B,EAE5B3E,KAAK,CAACoE,eAAN,CACE,kDADF,EAEE,MAFF,CAF4B,CAA9B;AAOA,UAAM6D,eAAe,GAAGhD,UAAU,CAChC3E,UAAU,CAACqE,OAAX,CAAmB,aAAnB,CADgC,EAEhC3E,KAAK,CAACoE,eAAN,CACE,sEADF,EAEE,MAFF,CAFgC,CAAlC;AAOA,UAAM8D,YAAY,GAAGjD,UAAU,CAC7B3E,UAAU,CAACqE,OAAX,CAAmB,UAAnB,CAD6B,EAE7B3E,KAAK,CAACoE,eAAN,CACE,sDADF,EAEE,MAFF,CAF6B,CAA/B;AAOA,UAAM+D,WAAW,GAAGlD,UAAU,CAC5B3E,UAAU,CAACqE,OAAX,CAAmB,SAAnB,CAD4B,EAE5B3E,KAAK,CAACoE,eAAN,CACE,uDADF,EAEE,MAFF,CAF4B,CAA9B;AAOA,UAAMgE,WAAW,GAAGnD,UAAU,CAC5B3E,UAAU,CAACqE,OAAX,CAAmB,SAAnB,CAD4B,EAE5B3E,KAAK,CAACoE,eAAN,CACE,kDADF,EAEE,MAFF,CAF4B,CAA9B;AAOA,UAAMiE,gBAAgB,GAAGpD,UAAU,CACjC3E,UAAU,CAACqE,OAAX,CAAmB,cAAnB,CADiC,EAEjC3E,KAAK,CAACoE,eAAN,CACE,uDADF,EAEE,MAFF,CAFiC,CAAnC;AAOA,UAAMkE,aAAa,GAAGrD,UAAU,CAC9B3E,UAAU,CAACqE,OAAX,CAAmB,WAAnB,CAD8B,EAE9B3E,KAAK,CAACoE,eAAN,CACE,kEADF,EAEE,MAFF,CAF8B,CAAhC;AAOA,UAAMmE,iBAAiB,GAAGtD,UAAU,CAClC3E,UAAU,CAACqE,OAAX,CAAmB,eAAnB,CADkC,EAElC3E,KAAK,CAACoE,eAAN,CACE,+DADF,EAEE,MAFF,CAFkC,CAApC;AAOA,UAAMoE,QAAQ,GAAG3I,yBAAyB,GACtCoF,UAAU,CACR3E,UAAU,CAACqE,OAAX,CAAmB,aAAnB,CADQ,EAER3E,KAAK,CAACoE,eAAN,CAAsB,+BAAtB,EAAuD,MAAvD,CAFQ,CAD4B,GAKtCxD,aALJ;AAMA,UAAM6H,WAAW,GAAG5I,yBAAyB,GACzCoF,UAAU,CACR3E,UAAU,CAACqE,OAAX,CAAmB,YAAnB,CADQ,EAER3E,KAAK,CAACoE,eAAN,CAAsB,uBAAtB,EAA+C,MAA/C,CAFQ,CAD+B,GAKzCxD,aALJ;AAMA,UAAM8H,YAAY,GAAG7I,yBAAyB,GAC1CoF,UAAU,CACR3E,UAAU,CAACqE,OAAX,CAAmB,aAAnB,CADQ,EAER3E,KAAK,CAACoE,eAAN,CAAsB,wBAAtB,EAAgD,MAAhD,CAFQ,CADgC,GAK1CxD,aALJ,CA3eO,CAkfP;;AACA,UAAM+H,QAAQ,GAAGjJ,eAAe,GAC5B,0BAAoBa,OAApB,EAA6BD,UAAU,CAACqE,OAAX,CAAmB,MAAnB,CAA7B,CAD4B,GAE5B8C,UAFJ;AAGA,UAAMmB,QAAQ,GAAGlB,UAAjB,CAtfO,CAsfsB;;AAC7B,UAAMmB,QAAQ,GAAGvB,UAAjB,CAvfO,CAufsB;;AAC7B,UAAMwB,YAAY,GAAGvB,cAArB,CAxfO,CAwf8B;;AACrC,UAAMwB,QAAQ,GAAGvB,UAAjB,CAzfO,CAyfsB;AAE7B;;AACA,UAAMwB,KAAK,GAAGxI,YAAY,CACxBU,iBADwB,EAExB;AACE8B,MAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,OAAnB,CADR;AAEEC,MAAAA,MAAM,EAAE;AACNqE,QAAAA,CAAC,EAAE;AACD3G,UAAAA,IAAI,EAAE,IAAI3B,cAAJ,CAAmBG,YAAnB;AADL,SADG;AAINoI,QAAAA,CAAC,EAAE;AACD5G,UAAAA,IAAI,EAAE,IAAI3B,cAAJ,CAAmBG,YAAnB;AADL;AAJG;AAFV,KAFwB,EAaxB;AACEqI,MAAAA,WAAW,EAAE;AADf,KAbwB,CAA1B;AAiBA,UAAMC,UAAU,GAAG5I,YAAY,CAC7BW,sBAD6B,EAE7B;AACE6B,MAAAA,IAAI,EAAE1C,UAAU,CAACyE,SAAX,CAAqBzE,UAAU,CAACqE,OAAX,CAAmB,OAAnB,CAArB,CADR;AAEEC,MAAAA,MAAM,EAAE;AACNqE,QAAAA,CAAC,EAAE;AACD3G,UAAAA,IAAI,EAAE,IAAI3B,cAAJ,CAAmBG,YAAnB;AADL,SADG;AAINoI,QAAAA,CAAC,EAAE;AACD5G,UAAAA,IAAI,EAAE,IAAI3B,cAAJ,CAAmBG,YAAnB;AADL;AAJG;AAFV,KAF6B,EAa7B;AACEuI,MAAAA,gBAAgB,EAAE;AADpB,KAb6B,CAA/B,CA7gBO,CA+hBP;;AACA3I,IAAAA,OAAO,CAACiI,QAAD,EAAW,4BAAX,CAAP;AACAjI,IAAAA,OAAO,CAACkI,QAAD,EAAW,4BAAX,CAAP;AACAlI,IAAAA,OAAO,CAACmI,QAAD,EAAW,4BAAX,CAAP;AACAnI,IAAAA,OAAO,CAACoI,YAAD,EAAe,4BAAf,CAAP;AACApI,IAAAA,OAAO,CAACqI,QAAD,EAAW,4BAAX,CAAP;AACArI,IAAAA,OAAO,CAACoH,WAAD,EAAc,4BAAd,CAAP;AACApH,IAAAA,OAAO,CAACqH,gBAAD,EAAmB,4BAAnB,CAAP;AACArH,IAAAA,OAAO,CAACsH,WAAD,EAAc,4BAAd,CAAP;AACAtH,IAAAA,OAAO,CAACuH,eAAD,EAAkB,4BAAlB,CAAP;AACAvH,IAAAA,OAAO,CAACwH,YAAD,EAAe,4BAAf,CAAP;AACAxH,IAAAA,OAAO,CAACyH,WAAD,EAAc,4BAAd,CAAP;AACAzH,IAAAA,OAAO,CAAC0H,WAAD,EAAc,4BAAd,CAAP;AACA1H,IAAAA,OAAO,CAAC2H,gBAAD,EAAmB,4BAAnB,CAAP;AACA3H,IAAAA,OAAO,CAAC4H,aAAD,EAAgB,4BAAhB,CAAP;AACA5H,IAAAA,OAAO,CAAC6H,iBAAD,EAAoB,4BAApB,CAAP;AAEA,UAAMe,SAAS,GAAG;AAChB,UAAIrE,UAAU,CACZ3E,UAAU,CAACqE,OAAX,CAAmB,QAAnB,CADY,EAEZ3E,KAAK,CAACoE,eAAN,CACE,yLADF,EAEE,MAFF,CAFY,CADE;AAOb;AACH,UAAIvD,UARY;AAQA;AAChB,UAAIA,UATY;AASA;AAChB,WAAKC,YAVW;AAUG;AACnB,WAAKA,YAXW;AAWG;AACnB,YAAM4E,QAZU;AAYA;AAChB,WAAK5E,YAbW;AAaG;AAEnB,YAAM4D,WAfU;AAeG;AACnB,YAAMmE,QAhBU;AAgBA;AAChB,YAAMC,YAjBU;AAiBI;AACpB,YAAMA,YAlBU;AAkBI;AACpB,YAAMC,QAnBU;AAmBA;AAChB,YAAMA,QApBU;AAoBA;AAEhB,WAAKJ,QAtBW;AAsBD;AACf,YAAMA,QAvBU;AAuBA;AAChB,YAAMC,QAxBU;AAwBA;AAEhB,YAAMjD,SA1BU;AA0BC;AACjB,YAAMA,SA3BU;AA2BC;AAEjB,UAAI/E,aA7BY;AA6BG;AACnB,UAAIA,aA9BY;AA8BG;AACnB,YAAMA,aA/BU;AA+BK;AAErB,WAAKoI,KAjCW;AAiCJ;AAEZ,WAAKnB,QAnCW;AAoChB,WAAKW,QApCW;AAqChB,WAAKC,WArCW;AAsChB,WAAKC,YAtCW;AAuChB,UAAIZ,WAvCY;AAwChB,YAAMC,gBAxCU;AAyChB,YAAMC,WAzCU;AA0ChB,YAAMC,eA1CU;AA2ChB,YAAMC,YA3CU;AA4ChB,YAAMC,WA5CU;AA6ChB,YAAMC,WA7CU;AA8ChB,YAAMC,gBA9CU;AA+ChB,YAAMC,aA/CU;AAgDhB,YAAMC;AAhDU,KAAlB;AAkDA,UAAMgB,cAAc,GAAG;AACrB,YAAMzE,gBADe;AACG;AACxB,WAAKsE,UAFgB,CAEJ;;AAFI,KAAvB;;AAIA,UAAMI,aAAa,GAAGC,CAAC,IAAIC,IAAI,CAACC,SAAL,CAAeF,CAAf,CAA3B;;AACA,QAAI/J,eAAJ,EAAqB;AACnB0C,MAAAA,YAAY,CAAC,GAAD,CAAZ,GAAoB;AAClBI,QAAAA,GAAG,EAAElD,QADa;AAElBoE,QAAAA,KAAK,EAAE+F,CAAC,IAAIpJ,GAAG,CAACd,KAAJ,CAAUiK,aAAa,CAACC,CAAD,CAAvB;AAFM,OAApB;AAID,KALD,MAKO;AACLrH,MAAAA,YAAY,CAAC,GAAD,CAAZ,GAAoB;AAClBI,QAAAA,GAAG,EAAEgH,aADa;AAElB9F,QAAAA,KAAK,EAAEtE,GAAG,IAAIiB,GAAG,CAACd,KAAJ,CAAUH,GAAV;AAFI,OAApB;AAID;;AACDgD,IAAAA,YAAY,CAAC,IAAD,CAAZ,GAAqBA,YAAY,CAAC,GAAD,CAAjC,CAlnBO,CAknBiC;AAExC;;AACAA,IAAAA,YAAY,CAAC,IAAD,CAAZ,GAAqB;AACnBI,MAAAA,GAAG,EAAEpD,GAAG,IAAI,qCAAcA,GAAd,CADO;AAEnBsE,MAAAA,KAAK,EAAE+F,CAAC,IAAI;AACV,cAAMG,IAAI,GAAG,CACX,SADW,EAEX,SAFW,EAGX,OAHW,EAIX,MAJW,EAKX,QALW,EAMX,OANW,CAAb;AAQA,cAAMC,KAAK,GAAG,EAAd;;AACA,aAAK,MAAMC,GAAX,IAAkBF,IAAlB,EAAwB;AACtB,cAAIH,CAAC,CAACK,GAAD,CAAL,EAAY;AACVD,YAAAA,KAAK,CAACE,IAAN,CAAY,GAAEN,CAAC,CAACK,GAAD,CAAM,IAAGA,GAAI,EAA5B;AACD;AACF;;AACD,eAAOzJ,GAAG,CAACd,KAAJ,CAAUsK,KAAK,CAAChG,IAAN,CAAW,GAAX,KAAmB,WAA7B,CAAP;AACD;AAlBkB,KAArB;AAqBAzB,IAAAA,YAAY,CAAC,GAAD,CAAZ,GAAoB;AAClBI,MAAAA,GAAG,EAAEwH,CAAC,IAAIA,CADQ;AAElBtG,MAAAA,KAAK,EAAExB,GAAG,IAAI7B,GAAG,CAACuD,QAAS,IAAGvD,GAAG,CAACd,KAAJ,CAAU2C,GAAV,CAAe;AAF3B,KAApB,CA1oBO,CA+oBP;;AACAE,IAAAA,YAAY,CAAC,GAAD,CAAZ,GAAoB;AAClBI,MAAAA,GAAG,EAAEyH,CAAC,IAAI;AACR,YAAIA,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAxC,EAA6C;AAC3C,gBAAM,CAACjB,CAAD,EAAIC,CAAJ,IAASe,CAAC,CACbE,KADY,CACN,CADM,EACH,CAAC,CADE,EAEZC,KAFY,CAEN,GAFM,EAGZ5H,GAHY,CAGRyH,CAAC,IAAII,UAAU,CAACJ,CAAD,CAHP,CAAf;AAIA,iBAAO;AAAEhB,YAAAA,CAAF;AAAKC,YAAAA;AAAL,WAAP;AACD;AACF,OATiB;AAUlBxF,MAAAA,KAAK,EAAE+F,CAAC,IAAIpJ,GAAG,CAACuD,QAAS,SAAQvD,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACR,CAAZ,CAAe,KAAI5I,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACP,CAAZ,CAAe;AAVjD,KAApB,CAhpBO,CA6pBP;;AAEA,QAAIoB,KAAK,GAAG,CAAZ;AAEA;AACN;AACA;AACA;AACA;;AACM,UAAMC,wBAAwB,GAAG,CAAChE,MAAD,EAASE,YAAT,KAA0B;AACzD,YAAMnE,IAAI,GAAGpC,0BAA0B,CAACoC,IAA3B,CAAgCkI,IAAhC,CAAqCC,CAAC,IAAIA,CAAC,CAAClI,EAAF,KAASgE,MAAnD,CAAb;AACA+D,MAAAA,KAAK;;AACL,UAAIA,KAAK,GAAG,EAAZ,EAAgB;AACd,cAAM,IAAI1I,KAAJ,CAAU,iDAAV,CAAN;AACD;;AACD,UAAI;AACF,eAAO8I,uCAAuC,CAACpI,IAAD,EAAOmE,YAAP,CAA9C;AACD,OAFD,CAEE,OAAOnD,CAAP,EAAU;AACV,cAAM4D,KAAK,GAAG,IAAItF,KAAJ,CACX,iDACCU,IAAI,CAACS,aACN,IAAGT,IAAI,CAACU,IAAK,WAAUV,IAAI,CAACA,IAAK,OAAMnD,MAAM,CAACmE,CAAC,CAACqH,OAAH,CAAY,EAH9C,CAAd,CADU,CAMV;;AACAzD,QAAAA,KAAK,CAAC0D,aAAN,GAAsBtH,CAAtB;AACA,cAAM4D,KAAN;AACD,OAXD,SAWU;AACRoD,QAAAA,KAAK;AACN;AACF,KApBD;;AAqBA,UAAMI,uCAAuC,GAAG,CAACpI,IAAD,EAAOmE,YAAP,KAAwB;AACtE,UAAI,CAACnE,IAAI,CAACC,EAAV,EAAc;AACZ,cAAM,IAAIX,KAAJ,CACH,kFAAiFU,IAAK,GADnF,CAAN;AAGD;;AACD,UAAI,CAACT,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA/B,EAA0C;AACxCV,QAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,GAAsC,EAAtC;AACD;;AACD,UAAI,CAACR,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAApC,EAA+C;AAC7CR,QAAAA,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,GAA2C,EAA3C;AACD;;AACD,YAAMoE,eAAe,GAAGF,YAAY,IAAI,IAAhB,GAAuBA,YAAvB,GAAsC,CAAC,CAA/D,CAZsE,CAatE;;AACA,UAAI,CAAC5E,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAL,EAA2D;AACzD,cAAMkE,OAAO,GAAGvB,SAAS,CAAChH,IAAI,CAACC,EAAN,CAAzB;;AACA,YAAIsI,OAAJ,EAAa;AACXhJ,UAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuDkE,OAAvD;AACD;AACF;;AACD,UAAI,CAAC9I,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,CAAL,EAAgE;AAC9D,cAAMmE,YAAY,GAAGvB,cAAc,CAACjH,IAAI,CAACC,EAAN,CAAnC;;AACA,YAAIuI,YAAJ,EAAkB;AAChB/I,UAAAA,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,IACEmE,YADF;AAED;AACF,OA1BqE,CA2BtE;;;AACA,UACE,CAACjJ,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAD,IACArE,IAAI,CAACA,IAAL,KAAc,GAFhB,EAGE;AACAT,QAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuDnG,YAAY,CACjES,eADiE,EAEjE;AACE+B,UAAAA,IAAI,EAAE1C,UAAU,CAACyK,QAAX,CAAoBzI,IAApB,CADR;AAEE6B,UAAAA,WAAW,EAAE7B,IAAI,CAAC6B,WAFpB;AAGE6G,UAAAA,MAAM,EAAE1I,IAAI,CAAC2I,YAAL,CAAkB5E,MAAlB,CAAyB,CAACC,IAAD,EAAO/G,KAAP,EAAc2L,CAAd,KAAoB;AACnD5E,YAAAA,IAAI,CAAChG,UAAU,CAAC6K,QAAX,CAAoB5L,KAApB,CAAD,CAAJ,GAAmC;AACjC4E,cAAAA,WAAW,EAAE7B,IAAI,CAAC8I,gBAAL,GACT9I,IAAI,CAAC8I,gBAAL,CAAsBF,CAAtB,CADS,GAET,IAH6B;AAIjC3L,cAAAA,KAAK,EAAEA;AAJ0B,aAAnC;AAMA,mBAAO+G,IAAP;AACD,WARO,EAQL,EARK;AAHV,SAFiE,EAejE;AACE+E,UAAAA,eAAe,EAAE/I,IADnB;AAEEgJ,UAAAA,YAAY,EAAE;AAFhB,SAfiE,CAAnE;AAoBD,OApDqE,CAqDtE;;;AACA,UACE,CAACzJ,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAD,IACArE,IAAI,CAACA,IAAL,KAAc,GAFhB,EAGE;AACA,cAAMiJ,OAAO,GACXrL,0BAA0B,CAACsL,QAA3B,CAAoClJ,IAAI,CAACmJ,cAAzC,CADF;AAEA,cAAMC,eAAe,GAAGC,6BAA6B,CACnDJ,OAAO,CAAChJ,EAD2C,EAEnDkE,YAFmD,CAArD;AAIA,cAAMmF,oBAAoB,GAAGC,kCAAkC,CAC7DN,OAAO,CAAChJ,EADqD,EAE7DkE,YAF6D,CAA/D;;AAIA,YAAI,CAACiF,eAAL,EAAsB;AACpB,gBAAM,IAAI9J,KAAJ,CAAU,sBAAV,CAAN;AACD;;AACD,YAAI,CAACgK,oBAAL,EAA2B;AACzB,gBAAM,IAAIhK,KAAJ,CAAU,iCAAV,CAAN;AACD;;AAED,YAAIkK,KAAK,GAAG3L,aAAa,CAACG,UAAU,CAACyL,SAAX,CAAqBL,eAAe,CAAC1I,IAArC,CAAD,CAAzB;AACA,YAAIgJ,UAAJ;;AACA,YAAI,CAACF,KAAL,EAAY;AACV,gBAAMG,UAAU,GAAGzL,YAAY,CAC7BU,iBAD6B,EAE7B;AACE8B,YAAAA,IAAI,EAAE1C,UAAU,CAAC4L,cAAX,CAA0BR,eAAe,CAAC1I,IAA1C,CADR;AAEEmB,YAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,iFADW,EAEX,MAFW,CAFf;AAMEQ,YAAAA,MAAM,EAAE;AACNrF,cAAAA,KAAK,EAAE;AACL4E,gBAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,oCADW,EAEX,OAFW,CADR;AAKL9B,gBAAAA,IAAI,EAAE,IAAI3B,cAAJ,CAAmB+K,eAAnB;AALD,eADD;AAQNS,cAAAA,SAAS,EAAE;AACThI,gBAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,kEADW,EAEX,OAFW,CADJ;AAKT9B,gBAAAA,IAAI,EAAE,IAAI3B,cAAJ,CAAmBI,cAAnB;AALG;AARL;AANV,WAF6B,EAyB7B;AACEqL,YAAAA,kBAAkB,EAAE,IADtB;AAEEf,YAAAA,eAAe,EAAE/I,IAFnB;AAGE+J,YAAAA,sBAAsB,EAAEd,OAH1B;AAIEe,YAAAA,cAAc,EAAE7F;AAJlB,WAzB6B,CAA/B;AAgCA,gBAAM8F,eAAe,GAAG/L,YAAY,CAClCW,sBADkC,EAElC;AACE6B,YAAAA,IAAI,EAAE1C,UAAU,CAACyE,SAAX,CAAqBkH,UAAU,CAACjJ,IAAhC,CADR;AAEEmB,YAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,iFADW,EAEX,MAFW,CAFf;AAMEQ,YAAAA,MAAM,EAAE;AACNrF,cAAAA,KAAK,EAAE;AACL4E,gBAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,oCADW,EAEX,OAFW,CADR;AAKL9B,gBAAAA,IAAI,EAAE,IAAI3B,cAAJ,CAAmBiL,oBAAnB;AALD,eADD;AAQNO,cAAAA,SAAS,EAAE;AACThI,gBAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,kEADW,EAEX,OAFW,CADJ;AAKT9B,gBAAAA,IAAI,EAAE,IAAI3B,cAAJ,CAAmBI,cAAnB;AALG;AARL;AANV,WAFkC,EAyBlC;AACEyL,YAAAA,uBAAuB,EAAE,IAD3B;AAEEnB,YAAAA,eAAe,EAAE/I,IAFnB;AAGE+J,YAAAA,sBAAsB,EAAEd,OAH1B;AAIEe,YAAAA,cAAc,EAAE7F;AAJlB,WAzBkC,CAApC;AAgCAqF,UAAAA,KAAK,GAAGtL,YAAY,CAClBU,iBADkB,EAElB;AACE8B,YAAAA,IAAI,EAAE1C,UAAU,CAACyL,SAAX,CAAqBL,eAAe,CAAC1I,IAArC,CADR;AAEEmB,YAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACV,gBAAesH,eAAe,CAAC1I,IAAK,KAD1B,EAEX,MAFW,CAFf;AAME4B,YAAAA,MAAM,EAAE;AACN6H,cAAAA,KAAK,EAAE;AACLtI,gBAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,kCADW,EAEX,OAFW,CADR;AAKL9B,gBAAAA,IAAI,EAAE2J;AALD,eADD;AAQNS,cAAAA,GAAG,EAAE;AACHvI,gBAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,gCADW,EAEX,OAFW,CADV;AAKH9B,gBAAAA,IAAI,EAAE2J;AALH;AARC;AANV,WAFkB,EAyBlB;AACEU,YAAAA,aAAa,EAAE,IADjB;AAEEtB,YAAAA,eAAe,EAAE/I,IAFnB;AAGE+J,YAAAA,sBAAsB,EAAEd,OAH1B;AAIEe,YAAAA,cAAc,EAAE7F;AAJlB,WAzBkB,CAApB;AAgCAuF,UAAAA,UAAU,GAAGxL,YAAY,CACvBW,sBADuB,EAEvB;AACE6B,YAAAA,IAAI,EAAE1C,UAAU,CAACyE,SAAX,CAAqB+G,KAAK,CAAC9I,IAA3B,CADR;AAEEmB,YAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACV,gBAAesH,eAAe,CAAC1I,IAAK,KAD1B,EAEX,MAFW,CAFf;AAME4B,YAAAA,MAAM,EAAE;AACN6H,cAAAA,KAAK,EAAE;AACLtI,gBAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,kCADW,EAEX,OAFW,CADR;AAKL9B,gBAAAA,IAAI,EAAEiK;AALD,eADD;AAQNG,cAAAA,GAAG,EAAE;AACHvI,gBAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,gCADW,EAEX,OAFW,CADV;AAKH9B,gBAAAA,IAAI,EAAEiK;AALH;AARC;AANV,WAFuB,EAyBvB;AACEK,YAAAA,kBAAkB,EAAE,IADtB;AAEEvB,YAAAA,eAAe,EAAE/I,IAFnB;AAGE+J,YAAAA,sBAAsB,EAAEd,OAH1B;AAIEe,YAAAA,cAAc,EAAE7F;AAJlB,WAzBuB,CAAzB;AAgCA/F,UAAAA,OAAO,CAACoL,KAAD,EAAQ,4BAAR,CAAP;AACApL,UAAAA,OAAO,CAACsL,UAAD,EAAa,4BAAb,CAAP;AACD,SAnID,MAmIO;AACLA,UAAAA,UAAU,GAAG7L,aAAa,CAACG,UAAU,CAACyE,SAAX,CAAqB+G,KAAK,CAAC9I,IAA3B,CAAD,CAA1B;AACD;;AACDnB,QAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuDmF,KAAvD;AACA/J,QAAAA,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,IACEqF,UADF;;AAEA,YAAI7F,0BAA0B,CAAC7D,IAAI,CAACC,EAAN,CAA1B,KAAwCa,SAA5C,EAAuD;AACrD+C,UAAAA,0BAA0B,CAAC7D,IAAI,CAACC,EAAN,CAA1B,GAAsC,EAAtC;AACD;;AACD4D,QAAAA,0BAA0B,CAAC7D,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IACE/C,QAAQ,IAAIvD,GAAG,CAACuD,QAAS;AACrC;AACA,QAAQA,QAAS;AACjB;AACA;AACA,oBAAoBA,QAAS;AAC7B,oCAAoC4C,iCAAiC,CACjEnG,GAAG,CAACuD,QAAS,SAAQA,QAAS,GADmC,EAEjE2H,OAFiE,EAGjE9E,YAHiE,EAIjE,EAJiE,CAKjE,4BAA2B7C,QAAS;AACxC;AACA;AACA,oBAAoBA,QAAS;AAC7B,oCAAoC4C,iCAAiC,CACjEnG,GAAG,CAACuD,QAAS,SAAQA,QAAS,GADmC,EAEjE2H,OAFiE,EAGjE9E,YAHiE,EAIjE,EAJiE,CAKjE,4BAA2B7C,QAAS;AACxC;AACA;AACA,IAxBU;;AAyBAxB,QAAAA,YAAY,CAACE,IAAI,CAACC,EAAN,CAAZ,GAAwB;AACtBC,UAAAA,GAAG,EAAElD,QADiB;AAEtBoE,UAAAA,KAAK,EAAE,CAAC;AAAE+I,YAAAA,KAAF;AAASC,YAAAA;AAAT,WAAD,KAAoB;AACzB;AACA,kBAAMG,KAAK,GACRJ,KAAK,IAAIvJ,MAAM,CAACuJ,KAAK,CAAClN,KAAP,EAAcgM,OAAd,EAAuB,IAAvB,CAAhB,IAAiDlL,GAAG,CAACoD,IADvD;AAEA,kBAAMqJ,KAAK,GACRJ,GAAG,IAAIxJ,MAAM,CAACwJ,GAAG,CAACnN,KAAL,EAAYgM,OAAZ,EAAqB,IAArB,CAAd,IAA6ClL,GAAG,CAACoD,IADnD;AAEA,kBAAMsJ,cAAc,GAAGN,KAAK,IAAI,CAACA,KAAK,CAACN,SAAhB,GAA4B,GAA5B,GAAkC,GAAzD;AACA,kBAAMa,cAAc,GAAGN,GAAG,IAAI,CAACA,GAAG,CAACP,SAAZ,GAAwB,GAAxB,GAA8B,GAArD;AACA,mBAAO9L,GAAG,CAACuD,QAAS,GAAEvD,GAAG,CAAC2D,UAAJ,CACpB1B,IAAI,CAACS,aADe,EAEpBT,IAAI,CAACU,IAFe,CAGpB,IAAG6J,KAAM,KAAIC,KAAM,KAAIzM,GAAG,CAAC4M,OAAJ,CACvBF,cAAc,GAAGC,cADM,CAEvB,GALF;AAMD;AAhBqB,SAAxB;AAkBD,OApQqE,CAsQtE;;;AACA,UACE,CAACnL,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAD,IACArE,IAAI,CAACA,IAAL,KAAc,GADd,IAEAA,IAAI,CAAC4K,gBAHP,EAIE;AACA,cAAMC,QAAQ,GAAGxB,6BAA6B,CAC5CrJ,IAAI,CAAC4K,gBADuC,EAE5CzG,YAF4C,CAA9C;AAIA,cAAM2G,aAAa,GAAGvB,kCAAkC,CACtDvJ,IAAI,CAAC4K,gBADiD,EAEtDzG,YAFsD,CAAxD,CALA,CASA;;AACA5E,QAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuD0G,MAAM,CAACC,MAAP,CACrDD,MAAM,CAACE,MAAP,CAAcJ,QAAd,CADqD,EAErD;AACEnK,UAAAA,IAAI,EAAE1C,UAAU,CAACkN,UAAX,CAAsBlL,IAAtB,CADR;AAEE6B,UAAAA,WAAW,EAAE7B,IAAI,CAAC6B;AAFpB,SAFqD,CAAvD;;AAOA,YAAIiJ,aAAa,IAAIA,aAAa,KAAKD,QAAvC,EAAiD;AAC/CpL,UAAAA,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,IACE0G,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACE,MAAP,CAAcH,aAAd,CAAd,EAA4C;AAC1CpK,YAAAA,IAAI,EAAE1C,UAAU,CAACyE,SAAX,CACJlD,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CADI,CADoC;AAI1CxC,YAAAA,WAAW,EAAE7B,IAAI,CAAC6B;AAJwB,WAA5C,CADF;AAOD;AACF,OArSqE,CAuStE;;;AACA,UACE,CAACtC,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAD,IACArE,IAAI,CAACmL,QAAL,KAAkB,GAFpB,EAGE;AACA,cAAMC,oBAAoB,GAAG/B,6BAA6B,CACxDrJ,IAAI,CAACqL,eADmD,EAExDlH,YAFwD,CAA1D;AAIA5E,QAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IACE,IAAI3F,WAAJ,CAAgB0M,oBAAhB,CADF;;AAEA,YAAI,CAAC5N,kBAAL,EAAyB;AACvB,gBAAM8N,mBAAmB,GAAG/B,kCAAkC,CAC5DvJ,IAAI,CAACqL,eADuD,EAE5DlH,YAF4D,CAA9D;;AAIA,cAAImH,mBAAJ,EAAyB;AACvB7L,YAAAA,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,IACE,IAAI3F,WAAJ,CAAgB4M,mBAAhB,CADF;AAED;AACF;AACF,OA5TqE,CA8TtE;;;AACA,UACE,CAAC/L,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAD,IACArE,IAAI,CAACmL,QAAL,KAAkB,GAFpB,EAGE;AACA5L,QAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuD5F,cAAvD;AACD,OApUqE,CAsUtE;AACA;;;AACA,UACE,CAACc,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAD,IACArE,IAAI,CAACmL,QAAL,KAAkB,GAFpB,EAGE;AACArH,QAAAA,gBAAgB,CAAC9D,IAAI,CAACC,EAAN,CAAhB,GAA4BwD,WAA5B;AACAlE,QAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuDjB,QAAvD;AACD,OA9UqE,CAgVtE;;;AACA,UAAI,CAAC7D,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAL,EAA2D;AACzD;AACA9E,QAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuD/F,aAAvD;AACD,OApVqE,CAqVtE;;;AACA,UAAI,CAACmB,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,CAAL,EAAgE;AAC9D,YACEtF,WAAW,CAACQ,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAD,CADb,EAEE;AACA5E,UAAAA,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,IACE9E,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CADF;AAED;AACF;;AACDjG,MAAAA,OAAO,CACLY,YAAY,CAACO,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAD,CADP,CAAP;AAGA,aAAO9E,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,CAAP;AACD,KAlWD;;AAoWA,aAASgF,6BAAT,CACEpF,MADF,EAEEE,YAAY,GAAG,IAFjB,EAGEoH,WAAW,GAAG,IAHhB,EAIE;AACA,YAAMlH,eAAe,GAAGF,YAAY,IAAI,IAAhB,GAAuBA,YAAvB,GAAsC,CAAC,CAA/D;;AACA,UAAI,CAAC5E,0BAA0B,CAAC0E,MAAD,CAA/B,EAAyC;AACvC1E,QAAAA,0BAA0B,CAAC0E,MAAD,CAA1B,GAAqC,EAArC;AACD;;AACD,UAAI,CAACxE,+BAA+B,CAACwE,MAAD,CAApC,EAA8C;AAC5CxE,QAAAA,+BAA+B,CAACwE,MAAD,CAA/B,GAA0C,EAA1C;AACD;;AACD,UAAI,CAAC1E,0BAA0B,CAAC0E,MAAD,CAA1B,CAAmCI,eAAnC,CAAL,EAA0D;AACxD,cAAMrE,IAAI,GAAGpC,0BAA0B,CAACoC,IAA3B,CAAgCkI,IAAhC,CACXC,CAAC,IAAIA,CAAC,CAAClI,EAAF,KAASgE,MADH,CAAb;;AAGA,YAAI,CAACjE,IAAL,EAAW;AACT,gBAAM,IAAIV,KAAJ,CACH,SAAQ2E,MAAO,wCADZ,CAAN;AAGD;;AACD,cAAMuH,GAAG,GAAGtM,wBAAwB,CAACc,IAAI,CAACC,EAAN,CAApC;;AACA,YAAIuL,GAAJ,EAAS;AACP,gBAAMC,GAAG,GAAGC,IAAI,IAAI;AAClBnM,YAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuDqH,IAAvD;AACD,WAFD;;AAGA,gBAAMC,MAAM,GAAGH,GAAG,CAACC,GAAD,EAAMtH,YAAN,CAAlB;;AACA,cAAIwH,MAAJ,EAAY;AACV,gBACEpM,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,KACA9E,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,MAAyDsH,MAF3D,EAGE;AACA,oBAAM,IAAIrM,KAAJ,CACH,4DAA2DU,IAAI,CAACC,EAAG,GADhE,CAAN;AAGD;;AACDV,YAAAA,0BAA0B,CAACS,IAAI,CAACC,EAAN,CAA1B,CAAoCoE,eAApC,IAAuDsH,MAAvD;AACD;AACF;AACF;;AACD,UACE,CAACpM,0BAA0B,CAAC0E,MAAD,CAA1B,CAAmCI,eAAnC,CAAD,IACAA,eAAe,GAAG,CAAC,CAFrB,EAGE;AACA;AACA;AACA,cAAMuH,QAAQ,GAAGvC,6BAA6B,CAACpF,MAAD,EAAS,IAAT,EAAe,KAAf,CAA9C;;AACA,YAAI2H,QAAJ,EAAc;AACZ,iBAAOA,QAAP;AACD;AACF;;AACD,UACEL,WAAW,IACX,CAAChM,0BAA0B,CAAC0E,MAAD,CAA1B,CAAmCI,eAAnC,CAFH,EAGE;AACA,eAAO4D,wBAAwB,CAAChE,MAAD,EAASE,YAAT,CAA/B;AACD;;AACD,aAAO5E,0BAA0B,CAAC0E,MAAD,CAA1B,CAAmCI,eAAnC,CAAP;AACD;;AAED,aAASkF,kCAAT,CAA4CtF,MAA5C,EAAoDE,YAAY,GAAG,IAAnE,EAAyE;AACvE;AACAkF,MAAAA,6BAA6B,CAACpF,MAAD,EAASE,YAAT,CAA7B;AAEA,YAAME,eAAe,GAAGF,YAAY,IAAI,IAAhB,GAAuBA,YAAvB,GAAsC,CAAC,CAA/D;;AACA,UAAI,CAAC1E,+BAA+B,CAACwE,MAAD,CAApC,EAA8C;AAC5CxE,QAAAA,+BAA+B,CAACwE,MAAD,CAA/B,GAA0C,EAA1C;AACD;;AACD,UAAI,CAACxE,+BAA+B,CAACwE,MAAD,CAA/B,CAAwCI,eAAxC,CAAL,EAA+D;AAC7D,cAAMrE,IAAI,GAAGpC,0BAA0B,CAACsL,QAA3B,CAAoCjF,MAApC,CAAb;;AAEA,YAAI,CAACjE,IAAL,EAAW;AACT,gBAAM,IAAIV,KAAJ,CACH,SAAQ2E,MAAO,wCADZ,CAAN;AAGD;;AACD,cAAMuH,GAAG,GAAGrM,6BAA6B,CAACa,IAAI,CAACC,EAAN,CAAzC;;AACA,YAAIuL,GAAJ,EAAS;AACP,gBAAMC,GAAG,GAAGC,IAAI,IAAI;AAClBjM,YAAAA,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,IAA4DqH,IAA5D;AACD,WAFD;;AAGA,gBAAMC,MAAM,GAAGH,GAAG,CAACC,GAAD,EAAMtH,YAAN,CAAlB;;AACA,cAAIwH,MAAJ,EAAY;AACV,gBACElM,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,KACA5E,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,MACEsH,MAHJ,EAIE;AACA,oBAAM,IAAIrM,KAAJ,CACH,4DAA2DU,IAAI,CAACC,EAAG,GADhE,CAAN;AAGD;;AACDR,YAAAA,+BAA+B,CAACO,IAAI,CAACC,EAAN,CAA/B,CAAyCoE,eAAzC,IACEsH,MADF;AAED;AACF;AACF,OApCsE,CAqCvE;;;AACA,UACE,CAAClM,+BAA+B,CAACwE,MAAD,CAA/B,CAAwCI,eAAxC,CAAD,IACA9E,0BAA0B,CAAC0E,MAAD,CAD1B,IAEA1E,0BAA0B,CAAC0E,MAAD,CAA1B,CAAmCI,eAAnC,CAFA,IAGAtF,WAAW,CAACQ,0BAA0B,CAAC0E,MAAD,CAA1B,CAAmCI,eAAnC,CAAD,CAJb,EAKE;AACA5E,QAAAA,+BAA+B,CAACwE,MAAD,CAA/B,CAAwCI,eAAxC,IACE9E,0BAA0B,CAAC0E,MAAD,CAA1B,CAAmCI,eAAnC,CADF;AAED;;AACD,UACE,CAAC5E,+BAA+B,CAACwE,MAAD,CAA/B,CAAwCI,eAAxC,CAAD,IACAA,eAAe,GAAG,CAAC,CAFrB,EAGE;AACA;AACA,eAAOkF,kCAAkC,CAACtF,MAAD,EAAS,IAAT,CAAzC;AACD;;AACD,aAAOxE,+BAA+B,CAACwE,MAAD,CAA/B,CAAwCI,eAAxC,CAAP;AACD;;AACD,aAASwH,uBAAT,CAAiC5H,MAAjC,EAAyCuH,GAAzC,EAA8CM,eAAe,GAAG,KAAhE,EAAuE;AACrE,UAAI5M,wBAAwB,CAAC+E,MAAD,CAA5B,EAAsC;AACpC,YAAI6H,eAAJ,EAAqB;AACnB;AACD;;AACD,cAAM,IAAIxM,KAAJ,CACH,oDAAmD2E,MAAO,GADvD,CAAN;AAGD;;AACD/E,MAAAA,wBAAwB,CAAC+E,MAAD,CAAxB,GAAmCuH,GAAnC;AACD;;AACD,aAASO,4BAAT,CACE9H,MADF,EAEEuH,GAFF,EAGEM,eAAe,GAAG,KAHpB,EAIE;AACA,UAAI3M,6BAA6B,CAAC8E,MAAD,CAAjC,EAA2C;AACzC,YAAI6H,eAAJ,EAAqB;AACnB;AACD;;AACD,cAAM,IAAIxM,KAAJ,CACH,2DAA0D2E,MAAO,GAD9D,CAAN;AAGD;;AACD9E,MAAAA,6BAA6B,CAAC8E,MAAD,CAA7B,GAAwCuH,GAAxC;AACD,KA5qCM,CA8qCP;;;AACA,aAASQ,kBAAT,CAA4B/H,MAA5B,EAAoCE,YAApC,EAAkD;AAChD,UAAIA,YAAY,KAAKrD,SAArB,EAAgC;AAC9B;AACAG,QAAAA,OAAO,CAACC,IAAR,CACE,4PADF;AAGD;;AACD,aAAOmI,6BAA6B,CAACpF,MAAD,EAASE,YAAT,CAApC;AACD;;AACD,aAAS8H,uBAAT,CAAiChI,MAAjC,EAAyCE,YAAzC,EAAuD;AACrD,UAAIA,YAAY,KAAKrD,SAArB,EAAgC;AAC9B;AACAG,QAAAA,OAAO,CAACC,IAAR,CACE,iQADF;AAGD;;AACD,aAAOqI,kCAAkC,CAACtF,MAAD,EAASE,YAAT,CAAzC;AACD;;AACD,aAAS+H,sBAAT,CACE5K,QADF,EAEEtB,IAFF,EAGEmE,YAHF,EAIEC,WAJF,EAKE;AACA,UAAID,YAAY,KAAKrD,SAArB,EAAgC;AAC9B;AACAG,QAAAA,OAAO,CAACC,IAAR,CACE,+PADF;AAGD;;AACD,aAAOgD,iCAAiC,CACtC5C,QADsC,EAEtCtB,IAFsC,EAGtCmE,YAHsC,EAItCC,WAJsC,CAAxC;AAMD,KAntCM,CAotCP;;;AAEA,WAAO1G,KAAK,CAACyO,MAAN,CAAazO,KAAb,EAAoB;AACzB0O,MAAAA,yBAAyB,EAAEP,uBADF;AAEzBQ,MAAAA,8BAA8B,EAAEN,4BAFP;AAGzBO,MAAAA,+BAA+B,EAAEjD,6BAHR;AAIzBkD,MAAAA,oCAAoC,EAClChD,kCALuB;AAMzBzJ,MAAAA,YANyB;AAOzBa,MAAAA,MAPyB;AAQzBZ,MAAAA,aARyB;AASzBa,MAAAA,MATyB;AAUzBsD,MAAAA,iCAVyB;AAWzBJ,MAAAA,gBAXyB;AAYzBD,MAAAA,0BAZyB;AAczB;AACA2I,MAAAA,oBAAoB,EAAER,kBAfG;AAeiB;AAC1CS,MAAAA,yBAAyB,EAAER,uBAhBF;AAgB2B;AACpDC,MAAAA,sBAjByB,CAiBD;;AAjBC,KAApB,CAAP;AAmBD,GA3uCH,EA4uCE,CAAC,SAAD,CA5uCF,EA6uCE,EA7uCF,EA8uCE,CAAC,iBAAD,EAAoB,eAApB,CA9uCF;AAivCA;;AACA/O,EAAAA,OAAO,CAACM,IAAR,CACE,YADF,EAEE,CAACO,UAAD,EAAaN,KAAb,KAAuB;AACrB;AACA;AACA,QAAIL,YAAJ,EAAkB,OAAOK,KAAP;AAClB,WAAOA,KAAK,CAACyO,MAAN,CAAanO,UAAb,EAAyB;AAC9B0O,MAAAA,UAAU,GAAG;AACX,eAAO,cAAP;AACD;;AAH6B,KAAzB,CAAP;AAKD,GAXH,EAYE,CAAC,eAAD,CAZF;AAcAvP,EAAAA,OAAO,CAACM,IAAR,CACE,OADF,EAEEC,KAAK,IAAI;AACP;AACA;AACA,QAAIL,YAAJ,EAAkB,OAAOK,KAAP;AAClB,UAAM;AACJC,MAAAA,4BAA4B,EAAEC,0BAD1B;AAEJwO,MAAAA,yBAFI;AAGJC,MAAAA,8BAHI;AAIJvM,MAAAA,YAJI;AAKJhC,MAAAA,KAAK,EAAEC;AALH,QAMFL,KANJ,CAJO,CAYP;;AACA,UAAMiP,eAAe,GAAG/O,0BAA0B,CAACgP,SAA3B,CAAqC1E,IAArC,CACtBlH,CAAC,IAAIA,CAAC,CAACN,IAAF,KAAW,QADM,CAAxB;;AAGA,QAAI,CAACiM,eAAL,EAAsB;AACpB,aAAOjP,KAAP;AACD,KAlBM,CAoBP;;;AACA,UAAMgP,UAAU,GAAG9O,0BAA0B,CAACoC,IAA3B,CAAgCkI,IAAhC,CACjBC,CAAC,IACCA,CAAC,CAACzH,IAAF,KAAW,QAAX,IAAuByH,CAAC,CAAC0E,WAAF,KAAkBF,eAAe,CAACE,WAF1C,CAAnB;;AAIA,QAAI,CAACH,UAAL,EAAiB;AACf,aAAOhP,KAAP;AACD;;AAED,UAAMoP,cAAc,GAAGpP,KAAK,CAACM,UAAN,CAAiB0O,UAAjB,EAAvB,CA7BO,CA+BP;AACA;AACA;;AACA,UAAMK,iBAAiB,GAAGC,qBAAqB,CAACtP,KAAD,EAAQoP,cAAR,CAA/C,CAlCO,CAoCP;;AACAV,IAAAA,yBAAyB,CAACM,UAAU,CAACzM,EAAZ,EAAgB,MAAM8M,iBAAtB,CAAzB;AACAV,IAAAA,8BAA8B,CAACK,UAAU,CAACzM,EAAZ,EAAgB,MAAM8M,iBAAtB,CAA9B,CAtCO,CAwCP;;AACAjN,IAAAA,YAAY,CAAC4M,UAAU,CAACzM,EAAZ,CAAZ,GAA8B;AAC5B;AACAC,MAAAA,GAAG,EAAElD,QAFuB;AAG5B;AACAoE,MAAAA,KAAK,EAAE+F,CAAC,IACNpJ,GAAG,CAACuD,QAAS,IAAGvD,GAAG,CAACd,KAAJ,CAAUgQ,eAAe,CAAC9F,CAAD,CAAzB,CAA8B,KAAIpJ,GAAG,CAAC2D,UAAJ,CAChDgL,UAAU,CAACjM,aADqC,EAEhDiM,UAAU,CAAChM,IAFqC,CAGhD;AARwB,KAA9B;AAWA,WAAOhD,KAAP;AACD,GAvDH,EAwDE,CAAC,eAAD,CAxDF,EAyDE,EAzDF,EA0DE,CAAC,SAAD,CA1DF;AA4DA;;AAEA;;AACAP,EAAAA,OAAO,CAACM,IAAR,CACE,OADF,EAEEC,KAAK,IAAI;AACP;AACA;AACA,QAAI,CAACJ,gBAAL,EAAuB,OAAOI,KAAP;AACvB,UAAM;AACJ0O,MAAAA,yBADI;AAEJC,MAAAA,8BAFI;AAGJC,MAAAA,+BAHI;AAIJC,MAAAA,oCAJI;AAKJzM,MAAAA,YALI;AAMJhC,MAAAA,KAAK,EAAEC,GANH;AAOJE,MAAAA,OAAO,EAAE;AACPW,QAAAA,iBADO;AAEPC,QAAAA,sBAFO;AAGPH,QAAAA,WAHO;AAIPD,QAAAA,cAJO;AAKPD,QAAAA;AALO,OAPL;AAcJR,MAAAA;AAdI,QAeFN,KAfJ,CAJO,CAqBP;;AACA,UAAMwP,IAAI,GAAG,GAAb;AACA,UAAMC,IAAI,GAAG,GAAb;AACA,UAAMC,GAAG,GAAG,GAAZ;AACA,UAAMC,IAAI,GAAG,GAAb;AACA,UAAMC,OAAO,GAAG,GAAhB;AACA,UAAMC,MAAM,GAAG,GAAf;AAEAnB,IAAAA,yBAAyB,CAACc,IAAD,EAAO,MAAM;AACpC,YAAMxG,KAAK,GAAG4F,+BAA+B,CAAC,KAAD,EAAQ,IAAR,CAA7C;;AACA,UAAI,CAAC5F,KAAL,EAAY;AACV,cAAM,IAAIpH,KAAJ,CAAU,iBAAV,CAAN;AACD;;AACD,aAAO,IAAIV,iBAAJ,CAAsB;AAC3B8B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,MAAnB,CADqB;AAE3BR,QAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,0DADW,EAEX,MAFW,CAFc;AAM3BQ,QAAAA,MAAM,EAAE;AACNkL,UAAAA,CAAC,EAAE;AAAExN,YAAAA,IAAI,EAAE0G;AAAR,WADG;AAEN+G,UAAAA,CAAC,EAAE;AAAEzN,YAAAA,IAAI,EAAE0G;AAAR;AAFG;AANmB,OAAtB,CAAP;AAWD,KAhBwB,CAAzB;AAiBA2F,IAAAA,8BAA8B,CAACa,IAAD,EAAO,MAAM;AACzC,YAAMpG,UAAU,GAAGyF,oCAAoC,CAAC,KAAD,EAAQ,IAAR,CAAvD;AACA,aAAO,IAAI1N,sBAAJ,CAA2B;AAChC6B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,WAAnB,CAD0B;AAEhCR,QAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,0DADW,EAEX,MAFW,CAFmB;AAMhCQ,QAAAA,MAAM,EAAE;AACNkL,UAAAA,CAAC,EAAE;AAAExN,YAAAA,IAAI,EAAE8G;AAAR,WADG;AAEN2G,UAAAA,CAAC,EAAE;AAAEzN,YAAAA,IAAI,EAAE8G;AAAR;AAFG;AANwB,OAA3B,CAAP;AAWD,KAb6B,CAA9B;AAcAhH,IAAAA,YAAY,CAACoN,IAAD,CAAZ,GAAqB;AACnBhN,MAAAA,GAAG,EAAEyH,CAAC,IAAI;AACR,YAAIA,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAxC,EAA6C;AAC3C,gBAAM,CAAC8F,CAAD,EAAIC,CAAJ,EAAOC,CAAP,IAAYjG,CAAC,CAChBE,KADe,CACT,CADS,EACN,CAAC,CADK,EAEfC,KAFe,CAET,GAFS,EAGf5H,GAHe,CAGXyH,CAAC,IAAII,UAAU,CAACJ,CAAD,CAHJ,CAAlB,CAD2C,CAK3C;AACA;AACA;;AACA,iBAAO;AACL6F,YAAAA,CAAC,EAAE;AAAE7G,cAAAA,CAAC,EAAE,CAACiH,CAAD,GAAKF,CAAV;AAAa9G,cAAAA,CAAC,EAAE;AAAhB,aADE;AAEL6G,YAAAA,CAAC,EAAE;AAAE9G,cAAAA,CAAC,EAAE,CAAL;AAAQC,cAAAA,CAAC,EAAE,CAACgH,CAAD,GAAKD;AAAhB;AAFE,WAAP;AAID;AACF,OAfkB;AAgBnBvM,MAAAA,KAAK,EAAE+F,CAAC,IACNpJ,GAAG,CAACuD,QAAS,cAAavD,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACqG,CAAF,CAAI7G,CAAd,CAAiB,KAAI5I,GAAG,CAACd,KAAJ,CAC7CkK,CAAC,CAACqG,CAAF,CAAI5G,CADyC,CAE7C,YAAW7I,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACsG,CAAF,CAAI9G,CAAd,CAAiB,KAAI5I,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACsG,CAAF,CAAI7G,CAAd,CAAiB;AAnBlC,KAArB;AAsBAwF,IAAAA,yBAAyB,CAACe,IAAD,EAAO,MAAM;AACpC,YAAMzG,KAAK,GAAG4F,+BAA+B,CAAC,KAAD,EAAQ,IAAR,CAA7C;AACA,aAAO,IAAI1N,iBAAJ,CAAsB;AAC3B8B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,aAAnB,CADqB;AAE3BR,QAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,4CADW,EAEX,MAFW,CAFc;AAM3BQ,QAAAA,MAAM,EAAE;AACNkL,UAAAA,CAAC,EAAE;AAAExN,YAAAA,IAAI,EAAE0G;AAAR,WADG;AAEN+G,UAAAA,CAAC,EAAE;AAAEzN,YAAAA,IAAI,EAAE0G;AAAR;AAFG;AANmB,OAAtB,CAAP;AAWD,KAbwB,CAAzB;AAcA2F,IAAAA,8BAA8B,CAACc,IAAD,EAAO,MAAM;AACzC,YAAMrG,UAAU,GAAGyF,oCAAoC,CAAC,KAAD,EAAQ,IAAR,CAAvD;AACA,aAAO,IAAI1N,sBAAJ,CAA2B;AAChC6B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,kBAAnB,CAD0B;AAEhCR,QAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,4CADW,EAEX,MAFW,CAFmB;AAMhCQ,QAAAA,MAAM,EAAE;AACNkL,UAAAA,CAAC,EAAE;AAAExN,YAAAA,IAAI,EAAE8G;AAAR,WADG;AAEN2G,UAAAA,CAAC,EAAE;AAAEzN,YAAAA,IAAI,EAAE8G;AAAR;AAFG;AANwB,OAA3B,CAAP;AAWD,KAb6B,CAA9B;AAcAhH,IAAAA,YAAY,CAACqN,IAAD,CAAZ,GAAqB;AACnBjN,MAAAA,GAAG,EAAEyH,CAAC,IAAI;AACR,YAAIA,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAxC,EAA6C;AAC3C,gBAAM,CAACiG,EAAD,EAAKC,EAAL,EAASC,EAAT,EAAaC,EAAb,IAAmBrG,CAAC,CACvBE,KADsB,CAChB,CADgB,EACb,CAAC,CADY,EAEtB9K,OAFsB,CAEd,OAFc,EAEL,EAFK,EAGtB+K,KAHsB,CAGhB,GAHgB,EAItB5H,GAJsB,CAIlByH,CAAC,IAAII,UAAU,CAACJ,CAAD,CAJG,CAAzB;AAKA,iBAAO;AACL6F,YAAAA,CAAC,EAAE;AAAE7G,cAAAA,CAAC,EAAEkH,EAAL;AAASjH,cAAAA,CAAC,EAAEkH;AAAZ,aADE;AAELL,YAAAA,CAAC,EAAE;AAAE9G,cAAAA,CAAC,EAAEoH,EAAL;AAASnH,cAAAA,CAAC,EAAEoH;AAAZ;AAFE,WAAP;AAID;AACF,OAbkB;AAcnB5M,MAAAA,KAAK,EAAE+F,CAAC,IACNpJ,GAAG,CAACuD,QAAS,cAAavD,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACqG,CAAF,CAAI7G,CAAd,CAAiB,KAAI5I,GAAG,CAACd,KAAJ,CAC7CkK,CAAC,CAACqG,CAAF,CAAI5G,CADyC,CAE7C,YAAW7I,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACsG,CAAF,CAAI9G,CAAd,CAAiB,KAAI5I,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACsG,CAAF,CAAI7G,CAAd,CAAiB;AAjBlC,KAArB;AAoBAwF,IAAAA,yBAAyB,CAACgB,GAAD,EAAM,MAAM;AACnC,YAAM1G,KAAK,GAAG4F,+BAA+B,CAAC,KAAD,EAAQ,IAAR,CAA7C;AACA,aAAO,IAAI1N,iBAAJ,CAAsB;AAC3B8B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,KAAnB,CADqB;AAE3BR,QAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,+DADW,EAEX,MAFW,CAFc;AAM3BQ,QAAAA,MAAM,EAAE;AACNkL,UAAAA,CAAC,EAAE;AAAExN,YAAAA,IAAI,EAAE0G;AAAR,WADG;AAEN+G,UAAAA,CAAC,EAAE;AAAEzN,YAAAA,IAAI,EAAE0G;AAAR;AAFG;AANmB,OAAtB,CAAP;AAWD,KAbwB,CAAzB;AAcA2F,IAAAA,8BAA8B,CAACe,GAAD,EAAM,MAAM;AACxC,YAAMtG,UAAU,GAAGyF,oCAAoC,CAAC,KAAD,EAAQ,IAAR,CAAvD;AACA,aAAO,IAAI1N,sBAAJ,CAA2B;AAChC6B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,UAAnB,CAD0B;AAEhCR,QAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,+DADW,EAEX,MAFW,CAFmB;AAMhCQ,QAAAA,MAAM,EAAE;AACNkL,UAAAA,CAAC,EAAE;AAAExN,YAAAA,IAAI,EAAE8G;AAAR,WADG;AAEN2G,UAAAA,CAAC,EAAE;AAAEzN,YAAAA,IAAI,EAAE8G;AAAR;AAFG;AANwB,OAA3B,CAAP;AAWD,KAb6B,CAA9B;AAcAhH,IAAAA,YAAY,CAACsN,GAAD,CAAZ,GAAoB;AAClBlN,MAAAA,GAAG,EAAEyH,CAAC,IAAI;AACR,YAAIA,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAxC,EAA6C;AAC3C,gBAAM,CAACiG,EAAD,EAAKC,EAAL,EAASC,EAAT,EAAaC,EAAb,IAAmBrG,CAAC,CACvBE,KADsB,CAChB,CADgB,EACb,CAAC,CADY,EAEtB9K,OAFsB,CAEd,OAFc,EAEL,EAFK,EAGtB+K,KAHsB,CAGhB,GAHgB,EAItB5H,GAJsB,CAIlByH,CAAC,IAAII,UAAU,CAACJ,CAAD,CAJG,CAAzB;AAKA,iBAAO;AACL6F,YAAAA,CAAC,EAAE;AAAE7G,cAAAA,CAAC,EAAEkH,EAAL;AAASjH,cAAAA,CAAC,EAAEkH;AAAZ,aADE;AAELL,YAAAA,CAAC,EAAE;AAAE9G,cAAAA,CAAC,EAAEoH,EAAL;AAASnH,cAAAA,CAAC,EAAEoH;AAAZ;AAFE,WAAP;AAID;AACF,OAbiB;AAclB5M,MAAAA,KAAK,EAAE+F,CAAC,IACNpJ,GAAG,CAACuD,QAAS,aAAYvD,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACqG,CAAF,CAAI7G,CAAd,CAAiB,KAAI5I,GAAG,CAACd,KAAJ,CAC5CkK,CAAC,CAACqG,CAAF,CAAI5G,CADwC,CAE5C,YAAW7I,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACsG,CAAF,CAAI9G,CAAd,CAAiB,KAAI5I,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACsG,CAAF,CAAI7G,CAAd,CAAiB;AAjBnC,KAApB;AAoBAwF,IAAAA,yBAAyB,CAACiB,IAAD,EAAO,MAAM;AACpC,YAAM3G,KAAK,GAAG4F,+BAA+B,CAAC,KAAD,EAAQ,IAAR,CAA7C;AACA,aAAO,IAAI1N,iBAAJ,CAAsB;AAC3B8B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,MAAnB,CADqB;AAE3BR,QAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,2CADW,EAEX,MAFW,CAFc;AAM3BQ,QAAAA,MAAM,EAAE;AACN2L,UAAAA,MAAM,EAAE;AACNjO,YAAAA,IAAI,EAAE,IAAItB,WAAJ,CAAgBgI,KAAhB;AADA,WADF;AAINwH,UAAAA,MAAM,EAAE;AACNrM,YAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,wEADW,EAEX,OAFW,CADP;AAKN9B,YAAAA,IAAI,EAAEvB;AALA;AAJF;AANmB,OAAtB,CAAP;AAmBD,KArBwB,CAAzB;AAsBA4N,IAAAA,8BAA8B,CAACgB,IAAD,EAAO,MAAM;AACzC,YAAMvG,UAAU,GAAGyF,oCAAoC,CAAC,KAAD,EAAQ,IAAR,CAAvD;AACA,aAAO,IAAI1N,sBAAJ,CAA2B;AAChC6B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,WAAnB,CAD0B;AAEhCR,QAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,2CADW,EAEX,MAFW,CAFmB;AAMhCQ,QAAAA,MAAM,EAAE;AACN2L,UAAAA,MAAM,EAAE;AACNjO,YAAAA,IAAI,EAAE,IAAItB,WAAJ,CAAgBoI,UAAhB;AADA,WADF;AAINoH,UAAAA,MAAM,EAAE;AACNrM,YAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,wEADW,EAEX,OAFW,CADP;AAKN9B,YAAAA,IAAI,EAAEvB;AALA;AAJF;AANwB,OAA3B,CAAP;AAmBD,KArB6B,CAA9B;AAsBAqB,IAAAA,YAAY,CAACuN,IAAD,CAAZ,GAAqB;AACnBnN,MAAAA,GAAG,EAAEyH,CAAC,IAAI;AACR,YAAIuG,MAAM,GAAG,IAAb;;AACA,YAAIvG,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAxC,EAA6C;AAC3CsG,UAAAA,MAAM,GAAG,KAAT;AACD,SAFD,MAEO,IAAIvG,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAxC,EAA6C;AAClDsG,UAAAA,MAAM,GAAG,IAAT;AACD;;AACD,YAAIA,MAAM,KAAK,IAAf,EAAqB;AACnB,gBAAMC,OAAO,GAAGxG,CAAC,CACdE,KADa,CACP,CADO,EACJ,CAAC,CADG,EAEb9K,OAFa,CAEL,OAFK,EAEI,EAFJ,EAGb+K,KAHa,CAGP,GAHO,EAIb5H,GAJa,CAITyH,CAAC,IAAII,UAAU,CAACJ,CAAD,CAJN,CAAhB;;AAKA,cAAIwG,OAAO,CAACvG,MAAR,GAAiB,CAAjB,KAAuB,CAA3B,EAA8B;AAC5B,kBAAM,IAAItI,KAAJ,CAAU,6BAAV,CAAN;AACD;;AACD,gBAAM2O,MAAM,GAAG,EAAf;;AACA,eAAK,IAAIrF,CAAC,GAAG,CAAR,EAAWwF,CAAC,GAAGD,OAAO,CAACvG,MAA5B,EAAoCgB,CAAC,GAAGwF,CAAxC,EAA2CxF,CAAC,IAAI,CAAhD,EAAmD;AACjDqF,YAAAA,MAAM,CAACxG,IAAP,CAAY;AAAEd,cAAAA,CAAC,EAAEwH,OAAO,CAACvF,CAAD,CAAZ;AAAiBhC,cAAAA,CAAC,EAAEuH,OAAO,CAACvF,CAAC,GAAG,CAAL;AAA3B,aAAZ;AACD;;AACD,iBAAO;AACLsF,YAAAA,MADK;AAELD,YAAAA;AAFK,WAAP;AAID;AACF,OA1BkB;AA2BnB7M,MAAAA,KAAK,EAAE+F,CAAC,IAAI;AACV,cAAMkH,SAAS,GAAGlH,CAAC,CAAC+G,MAAF,GAAW,GAAX,GAAiB,GAAnC;AACA,cAAMI,UAAU,GAAGnH,CAAC,CAAC+G,MAAF,GAAW,GAAX,GAAiB,GAApC;AACA,cAAMtO,GAAG,GAAI,GAAEyO,SAAU,GAAElH,CAAC,CAAC8G,MAAF,CACxB/N,GADwB,CACpBqO,CAAC,IAAK,IAAGA,CAAC,CAAC5H,CAAE,IAAG4H,CAAC,CAAC3H,CAAE,GADA,EAExBrF,IAFwB,CAEnB,GAFmB,CAEd,GAAE+M,UAAW,EAF1B;AAGA,eAAOvQ,GAAG,CAACd,KAAJ,CAAU2C,GAAV,CAAP;AACD;AAlCkB,KAArB;AAqCAwM,IAAAA,yBAAyB,CAACkB,OAAD,EAAU,MAAM;AACvC,YAAM5G,KAAK,GAAG4F,+BAA+B,CAAC,KAAD,EAAQ,IAAR,CAA7C;AACA,aAAO,IAAI1N,iBAAJ,CAAsB;AAC3B8B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,SAAnB,CADqB;AAE3BC,QAAAA,MAAM,EAAE;AACN2L,UAAAA,MAAM,EAAE;AACNjO,YAAAA,IAAI,EAAE,IAAItB,WAAJ,CAAgBgI,KAAhB;AADA;AADF;AAFmB,OAAtB,CAAP;AAQD,KAVwB,CAAzB;AAWA2F,IAAAA,8BAA8B,CAACiB,OAAD,EAAU,MAAM;AAC5C,YAAMxG,UAAU,GAAGyF,oCAAoC,CAAC,KAAD,EAAQ,IAAR,CAAvD;AACA,aAAO,IAAI1N,sBAAJ,CAA2B;AAChC6B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,cAAnB,CAD0B;AAEhCC,QAAAA,MAAM,EAAE;AACN2L,UAAAA,MAAM,EAAE;AACNjO,YAAAA,IAAI,EAAE,IAAItB,WAAJ,CAAgBoI,UAAhB;AADA;AADF;AAFwB,OAA3B,CAAP;AAQD,KAV6B,CAA9B;AAWAhH,IAAAA,YAAY,CAACwN,OAAD,CAAZ,GAAwB;AACtBpN,MAAAA,GAAG,EAAEyH,CAAC,IAAI;AACR,YAAIA,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAxC,EAA6C;AAC3C,gBAAMuG,OAAO,GAAGxG,CAAC,CACdE,KADa,CACP,CADO,EACJ,CAAC,CADG,EAEb9K,OAFa,CAEL,OAFK,EAEI,EAFJ,EAGb+K,KAHa,CAGP,GAHO,EAIb5H,GAJa,CAITyH,CAAC,IAAII,UAAU,CAACJ,CAAD,CAJN,CAAhB;;AAKA,cAAIwG,OAAO,CAACvG,MAAR,GAAiB,CAAjB,KAAuB,CAA3B,EAA8B;AAC5B,kBAAM,IAAItI,KAAJ,CAAU,gCAAV,CAAN;AACD;;AACD,gBAAM2O,MAAM,GAAG,EAAf;;AACA,eAAK,IAAIrF,CAAC,GAAG,CAAR,EAAWwF,CAAC,GAAGD,OAAO,CAACvG,MAA5B,EAAoCgB,CAAC,GAAGwF,CAAxC,EAA2CxF,CAAC,IAAI,CAAhD,EAAmD;AACjDqF,YAAAA,MAAM,CAACxG,IAAP,CAAY;AAAEd,cAAAA,CAAC,EAAEwH,OAAO,CAACvF,CAAD,CAAZ;AAAiBhC,cAAAA,CAAC,EAAEuH,OAAO,CAACvF,CAAC,GAAG,CAAL;AAA3B,aAAZ;AACD;;AACD,iBAAO;AACLqF,YAAAA;AADK,WAAP;AAGD;AACF,OAnBqB;AAoBtB7M,MAAAA,KAAK,EAAE+F,CAAC,IAAI;AACV,cAAMvH,GAAG,GAAI,IAAGuH,CAAC,CAAC8G,MAAF,CAAS/N,GAAT,CAAaqO,CAAC,IAAK,IAAGA,CAAC,CAAC5H,CAAE,IAAG4H,CAAC,CAAC3H,CAAE,GAAjC,EAAqCrF,IAArC,CAA0C,GAA1C,CAA+C,GAA/D;AACA,eAAOxD,GAAG,CAACd,KAAJ,CAAU2C,GAAV,CAAP;AACD;AAvBqB,KAAxB;AA0BAwM,IAAAA,yBAAyB,CAACmB,MAAD,EAAS,MAAM;AACtC,YAAM7G,KAAK,GAAG4F,+BAA+B,CAAC,KAAD,EAAQ,IAAR,CAA7C;AACA,aAAO,IAAI1N,iBAAJ,CAAsB;AAC3B8B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,QAAnB,CADqB;AAE3BC,QAAAA,MAAM,EAAE;AACNkM,UAAAA,MAAM,EAAE;AAAExO,YAAAA,IAAI,EAAE0G;AAAR,WADF;AAEN+H,UAAAA,MAAM,EAAE;AAAEzO,YAAAA,IAAI,EAAExB;AAAR;AAFF;AAFmB,OAAtB,CAAP;AAOD,KATwB,CAAzB;AAUA6N,IAAAA,8BAA8B,CAACkB,MAAD,EAAS,MAAM;AAC3C,YAAMzG,UAAU,GAAGyF,oCAAoC,CAAC,KAAD,EAAQ,IAAR,CAAvD;AACA,aAAO,IAAI1N,sBAAJ,CAA2B;AAChC6B,QAAAA,IAAI,EAAE1C,UAAU,CAACqE,OAAX,CAAmB,aAAnB,CAD0B;AAEhCC,QAAAA,MAAM,EAAE;AACNkM,UAAAA,MAAM,EAAE;AAAExO,YAAAA,IAAI,EAAE8G;AAAR,WADF;AAEN2H,UAAAA,MAAM,EAAE;AAAEzO,YAAAA,IAAI,EAAExB;AAAR;AAFF;AAFwB,OAA3B,CAAP;AAOD,KAT6B,CAA9B;AAUAsB,IAAAA,YAAY,CAACyN,MAAD,CAAZ,GAAuB;AACrBrN,MAAAA,GAAG,EAAEyH,CAAC,IAAI;AACR,YAAIA,CAAC,CAAC,CAAD,CAAD,KAAS,GAAT,IAAgBA,CAAC,CAACA,CAAC,CAACC,MAAF,GAAW,CAAZ,CAAD,KAAoB,GAAxC,EAA6C;AAC3C,gBAAM,CAACjB,CAAD,EAAIC,CAAJ,EAAO8H,CAAP,IAAY/G,CAAC,CAChBE,KADe,CACT,CADS,EACN,CAAC,CADK,EAEf9K,OAFe,CAEP,OAFO,EAEE,EAFF,EAGf+K,KAHe,CAGT,GAHS,EAIf5H,GAJe,CAIXyH,CAAC,IAAII,UAAU,CAACJ,CAAD,CAJJ,CAAlB;AAKA,iBAAO;AACL6G,YAAAA,MAAM,EAAE;AAAE7H,cAAAA,CAAF;AAAKC,cAAAA;AAAL,aADH;AAEL6H,YAAAA,MAAM,EAAEC;AAFH,WAAP;AAID;AACF,OAboB;AAcrBtN,MAAAA,KAAK,EAAE+F,CAAC,IACNpJ,GAAG,CAACuD,QAAS,gBAAevD,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACqH,MAAF,CAAS7H,CAAnB,CAAsB,KAAI5I,GAAG,CAACd,KAAJ,CACpDkK,CAAC,CAACqH,MAAF,CAAS5H,CAD2C,CAEpD,MAAK7I,GAAG,CAACd,KAAJ,CAAUkK,CAAC,CAACsH,MAAZ,CAAoB;AAjBR,KAAvB,CAvUO,CA2VP;;AAEA,WAAO/Q,KAAP;AACD,GAhWH,EAiWE,CAAC,iBAAD,CAjWF,EAkWE,EAlWF,EAmWE,CAAC,SAAD,CAnWF;AAqWA;AACD,C;;;;AAED,SAASsP,qBAAT,CAA+BtP,KAA/B,EAAsCoP,cAAtC,EAAsD;AACpD,QAAM;AAAE7O,IAAAA;AAAF,MAAcP,KAApB;AACA,QAAM;AAAEoB,IAAAA,iBAAF;AAAqBG,IAAAA;AAArB,MAA8BhB,OAApC;;AAEA,WAAS0Q,mBAAT,CAA6BC,GAA7B,EAAkC;AAChC,QAAIA,GAAG,KAAK,IAAZ,EAAkB;AAChB;AACA,aAAO,IAAP;AACD,KAHD,MAGO,IAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AAClC;AACA,YAAMtH,IAAI,GAAGyD,MAAM,CAACzD,IAAP,CAAYsH,GAAZ,CAAb;;AACA,WAAK,MAAMpH,GAAX,IAAkBF,IAAlB,EAAwB;AACtB,cAAM1H,GAAG,GAAGgP,GAAG,CAACpH,GAAD,CAAf;;AACA,YAAI5H,GAAG,KAAK,IAAZ,EAAkB,CAChB;AACD,SAFD,MAEO,IAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B,CAClC;AACD,SAFM,MAEA;AACL;AACA,iBAAO,KAAP;AACD;AACF;;AACD,aAAO,IAAP;AACD,KAfM,MAeA;AACL;AACA,aAAO,KAAP;AACD;AACF;;AAED,WAASiP,iBAAT,CAA2BD,GAA3B,EAAgC;AAC9B,QAAID,mBAAmB,CAACC,GAAD,CAAvB,EAA8B;AAC5B,aAAOA,GAAP;AACD;;AACD,UAAM,IAAIE,SAAJ,CACH,uBAAsBhC,cAAe,wFADlC,CAAN;AAGD;;AAED,WAASiC,iBAAT,CAA2B9L,GAA3B,EAAgC+L,SAAhC,EAA2C;AACzC,YAAQ/L,GAAG,CAACC,IAAZ;AACE,WAAKjE,IAAI,CAACgQ,GAAV;AACA,WAAKhQ,IAAI,CAACiQ,KAAV;AACE;AACA,eAAOpM,MAAM,CAACiF,UAAU,CAAC9E,GAAG,CAAChG,KAAL,CAAX,CAAb;;AACF,WAAKgC,IAAI,CAACkE,MAAV;AACE;AACA,eAAOL,MAAM,CAACG,GAAG,CAAChG,KAAL,CAAb;;AACF,WAAKgC,IAAI,CAACkQ,IAAV;AACE;AACA,eAAO,IAAP;;AACF,WAAKlQ,IAAI,CAACmQ,QAAV;AAAoB;AAClB;AACA,gBAAM1O,IAAI,GAAGuC,GAAG,CAACvC,IAAJ,CAASzD,KAAtB;AACA,gBAAMA,KAAK,GAAG+R,SAAS,GAAGA,SAAS,CAACtO,IAAD,CAAZ,GAAqBI,SAA5C;;AACA,cAAI7D,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,QAAvC,EAAiD;AAC/C,mBAAOA,KAAP;AACD;;AACD,iBAAO6D,SAAP;AACD;;AACD;AACE;AACA,eAAOA,SAAP;AAtBJ;AAwBD;;AAED,WAASkC,YAAT,CAAsBC,GAAtB,EAA2B+L,SAA3B,EAAsC;AACpC,YAAQ/L,GAAG,CAACC,IAAZ;AACE,WAAKjE,IAAI,CAACoQ,MAAV;AAAkB;AAChB,gBAAMpS,KAAK,GAAGgG,GAAG,CAACX,MAAJ,CAAWyB,MAAX,CAAkB,CAACC,IAAD,EAAOsL,KAAP,KAAiB;AAC/CtL,YAAAA,IAAI,CAACsL,KAAK,CAAC5O,IAAN,CAAWzD,KAAZ,CAAJ,GAAyB8R,iBAAiB,CAACO,KAAK,CAACrS,KAAP,EAAc+R,SAAd,CAA1C;AACA,mBAAOhL,IAAP;AACD,WAHa,EAGX+G,MAAM,CAACE,MAAP,CAAc,IAAd,CAHW,CAAd;;AAKA,cAAI,CAAC0D,mBAAmB,CAAC1R,KAAD,CAAxB,EAAiC;AAC/B,mBAAO6D,SAAP;AACD;;AACD,iBAAO7D,KAAP;AACD;;AAED,WAAKgC,IAAI,CAACkQ,IAAV;AACE,eAAO,IAAP;;AAEF,WAAKlQ,IAAI,CAACmQ,QAAV;AAAoB;AAClB,gBAAM1O,IAAI,GAAGuC,GAAG,CAACvC,IAAJ,CAASzD,KAAtB;AACA,gBAAMA,KAAK,GAAG+R,SAAS,GAAGA,SAAS,CAACtO,IAAD,CAAZ,GAAqBI,SAA5C;;AAEA,cAAI,CAAC6N,mBAAmB,CAAC1R,KAAD,CAAxB,EAAiC;AAC/B,mBAAO6D,SAAP;AACD;;AACD,iBAAO7D,KAAP;AACD;;AAED;AACE,eAAO6D,SAAP;AA3BJ;AA6BD,GA/FmD,CAiGpD;;;AACA,QAAMyO,aAAa,GAAG,IAAIzQ,iBAAJ,CAAsB;AAC1C4B,IAAAA,IAAI,EAAEoM,cADoC;AAE1CjL,IAAAA,WAAW,EAAEnE,KAAK,CAACoE,eAAN,CACX,uGADW,EAEX,MAFW,CAF6B;AAM1Ce,IAAAA,SAAS,EAAE7F,QAN+B;AAO1C+F,IAAAA,UAAU,EAAE8L,iBAP8B;AAQ1C7L,IAAAA;AAR0C,GAAtB,CAAtB;AAUA,SAAOuM,aAAP;AACD,C,CAED;AACA;AACA;;;AACA,SAASC,cAAT,CAAwB1S,GAAxB,EAA6B;AAC3B,SAAO,MAAMA,GAAG,CAACC,OAAJ,CAAY,UAAZ,EAAwB,MAAxB,CAAN,GAAwC,GAA/C;AACD;;AAED,SAASkQ,eAAT,CAAyB9F,CAAzB,EAA4B;AAC1B,MAAIA,CAAC,KAAK,IAAV,EAAgB;AACd,WAAO,IAAP;AACD;;AACD,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;AACzB,UAAM,IAAI2H,SAAJ,CAAc,2BAAd,CAAN;AACD;;AACD,QAAMxH,IAAI,GAAGyD,MAAM,CAACzD,IAAP,CAAYH,CAAZ,CAAb;;AACA,QAAMsI,cAAc,GAAGjI,GAAG,IAAI;AAC5B,UAAMvK,KAAK,GAAGkK,CAAC,CAACK,GAAD,CAAf;;AACA,QAAIvK,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAQ,GAAEuS,cAAc,CAAChI,GAAD,CAAM,UAA9B;AACD,KAFD,MAEO;AACL,aAAQ,GAAEgI,cAAc,CAAChI,GAAD,CAAM,OAAMgI,cAAc,CAAC1M,MAAM,CAAC7F,KAAD,CAAP,CAAgB,EAAlE;AACD;AACF,GAPD;;AAQA,SAAOqK,IAAI,CAACpH,GAAL,CAASuP,cAAT,EAAyBlO,IAAzB,CAA8B,IAA9B,CAAP;AACD","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nimport makeGraphQLJSONType from \"../GraphQLJSON\";\n\nimport { parseInterval } from \"../postgresInterval\";\n\nfunction indent(str) {\n return \" \" + str.replace(/\\n/g, \"\\n \");\n}\n\nfunction identity(value) {\n return value;\n}\n\nexport default (function PgTypesPlugin(\n builder,\n {\n pgExtendedTypes = true,\n // Adding hstore support is technically a breaking change; this allows people to opt out easily:\n pgSkipHstore = false,\n pgGeometricTypes = false,\n pgUseCustomNetworkScalars = false,\n disableIssue390Fix = false,\n }\n) {\n // XXX: most of this should be in an \"init\" hook, not a \"build\" hook\n builder.hook(\n \"build\",\n build => {\n const {\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n getTypeByName,\n pgSql: sql,\n inflection,\n graphql,\n } = build;\n\n /*\n * Note these do not do `foo.bind(build)` because they want to reference\n * the *latest* value of foo (i.e. after all the build hooks run) rather\n * than the current value of foo in this current hook.\n *\n * Also don't use this in your own code, only construct types *after* the\n * build hook has completed (i.e. 'init' or later).\n *\n * TODO:v5: move this to the 'init' hook.\n */\n const newWithHooks = (...args) => build.newWithHooks(...args);\n const addType = (...args) => build.addType(...args);\n\n const {\n GraphQLNonNull,\n GraphQLString,\n GraphQLInt,\n GraphQLFloat,\n GraphQLBoolean,\n GraphQLList,\n GraphQLEnumType,\n GraphQLObjectType,\n GraphQLInputObjectType,\n GraphQLScalarType,\n isInputType,\n getNamedType,\n Kind,\n } = graphql;\n\n const gqlTypeByTypeIdGenerator = {};\n const gqlInputTypeByTypeIdGenerator = {};\n if (build.pgGqlTypeByTypeId || build.pgGqlInputTypeByTypeId) {\n // I don't expect anyone to receive this error, because I don't think anyone uses this interface.\n throw new Error(\n \"Sorry! This interface is no longer supported because it is not granular enough. It's not hard to port it to the new system - please contact Benjie and he'll walk you through it.\"\n );\n }\n const gqlTypeByTypeIdAndModifier = {\n ...build.pgGqlTypeByTypeIdAndModifier,\n };\n const gqlInputTypeByTypeIdAndModifier = {\n ...build.pgGqlInputTypeByTypeIdAndModifier,\n };\n const isNull = val => val == null || val.__isNull;\n const pg2GqlMapper = {};\n const pg2gqlForType = type => {\n if (pg2GqlMapper[type.id]) {\n const map = pg2GqlMapper[type.id].map;\n return val => (isNull(val) ? null : map(val));\n } else if (type.domainBaseType) {\n return pg2gqlForType(type.domainBaseType);\n } else if (type.isPgArray) {\n const elementHandler = pg2gqlForType(type.arrayItemType);\n return val => {\n if (isNull(val)) return null;\n if (!Array.isArray(val)) {\n throw new Error(\n `Expected array when converting PostgreSQL data into GraphQL; failing type: '${type.namespaceName}.${type.name}'`\n );\n }\n return val.map(elementHandler);\n };\n } else {\n return identity;\n }\n };\n const pg2gql = (val, type) => pg2gqlForType(type)(val);\n const gql2pg = (val, type, modifier) => {\n if (modifier === undefined) {\n let stack;\n try {\n throw new Error();\n } catch (e) {\n stack = e.stack;\n }\n // eslint-disable-next-line no-console\n console.warn(\n \"gql2pg should be called with three arguments, the third being the type modifier (or `null`); \" +\n (stack || \"\")\n );\n // Hack for backwards compatibility:\n modifier = null;\n }\n if (val == null) {\n return sql.null;\n }\n if (pg2GqlMapper[type.id]) {\n return pg2GqlMapper[type.id].unmap(val, modifier);\n } else if (type.domainBaseType) {\n return gql2pg(val, type.domainBaseType, type.domainTypeModifier);\n } else if (type.isPgArray) {\n if (!Array.isArray(val)) {\n throw new Error(\n `Expected array when converting GraphQL data into PostgreSQL data; failing type: '${\n type.namespaceName\n }.${type.name}' (type: ${type === null ? \"null\" : typeof type})`\n );\n }\n return sql.fragment`array[${sql.join(\n val.map(v => gql2pg(v, type.arrayItemType, modifier)),\n \", \"\n )}]::${\n type.isFake\n ? sql.identifier(\"unknown\")\n : sql.identifier(type.namespaceName, type.name)\n }`;\n } else {\n return sql.value(val);\n }\n };\n\n const makeIntervalFields = () => {\n return {\n seconds: {\n description: build.wrapDescription(\n \"A quantity of seconds. This is the only non-integer field, as all the other fields will dump their overflow into a smaller unit of time. Intervals don’t have a smaller unit than seconds.\",\n \"field\"\n ),\n type: GraphQLFloat,\n },\n minutes: {\n description: build.wrapDescription(\n \"A quantity of minutes.\",\n \"field\"\n ),\n type: GraphQLInt,\n },\n hours: {\n description: build.wrapDescription(\"A quantity of hours.\", \"field\"),\n type: GraphQLInt,\n },\n days: {\n description: build.wrapDescription(\"A quantity of days.\", \"field\"),\n type: GraphQLInt,\n },\n months: {\n description: build.wrapDescription(\n \"A quantity of months.\",\n \"field\"\n ),\n type: GraphQLInt,\n },\n years: {\n description: build.wrapDescription(\"A quantity of years.\", \"field\"),\n type: GraphQLInt,\n },\n };\n };\n const GQLInterval = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.builtin(\"Interval\"),\n description: build.wrapDescription(\n \"An interval of time that has passed where the smallest distinct unit is a second.\",\n \"type\"\n ),\n fields: makeIntervalFields(),\n },\n {\n isIntervalType: true,\n }\n );\n addType(GQLInterval, \"graphile-build-pg built-in\");\n\n const GQLIntervalInput = newWithHooks(\n GraphQLInputObjectType,\n {\n name: inflection.inputType(inflection.builtin(\"Interval\")),\n description: build.wrapDescription(\n \"An interval of time that has passed where the smallest distinct unit is a second.\",\n \"type\"\n ),\n fields: makeIntervalFields(),\n },\n {\n isIntervalInputType: true,\n }\n );\n addType(GQLIntervalInput, \"graphile-build-pg built-in\");\n\n const stringType = (name, description, coerce) =>\n new GraphQLScalarType({\n name,\n description,\n serialize: value => String(value),\n parseValue: coerce\n ? value => coerce(String(value))\n : value => String(value),\n parseLiteral: ast => {\n if (ast.kind !== Kind.STRING) {\n throw new Error(\"Can only parse string values\");\n }\n if (coerce) {\n return coerce(ast.value);\n } else {\n return ast.value;\n }\n },\n });\n\n const BigFloat = stringType(\n inflection.builtin(\"BigFloat\"),\n build.wrapDescription(\n \"A floating point number that requires more precision than IEEE 754 binary 64\",\n \"type\"\n )\n );\n const BitString = stringType(\n inflection.builtin(\"BitString\"),\n build.wrapDescription(\n \"A string representing a series of binary bits\",\n \"type\"\n )\n );\n addType(BigFloat, \"graphile-build-pg built-in\");\n addType(BitString, \"graphile-build-pg built-in\");\n\n const rawTypes = [\n 1186, // interval\n 1082, // date\n 1114, // timestamp\n 1184, // timestamptz\n 1083, // time\n 1266, // timetz\n ];\n\n const tweakToJson = fragment => fragment; // Since everything is to_json'd now, just pass through\n const tweakToJsonArray = fragment => fragment;\n const tweakToText = fragment => sql.fragment`(${fragment})::text`;\n const tweakToTextArray = fragment => sql.fragment`(${fragment})::text[]`;\n const tweakToNumericText = fragment =>\n sql.fragment`(${fragment})::numeric::text`;\n const tweakToNumericTextArray = fragment =>\n sql.fragment`(${fragment})::numeric[]::text[]`;\n const pgTweaksByTypeIdAndModifer = {};\n const pgTweaksByTypeId = {\n // '::text' rawTypes\n ...rawTypes.reduce((memo, typeId) => {\n memo[typeId] = tweakToText;\n return memo;\n }, {}),\n\n // cast numbers above our ken to strings to avoid loss of precision\n 20: tweakToText,\n 1700: tweakToText,\n // to_json all dates to make them ISO (overrides rawTypes above)\n 1082: tweakToJson,\n 1114: tweakToJson,\n 1184: tweakToJson,\n 1083: tweakToJson,\n 1266: tweakToJson,\n 790: tweakToNumericText,\n };\n\n const pgTweakFragmentForTypeAndModifier = (\n fragment,\n type,\n typeModifier = null,\n resolveData\n ) => {\n const typeModifierKey = typeModifier != null ? typeModifier : -1;\n const tweaker =\n (pgTweaksByTypeIdAndModifer[type.id] &&\n pgTweaksByTypeIdAndModifer[type.id][typeModifierKey]) ||\n pgTweaksByTypeId[type.id];\n if (tweaker) {\n return tweaker(fragment, resolveData);\n } else if (type.domainBaseType) {\n if (type.domainBaseType.isPgArray) {\n // If we have a domain that's for example an `int8[]`, we must\n // process it into a `text[]` otherwise we risk loss of accuracy\n // when taking PostgreSQL's JSON into Node.js.\n const arrayItemType = type.domainBaseType.arrayItemType;\n\n const domainBaseTypeModifierKey =\n type.domainBaseTypeModifier != null\n ? type.domainBaseTypeModifier\n : -1;\n const arrayItemTweaker =\n (pgTweaksByTypeIdAndModifer[arrayItemType.id] &&\n pgTweaksByTypeIdAndModifer[arrayItemType.id][\n domainBaseTypeModifierKey\n ]) ||\n pgTweaksByTypeId[arrayItemType.id];\n\n // If it's a domain over a known type array (e.g. `bigint[]`), use\n // the Array version of the tweaker.\n switch (arrayItemTweaker) {\n case tweakToText:\n return tweakToTextArray(fragment);\n case tweakToNumericText:\n return tweakToNumericTextArray(fragment);\n case tweakToJson:\n return tweakToJsonArray(fragment);\n }\n\n // If we get here, it's not a simple type, so use our\n // infrastructure to figure out what tweaks to apply to the array\n // item.\n\n const sqlVal = sql.fragment`val`;\n const innerFragment = pgTweakFragmentForTypeAndModifier(\n sqlVal,\n arrayItemType,\n type.domainBaseTypeModifier,\n resolveData\n );\n\n if (innerFragment === sqlVal) {\n // There was no tweak applied to the fragment, no change\n // necessary.\n return fragment;\n } else {\n // Tweaking was necessary, process each item in the array in this\n // way, and then return the resulting array, being careful that\n // nulls are preserved.\n return sql.fragment`(case when ${fragment} is null then null else array(select ${innerFragment} from unnest(${fragment}) as unnest(${sqlVal})) end)`;\n }\n } else {\n // TODO: check that domains don't support atttypemod\n return pgTweakFragmentForTypeAndModifier(\n fragment,\n type.domainBaseType,\n type.domainBaseTypeModifier,\n resolveData\n );\n }\n } else if (type.isPgArray) {\n const error = new Error(\n `Internal graphile-build-pg error: should not attempt to tweak an array, please process array before tweaking (type: \"${type.namespaceName}.${type.name}\")`\n );\n if (process.env.NODE_ENV === \"test\") {\n // This is to ensure that Graphile core does not introduce these problems\n throw error;\n }\n // eslint-disable-next-line no-console\n console.error(error);\n return fragment;\n } else {\n return fragment;\n }\n };\n /*\n Determined by running:\n\n select oid, typname, typarray, typcategory, typtype from pg_catalog.pg_type where typtype = 'b' order by oid;\n\n We only need to add oidLookups for types that don't have the correct fallback\n */\n const SimpleDate = stringType(\n inflection.builtin(\"Date\"),\n build.wrapDescription(\"The day, does not include a time.\", \"type\")\n );\n const SimpleDatetime = stringType(\n inflection.builtin(\"Datetime\"),\n build.wrapDescription(\n \"A point in time as described by the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) standard. May or may not include a timezone.\",\n \"type\"\n )\n );\n const SimpleTime = stringType(\n inflection.builtin(\"Time\"),\n build.wrapDescription(\n \"The exact time of day, does not include the date. May or may not have a timezone offset.\",\n \"type\"\n )\n );\n const SimpleJSON = stringType(\n inflection.builtin(\"JSON\"),\n build.wrapDescription(\n \"A JavaScript object encoded in the JSON format as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).\",\n \"type\"\n )\n );\n const SimpleUUID = stringType(\n inflection.builtin(\"UUID\"),\n build.wrapDescription(\n \"A universally unique identifier as defined by [RFC 4122](https://tools.ietf.org/html/rfc4122).\",\n \"type\"\n ),\n string => {\n if (\n !/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i.test(\n string\n )\n ) {\n throw new Error(\n \"Invalid UUID, expected 32 hexadecimal characters, optionally with hyphens\"\n );\n }\n return string;\n }\n );\n const InetType = stringType(\n inflection.builtin(\"InternetAddress\"),\n build.wrapDescription(\n \"An IPv4 or IPv6 host address, and optionally its subnet.\",\n \"type\"\n )\n );\n const RegProcType = stringType(\n inflection.builtin(\"RegProc\"),\n build.wrapDescription(\n \"A builtin object identifier type for a function name\",\n \"type\"\n )\n );\n const RegProcedureType = stringType(\n inflection.builtin(\"RegProcedure\"),\n build.wrapDescription(\n \"A builtin object identifier type for a function with argument types\",\n \"type\"\n )\n );\n const RegOperType = stringType(\n inflection.builtin(\"RegOper\"),\n build.wrapDescription(\n \"A builtin object identifier type for an operator\",\n \"type\"\n )\n );\n const RegOperatorType = stringType(\n inflection.builtin(\"RegOperator\"),\n build.wrapDescription(\n \"A builtin object identifier type for an operator with argument types\",\n \"type\"\n )\n );\n const RegClassType = stringType(\n inflection.builtin(\"RegClass\"),\n build.wrapDescription(\n \"A builtin object identifier type for a relation name\",\n \"type\"\n )\n );\n const RegTypeType = stringType(\n inflection.builtin(\"RegType\"),\n build.wrapDescription(\n \"A builtin object identifier type for a data type name\",\n \"type\"\n )\n );\n const RegRoleType = stringType(\n inflection.builtin(\"RegRole\"),\n build.wrapDescription(\n \"A builtin object identifier type for a role name\",\n \"type\"\n )\n );\n const RegNamespaceType = stringType(\n inflection.builtin(\"RegNamespace\"),\n build.wrapDescription(\n \"A builtin object identifier type for a namespace name\",\n \"type\"\n )\n );\n const RegConfigType = stringType(\n inflection.builtin(\"RegConfig\"),\n build.wrapDescription(\n \"A builtin object identifier type for a text search configuration\",\n \"type\"\n )\n );\n const RegDictionaryType = stringType(\n inflection.builtin(\"RegDictionary\"),\n build.wrapDescription(\n \"A builtin object identifier type for a text search dictionary\",\n \"type\"\n )\n );\n const CidrType = pgUseCustomNetworkScalars\n ? stringType(\n inflection.builtin(\"CidrAddress\"),\n build.wrapDescription(\"An IPv4 or IPv6 CIDR address.\", \"type\")\n )\n : GraphQLString;\n const MacAddrType = pgUseCustomNetworkScalars\n ? stringType(\n inflection.builtin(\"MacAddress\"),\n build.wrapDescription(\"A 6-byte MAC address.\", \"type\")\n )\n : GraphQLString;\n const MacAddr8Type = pgUseCustomNetworkScalars\n ? stringType(\n inflection.builtin(\"MacAddress8\"),\n build.wrapDescription(\"An 8-byte MAC address.\", \"type\")\n )\n : GraphQLString;\n\n // pgExtendedTypes might change what types we use for things\n const JSONType = pgExtendedTypes\n ? makeGraphQLJSONType(graphql, inflection.builtin(\"JSON\"))\n : SimpleJSON;\n const UUIDType = SimpleUUID; // GraphQLUUID\n const DateType = SimpleDate; // GraphQLDate\n const DateTimeType = SimpleDatetime; // GraphQLDateTime\n const TimeType = SimpleTime; // GraphQLTime\n\n // 'point' in PostgreSQL is a 16-byte type that's comprised of two 8-byte floats.\n const Point = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.builtin(\"Point\"),\n fields: {\n x: {\n type: new GraphQLNonNull(GraphQLFloat),\n },\n y: {\n type: new GraphQLNonNull(GraphQLFloat),\n },\n },\n },\n {\n isPointType: true,\n }\n );\n const PointInput = newWithHooks(\n GraphQLInputObjectType,\n {\n name: inflection.inputType(inflection.builtin(\"Point\")),\n fields: {\n x: {\n type: new GraphQLNonNull(GraphQLFloat),\n },\n y: {\n type: new GraphQLNonNull(GraphQLFloat),\n },\n },\n },\n {\n isPointInputType: true,\n }\n );\n\n // Other plugins might want to use JSON\n addType(JSONType, \"graphile-build-pg built-in\");\n addType(UUIDType, \"graphile-build-pg built-in\");\n addType(DateType, \"graphile-build-pg built-in\");\n addType(DateTimeType, \"graphile-build-pg built-in\");\n addType(TimeType, \"graphile-build-pg built-in\");\n addType(RegProcType, \"graphile-build-pg built-in\");\n addType(RegProcedureType, \"graphile-build-pg built-in\");\n addType(RegOperType, \"graphile-build-pg built-in\");\n addType(RegOperatorType, \"graphile-build-pg built-in\");\n addType(RegClassType, \"graphile-build-pg built-in\");\n addType(RegTypeType, \"graphile-build-pg built-in\");\n addType(RegRoleType, \"graphile-build-pg built-in\");\n addType(RegNamespaceType, \"graphile-build-pg built-in\");\n addType(RegConfigType, \"graphile-build-pg built-in\");\n addType(RegDictionaryType, \"graphile-build-pg built-in\");\n\n const oidLookup = {\n 20: stringType(\n inflection.builtin(\"BigInt\"),\n build.wrapDescription(\n \"A signed eight-byte integer. The upper big integer values are greater than the max value for a JavaScript number. Therefore all big integers will be output as strings and not numbers.\",\n \"type\"\n )\n ), // bigint - even though this is int8, it's too big for JS int, so cast to string.\n 21: GraphQLInt, // int2\n 23: GraphQLInt, // int4\n 700: GraphQLFloat, // float4\n 701: GraphQLFloat, // float8\n 1700: BigFloat, // numeric\n 790: GraphQLFloat, // money\n\n 1186: GQLInterval, // interval\n 1082: DateType, // date\n 1114: DateTimeType, // timestamp\n 1184: DateTimeType, // timestamptz\n 1083: TimeType, // time\n 1266: TimeType, // timetz\n\n 114: JSONType, // json\n 3802: JSONType, // jsonb\n 2950: UUIDType, // uuid\n\n 1560: BitString, // bit\n 1562: BitString, // varbit\n\n 18: GraphQLString, // char\n 25: GraphQLString, // text\n 1043: GraphQLString, // varchar\n\n 600: Point, // point\n\n 869: InetType,\n 650: CidrType,\n 829: MacAddrType,\n 774: MacAddr8Type,\n 24: RegProcType,\n 2202: RegProcedureType,\n 2203: RegOperType,\n 2204: RegOperatorType,\n 2205: RegClassType,\n 2206: RegTypeType,\n 4096: RegRoleType,\n 4089: RegNamespaceType,\n 3734: RegConfigType,\n 3769: RegDictionaryType,\n };\n const oidInputLookup = {\n 1186: GQLIntervalInput, // interval\n 600: PointInput, // point\n };\n const jsonStringify = o => JSON.stringify(o);\n if (pgExtendedTypes) {\n pg2GqlMapper[114] = {\n map: identity,\n unmap: o => sql.value(jsonStringify(o)),\n };\n } else {\n pg2GqlMapper[114] = {\n map: jsonStringify,\n unmap: str => sql.value(str),\n };\n }\n pg2GqlMapper[3802] = pg2GqlMapper[114]; // jsonb\n\n // interval\n pg2GqlMapper[1186] = {\n map: str => parseInterval(str),\n unmap: o => {\n const keys = [\n \"seconds\",\n \"minutes\",\n \"hours\",\n \"days\",\n \"months\",\n \"years\",\n ];\n const parts = [];\n for (const key of keys) {\n if (o[key]) {\n parts.push(`${o[key]} ${key}`);\n }\n }\n return sql.value(parts.join(\" \") || \"0 seconds\");\n },\n };\n\n pg2GqlMapper[790] = {\n map: _ => _,\n unmap: val => sql.fragment`(${sql.value(val)})::money`,\n };\n\n // point\n pg2GqlMapper[600] = {\n map: f => {\n if (f[0] === \"(\" && f[f.length - 1] === \")\") {\n const [x, y] = f\n .slice(1, -1)\n .split(\",\")\n .map(f => parseFloat(f));\n return { x, y };\n }\n },\n unmap: o => sql.fragment`point(${sql.value(o.x)}, ${sql.value(o.y)})`,\n };\n\n // TODO: add more support for geometric types\n\n let depth = 0;\n\n /*\n * Enforce: this is the fallback when we can't find a specific GraphQL type\n * for a specific PG type. Use the generators from\n * `pgRegisterGqlTypeByTypeId` first, this is a last resort.\n */\n const enforceGqlTypeByPgTypeId = (typeId, typeModifier) => {\n const type = introspectionResultsByKind.type.find(t => t.id === typeId);\n depth++;\n if (depth > 50) {\n throw new Error(\"Type enforcement went too deep - infinite loop?\");\n }\n try {\n return reallyEnforceGqlTypeByPgTypeAndModifier(type, typeModifier);\n } catch (e) {\n const error = new Error(\n `Error occurred when processing database type '${\n type.namespaceName\n }.${type.name}' (type=${type.type}):\\n${indent(e.message)}`\n );\n // $FlowFixMe\n error.originalError = e;\n throw error;\n } finally {\n depth--;\n }\n };\n const reallyEnforceGqlTypeByPgTypeAndModifier = (type, typeModifier) => {\n if (!type.id) {\n throw new Error(\n `Invalid argument to enforceGqlTypeByPgTypeId - expected a full type, received '${type}'`\n );\n }\n if (!gqlTypeByTypeIdAndModifier[type.id]) {\n gqlTypeByTypeIdAndModifier[type.id] = {};\n }\n if (!gqlInputTypeByTypeIdAndModifier[type.id]) {\n gqlInputTypeByTypeIdAndModifier[type.id] = {};\n }\n const typeModifierKey = typeModifier != null ? typeModifier : -1;\n // Explicit overrides\n if (!gqlTypeByTypeIdAndModifier[type.id][typeModifierKey]) {\n const gqlType = oidLookup[type.id];\n if (gqlType) {\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = gqlType;\n }\n }\n if (!gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey]) {\n const gqlInputType = oidInputLookup[type.id];\n if (gqlInputType) {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n gqlInputType;\n }\n }\n // Enums\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.type === \"e\"\n ) {\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = newWithHooks(\n GraphQLEnumType,\n {\n name: inflection.enumType(type),\n description: type.description,\n values: type.enumVariants.reduce((memo, value, i) => {\n memo[inflection.enumName(value)] = {\n description: type.enumDescriptions\n ? type.enumDescriptions[i]\n : null,\n value: value,\n };\n return memo;\n }, {}),\n },\n {\n pgIntrospection: type,\n isPgEnumType: true,\n }\n );\n }\n // Ranges\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.type === \"r\"\n ) {\n const subtype =\n introspectionResultsByKind.typeById[type.rangeSubTypeId];\n const gqlRangeSubType = getGqlTypeByTypeIdAndModifier(\n subtype.id,\n typeModifier\n );\n const gqlRangeInputSubType = getGqlInputTypeByTypeIdAndModifier(\n subtype.id,\n typeModifier\n );\n if (!gqlRangeSubType) {\n throw new Error(\"Range of unsupported\");\n }\n if (!gqlRangeInputSubType) {\n throw new Error(\"Range of unsupported input type\");\n }\n\n let Range = getTypeByName(inflection.rangeType(gqlRangeSubType.name));\n let RangeInput;\n if (!Range) {\n const RangeBound = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.rangeBoundType(gqlRangeSubType.name),\n description: build.wrapDescription(\n \"The value at one end of a range. A range can either include this value, or not.\",\n \"type\"\n ),\n fields: {\n value: {\n description: build.wrapDescription(\n \"The value at one end of our range.\",\n \"field\"\n ),\n type: new GraphQLNonNull(gqlRangeSubType),\n },\n inclusive: {\n description: build.wrapDescription(\n \"Whether or not the value of this bound is included in the range.\",\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLBoolean),\n },\n },\n },\n {\n isPgRangeBoundType: true,\n pgIntrospection: type,\n pgSubtypeIntrospection: subtype,\n pgTypeModifier: typeModifier,\n }\n );\n const RangeBoundInput = newWithHooks(\n GraphQLInputObjectType,\n {\n name: inflection.inputType(RangeBound.name),\n description: build.wrapDescription(\n \"The value at one end of a range. A range can either include this value, or not.\",\n \"type\"\n ),\n fields: {\n value: {\n description: build.wrapDescription(\n \"The value at one end of our range.\",\n \"field\"\n ),\n type: new GraphQLNonNull(gqlRangeInputSubType),\n },\n inclusive: {\n description: build.wrapDescription(\n \"Whether or not the value of this bound is included in the range.\",\n \"field\"\n ),\n type: new GraphQLNonNull(GraphQLBoolean),\n },\n },\n },\n {\n isPgRangeBoundInputType: true,\n pgIntrospection: type,\n pgSubtypeIntrospection: subtype,\n pgTypeModifier: typeModifier,\n }\n );\n Range = newWithHooks(\n GraphQLObjectType,\n {\n name: inflection.rangeType(gqlRangeSubType.name),\n description: build.wrapDescription(\n `A range of \\`${gqlRangeSubType.name}\\`.`,\n \"type\"\n ),\n fields: {\n start: {\n description: build.wrapDescription(\n \"The starting bound of our range.\",\n \"field\"\n ),\n type: RangeBound,\n },\n end: {\n description: build.wrapDescription(\n \"The ending bound of our range.\",\n \"field\"\n ),\n type: RangeBound,\n },\n },\n },\n {\n isPgRangeType: true,\n pgIntrospection: type,\n pgSubtypeIntrospection: subtype,\n pgTypeModifier: typeModifier,\n }\n );\n RangeInput = newWithHooks(\n GraphQLInputObjectType,\n {\n name: inflection.inputType(Range.name),\n description: build.wrapDescription(\n `A range of \\`${gqlRangeSubType.name}\\`.`,\n \"type\"\n ),\n fields: {\n start: {\n description: build.wrapDescription(\n \"The starting bound of our range.\",\n \"field\"\n ),\n type: RangeBoundInput,\n },\n end: {\n description: build.wrapDescription(\n \"The ending bound of our range.\",\n \"field\"\n ),\n type: RangeBoundInput,\n },\n },\n },\n {\n isPgRangeInputType: true,\n pgIntrospection: type,\n pgSubtypeIntrospection: subtype,\n pgTypeModifier: typeModifier,\n }\n );\n addType(Range, \"graphile-build-pg built-in\");\n addType(RangeInput, \"graphile-build-pg built-in\");\n } else {\n RangeInput = getTypeByName(inflection.inputType(Range.name));\n }\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = Range;\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n RangeInput;\n if (pgTweaksByTypeIdAndModifer[type.id] === undefined) {\n pgTweaksByTypeIdAndModifer[type.id] = {};\n }\n pgTweaksByTypeIdAndModifer[type.id][typeModifierKey] =\n fragment => sql.fragment`\\\ncase\nwhen (${fragment}) is null then null\nelse json_build_object(\n 'start',\n case when lower(${fragment}) is null then null\n else json_build_object('value', ${pgTweakFragmentForTypeAndModifier(\n sql.fragment`lower(${fragment})`,\n subtype,\n typeModifier,\n {}\n )}, 'inclusive', lower_inc(${fragment}))\n end,\n 'end',\n case when upper(${fragment}) is null then null\n else json_build_object('value', ${pgTweakFragmentForTypeAndModifier(\n sql.fragment`upper(${fragment})`,\n subtype,\n typeModifier,\n {}\n )}, 'inclusive', upper_inc(${fragment}))\n end\n)\nend`;\n pg2GqlMapper[type.id] = {\n map: identity,\n unmap: ({ start, end }) => {\n // Ref: https://www.postgresql.org/docs/9.6/static/rangetypes.html#RANGETYPES-CONSTRUCT\n const lower =\n (start && gql2pg(start.value, subtype, null)) || sql.null;\n const upper =\n (end && gql2pg(end.value, subtype, null)) || sql.null;\n const lowerInclusive = start && !start.inclusive ? \"(\" : \"[\";\n const upperInclusive = end && !end.inclusive ? \")\" : \"]\";\n return sql.fragment`${sql.identifier(\n type.namespaceName,\n type.name\n )}(${lower}, ${upper}, ${sql.literal(\n lowerInclusive + upperInclusive\n )})`;\n },\n };\n }\n\n // Domains\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.type === \"d\" &&\n type.domainBaseTypeId\n ) {\n const baseType = getGqlTypeByTypeIdAndModifier(\n type.domainBaseTypeId,\n typeModifier\n );\n const baseInputType = getGqlInputTypeByTypeIdAndModifier(\n type.domainBaseTypeId,\n typeModifier\n );\n // Hack stolen from: https://github.com/graphile/postgraphile/blob/ade728ed8f8e3ecdc5fdad7d770c67aa573578eb/src/graphql/schema/type/aliasGqlType.ts#L16\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = Object.assign(\n Object.create(baseType),\n {\n name: inflection.domainType(type),\n description: type.description,\n }\n );\n if (baseInputType && baseInputType !== baseType) {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n Object.assign(Object.create(baseInputType), {\n name: inflection.inputType(\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey]\n ),\n description: type.description,\n });\n }\n }\n\n // Arrays\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.category === \"A\"\n ) {\n const arrayEntryOutputType = getGqlTypeByTypeIdAndModifier(\n type.arrayItemTypeId,\n typeModifier\n );\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n new GraphQLList(arrayEntryOutputType);\n if (!disableIssue390Fix) {\n const arrayEntryInputType = getGqlInputTypeByTypeIdAndModifier(\n type.arrayItemTypeId,\n typeModifier\n );\n if (arrayEntryInputType) {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n new GraphQLList(arrayEntryInputType);\n }\n }\n }\n\n // Booleans\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.category === \"B\"\n ) {\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = GraphQLBoolean;\n }\n\n // Numbers may be too large for GraphQL/JS to handle, so stringify by\n // default.\n if (\n !gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n type.category === \"N\"\n ) {\n pgTweaksByTypeId[type.id] = tweakToText;\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = BigFloat;\n }\n\n // Nothing else worked; pass through as string!\n if (!gqlTypeByTypeIdAndModifier[type.id][typeModifierKey]) {\n // XXX: consider using stringType(upperFirst(camelCase(`fallback_${type.name}`)), type.description)?\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = GraphQLString;\n }\n // Now for input types, fall back to output types if possible\n if (!gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey]) {\n if (\n isInputType(gqlTypeByTypeIdAndModifier[type.id][typeModifierKey])\n ) {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey];\n }\n }\n addType(\n getNamedType(gqlTypeByTypeIdAndModifier[type.id][typeModifierKey])\n );\n return gqlTypeByTypeIdAndModifier[type.id][typeModifierKey];\n };\n\n function getGqlTypeByTypeIdAndModifier(\n typeId,\n typeModifier = null,\n useFallback = true\n ) {\n const typeModifierKey = typeModifier != null ? typeModifier : -1;\n if (!gqlTypeByTypeIdAndModifier[typeId]) {\n gqlTypeByTypeIdAndModifier[typeId] = {};\n }\n if (!gqlInputTypeByTypeIdAndModifier[typeId]) {\n gqlInputTypeByTypeIdAndModifier[typeId] = {};\n }\n if (!gqlTypeByTypeIdAndModifier[typeId][typeModifierKey]) {\n const type = introspectionResultsByKind.type.find(\n t => t.id === typeId\n );\n if (!type) {\n throw new Error(\n `Type '${typeId}' not present in introspection results`\n );\n }\n const gen = gqlTypeByTypeIdGenerator[type.id];\n if (gen) {\n const set = Type => {\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = Type;\n };\n const result = gen(set, typeModifier);\n if (result) {\n if (\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] !== result\n ) {\n throw new Error(\n `Callback and return types differ when defining type for '${type.id}'`\n );\n }\n gqlTypeByTypeIdAndModifier[type.id][typeModifierKey] = result;\n }\n }\n }\n if (\n !gqlTypeByTypeIdAndModifier[typeId][typeModifierKey] &&\n typeModifierKey > -1\n ) {\n // Fall back to `null` modifier, but if that still doesn't work, we\n // still want to pass the modifier to enforceGqlTypeByPgTypeId.\n const fallback = getGqlTypeByTypeIdAndModifier(typeId, null, false);\n if (fallback) {\n return fallback;\n }\n }\n if (\n useFallback &&\n !gqlTypeByTypeIdAndModifier[typeId][typeModifierKey]\n ) {\n return enforceGqlTypeByPgTypeId(typeId, typeModifier);\n }\n return gqlTypeByTypeIdAndModifier[typeId][typeModifierKey];\n }\n\n function getGqlInputTypeByTypeIdAndModifier(typeId, typeModifier = null) {\n // First, load the OUTPUT type (it might register an input type)\n getGqlTypeByTypeIdAndModifier(typeId, typeModifier);\n\n const typeModifierKey = typeModifier != null ? typeModifier : -1;\n if (!gqlInputTypeByTypeIdAndModifier[typeId]) {\n gqlInputTypeByTypeIdAndModifier[typeId] = {};\n }\n if (!gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey]) {\n const type = introspectionResultsByKind.typeById[typeId];\n\n if (!type) {\n throw new Error(\n `Type '${typeId}' not present in introspection results`\n );\n }\n const gen = gqlInputTypeByTypeIdGenerator[type.id];\n if (gen) {\n const set = Type => {\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] = Type;\n };\n const result = gen(set, typeModifier);\n if (result) {\n if (\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] &&\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] !==\n result\n ) {\n throw new Error(\n `Callback and return types differ when defining type for '${type.id}'`\n );\n }\n gqlInputTypeByTypeIdAndModifier[type.id][typeModifierKey] =\n result;\n }\n }\n }\n // Use the same type as the output type if it's valid input\n if (\n !gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey] &&\n gqlTypeByTypeIdAndModifier[typeId] &&\n gqlTypeByTypeIdAndModifier[typeId][typeModifierKey] &&\n isInputType(gqlTypeByTypeIdAndModifier[typeId][typeModifierKey])\n ) {\n gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey] =\n gqlTypeByTypeIdAndModifier[typeId][typeModifierKey];\n }\n if (\n !gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey] &&\n typeModifierKey > -1\n ) {\n // Fall back to default\n return getGqlInputTypeByTypeIdAndModifier(typeId, null);\n }\n return gqlInputTypeByTypeIdAndModifier[typeId][typeModifierKey];\n }\n function registerGqlTypeByTypeId(typeId, gen, yieldToExisting = false) {\n if (gqlTypeByTypeIdGenerator[typeId]) {\n if (yieldToExisting) {\n return;\n }\n throw new Error(\n `There's already a type generator registered for '${typeId}'`\n );\n }\n gqlTypeByTypeIdGenerator[typeId] = gen;\n }\n function registerGqlInputTypeByTypeId(\n typeId,\n gen,\n yieldToExisting = false\n ) {\n if (gqlInputTypeByTypeIdGenerator[typeId]) {\n if (yieldToExisting) {\n return;\n }\n throw new Error(\n `There's already an input type generator registered for '${typeId}'`\n );\n }\n gqlInputTypeByTypeIdGenerator[typeId] = gen;\n }\n\n // DEPRECATIONS!\n function getGqlTypeByTypeId(typeId, typeModifier) {\n if (typeModifier === undefined) {\n // eslint-disable-next-line no-console\n console.warn(\n \"DEPRECATION WARNING: getGqlTypeByTypeId should not be used - for some columns we also require typeModifier to be specified. Please update your code ASAP to pass `attribute.typeModifier` through as the second parameter (or null if it's not available).\"\n );\n }\n return getGqlTypeByTypeIdAndModifier(typeId, typeModifier);\n }\n function getGqlInputTypeByTypeId(typeId, typeModifier) {\n if (typeModifier === undefined) {\n // eslint-disable-next-line no-console\n console.warn(\n \"DEPRECATION WARNING: getGqlInputTypeByTypeId should not be used - for some columns we also require typeModifier to be specified. Please update your code ASAP to pass `attribute.typeModifier` through as the second parameter (or null if it's not available).\"\n );\n }\n return getGqlInputTypeByTypeIdAndModifier(typeId, typeModifier);\n }\n function pgTweakFragmentForType(\n fragment,\n type,\n typeModifier,\n resolveData\n ) {\n if (typeModifier === undefined) {\n // eslint-disable-next-line no-console\n console.warn(\n \"DEPRECATION WARNING: pgTweakFragmentForType should not be used - for some columns we also require typeModifier to be specified. Please update your code ASAP to pass `attribute.typeModifier` through as the third parameter (or null if it's not available).\"\n );\n }\n return pgTweakFragmentForTypeAndModifier(\n fragment,\n type,\n typeModifier,\n resolveData\n );\n }\n // END OF DEPRECATIONS!\n\n return build.extend(build, {\n pgRegisterGqlTypeByTypeId: registerGqlTypeByTypeId,\n pgRegisterGqlInputTypeByTypeId: registerGqlInputTypeByTypeId,\n pgGetGqlTypeByTypeIdAndModifier: getGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier:\n getGqlInputTypeByTypeIdAndModifier,\n pg2GqlMapper,\n pg2gql,\n pg2gqlForType,\n gql2pg,\n pgTweakFragmentForTypeAndModifier,\n pgTweaksByTypeId,\n pgTweaksByTypeIdAndModifer,\n\n // DEPRECATED METHODS:\n pgGetGqlTypeByTypeId: getGqlTypeByTypeId, // DEPRECATED, replaced by getGqlTypeByTypeIdAndModifier\n pgGetGqlInputTypeByTypeId: getGqlInputTypeByTypeId, // DEPRECATED, replaced by getGqlInputTypeByTypeIdAndModifier\n pgTweakFragmentForType, // DEPRECATED, replaced by pgTweakFragmentForTypeAndModifier\n });\n },\n [\"PgTypes\"],\n [],\n [\"PgIntrospection\", \"StandardTypes\"]\n );\n\n /* Start of hstore type */\n builder.hook(\n \"inflection\",\n (inflection, build) => {\n // This hook allows you to append a plugin which renames the KeyValueHash\n // (hstore) type name.\n if (pgSkipHstore) return build;\n return build.extend(inflection, {\n hstoreType() {\n return \"KeyValueHash\";\n },\n });\n },\n [\"PgTypesHstore\"]\n );\n builder.hook(\n \"build\",\n build => {\n // This hook tells graphile-build-pg about the hstore database type so it\n // knows how to express it in input/output.\n if (pgSkipHstore) return build;\n const {\n pgIntrospectionResultsByKind: introspectionResultsByKind,\n pgRegisterGqlTypeByTypeId,\n pgRegisterGqlInputTypeByTypeId,\n pg2GqlMapper,\n pgSql: sql,\n } = build;\n\n // Check we have the hstore extension\n const hstoreExtension = introspectionResultsByKind.extension.find(\n e => e.name === \"hstore\"\n );\n if (!hstoreExtension) {\n return build;\n }\n\n // Get the 'hstore' type itself:\n const hstoreType = introspectionResultsByKind.type.find(\n t =>\n t.name === \"hstore\" && t.namespaceId === hstoreExtension.namespaceId\n );\n if (!hstoreType) {\n return build;\n }\n\n const hstoreTypeName = build.inflection.hstoreType();\n\n // We're going to use our own special HStore type for this so that we get\n // better validation; but you could just as easily use JSON directly if you\n // wanted to.\n const GraphQLHStoreType = makeGraphQLHstoreType(build, hstoreTypeName);\n\n // Now register the hstore type with the type system for both output and input.\n pgRegisterGqlTypeByTypeId(hstoreType.id, () => GraphQLHStoreType);\n pgRegisterGqlInputTypeByTypeId(hstoreType.id, () => GraphQLHStoreType);\n\n // Finally we must tell the system how to translate the data between PG-land and JS-land:\n pg2GqlMapper[hstoreType.id] = {\n // node-postgres parses hstore for us, no action required on map\n map: identity,\n // When unmapping we need to convert back to hstore\n unmap: o =>\n sql.fragment`(${sql.value(hstoreStringify(o))}::${sql.identifier(\n hstoreType.namespaceName,\n hstoreType.name\n )})`,\n };\n\n return build;\n },\n [\"PgTypesHstore\"],\n [],\n [\"PgTypes\"]\n );\n /* End of hstore type */\n\n /* Geometric types */\n builder.hook(\n \"build\",\n build => {\n // This hook tells graphile-build-pg about the hstore database type so it\n // knows how to express it in input/output.\n if (!pgGeometricTypes) return build;\n const {\n pgRegisterGqlTypeByTypeId,\n pgRegisterGqlInputTypeByTypeId,\n pgGetGqlTypeByTypeIdAndModifier,\n pgGetGqlInputTypeByTypeIdAndModifier,\n pg2GqlMapper,\n pgSql: sql,\n graphql: {\n GraphQLObjectType,\n GraphQLInputObjectType,\n GraphQLList,\n GraphQLBoolean,\n GraphQLFloat,\n },\n inflection,\n } = build;\n\n // Check we have the hstore extension\n const LINE = 628;\n const LSEG = 601;\n const BOX = 603;\n const PATH = 602;\n const POLYGON = 604;\n const CIRCLE = 718;\n\n pgRegisterGqlTypeByTypeId(LINE, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n if (!Point) {\n throw new Error(\"Need point type\");\n }\n return new GraphQLObjectType({\n name: inflection.builtin(\"Line\"),\n description: build.wrapDescription(\n \"An infinite line that passes through points 'a' and 'b'.\",\n \"type\"\n ),\n fields: {\n a: { type: Point },\n b: { type: Point },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(LINE, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"LineInput\"),\n description: build.wrapDescription(\n \"An infinite line that passes through points 'a' and 'b'.\",\n \"type\"\n ),\n fields: {\n a: { type: PointInput },\n b: { type: PointInput },\n },\n });\n });\n pg2GqlMapper[LINE] = {\n map: f => {\n if (f[0] === \"{\" && f[f.length - 1] === \"}\") {\n const [A, B, C] = f\n .slice(1, -1)\n .split(\",\")\n .map(f => parseFloat(f));\n // Lines have the form Ax + By + C = 0.\n // So if y = 0, Ax + C = 0; x = -C/A.\n // If x = 0, By + C = 0; y = -C/B.\n return {\n a: { x: -C / A, y: 0 },\n b: { x: 0, y: -C / B },\n };\n }\n },\n unmap: o =>\n sql.fragment`line(point(${sql.value(o.a.x)}, ${sql.value(\n o.a.y\n )}), point(${sql.value(o.b.x)}, ${sql.value(o.b.y)}))`,\n };\n\n pgRegisterGqlTypeByTypeId(LSEG, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"LineSegment\"),\n description: build.wrapDescription(\n \"An finite line between points 'a' and 'b'.\",\n \"type\"\n ),\n fields: {\n a: { type: Point },\n b: { type: Point },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(LSEG, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"LineSegmentInput\"),\n description: build.wrapDescription(\n \"An finite line between points 'a' and 'b'.\",\n \"type\"\n ),\n fields: {\n a: { type: PointInput },\n b: { type: PointInput },\n },\n });\n });\n pg2GqlMapper[LSEG] = {\n map: f => {\n if (f[0] === \"[\" && f[f.length - 1] === \"]\") {\n const [x1, y1, x2, y2] = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n return {\n a: { x: x1, y: y1 },\n b: { x: x2, y: y2 },\n };\n }\n },\n unmap: o =>\n sql.fragment`lseg(point(${sql.value(o.a.x)}, ${sql.value(\n o.a.y\n )}), point(${sql.value(o.b.x)}, ${sql.value(o.b.y)}))`,\n };\n\n pgRegisterGqlTypeByTypeId(BOX, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"Box\"),\n description: build.wrapDescription(\n \"A rectangular box defined by two opposite corners 'a' and 'b'\",\n \"type\"\n ),\n fields: {\n a: { type: Point },\n b: { type: Point },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(BOX, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"BoxInput\"),\n description: build.wrapDescription(\n \"A rectangular box defined by two opposite corners 'a' and 'b'\",\n \"type\"\n ),\n fields: {\n a: { type: PointInput },\n b: { type: PointInput },\n },\n });\n });\n pg2GqlMapper[BOX] = {\n map: f => {\n if (f[0] === \"(\" && f[f.length - 1] === \")\") {\n const [x1, y1, x2, y2] = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n return {\n a: { x: x1, y: y1 },\n b: { x: x2, y: y2 },\n };\n }\n },\n unmap: o =>\n sql.fragment`box(point(${sql.value(o.a.x)}, ${sql.value(\n o.a.y\n )}), point(${sql.value(o.b.x)}, ${sql.value(o.b.y)}))`,\n };\n\n pgRegisterGqlTypeByTypeId(PATH, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"Path\"),\n description: build.wrapDescription(\n \"A path (open or closed) made up of points\",\n \"type\"\n ),\n fields: {\n points: {\n type: new GraphQLList(Point),\n },\n isOpen: {\n description: build.wrapDescription(\n \"True if this is a closed path (similar to a polygon), false otherwise.\",\n \"field\"\n ),\n type: GraphQLBoolean,\n },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(PATH, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"PathInput\"),\n description: build.wrapDescription(\n \"A path (open or closed) made up of points\",\n \"type\"\n ),\n fields: {\n points: {\n type: new GraphQLList(PointInput),\n },\n isOpen: {\n description: build.wrapDescription(\n \"True if this is a closed path (similar to a polygon), false otherwise.\",\n \"field\"\n ),\n type: GraphQLBoolean,\n },\n },\n });\n });\n pg2GqlMapper[PATH] = {\n map: f => {\n let isOpen = null;\n if (f[0] === \"(\" && f[f.length - 1] === \")\") {\n isOpen = false;\n } else if (f[0] === \"[\" && f[f.length - 1] === \"]\") {\n isOpen = true;\n }\n if (isOpen !== null) {\n const xsAndYs = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n if (xsAndYs.length % 2 !== 0) {\n throw new Error(\"Invalid path representation\");\n }\n const points = [];\n for (let i = 0, l = xsAndYs.length; i < l; i += 2) {\n points.push({ x: xsAndYs[i], y: xsAndYs[i + 1] });\n }\n return {\n isOpen,\n points,\n };\n }\n },\n unmap: o => {\n const openParen = o.isOpen ? \"[\" : \"(\";\n const closeParen = o.isOpen ? \"]\" : \")\";\n const val = `${openParen}${o.points\n .map(p => `(${p.x},${p.y})`)\n .join(\",\")}${closeParen}`;\n return sql.value(val);\n },\n };\n\n pgRegisterGqlTypeByTypeId(POLYGON, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"Polygon\"),\n fields: {\n points: {\n type: new GraphQLList(Point),\n },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(POLYGON, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"PolygonInput\"),\n fields: {\n points: {\n type: new GraphQLList(PointInput),\n },\n },\n });\n });\n pg2GqlMapper[POLYGON] = {\n map: f => {\n if (f[0] === \"(\" && f[f.length - 1] === \")\") {\n const xsAndYs = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n if (xsAndYs.length % 2 !== 0) {\n throw new Error(\"Invalid polygon representation\");\n }\n const points = [];\n for (let i = 0, l = xsAndYs.length; i < l; i += 2) {\n points.push({ x: xsAndYs[i], y: xsAndYs[i + 1] });\n }\n return {\n points,\n };\n }\n },\n unmap: o => {\n const val = `(${o.points.map(p => `(${p.x},${p.y})`).join(\",\")})`;\n return sql.value(val);\n },\n };\n\n pgRegisterGqlTypeByTypeId(CIRCLE, () => {\n const Point = pgGetGqlTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLObjectType({\n name: inflection.builtin(\"Circle\"),\n fields: {\n center: { type: Point },\n radius: { type: GraphQLFloat },\n },\n });\n });\n pgRegisterGqlInputTypeByTypeId(CIRCLE, () => {\n const PointInput = pgGetGqlInputTypeByTypeIdAndModifier(\"600\", null);\n return new GraphQLInputObjectType({\n name: inflection.builtin(\"CircleInput\"),\n fields: {\n center: { type: PointInput },\n radius: { type: GraphQLFloat },\n },\n });\n });\n pg2GqlMapper[CIRCLE] = {\n map: f => {\n if (f[0] === \"<\" && f[f.length - 1] === \">\") {\n const [x, y, r] = f\n .slice(1, -1)\n .replace(/[()]/g, \"\")\n .split(\",\")\n .map(f => parseFloat(f));\n return {\n center: { x, y },\n radius: r,\n };\n }\n },\n unmap: o =>\n sql.fragment`circle(point(${sql.value(o.center.x)}, ${sql.value(\n o.center.y\n )}), ${sql.value(o.radius)})`,\n };\n\n // TODO: add the non-nulls!\n\n return build;\n },\n [\"PgGeometryTypes\"],\n [],\n [\"PgTypes\"]\n );\n /* End of geometric types */\n}: Plugin);\n\nfunction makeGraphQLHstoreType(build, hstoreTypeName) {\n const { graphql } = build;\n const { GraphQLScalarType, Kind } = graphql;\n\n function isValidHstoreObject(obj) {\n if (obj === null) {\n // Null is okay\n return true;\n } else if (typeof obj === \"object\") {\n // A hash with string/null values is also okay\n const keys = Object.keys(obj);\n for (const key of keys) {\n const val = obj[key];\n if (val === null) {\n // Null is okay\n } else if (typeof val === \"string\") {\n // String is okay\n } else {\n // Everything else is invalid.\n return false;\n }\n }\n return true;\n } else {\n // Everything else is invalid.\n return false;\n }\n }\n\n function identityWithCheck(obj) {\n if (isValidHstoreObject(obj)) {\n return obj;\n }\n throw new TypeError(\n `This is not a valid ${hstoreTypeName} object, it must be a key/value hash where keys and values are both strings (or null).`\n );\n }\n\n function parseValueLiteral(ast, variables) {\n switch (ast.kind) {\n case Kind.INT:\n case Kind.FLOAT:\n // Number isn't really okay, but we'll coerce it to a string anyway.\n return String(parseFloat(ast.value));\n case Kind.STRING:\n // String is okay.\n return String(ast.value);\n case Kind.NULL:\n // Null is okay.\n return null;\n case Kind.VARIABLE: {\n // Variable is okay if that variable is either a string or null.\n const name = ast.name.value;\n const value = variables ? variables[name] : undefined;\n if (value === null || typeof value === \"string\") {\n return value;\n }\n return undefined;\n }\n default:\n // Everything else is invalid.\n return undefined;\n }\n }\n\n function parseLiteral(ast, variables) {\n switch (ast.kind) {\n case Kind.OBJECT: {\n const value = ast.fields.reduce((memo, field) => {\n memo[field.name.value] = parseValueLiteral(field.value, variables);\n return memo;\n }, Object.create(null));\n\n if (!isValidHstoreObject(value)) {\n return undefined;\n }\n return value;\n }\n\n case Kind.NULL:\n return null;\n\n case Kind.VARIABLE: {\n const name = ast.name.value;\n const value = variables ? variables[name] : undefined;\n\n if (!isValidHstoreObject(value)) {\n return undefined;\n }\n return value;\n }\n\n default:\n return undefined;\n }\n }\n\n // TODO: use newWithHooks instead\n const GraphQLHStore = new GraphQLScalarType({\n name: hstoreTypeName,\n description: build.wrapDescription(\n \"A set of key/value pairs, keys are strings, values may be a string or null. Exposed as a JSON object.\",\n \"type\"\n ),\n serialize: identity,\n parseValue: identityWithCheck,\n parseLiteral,\n });\n return GraphQLHStore;\n}\n\n// To include a double quote or a backslash in a key or value, escape it\n// with a backslash.\n// -- https://www.postgresql.org/docs/10/static/hstore.html\nfunction toHstoreString(str) {\n return '\"' + str.replace(/([\"\\\\])/g, \"\\\\$1\") + '\"';\n}\n\nfunction hstoreStringify(o) {\n if (o === null) {\n return null;\n }\n if (typeof o !== \"object\") {\n throw new TypeError(\"Expected an hstore object\");\n }\n const keys = Object.keys(o);\n const encodeKeyValue = key => {\n const value = o[key];\n if (value === null) {\n return `${toHstoreString(key)} => NULL`;\n } else {\n return `${toHstoreString(key)} => ${toHstoreString(String(value))}`;\n }\n };\n return keys.map(encodeKeyValue).join(\", \");\n}\n"],"file":"PgTypesPlugin.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "graphile-build-pg",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.13.0",
|
|
4
4
|
"description": "Build a GraphQL schema by reflection over a PostgreSQL schema. Easy to customize since it's built with plugins on graphile-build",
|
|
5
5
|
"main": "node8plus/index.js",
|
|
6
6
|
"types": "node8plus/index.d.ts",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"@graphile/lru": "4.11.0",
|
|
41
41
|
"chalk": "^2.4.2",
|
|
42
42
|
"debug": "^4.1.1",
|
|
43
|
-
"graphile-build": "4.
|
|
44
|
-
"jsonwebtoken": "^
|
|
43
|
+
"graphile-build": "4.13.0",
|
|
44
|
+
"jsonwebtoken": "^9.0.0",
|
|
45
45
|
"lodash": ">=4 <5",
|
|
46
46
|
"lru-cache": ">=4 <5",
|
|
47
|
-
"pg-sql2": "4.
|
|
47
|
+
"pg-sql2": "4.13.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"pg": ">=6.1.0 <9"
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"engines": {
|
|
65
65
|
"node": ">=8.6"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "0b2ca8bfff8f3b50dfb09079fbbf1a4e3838cedc"
|
|
68
68
|
}
|