diff --git a/base/schema-typescript-zod/test/inputs/schema/any.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/any.schema/default/TopLevel.ts
index 2a971a2..14f686b 100644
--- a/base/schema-typescript-zod/test/inputs/schema/any.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/any.schema/default/TopLevel.ts
@@ -1,8 +1,14 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "foo": z.any(),
-    "values": z.record(z.string(), z.any()),
+    "values": mapSchema(z.any()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/class-map-union.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
index df36b06..b4efe96 100644
--- a/base/schema-typescript-zod/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const UnionClassSchema = z.object({
     "quux": z.number().int().optional(),
@@ -7,6 +13,6 @@ export const UnionClassSchema = z.object({
 export type UnionClass = z.infer<typeof UnionClassSchema>;
 
 export const TopLevelSchema = z.object({
-    "union": z.record(z.string(), z.union([z.boolean(), UnionClassSchema, z.number(), z.string()])).optional(),
+    "union": mapSchema(z.union([z.boolean(), UnionClassSchema, z.number(), z.string()])).optional(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
index 9bd73cb..d83e7d8 100644
--- a/base/schema-typescript-zod/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
@@ -1,7 +1,13 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
-    "map": z.record(z.string(), z.union([z.boolean(), z.number()])).optional(),
+    "map": mapSchema(z.union([z.boolean(), z.number()])).optional(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/direct-union.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/direct-union.schema/default/TopLevel.ts
index 6887a6e..f500391 100644
--- a/base/schema-typescript-zod/test/inputs/schema/direct-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/direct-union.schema/default/TopLevel.ts
@@ -1,13 +1,19 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const ThingSchema = z.object({
-    "optional": z.union([z.null(), z.array(z.any()), z.boolean(), z.number(), z.number().int(), z.record(z.string(), z.any()), z.string()]).optional(),
-    "required": z.union([z.null(), z.array(z.any()), z.boolean(), z.number(), z.number().int(), z.record(z.string(), z.any()), z.string()]),
+    "optional": z.union([z.null(), z.array(z.any()), z.boolean(), z.number(), z.number().int(), mapSchema(z.any()), z.string()]).optional(),
+    "required": z.union([z.null(), z.array(z.any()), z.boolean(), z.number(), z.number().int(), mapSchema(z.any()), z.string()]),
 });
 export type Thing = z.infer<typeof ThingSchema>;
 
 export const TopLevelSchema = z.object({
-    "stuff": z.record(z.string(), ThingSchema),
+    "stuff": mapSchema(ThingSchema),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/empty-object.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/empty-object.schema/default/TopLevel.ts
index 497622c..b753d6b 100644
--- a/base/schema-typescript-zod/test/inputs/schema/empty-object.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/empty-object.schema/default/TopLevel.ts
@@ -1,4 +1,10 @@
 import * as z from "zod";
 
-export const TopLevelSchema = z.record(z.string(), z.any());
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
+export const TopLevelSchema = mapSchema(z.any());
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
index 31ee01d..c751076 100644
--- a/base/schema-typescript-zod/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
@@ -1,7 +1,13 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
-    "map": z.record(z.string(), z.number().int()),
+    "map": mapSchema(z.number().int()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
index 62a038c..4c36224 100644
--- a/base/schema-typescript-zod/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
@@ -1,19 +1,25 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export type XClass = {
     "x"?: Array<Array<any> | boolean | XClass | number | null | string> | boolean | number | Record<string, any> | null | string;
 };
 export const XClassSchema: z.ZodType<XClass> = z.lazy(() =>
     z.object({
-        "x": z.union([z.null(), z.array(z.union([z.null(), z.array(z.any()), z.boolean(), XClassSchema, z.number(), z.string()])), z.boolean(), z.number(), z.record(z.string(), z.any()), z.string()]).optional(),
+        "x": z.union([z.null(), z.array(z.union([z.null(), z.array(z.any()), z.boolean(), XClassSchema, z.number(), z.string()])), z.boolean(), z.number(), mapSchema(z.any()), z.string()]).optional(),
     })
 );
 
 export const TopLevelClassSchema = z.object({
-    "x": z.union([z.null(), z.array(z.union([z.null(), z.array(z.any()), z.boolean(), XClassSchema, z.number(), z.string()])), z.boolean(), z.number(), z.record(z.string(), z.any()), z.string()]).optional(),
+    "x": z.union([z.null(), z.array(z.union([z.null(), z.array(z.any()), z.boolean(), XClassSchema, z.number(), z.string()])), z.boolean(), z.number(), mapSchema(z.any()), z.string()]).optional(),
 });
 export type TopLevelClass = z.infer<typeof TopLevelClassSchema>;
 
-export const TopLevelSchema = z.union([z.null(), z.array(z.union([z.null(), z.array(z.any()), z.boolean(), TopLevelClassSchema, z.number(), z.string()])), z.boolean(), z.number(), z.number().int(), z.record(z.string(), z.any()), z.string()]);
+export const TopLevelSchema = z.union([z.null(), z.array(z.union([z.null(), z.array(z.any()), z.boolean(), TopLevelClassSchema, z.number(), z.string()])), z.boolean(), z.number(), z.number().int(), mapSchema(z.any()), z.string()]);
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
index 061a636..9ee99ea 100644
--- a/base/schema-typescript-zod/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const ClosedClassSchema = z.object({
 });
@@ -14,7 +20,7 @@ export type Item = z.infer<typeof ItemSchema>;
 export const ConfigSchema = z.object({
     "closed": z.union([z.null(), z.array(z.any()), z.boolean(), ClosedClassSchema, z.number(), z.number().int(), z.string()]).optional(),
     "name": z.string().optional(),
-    "settings": z.record(z.string(), z.array(ItemSchema)).optional(),
+    "settings": mapSchema(z.array(ItemSchema)).optional(),
 });
 export type Config = z.infer<typeof ConfigSchema>;
 
diff --git a/base/schema-typescript-zod/test/inputs/schema/vega-lite.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
index a7bc5c6..56b9118 100644
--- a/base/schema-typescript-zod/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 // Determines how size calculation should be performed, one of `"content"` or `"padding"`.
 // The default setting (`"content"`) interprets the width and height settings as the data
 // rectangle (plotting) dimensions, to which padding is then added. In contrast, the
@@ -659,7 +665,7 @@ export const SpecSchema: z.ZodType<Spec> = z.lazy(() =>
         "encoding": EncodingSchema.optional(),
         "mark": z.union([MarkDefSchema, MarkSchema]).optional(),
         "projection": ProjectionSchema.optional(),
-        "selection": z.record(z.string(), SelectionDefSchema).optional(),
+        "selection": mapSchema(SelectionDefSchema).optional(),
         "facet": FacetMappingSchema.optional(),
         "spec": SpecSchema.optional(),
         "repeat": RepeatSchema.optional(),
@@ -697,7 +703,7 @@ export const LayerSpecSchema: z.ZodType<LayerSpec> = z.lazy(() =>
         "encoding": EncodingSchema.optional(),
         "mark": z.union([MarkDefSchema, MarkSchema]).optional(),
         "projection": ProjectionSchema.optional(),
-        "selection": z.record(z.string(), SelectionDefSchema).optional(),
+        "selection": mapSchema(SelectionDefSchema).optional(),
     })
 );
 
@@ -921,7 +927,7 @@ export const ProjectionConfigSchema = z.object({
     "fraction": z.number().optional(),
     "lobes": z.number().optional(),
     "parallel": z.number().optional(),
-    "precision": z.record(z.string(), z.union([z.number(), z.string()])).optional(),
+    "precision": mapSchema(z.union([z.number(), z.string()])).optional(),
     "radius": z.number().optional(),
     "ratio": z.number().optional(),
     "rotate": z.array(z.number()).optional(),
@@ -1126,7 +1132,7 @@ export const ViewConfigSchema = z.object({
 export type ViewConfig = z.infer<typeof ViewConfigSchema>;
 
 export const DataFormatSchema = z.object({
-    "parse": z.union([ParseEnumSchema, z.record(z.string(), z.any())]).optional(),
+    "parse": z.union([ParseEnumSchema, mapSchema(z.any())]).optional(),
     "type": DataFormatTypeSchema.optional(),
     "property": z.string().optional(),
     "feature": z.string().optional(),
@@ -1351,7 +1357,7 @@ export const ProjectionSchema = z.object({
     "fraction": z.number().optional(),
     "lobes": z.number().optional(),
     "parallel": z.number().optional(),
-    "precision": z.record(z.string(), z.union([z.number(), z.string()])).optional(),
+    "precision": mapSchema(z.union([z.number(), z.string()])).optional(),
     "radius": z.number().optional(),
     "ratio": z.number().optional(),
     "rotate": z.array(z.number()).optional(),
@@ -1386,7 +1392,7 @@ export const ScaleResolveMapSchema = z.object({
 export type ScaleResolveMap = z.infer<typeof ScaleResolveMapSchema>;
 
 export const SelectionDefSchema = z.object({
-    "bind": z.union([BindEnumSchema, z.record(z.string(), VgBindingSchema)]).optional(),
+    "bind": z.union([BindEnumSchema, mapSchema(VgBindingSchema)]).optional(),
     "empty": EmptySchema.optional(),
     "encodings": z.array(SingleDefChannelSchema).optional(),
     "fields": z.array(z.string()).optional(),
@@ -1437,7 +1443,7 @@ export const IntervalSelectionConfigSchema = z.object({
 export type IntervalSelectionConfig = z.infer<typeof IntervalSelectionConfigSchema>;
 
 export const SingleSelectionConfigSchema = z.object({
-    "bind": z.record(z.string(), VgBindingSchema).optional(),
+    "bind": mapSchema(VgBindingSchema).optional(),
     "empty": EmptySchema.optional(),
     "encodings": z.array(SingleDefChannelSchema).optional(),
     "fields": z.array(z.string()).optional(),
@@ -1450,7 +1456,7 @@ export type SingleSelectionConfig = z.infer<typeof SingleSelectionConfigSchema>;
 export const DataSchema = z.object({
     "format": DataFormatSchema.optional(),
     "url": z.string().optional(),
-    "values": z.union([z.array(z.union([z.boolean(), z.number(), z.record(z.string(), z.any()), z.string()])), z.record(z.string(), z.any()), z.string()]).optional(),
+    "values": z.union([z.array(z.union([z.boolean(), z.number(), mapSchema(z.any()), z.string()])), mapSchema(z.any()), z.string()]).optional(),
     "name": z.string().optional(),
 });
 export type Data = z.infer<typeof DataSchema>;
@@ -1604,14 +1610,14 @@ export const ConfigSchema = z.object({
     "padding": z.union([PaddingClassSchema, z.number()]).optional(),
     "point": MarkConfigSchema.optional(),
     "projection": ProjectionConfigSchema.optional(),
-    "range": z.record(z.string(), z.union([z.array(z.union([z.number(), z.string()])), VgSchemeSchema])).optional(),
+    "range": mapSchema(z.union([z.array(z.union([z.number(), z.string()])), VgSchemeSchema])).optional(),
     "rect": MarkConfigSchema.optional(),
     "rule": MarkConfigSchema.optional(),
     "scale": ScaleConfigSchema.optional(),
     "selection": SelectionConfigSchema.optional(),
     "square": MarkConfigSchema.optional(),
     "stack": StackOffsetSchema.optional(),
-    "style": z.record(z.string(), VgMarkConfigSchema).optional(),
+    "style": mapSchema(VgMarkConfigSchema).optional(),
     "text": TextConfigSchema.optional(),
     "tick": TickConfigSchema.optional(),
     "timeFormat": z.string().optional(),
@@ -1683,7 +1689,7 @@ export const TopLevelSchema = z.object({
     "name": z.string().optional(),
     "padding": z.union([PaddingClassSchema, z.number()]).optional(),
     "projection": ProjectionSchema.optional(),
-    "selection": z.record(z.string(), SelectionDefSchema).optional(),
+    "selection": mapSchema(SelectionDefSchema).optional(),
     "title": z.union([TitleParamsSchema, z.string()]).optional(),
     "transform": z.array(TransformSchema).optional(),
     "width": z.number().optional(),
diff --git a/base/typescript-zod/test/inputs/json/misc/00ec5.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
index 7634f29..e6a4e7c 100644
--- a/base/typescript-zod/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TypeSchema = z.enum([
     "string",
@@ -35,7 +41,7 @@ export const SchemaSchema = z.object({
 export type Schema = z.infer<typeof SchemaSchema>;
 
 export const ProviderSchema = z.object({
-    "properties": z.record(z.string(), PropertySchema),
+    "properties": mapSchema(PropertySchema),
 });
 export type Provider = z.infer<typeof ProviderSchema>;
 
diff --git a/base/typescript-zod/test/inputs/json/misc/033b1.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/033b1.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/033b1.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/033b1.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/09f54.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/09f54.json/default/TopLevel.ts
index b71dac0..c642d22 100644
--- a/base/typescript-zod/test/inputs/json/misc/09f54.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/09f54.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const DatumSchema = z.object({
     "anomaly": z.string(),
@@ -16,7 +22,7 @@ export const DescriptionSchema = z.object({
 export type Description = z.infer<typeof DescriptionSchema>;
 
 export const TopLevelSchema = z.object({
-    "data": z.record(z.string(), DatumSchema),
+    "data": mapSchema(DatumSchema),
     "description": DescriptionSchema,
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/167d6.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/167d6.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/167d6.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/167d6.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/43eaf.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/6260a.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/6260a.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/6260a.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/6260a.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/70c77.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/70c77.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/70c77.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/70c77.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/75912.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/75912.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/75912.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/75912.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/76ae1.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
index 1e1c383..af707e2 100644
--- a/base/typescript-zod/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const FormatEnumSchema = z.enum([
     "string",
@@ -102,7 +108,7 @@ export const PurpleSchemaSchema = z.object({
 export type PurpleSchema = z.infer<typeof PurpleSchemaSchema>;
 
 export const ArticleSchema = z.object({
-    "properties": z.record(z.string(), PropertySchema),
+    "properties": mapSchema(PropertySchema),
 });
 export type Article = z.infer<typeof ArticleSchema>;
 
diff --git a/base/typescript-zod/test/inputs/json/misc/7d397.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/7d397.json/default/TopLevel.ts
index 6872550..d14b6c9 100644
--- a/base/typescript-zod/test/inputs/json/misc/7d397.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/7d397.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TypeSchema = z.enum([
     "string",
@@ -41,7 +47,7 @@ export const ItemsSchema = z.object({
 export type Items = z.infer<typeof ItemsSchema>;
 
 export const ListSchema = z.object({
-    "properties": z.record(z.string(), PropertySchema),
+    "properties": mapSchema(PropertySchema),
 });
 export type List = z.infer<typeof ListSchema>;
 
diff --git a/base/typescript-zod/test/inputs/json/misc/7f568.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/7f568.json/default/TopLevel.ts
index a157d4f..117005b 100644
--- a/base/typescript-zod/test/inputs/json/misc/7f568.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/7f568.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const LanguageSchema = z.enum([
     "Markdown",
@@ -27,7 +33,7 @@ export const TopLevelElementSchema = z.object({
     "commits_url": z.string(),
     "created_at": z.string().pipe(z.coerce.date()),
     "description": z.union([z.null(), z.string()]),
-    "files": z.record(z.string(), FileSchema),
+    "files": mapSchema(FileSchema),
     "forks_url": z.string(),
     "git_pull_url": z.string(),
     "git_push_url": z.string(),
diff --git a/base/typescript-zod/test/inputs/json/misc/9617f.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/9617f.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/9617f.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/9617f.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/a9691.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/a9691.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/a9691.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/a9691.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/ac944.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/ac944.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/ac944.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/ac944.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/c0356.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/c0356.json/default/TopLevel.ts
index fb32163..e341043 100644
--- a/base/typescript-zod/test/inputs/json/misc/c0356.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/c0356.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const DatumSchema = z.object({
     "anomaly": z.string(),
@@ -15,7 +21,7 @@ export const DescriptionSchema = z.object({
 export type Description = z.infer<typeof DescriptionSchema>;
 
 export const TopLevelSchema = z.object({
-    "data": z.record(z.string(), DatumSchema),
+    "data": mapSchema(DatumSchema),
     "description": DescriptionSchema,
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/cb81e.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
index 1cebe60..ce1bde6 100644
--- a/base/typescript-zod/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const DescriptionSchema = z.object({
     "base_period": z.string(),
@@ -10,7 +16,7 @@ export const DescriptionSchema = z.object({
 export type Description = z.infer<typeof DescriptionSchema>;
 
 export const TopLevelSchema = z.object({
-    "data": z.record(z.string(), z.string()),
+    "data": mapSchema(z.string()),
     "description": DescriptionSchema,
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/cd463.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/cd463.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/cd463.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/cd463.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/cfbce.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
index f170e37..b3d97e3 100644
--- a/base/typescript-zod/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
@@ -1,9 +1,15 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
     "date": z.string(),
-    "rates": z.record(z.string(), z.number()),
+    "rates": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/e324e.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/e324e.json/default/TopLevel.ts
index 2e9f6ad..57b5fdd 100644
--- a/base/typescript-zod/test/inputs/json/misc/e324e.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/e324e.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TypeSchema = z.enum([
     "string",
@@ -35,7 +41,7 @@ export const ItemsSchema = z.object({
 export type Items = z.infer<typeof ItemsSchema>;
 
 export const RateSchema = z.object({
-    "properties": z.record(z.string(), PropertySchema),
+    "properties": mapSchema(PropertySchema),
 });
 export type Rate = z.infer<typeof RateSchema>;
 
diff --git a/base/typescript-zod/test/inputs/json/misc/ed095.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/ed095.json/default/TopLevel.ts
index 6d86372..d003378 100644
--- a/base/typescript-zod/test/inputs/json/misc/ed095.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/ed095.json/default/TopLevel.ts
@@ -1,4 +1,10 @@
 import * as z from "zod";
 
-export const TopLevelSchema = z.record(z.string(), z.string());
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
+export const TopLevelSchema = mapSchema(z.string());
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/fd329.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/fd329.json/default/TopLevel.ts
index b71dac0..c642d22 100644
--- a/base/typescript-zod/test/inputs/json/misc/fd329.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/fd329.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const DatumSchema = z.object({
     "anomaly": z.string(),
@@ -16,7 +22,7 @@ export const DescriptionSchema = z.object({
 export type Description = z.infer<typeof DescriptionSchema>;
 
 export const TopLevelSchema = z.object({
-    "data": z.record(z.string(), DatumSchema),
+    "data": mapSchema(DatumSchema),
     "description": DescriptionSchema,
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/bug2037.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
index 7be23fe..8513f32 100644
--- a/base/typescript-zod/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
@@ -1,21 +1,27 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const RewardSchema = z.object({
 });
 export type Reward = z.infer<typeof RewardSchema>;
 
 export const ObjectiveSchema = z.object({
-    "rewards": z.record(z.string(), RewardSchema),
+    "rewards": mapSchema(RewardSchema),
 });
 export type Objective = z.infer<typeof ObjectiveSchema>;
 
 export const MissionSpecSchema = z.object({
-    "objectives": z.record(z.string(), ObjectiveSchema),
+    "objectives": mapSchema(ObjectiveSchema),
 });
 export type MissionSpec = z.infer<typeof MissionSpecSchema>;
 
 export const TopLevelSchema = z.object({
-    "mission_specs": z.record(z.string(), MissionSpecSchema),
+    "mission_specs": mapSchema(MissionSpecSchema),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
index 6e57a34..4c6a7a6 100644
--- a/base/typescript-zod/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelValueSchema = z.object({
     "channel_id": z.string().regex(/^-?\d+$/),
@@ -10,5 +16,5 @@ export const TopLevelValueSchema = z.object({
 });
 export type TopLevelValue = z.infer<typeof TopLevelValueSchema>;
 
-export const TopLevelSchema = z.record(z.string(), TopLevelValueSchema);
+export const TopLevelSchema = mapSchema(TopLevelValueSchema);
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
index 1f3197a..e039b2a 100644
--- a/base/typescript-zod/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const PairSchema = z.object({
     "decimal_places": z.number().int(),
@@ -14,7 +20,7 @@ export const PairSchema = z.object({
 export type Pair = z.infer<typeof PairSchema>;
 
 export const TopLevelSchema = z.object({
-    "pairs": z.record(z.string(), PairSchema),
+    "pairs": mapSchema(PairSchema),
     "server_time": z.number().int(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/combinations1.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
index a261f3c..31a5fa5 100644
--- a/base/typescript-zod/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const CerographClassSchema = z.object({
     "apotropaion": z.null(),
@@ -306,18 +312,18 @@ export const TopLevelSchema = z.object({
     "citrated": z.number().int(),
     "clinodome": z.array(z.union([z.number(), z.string()])),
     "coadjust": z.array(z.union([CoadjustClassSchema, z.number()])),
-    "consilience": z.array(z.union([z.number(), z.record(z.string(), z.number().int())])),
-    "constructor": z.array(z.union([z.boolean(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
-    "continuative": z.array(z.union([z.record(z.string(), z.number().int()), z.string()])),
+    "consilience": z.array(z.union([z.number(), mapSchema(z.number().int())])),
+    "constructor": z.array(z.union([z.boolean(), mapSchema(z.union([z.null(), z.number().int()]))])),
+    "continuative": z.array(z.union([mapSchema(z.number().int()), z.string()])),
     "credulity": z.array(z.union([CredulityClassSchema, z.number().int(), z.string()])),
-    "creviced": z.array(z.union([z.boolean(), z.record(z.string(), z.number().int()), z.string()])),
+    "creviced": z.array(z.union([z.boolean(), mapSchema(z.number().int()), z.string()])),
     "cubiculum": z.array(z.array(z.union([z.null(), z.number().int()]))),
     "deruralize": z.array(z.union([z.array(z.null()), z.boolean(), DeruralizeClassSchema])),
     "diaereses": z.array(z.union([z.array(z.number().int()), z.boolean(), DiaereseClassSchema])),
     "dissolution": z.array(z.union([z.null(), z.array(z.null())])),
     "downstroke": z.array(z.union([z.array(z.null()), z.boolean(), z.string()])),
     "electrotautomerism": z.array(z.union([z.null(), z.number()])),
-    "eleutheromania": z.array(z.union([z.number(), z.record(z.string(), z.number().int()), z.string()])),
+    "eleutheromania": z.array(z.union([z.number(), mapSchema(z.number().int()), z.string()])),
     "encrust": EncrustSchema,
     "entomoid": z.array(z.union([CimeliaClassSchema, z.number().int()])),
     "epipaleolithic": z.array(z.union([z.array(z.number().int()), z.number()])),
@@ -327,10 +333,10 @@ export const TopLevelSchema = z.object({
     "flagmaking": z.array(z.union([z.boolean(), FlagmakingClassSchema, z.number()])),
     "fluorometer": z.array(z.union([z.null(), z.number().int(), z.string()])),
     "fulsome": z.array(z.union([z.null(), z.number().int()])),
-    "fuzzy": z.array(z.union([z.number().int(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "fuzzy": z.array(z.union([z.number().int(), mapSchema(z.union([z.null(), z.number().int()]))])),
     "gardenwards": z.array(z.union([z.array(z.number().int()), z.boolean(), z.string()])),
-    "generalissimo": z.array(z.union([z.null(), z.boolean(), z.record(z.string(), z.number().int())])),
-    "habeas": z.array(z.union([z.null(), z.record(z.string(), z.number().int())])),
+    "generalissimo": z.array(z.union([z.null(), z.boolean(), mapSchema(z.number().int())])),
+    "habeas": z.array(z.union([z.null(), mapSchema(z.number().int())])),
     "hemicrystalline": z.array(z.union([CimeliaClassSchema, z.string()])),
     "hemocoele": z.array(z.union([z.array(z.number().int()), HemocoeleClassSchema])),
     "hoister": z.array(z.union([z.null(), CimeliaClassSchema, z.string()])),
@@ -341,6 +347,6 @@ export const TopLevelSchema = z.object({
     "intentiveness": z.array(z.union([CimeliaClassSchema, z.number(), z.string()])),
     "interacinar": InteracinarSchema,
     "intercorrelation": z.array(z.union([z.null(), z.array(z.number().int())])),
-    "jacutinga": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "jacutinga": z.array(z.union([z.array(z.number().int()), mapSchema(z.union([z.null(), z.number().int()]))])),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
index d06391f..ae8643a 100644
--- a/base/typescript-zod/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const CerographClassSchema = z.object({
     "apotropaion": z.null(),
@@ -293,18 +299,18 @@ export const TopLevelSchema = z.object({
     "citrated": z.number().int(),
     "clinodome": z.array(z.union([z.number(), z.string()])),
     "coadjust": z.array(z.union([CoadjustClassSchema, z.number()])),
-    "consilience": z.array(z.union([z.number(), z.record(z.string(), z.number().int())])),
-    "constructor": z.array(z.union([z.boolean(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
-    "continuative": z.array(z.union([z.record(z.string(), z.number().int()), z.string()])),
+    "consilience": z.array(z.union([z.number(), mapSchema(z.number().int())])),
+    "constructor": z.array(z.union([z.boolean(), mapSchema(z.union([z.null(), z.number().int()]))])),
+    "continuative": z.array(z.union([mapSchema(z.number().int()), z.string()])),
     "credulity": z.array(z.union([CredulityClassSchema, z.number().int(), z.string()])),
-    "creviced": z.array(z.union([z.boolean(), z.record(z.string(), z.number().int()), z.string()])),
+    "creviced": z.array(z.union([z.boolean(), mapSchema(z.number().int()), z.string()])),
     "cubiculum": z.array(z.array(z.union([z.null(), z.number().int()]))),
     "deruralize": z.array(z.union([z.array(z.null()), z.boolean(), DeruralizeClassSchema])),
     "diaereses": z.array(z.union([z.array(z.number().int()), z.boolean(), DiaereseClassSchema])),
     "dissolution": z.array(z.union([z.null(), z.array(z.null())])),
     "downstroke": z.array(z.union([z.array(z.null()), z.boolean(), z.string()])),
     "electrotautomerism": z.array(z.union([z.null(), z.number()])),
-    "eleutheromania": z.array(z.union([z.number(), z.record(z.string(), z.number().int()), z.string()])),
+    "eleutheromania": z.array(z.union([z.number(), mapSchema(z.number().int()), z.string()])),
     "encrust": EncrustSchema,
     "entomoid": z.array(z.union([CimeliaClassSchema, z.number().int()])),
     "epipaleolithic": z.array(z.union([z.array(z.number().int()), z.number()])),
@@ -314,10 +320,10 @@ export const TopLevelSchema = z.object({
     "flagmaking": z.array(z.union([z.boolean(), FlagmakingClassSchema, z.number()])),
     "fluorometer": z.array(z.union([z.null(), z.number().int(), z.string()])),
     "fulsome": z.array(z.union([z.null(), z.number().int()])),
-    "fuzzy": z.array(z.union([z.number().int(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "fuzzy": z.array(z.union([z.number().int(), mapSchema(z.union([z.null(), z.number().int()]))])),
     "gardenwards": z.array(z.union([z.array(z.number().int()), z.boolean(), z.string()])),
-    "generalissimo": z.array(z.union([z.null(), z.boolean(), z.record(z.string(), z.number().int())])),
-    "habeas": z.array(z.union([z.null(), z.record(z.string(), z.number().int())])),
+    "generalissimo": z.array(z.union([z.null(), z.boolean(), mapSchema(z.number().int())])),
+    "habeas": z.array(z.union([z.null(), mapSchema(z.number().int())])),
     "hemicrystalline": z.array(z.union([CimeliaClassSchema, z.string()])),
     "hemocoele": z.array(z.union([z.array(z.number().int()), HemocoeleClassSchema])),
     "hoister": z.array(z.union([z.null(), CimeliaClassSchema, z.string()])),
@@ -328,5 +334,5 @@ export const TopLevelSchema = z.object({
     "intentiveness": z.array(z.union([CimeliaClassSchema, z.number(), z.string()])),
     "interacinar": InteracinarSchema,
     "intercorrelation": z.array(z.union([z.null(), z.array(z.number().int())])),
-    "jacutinga": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "jacutinga": z.array(z.union([z.array(z.number().int()), mapSchema(z.union([z.null(), z.number().int()]))])),
 });
diff --git a/base/typescript-zod/test/inputs/json/priority/combinations2.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
index c94cf89..b19e3f2 100644
--- a/base/typescript-zod/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const AlleviateClassSchema = z.object({
     "apriori": z.null(),
@@ -243,8 +249,8 @@ export type OskarClass = z.infer<typeof OskarClassSchema>;
 
 export const TopLevelSchema = z.object({
     "Abranchiata": z.array(z.union([z.null(), z.array(z.number().int()), z.number().int()])),
-    "academe": z.array(z.union([z.array(z.number().int()), z.number().int(), z.record(z.string(), z.number().int())])),
-    "acquirable": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.record(z.string(), z.number().int())])),
+    "academe": z.array(z.union([z.array(z.number().int()), z.number().int(), mapSchema(z.number().int())])),
+    "acquirable": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), mapSchema(z.number().int())])),
     "aerometry": z.array(z.union([z.boolean(), z.number()])),
     "alexin": z.array(z.union([z.array(z.number().int()), z.boolean()])),
     "alleviate": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), AlleviateClassSchema])),
@@ -253,39 +259,39 @@ export const TopLevelSchema = z.object({
     "amphithyron": z.array(z.union([z.null(), AmphithyronSchema])),
     "Andriana": z.array(z.union([z.null(), z.string()])),
     "ankee": z.array(z.union([z.array(z.number().int()), AnkeeClassSchema, z.number().int()])),
-    "annihilator": z.array(z.union([z.null(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "annihilator": z.array(z.union([z.null(), mapSchema(z.union([z.null(), z.number().int()]))])),
     "annulose": z.null(),
     "Ansarie": z.array(z.union([z.null(), z.array(z.number().int()), AnsarieClassSchema])),
     "aphasia": z.array(z.union([z.array(z.number().int()), z.number().int()])),
     "asprawl": z.array(z.union([z.number(), z.string()])),
     "attractive": z.array(z.union([z.null(), z.boolean()])),
-    "barksome": z.record(z.string(), z.number().int()),
+    "barksome": mapSchema(z.number().int()),
     "bedesman": z.array(z.union([z.boolean(), z.number(), z.string()])),
     "belard": z.array(z.union([z.array(z.number().int()), RebeccaSchema, z.number()])),
-    "bocking": z.array(z.union([z.array(z.number().int()), z.boolean(), z.record(z.string(), z.number().int())])),
-    "brawlingly": z.array(z.union([z.array(z.null()), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "bocking": z.array(z.union([z.array(z.number().int()), z.boolean(), mapSchema(z.number().int())])),
+    "brawlingly": z.array(z.union([z.array(z.null()), mapSchema(z.union([z.null(), z.number().int()]))])),
     "brookie": z.array(z.union([z.array(z.number().int()), RebeccaSchema])),
     "bumboatman": z.array(z.union([z.null(), z.array(z.null()), z.string()])),
     "bystreet": z.array(z.null()),
     "calaverite": z.array(z.union([z.array(z.number().int()), z.string()])),
-    "catallactic": z.array(z.union([z.array(z.null()), z.boolean(), z.record(z.string(), z.number().int())])),
-    "cemental": z.array(z.union([z.array(z.number().int()), z.number(), z.record(z.string(), z.number().int())])),
+    "catallactic": z.array(z.union([z.array(z.null()), z.boolean(), mapSchema(z.number().int())])),
+    "cemental": z.array(z.union([z.array(z.number().int()), z.number(), mapSchema(z.number().int())])),
     "Chytridiaceae": z.array(z.union([z.null(), z.boolean(), ChytridiaceaeClassSchema])),
     "Discordia": z.array(z.union([z.array(z.number().int()), DiscordiaClassSchema])),
     "Endomyces": z.array(z.union([z.number().int(), z.string()])),
     "Epinephelidae": z.array(z.union([z.boolean(), z.number().int(), z.string()])),
-    "Eupatorium": z.array(z.union([z.array(z.null()), z.record(z.string(), z.number().int())])),
+    "Eupatorium": z.array(z.union([z.array(z.null()), mapSchema(z.number().int())])),
     "Gryphosaurus": z.array(z.union([z.array(z.number().int()), GryphosaurusClassSchema, z.string()])),
-    "Koryak": z.array(z.union([z.record(z.string(), z.union([z.null(), z.number().int()])), z.string()])),
+    "Koryak": z.array(z.union([mapSchema(z.union([z.null(), z.number().int()])), z.string()])),
     "Lavinia": z.array(z.union([LaviniaClassSchema, z.string()])),
     "Oskar": z.array(z.union([z.array(z.number().int()), OskarClassSchema])),
     "Rebecca": z.array(z.union([RebeccaSchema, z.number().int(), z.string()])),
     "Rhomboganoidei": z.array(z.union([z.array(z.number().int()), RebeccaSchema, z.string()])),
     "Rigsmal": z.boolean(),
     "Ruellia": z.array(z.union([z.boolean(), RebeccaSchema, z.string()])),
-    "School": z.array(z.union([z.null(), z.number().int(), z.record(z.string(), z.number().int())])),
+    "School": z.array(z.union([z.null(), z.number().int(), mapSchema(z.number().int())])),
     "Shakespearolater": z.array(z.union([z.array(z.number().int()), z.number(), z.string()])),
     "Svan": z.array(z.number()),
-    "Wayao": z.record(z.string(), z.number()),
+    "Wayao": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
index 8244ab1..ebe3d18 100644
--- a/base/typescript-zod/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const AlleviateClassSchema = z.object({
     "apriori": z.null(),
@@ -233,8 +239,8 @@ export const OskarClassSchema = z.object({
 
 export const TopLevelSchema = z.object({
     "Abranchiata": z.array(z.union([z.null(), z.array(z.number().int()), z.number().int()])),
-    "academe": z.array(z.union([z.array(z.number().int()), z.number().int(), z.record(z.string(), z.number().int())])),
-    "acquirable": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.record(z.string(), z.number().int())])),
+    "academe": z.array(z.union([z.array(z.number().int()), z.number().int(), mapSchema(z.number().int())])),
+    "acquirable": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), mapSchema(z.number().int())])),
     "aerometry": z.array(z.union([z.boolean(), z.number()])),
     "alexin": z.array(z.union([z.array(z.number().int()), z.boolean()])),
     "alleviate": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), AlleviateClassSchema])),
@@ -243,38 +249,38 @@ export const TopLevelSchema = z.object({
     "amphithyron": z.array(z.union([z.null(), AmphithyronSchema])),
     "Andriana": z.array(z.union([z.null(), z.string()])),
     "ankee": z.array(z.union([z.array(z.number().int()), AnkeeClassSchema, z.number().int()])),
-    "annihilator": z.array(z.union([z.null(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "annihilator": z.array(z.union([z.null(), mapSchema(z.union([z.null(), z.number().int()]))])),
     "annulose": z.null(),
     "Ansarie": z.array(z.union([z.null(), z.array(z.number().int()), AnsarieClassSchema])),
     "aphasia": z.array(z.union([z.array(z.number().int()), z.number().int()])),
     "asprawl": z.array(z.union([z.number(), z.string()])),
     "attractive": z.array(z.union([z.null(), z.boolean()])),
-    "barksome": z.record(z.string(), z.number().int()),
+    "barksome": mapSchema(z.number().int()),
     "bedesman": z.array(z.union([z.boolean(), z.number(), z.string()])),
     "belard": z.array(z.union([z.array(z.number().int()), RebeccaSchema, z.number()])),
-    "bocking": z.array(z.union([z.array(z.number().int()), z.boolean(), z.record(z.string(), z.number().int())])),
-    "brawlingly": z.array(z.union([z.array(z.null()), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "bocking": z.array(z.union([z.array(z.number().int()), z.boolean(), mapSchema(z.number().int())])),
+    "brawlingly": z.array(z.union([z.array(z.null()), mapSchema(z.union([z.null(), z.number().int()]))])),
     "brookie": z.array(z.union([z.array(z.number().int()), RebeccaSchema])),
     "bumboatman": z.array(z.union([z.null(), z.array(z.null()), z.string()])),
     "bystreet": z.array(z.null()),
     "calaverite": z.array(z.union([z.array(z.number().int()), z.string()])),
-    "catallactic": z.array(z.union([z.array(z.null()), z.boolean(), z.record(z.string(), z.number().int())])),
-    "cemental": z.array(z.union([z.array(z.number().int()), z.number(), z.record(z.string(), z.number().int())])),
+    "catallactic": z.array(z.union([z.array(z.null()), z.boolean(), mapSchema(z.number().int())])),
+    "cemental": z.array(z.union([z.array(z.number().int()), z.number(), mapSchema(z.number().int())])),
     "Chytridiaceae": z.array(z.union([z.null(), z.boolean(), ChytridiaceaeClassSchema])),
     "Discordia": z.array(z.union([z.array(z.number().int()), DiscordiaClassSchema])),
     "Endomyces": z.array(z.union([z.number().int(), z.string()])),
     "Epinephelidae": z.array(z.union([z.boolean(), z.number().int(), z.string()])),
-    "Eupatorium": z.array(z.union([z.array(z.null()), z.record(z.string(), z.number().int())])),
+    "Eupatorium": z.array(z.union([z.array(z.null()), mapSchema(z.number().int())])),
     "Gryphosaurus": z.array(z.union([z.array(z.number().int()), GryphosaurusClassSchema, z.string()])),
-    "Koryak": z.array(z.union([z.record(z.string(), z.union([z.null(), z.number().int()])), z.string()])),
+    "Koryak": z.array(z.union([mapSchema(z.union([z.null(), z.number().int()])), z.string()])),
     "Lavinia": z.array(z.union([LaviniaClassSchema, z.string()])),
     "Oskar": z.array(z.union([z.array(z.number().int()), OskarClassSchema])),
     "Rebecca": z.array(z.union([RebeccaSchema, z.number().int(), z.string()])),
     "Rhomboganoidei": z.array(z.union([z.array(z.number().int()), RebeccaSchema, z.string()])),
     "Rigsmal": z.boolean(),
     "Ruellia": z.array(z.union([z.boolean(), RebeccaSchema, z.string()])),
-    "School": z.array(z.union([z.null(), z.number().int(), z.record(z.string(), z.number().int())])),
+    "School": z.array(z.union([z.null(), z.number().int(), mapSchema(z.number().int())])),
     "Shakespearolater": z.array(z.union([z.array(z.number().int()), z.number(), z.string()])),
     "Svan": z.array(z.number()),
-    "Wayao": z.record(z.string(), z.number()),
+    "Wayao": mapSchema(z.number()),
 });
diff --git a/base/typescript-zod/test/inputs/json/priority/combinations3.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
index f997a6c..188c38a 100644
--- a/base/typescript-zod/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const JurorClassSchema = z.object({
     "adipsy": z.null(),
@@ -354,7 +360,7 @@ export type PrefreshmanClass = z.infer<typeof PrefreshmanClassSchema>;
 
 export const TopLevelSchema = z.object({
     "juror": z.array(z.union([z.boolean(), JurorClassSchema])),
-    "kongoni": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.number().int())])),
+    "kongoni": z.array(z.union([z.array(z.number().int()), mapSchema(z.number().int())])),
     "ladronism": z.array(z.union([LadronismClassSchema, z.number(), z.string()])),
     "landlubberly": z.array(z.union([z.boolean(), LandlubberlyClassSchema, z.number().int()])),
     "listener": z.array(z.union([z.array(z.null()), z.number().int()])),
@@ -375,25 +381,25 @@ export const TopLevelSchema = z.object({
     "nonvaluation": z.array(z.union([z.array(z.null()), z.boolean(), z.number()])),
     "occupationalist": z.array(z.union([z.null(), z.array(z.null()), OccupationalistClassSchema])),
     "outrival": z.array(z.union([z.null(), OutrivalClassSchema, z.number()])),
-    "paleographically": z.array(z.union([z.number(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
-    "pamphletwise": z.array(z.union([z.number().int(), z.record(z.string(), z.number().int()), z.string()])),
+    "paleographically": z.array(z.union([z.number(), mapSchema(z.union([z.null(), z.number().int()]))])),
+    "pamphletwise": z.array(z.union([z.number().int(), mapSchema(z.number().int()), z.string()])),
     "pediatrics": z.array(z.union([z.null(), z.boolean(), z.number()])),
     "perceptive": z.array(z.boolean()),
     "piaculum": z.array(z.union([PiaculumClassSchema, z.number()])),
     "piccadilly": z.array(z.union([z.null(), z.number(), z.string()])),
     "piffler": z.array(z.union([z.array(z.null()), MonaziteClassSchema])),
     "pithful": z.array(z.union([z.null(), z.boolean(), z.number().int()])),
-    "placuntitis": z.array(z.union([z.number().int(), z.record(z.string(), z.number().int())])),
-    "plectopterous": z.array(z.union([z.number(), z.record(z.string(), z.number().int())])),
+    "placuntitis": z.array(z.union([z.number().int(), mapSchema(z.number().int())])),
+    "plectopterous": z.array(z.union([z.number(), mapSchema(z.number().int())])),
     "pneumocele": z.array(z.union([z.null(), PneumoceleSchema])),
     "poliorcetic": z.array(z.union([z.boolean(), MonaziteClassSchema])),
-    "poormaster": z.array(z.union([z.null(), z.array(z.number().int()), z.record(z.string(), z.number().int())])),
+    "poormaster": z.array(z.union([z.null(), z.array(z.number().int()), mapSchema(z.number().int())])),
     "potwhisky": z.array(z.union([z.null(), PotwhiskyClassSchema, z.number().int()])),
     "practicalizer": z.array(z.union([z.array(z.null()), MonaziteClassSchema, z.string()])),
     "prefreshman": z.array(z.union([z.array(z.null()), PrefreshmanClassSchema, z.string()])),
     "prehensility": z.array(z.union([z.array(z.null()), z.boolean(), MonaziteClassSchema])),
     "prevoidance": z.array(z.union([z.array(z.number().int()), MonaziteClassSchema, z.number().int()])),
-    "probant": z.array(z.record(z.string(), z.union([z.null(), z.number().int()]))),
+    "probant": z.array(mapSchema(z.union([z.null(), z.number().int()]))),
     "protext": z.array(z.union([z.array(z.number().int()), z.boolean(), MonaziteClassSchema])),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
index 02c5d53..c215c0f 100644
--- a/base/typescript-zod/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const JurorClassSchema = z.object({
     "adipsy": z.null(),
@@ -340,7 +346,7 @@ export const PrefreshmanClassSchema = z.object({
 
 export const TopLevelSchema = z.object({
     "juror": z.array(z.union([z.boolean(), JurorClassSchema])),
-    "kongoni": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.number().int())])),
+    "kongoni": z.array(z.union([z.array(z.number().int()), mapSchema(z.number().int())])),
     "ladronism": z.array(z.union([LadronismClassSchema, z.number(), z.string()])),
     "landlubberly": z.array(z.union([z.boolean(), LandlubberlyClassSchema, z.number().int()])),
     "listener": z.array(z.union([z.array(z.null()), z.number().int()])),
@@ -361,24 +367,24 @@ export const TopLevelSchema = z.object({
     "nonvaluation": z.array(z.union([z.array(z.null()), z.boolean(), z.number()])),
     "occupationalist": z.array(z.union([z.null(), z.array(z.null()), OccupationalistClassSchema])),
     "outrival": z.array(z.union([z.null(), OutrivalClassSchema, z.number()])),
-    "paleographically": z.array(z.union([z.number(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
-    "pamphletwise": z.array(z.union([z.number().int(), z.record(z.string(), z.number().int()), z.string()])),
+    "paleographically": z.array(z.union([z.number(), mapSchema(z.union([z.null(), z.number().int()]))])),
+    "pamphletwise": z.array(z.union([z.number().int(), mapSchema(z.number().int()), z.string()])),
     "pediatrics": z.array(z.union([z.null(), z.boolean(), z.number()])),
     "perceptive": z.array(z.boolean()),
     "piaculum": z.array(z.union([PiaculumClassSchema, z.number()])),
     "piccadilly": z.array(z.union([z.null(), z.number(), z.string()])),
     "piffler": z.array(z.union([z.array(z.null()), MonaziteClassSchema])),
     "pithful": z.array(z.union([z.null(), z.boolean(), z.number().int()])),
-    "placuntitis": z.array(z.union([z.number().int(), z.record(z.string(), z.number().int())])),
-    "plectopterous": z.array(z.union([z.number(), z.record(z.string(), z.number().int())])),
+    "placuntitis": z.array(z.union([z.number().int(), mapSchema(z.number().int())])),
+    "plectopterous": z.array(z.union([z.number(), mapSchema(z.number().int())])),
     "pneumocele": z.array(z.union([z.null(), PneumoceleSchema])),
     "poliorcetic": z.array(z.union([z.boolean(), MonaziteClassSchema])),
-    "poormaster": z.array(z.union([z.null(), z.array(z.number().int()), z.record(z.string(), z.number().int())])),
+    "poormaster": z.array(z.union([z.null(), z.array(z.number().int()), mapSchema(z.number().int())])),
     "potwhisky": z.array(z.union([z.null(), PotwhiskyClassSchema, z.number().int()])),
     "practicalizer": z.array(z.union([z.array(z.null()), MonaziteClassSchema, z.string()])),
     "prefreshman": z.array(z.union([z.array(z.null()), PrefreshmanClassSchema, z.string()])),
     "prehensility": z.array(z.union([z.array(z.null()), z.boolean(), MonaziteClassSchema])),
     "prevoidance": z.array(z.union([z.array(z.number().int()), MonaziteClassSchema, z.number().int()])),
-    "probant": z.array(z.record(z.string(), z.union([z.null(), z.number().int()]))),
+    "probant": z.array(mapSchema(z.union([z.null(), z.number().int()]))),
     "protext": z.array(z.union([z.array(z.number().int()), z.boolean(), MonaziteClassSchema])),
 });
diff --git a/base/typescript-zod/test/inputs/json/priority/combinations4.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
index 6631e70..0af982b 100644
--- a/base/typescript-zod/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const PulpitismClassSchema = z.object({
     "abnet": z.null(),
@@ -405,7 +411,7 @@ export const TopLevelSchema = z.object({
     "pulpitism": z.array(z.union([z.array(z.number().int()), PulpitismClassSchema, z.number()])),
     "pyodermia": z.array(z.union([PyodermiaClassSchema, z.number().int()])),
     "quebrachine": z.array(z.union([z.null(), z.boolean(), QuebrachineClassSchema])),
-    "querier": z.array(z.union([z.boolean(), z.record(z.string(), z.number().int())])),
+    "querier": z.array(z.union([z.boolean(), mapSchema(z.number().int())])),
     "rebarbative": z.array(z.union([z.array(z.number().int()), z.boolean(), z.number()])),
     "reimagine": z.array(ReimagineSchema),
     "ressaut": RessautSchema,
@@ -414,10 +420,10 @@ export const TopLevelSchema = z.object({
     "rewrite": z.array(z.union([z.array(z.null()), RewriteClassSchema, z.number()])),
     "saccoderm": z.array(z.union([z.null(), z.array(z.number().int()), z.string()])),
     "santir": z.array(z.union([SantirClassSchema, z.number()])),
-    "saprophilous": z.array(z.union([z.null(), z.record(z.string(), z.number().int()), z.string()])),
+    "saprophilous": z.array(z.union([z.null(), mapSchema(z.number().int()), z.string()])),
     "saxten": z.array(z.union([SaxtenClassSchema, z.string()])),
     "scatty": z.array(z.union([z.null(), ScattySchema])),
-    "scoffer": z.array(z.union([z.null(), z.array(z.null()), z.record(z.string(), z.number().int())])),
+    "scoffer": z.array(z.union([z.null(), z.array(z.null()), mapSchema(z.number().int())])),
     "scrampum": z.array(z.union([z.null(), z.array(z.number().int()), z.boolean()])),
     "semantic": z.number(),
     "serpentinic": z.array(z.union([z.array(z.number().int()), z.number()])),
@@ -425,7 +431,7 @@ export const TopLevelSchema = z.object({
     "sistering": z.array(z.union([z.array(z.null()), SisteringClassSchema, z.number().int()])),
     "staghunting": z.array(StaghuntingSchema),
     "stagmometer": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.string()])),
-    "stimulability": z.array(z.union([z.boolean(), z.number().int(), z.record(z.string(), z.number().int())])),
+    "stimulability": z.array(z.union([z.boolean(), z.number().int(), mapSchema(z.number().int())])),
     "strangleable": z.array(z.union([z.array(z.null()), z.number()])),
     "strenuosity": z.array(z.union([z.array(z.null()), StrenuosityClassSchema])),
     "tabaxir": z.array(z.union([z.boolean(), z.number()])),
@@ -435,22 +441,22 @@ export const TopLevelSchema = z.object({
     "tortricine": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), QuebrachineClassSchema])),
     "truantcy": z.array(z.union([z.boolean(), TruantcyClassSchema])),
     "turgesce": z.array(z.string()),
-    "unbeginning": z.array(z.union([z.array(z.null()), z.record(z.string(), z.number().int()), z.string()])),
+    "unbeginning": z.array(z.union([z.array(z.null()), mapSchema(z.number().int()), z.string()])),
     "underdunged": z.array(z.number()),
-    "undesirability": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.number().int()), z.string()])),
-    "unerasing": z.array(z.union([z.array(z.null()), z.number().int(), z.record(z.string(), z.number().int())])),
+    "undesirability": z.array(z.union([z.array(z.number().int()), mapSchema(z.number().int()), z.string()])),
+    "unerasing": z.array(z.union([z.array(z.null()), z.number().int(), mapSchema(z.number().int())])),
     "unguentarium": z.array(z.union([z.null(), z.array(z.null()), z.number().int()])),
     "unimpeachably": z.array(z.union([z.boolean(), UnimpeachablyClassSchema])),
-    "unmortgaged": z.array(z.union([z.null(), z.number(), z.record(z.string(), z.number().int())])),
+    "unmortgaged": z.array(z.union([z.null(), z.number(), mapSchema(z.number().int())])),
     "unobstructed": z.array(z.union([z.null(), QuebrachineClassSchema, z.number().int()])),
     "unreceptivity": z.array(z.union([z.array(z.null()), z.number().int(), z.string()])),
     "unsatisfactoriness": z.array(z.union([z.array(z.number().int()), z.boolean(), z.number().int()])),
     "unsecurity": z.array(z.number().int()),
     "unstressed": z.array(z.union([z.boolean(), UnstressedClassSchema, z.string()])),
-    "untasked": z.array(z.union([z.array(z.null()), z.number(), z.record(z.string(), z.number().int())])),
-    "unvarying": z.array(z.union([z.boolean(), z.number(), z.record(z.string(), z.number().int())])),
+    "untasked": z.array(z.union([z.array(z.null()), z.number(), mapSchema(z.number().int())])),
+    "unvarying": z.array(z.union([z.boolean(), z.number(), mapSchema(z.number().int())])),
     "vehemently": z.array(z.union([z.null(), z.array(z.null()), z.boolean()])),
-    "warriorship": z.record(z.string(), z.boolean()),
+    "warriorship": mapSchema(z.boolean()),
     "whitepot": z.array(z.union([QuebrachineClassSchema, z.number()])),
     "wrothy": z.array(z.union([z.array(z.null()), WrothyClassSchema])),
 });
diff --git a/base/typescript-zod/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
index 0c08975..c4bc838 100644
--- a/base/typescript-zod/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const PulpitismClassSchema = z.object({
     "abnet": z.null(),
@@ -389,7 +395,7 @@ export const TopLevelSchema = z.object({
     "pulpitism": z.array(z.union([z.array(z.number().int()), PulpitismClassSchema, z.number()])),
     "pyodermia": z.array(z.union([PyodermiaClassSchema, z.number().int()])),
     "quebrachine": z.array(z.union([z.null(), z.boolean(), QuebrachineClassSchema])),
-    "querier": z.array(z.union([z.boolean(), z.record(z.string(), z.number().int())])),
+    "querier": z.array(z.union([z.boolean(), mapSchema(z.number().int())])),
     "rebarbative": z.array(z.union([z.array(z.number().int()), z.boolean(), z.number()])),
     "reimagine": z.array(ReimagineSchema),
     "ressaut": RessautSchema,
@@ -398,10 +404,10 @@ export const TopLevelSchema = z.object({
     "rewrite": z.array(z.union([z.array(z.null()), RewriteClassSchema, z.number()])),
     "saccoderm": z.array(z.union([z.null(), z.array(z.number().int()), z.string()])),
     "santir": z.array(z.union([SantirClassSchema, z.number()])),
-    "saprophilous": z.array(z.union([z.null(), z.record(z.string(), z.number().int()), z.string()])),
+    "saprophilous": z.array(z.union([z.null(), mapSchema(z.number().int()), z.string()])),
     "saxten": z.array(z.union([SaxtenClassSchema, z.string()])),
     "scatty": z.array(z.union([z.null(), ScattySchema])),
-    "scoffer": z.array(z.union([z.null(), z.array(z.null()), z.record(z.string(), z.number().int())])),
+    "scoffer": z.array(z.union([z.null(), z.array(z.null()), mapSchema(z.number().int())])),
     "scrampum": z.array(z.union([z.null(), z.array(z.number().int()), z.boolean()])),
     "semantic": z.number(),
     "serpentinic": z.array(z.union([z.array(z.number().int()), z.number()])),
@@ -409,7 +415,7 @@ export const TopLevelSchema = z.object({
     "sistering": z.array(z.union([z.array(z.null()), SisteringClassSchema, z.number().int()])),
     "staghunting": z.array(StaghuntingSchema),
     "stagmometer": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.string()])),
-    "stimulability": z.array(z.union([z.boolean(), z.number().int(), z.record(z.string(), z.number().int())])),
+    "stimulability": z.array(z.union([z.boolean(), z.number().int(), mapSchema(z.number().int())])),
     "strangleable": z.array(z.union([z.array(z.null()), z.number()])),
     "strenuosity": z.array(z.union([z.array(z.null()), StrenuosityClassSchema])),
     "tabaxir": z.array(z.union([z.boolean(), z.number()])),
@@ -419,22 +425,22 @@ export const TopLevelSchema = z.object({
     "tortricine": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), QuebrachineClassSchema])),
     "truantcy": z.array(z.union([z.boolean(), TruantcyClassSchema])),
     "turgesce": z.array(z.string()),
-    "unbeginning": z.array(z.union([z.array(z.null()), z.record(z.string(), z.number().int()), z.string()])),
+    "unbeginning": z.array(z.union([z.array(z.null()), mapSchema(z.number().int()), z.string()])),
     "underdunged": z.array(z.number()),
-    "undesirability": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.number().int()), z.string()])),
-    "unerasing": z.array(z.union([z.array(z.null()), z.number().int(), z.record(z.string(), z.number().int())])),
+    "undesirability": z.array(z.union([z.array(z.number().int()), mapSchema(z.number().int()), z.string()])),
+    "unerasing": z.array(z.union([z.array(z.null()), z.number().int(), mapSchema(z.number().int())])),
     "unguentarium": z.array(z.union([z.null(), z.array(z.null()), z.number().int()])),
     "unimpeachably": z.array(z.union([z.boolean(), UnimpeachablyClassSchema])),
-    "unmortgaged": z.array(z.union([z.null(), z.number(), z.record(z.string(), z.number().int())])),
+    "unmortgaged": z.array(z.union([z.null(), z.number(), mapSchema(z.number().int())])),
     "unobstructed": z.array(z.union([z.null(), QuebrachineClassSchema, z.number().int()])),
     "unreceptivity": z.array(z.union([z.array(z.null()), z.number().int(), z.string()])),
     "unsatisfactoriness": z.array(z.union([z.array(z.number().int()), z.boolean(), z.number().int()])),
     "unsecurity": z.array(z.number().int()),
     "unstressed": z.array(z.union([z.boolean(), UnstressedClassSchema, z.string()])),
-    "untasked": z.array(z.union([z.array(z.null()), z.number(), z.record(z.string(), z.number().int())])),
-    "unvarying": z.array(z.union([z.boolean(), z.number(), z.record(z.string(), z.number().int())])),
+    "untasked": z.array(z.union([z.array(z.null()), z.number(), mapSchema(z.number().int())])),
+    "unvarying": z.array(z.union([z.boolean(), z.number(), mapSchema(z.number().int())])),
     "vehemently": z.array(z.union([z.null(), z.array(z.null()), z.boolean()])),
-    "warriorship": z.record(z.string(), z.boolean()),
+    "warriorship": mapSchema(z.boolean()),
     "whitepot": z.array(z.union([QuebrachineClassSchema, z.number()])),
     "wrothy": z.array(z.union([z.array(z.null()), WrothyClassSchema])),
 });
diff --git a/base/typescript-zod/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
index ff90a9b..296212d 100644
--- a/base/typescript-zod/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const LeaddatumEnumSchema = z.enum([
     "",
@@ -256,20 +262,20 @@ export const PlSchema = z.object({
 export type Pl = z.infer<typeof PlSchema>;
 
 export const TotalldsSchema = z.object({
-    "sAssists": z.record(z.string(), ScorerSchema),
-    "sBlocks": z.record(z.string(), ScorerSchema),
-    "sPoints": z.record(z.string(), ScorerSchema),
-    "sReboundsTotal": z.record(z.string(), ScorerSchema),
-    "sSteals": z.record(z.string(), ScorerSchema),
+    "sAssists": mapSchema(ScorerSchema),
+    "sBlocks": mapSchema(ScorerSchema),
+    "sPoints": mapSchema(ScorerSchema),
+    "sReboundsTotal": mapSchema(ScorerSchema),
+    "sSteals": mapSchema(ScorerSchema),
 });
 export type Totallds = z.infer<typeof TotalldsSchema>;
 
 export const LdsSchema = z.object({
-    "sAssists": z.record(z.string(), ScorerSchema),
+    "sAssists": mapSchema(ScorerSchema),
     "sBlocks": SBlocksSchema,
-    "sPoints": z.record(z.string(), ScorerSchema),
-    "sReboundsTotal": z.record(z.string(), ScorerSchema),
-    "sSteals": z.record(z.string(), ScorerSchema),
+    "sPoints": mapSchema(ScorerSchema),
+    "sReboundsTotal": mapSchema(ScorerSchema),
+    "sSteals": mapSchema(ScorerSchema),
 });
 export type Lds = z.infer<typeof LdsSchema>;
 
@@ -286,7 +292,7 @@ export const TmSchema = z.object({
     "p2_score": z.number().int(),
     "p3_score": z.number().int(),
     "p4_score": z.number().int(),
-    "pl": z.record(z.string(), PlSchema),
+    "pl": mapSchema(PlSchema),
     "score": z.number().int(),
     "scoring": z.array(ScorerSchema),
     "shortName": z.string(),
@@ -358,9 +364,9 @@ export const TopLevelSchema = z.object({
     "periodLengthREGULAR": z.number().int(),
     "periodType": PerTypeSchema,
     "periodsMax": z.number().int(),
-    "scorers": z.record(z.string(), z.array(ScorerSchema)),
+    "scorers": mapSchema(z.array(ScorerSchema)),
     "timeline": z.array(z.any()),
-    "tm": z.record(z.string(), TmSchema),
+    "tm": mapSchema(TmSchema),
     "totalTimeAdded": z.number().int(),
     "totallds": TotalldsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
index 14b7962..8e49730 100644
--- a/base/typescript-zod/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
@@ -1,8 +1,14 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
-    "a": z.record(z.string(), z.number().int()),
-    "b": z.record(z.string(), z.number().int()),
+    "a": mapSchema(z.number().int()),
+    "b": mapSchema(z.number().int()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/number-map.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/number-map.json/default/TopLevel.ts
index 95fc3e0..834a254 100644
--- a/base/typescript-zod/test/inputs/json/priority/number-map.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/number-map.json/default/TopLevel.ts
@@ -1,7 +1,13 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const TopLevelSchema = z.object({
-    "foo": z.record(z.string(), z.number()),
+    "foo": mapSchema(z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
index dba7bbe..fd5c327 100644
--- a/base/typescript-zod/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const DifferentThingClassSchema = z.object({
     "name": z.string(),
@@ -25,10 +31,10 @@ export const TopLevelSchema = z.object({
     "differentThings": z.array(z.union([DifferentThingClassSchema, z.number().int(), z.string().regex(/^-?\d+$/).transform(Number)])),
     "doubleValue": z.number(),
     "intValue": z.number().int(),
-    "mapValue": z.record(z.string(), z.union([z.null(), z.number().int()])),
+    "mapValue": mapSchema(z.union([z.null(), z.number().int()])),
     "name with spaces": z.null(),
     "nullValue": z.null(),
-    "nullableMapValue": z.record(z.string(), z.union([z.null(), z.number().int()])),
+    "nullableMapValue": mapSchema(z.union([z.null(), z.number().int()])),
     "people": z.array(PersonElementSchema),
     "person": PurplePersonSchema,
     "stringValue": z.string(),
diff --git a/base/typescript-zod/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
index b71dac0..c642d22 100644
--- a/base/typescript-zod/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
@@ -1,5 +1,11 @@
 import * as z from "zod";
 
+const mapSchema = <T extends z.ZodTypeAny>(value: T) =>
+    z.custom<Record<string, unknown>>(input => z.getParsedType(input) === z.ZodParsedType.object)
+        .transform(Object.entries)
+        .pipe(z.array(z.tuple([z.string(), value])))
+        .transform((entries): Record<string, z.output<T>> => Object.fromEntries(entries));
+
 
 export const DatumSchema = z.object({
     "anomaly": z.string(),
@@ -16,7 +22,7 @@ export const DescriptionSchema = z.object({
 export type Description = z.infer<typeof DescriptionSchema>;
 
 export const TopLevelSchema = z.object({
-    "data": z.record(z.string(), DatumSchema),
+    "data": mapSchema(DatumSchema),
     "description": DescriptionSchema,
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
