import * as S from '@effect/schema/Schema'
declare function generateId(): string
const FORM_VALUE = {
names: [
{
id: 'throwaway-uid',
value: 'name',
},
],
}
const DB_INSERT_VALUE = {
names: ['name'],
}
const NameInForm = S.Struct({ value: S.String, id: S.String })
const nameTransformer = S.transform(NameInForm, S.String, {
decode: (nameInForm) => nameInForm.value,
encode: (name) => ({ value: name, id: generateId() }),
})
const FormSchema = S.Struct({
names: S.Array(NameInForm),
})
const InsertSchema = S.Struct({
names: S.Array(S.String),
})
const transformer = S.transform(FormSchema, InsertSchema, {
decode: (formValue) => ({
names: formValue.names.map((name) => S.decodeSync(nameTransformer)(name)),
}),
encode: (insertValue) => ({
names: insertValue.names.map((name) => S.encodeSync(nameTransformer)(name)),
}),
})
import * as S from '@effect/schema/Schema'
declare function generateId(): string
const FORM_VALUE = {
names: [
{
id: 'throwaway-uid',
value: 'name',
},
],
}
const DB_INSERT_VALUE = {
names: ['name'],
}
const NameInForm = S.Struct({ value: S.String, id: S.String })
const nameTransformer = S.transform(NameInForm, S.String, {
decode: (nameInForm) => nameInForm.value,
encode: (name) => ({ value: name, id: generateId() }),
})
const FormSchema = S.Struct({
names: S.Array(NameInForm),
})
const InsertSchema = S.Struct({
names: S.Array(S.String),
})
const transformer = S.transform(FormSchema, InsertSchema, {
decode: (formValue) => ({
names: formValue.names.map((name) => S.decodeSync(nameTransformer)(name)),
}),
encode: (insertValue) => ({
names: insertValue.names.map((name) => S.encodeSync(nameTransformer)(name)),
}),
})