-// export const compose = <T>(...fns: ((arg: T) => T)[]): ((x: T) => T) => {
-// return (x: T) => fns.reduceRight((y, fn) => fn(y), x)
-// }
+export const convertToInt = (value: unknown): number => {
+ if (value == null) {
+ return 0
+ }
+ if (Number.isSafeInteger(value)) {
+ return value as number
+ }
+ if (typeof value === 'number') {
+ return Math.trunc(value)
+ }
+ let changedValue: number = value as number
+ if (typeof value === 'string') {
+ changedValue = parseInt(value)
+ }
+ if (isNaN(changedValue)) {
+ throw new Error(`Cannot convert to integer: '${String(value)}'`)
+ }
+ return changedValue
+}
+
+export const setToLocalStorage = <T>(key: string, value: T): void => {
+ localStorage.setItem(key, JSON.stringify(value))
+}
+
+export const getFromLocalStorage = <T>(key: string, defaultValue: T): T => {
+ const item = localStorage.getItem(key)
+ return item != null ? (JSON.parse(item) as T) : defaultValue
+}