const makeSchema =
<Fields extends Schema.Struct.Fields>(
fields: Fields,
derivedIdFn: (self: Schema.Schema.Type<Schema.Struct<Fields>>) => string) => {
return Schema.Struct(fields).pipe(
Schema.transform(
Schema.typeSchema(
Schema.Struct(fields).pipe(Schema.extend(Schema.Struct({ derivedId: Schema.String })))
),
{
decode: (input) => {
const newDerivedId = derivedIdFn(input)
return { ...input, derivedId: newDerivedId }
},
encode: (input) => {
const { derivedId, ...rest } = input
return rest
}
}
)
)
}
const makeSchema =
<Fields extends Schema.Struct.Fields>(
fields: Fields,
derivedIdFn: (self: Schema.Schema.Type<Schema.Struct<Fields>>) => string) => {
return Schema.Struct(fields).pipe(
Schema.transform(
Schema.typeSchema(
Schema.Struct(fields).pipe(Schema.extend(Schema.Struct({ derivedId: Schema.String })))
),
{
decode: (input) => {
const newDerivedId = derivedIdFn(input)
return { ...input, derivedId: newDerivedId }
},
encode: (input) => {
const { derivedId, ...rest } = input
return rest
}
}
)
)
}