Skip to content

Commit

Permalink
feat(serializers): added more exports, made array serializers a facto…
Browse files Browse the repository at this point in the history
…ry to be able to change separator
  • Loading branch information
BowlingX committed Dec 30, 2019
1 parent b402891 commit 308e8cf
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 18 deletions.
9 changes: 8 additions & 1 deletion src/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
export { Geschichte as default } from './lib/provider'
export { serializers } from './lib/serializers'
export {
serializers,
Serializer,
arrayFloatSerializer,
arrayIntSerializer,
arrayStringSerializer,
DEFAULT_SEPARATOR
} from './lib/serializers'
export {
factoryParameters,
useBatchQuery,
Expand Down
43 changes: 26 additions & 17 deletions src/lib/serializers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ export interface Serializer {
readonly serialize: (value?: any) => string | null
}

const join = (value: readonly any[]) => value.join('_')
const join = (value: readonly any[], separator: string) => value.join(separator)

const split = (value: string) => value.split('_')
const split = (value: string, separator: string) => value.split(separator)

const intSerializer: Serializer = {
deserialize: (value: string): number | null => parseInt(value, 10) || null,
Expand All @@ -22,25 +22,32 @@ const stringSerializer: Serializer = {
serialize: (value?: string): string => String(value)
}

const arrayStringSerializer: Serializer = {
deserialize: (value: string): readonly string[] | null => split(value),
export const arrayStringSerializer: (separator: string) => Serializer = (
separator: string
) => ({
deserialize: (value: string): readonly string[] | null =>
split(value, separator),
serialize: (value?: readonly string[]): string | null =>
(value && join(value)) || null
}
(value && join(value, separator)) || null
})

const arrayIntSerializer: Serializer = {
export const arrayIntSerializer: (separator: string) => Serializer = (
separator: string
) => ({
deserialize: (value: string): readonly number[] | null =>
split(value).map(intSerializer.deserialize),
split(value, separator).map(intSerializer.deserialize),
serialize: (value?: readonly number[]): string | null =>
(value && join(value)) || null
}
(value && join(value, separator)) || null
})

const arrayFloatSerializer: Serializer = {
export const arrayFloatSerializer: (separator: string) => Serializer = (
separator: string
) => ({
deserialize: (value: string): readonly number[] | null =>
split(value).map(floatSerializer.deserialize),
split(value, separator).map(floatSerializer.deserialize),
serialize: (value?: readonly number[]): string | null =>
(value && join(value)) || null
}
(value && join(value, separator)) || null
})

const dateSerializer = (
locale: string = 'en-us',
Expand All @@ -56,10 +63,12 @@ const booleanSerializer: Serializer = {
serialize: (value?: boolean): string => (value ? '1' : '0')
}

export const DEFAULT_SEPARATOR = '_'

export const serializers = {
arrayFloat: arrayFloatSerializer,
arrayInt: arrayIntSerializer,
arrayString: arrayStringSerializer,
arrayFloat: arrayFloatSerializer(DEFAULT_SEPARATOR),
arrayInt: arrayIntSerializer(DEFAULT_SEPARATOR),
arrayString: arrayStringSerializer(DEFAULT_SEPARATOR),
boolean: booleanSerializer,
date: dateSerializer,
float: floatSerializer,
Expand Down

0 comments on commit 308e8cf

Please sign in to comment.