UNPKG

@daiso-tech/core

Version:

The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.

269 lines (268 loc) 7.79 kB
/** * @module Serde */ import type { OneOrMore } from "../../../utilities/_module-exports.js"; import type { IFlexibleSerde, IFlexibleSerdeAdapter, ISerdeTransformer, SerializableClass } from "../../../serde/contracts/_module-exports.js"; /** * * IMPORT_PATH: `"@daiso-tech/core/serde/deriavables"` * @group Derivables */ export type SerdeSettings = { /** * @default {true} */ shouldHandleArrayBuffer?: boolean; /** * @default {true} */ shouldHandleBuffer?: boolean; /** * @default {true} */ shouldHandleUint8Array?: boolean; /** * @default {true} */ shouldHandleInt8Array?: boolean; /** * @default {true} */ shouldHandleUint16Array?: boolean; /** * @default {true} */ shouldHandleInt16Array?: boolean; /** * @default {true} */ shouldHandleUint32Array?: boolean; /** * @default {true} */ shouldHandleInt32Array?: boolean; /** * @default {true} */ shouldHandleBigUint64Array?: boolean; /** * @default {true} */ shouldHandleBigInt64Array?: boolean; /** * @default {true} */ shouldHandleFloat32Array?: boolean; /** * @default {true} */ shouldHandleFloat64Array?: boolean; /** * @default {true} */ shouldHandleMap?: boolean; /** * @default {true} */ shouldHandleSet?: boolean; /** * @default {true} */ shouldHandleBigInt?: boolean; /** * @default {true} */ shouldHandleNaN?: boolean; /** * @default {true} */ shouldHandleInfinity?: boolean; /** * @default {true} */ shouldHandleUndefined?: boolean; /** * @default {true} */ shouldHandleRegExp?: boolean; /** * @default {true} */ shouldHandleDate?: boolean; /** * @default {true} */ shouldHandleURL?: boolean; /** * @default {true} */ shouldHandleURLSearchParams?: boolean; }; /** * `Serde` class can be derived from any {@link IFlexibleSerdeAdapter | `IFlexibleSerdeAdapter`}. * * IMPORT_PATH: `"@daiso-tech/core/serde/deriavables"` * @group Derivables */ export declare class Serde<TSerializedValue> implements IFlexibleSerde<TSerializedValue> { private readonly serdeAdapter; /** * @example * ```ts * import type { IFlexibleSerde } from "@daiso-tech/core/serde/contracts"; * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/adapters"; * import { Serde } from "@daiso-tech/core/serde"; * * const serde: IFlexibleSerde = new Serde(new SuperJsonSerdeAdapter()); * ``` */ constructor(serdeAdapter: IFlexibleSerdeAdapter<TSerializedValue>, settings?: SerdeSettings); /** * @example * ```ts * import type { IFlexibleSerde } from "@daiso-tech/core/serde/contracts"; * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/adapters"; * import { Serde } from "@daiso-tech/core/serde"; * * const serde: IFlexibleSerde = new Serde(new SuperJsonSerdeAdapter()); * * const value = { a: 1, b: 2 }; * const serializedValue = serde.serialize(value); * * // Will print out { a: 1, b: 2} as json string, this because of the SuperJsonSerdeAdapter * console.log(serializedValue); * ``` */ serialize<TValue>(value: TValue): TSerializedValue; /** * @example * ```ts * import type { IFlexibleSerde } from "@daiso-tech/core/serde/contracts"; * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/adapters"; * import { Serde } from "@daiso-tech/core/serde"; * * const serde: IFlexibleSerde = new Serde(new SuperJsonSerdeAdapter()); * * const value = { a: 1, b: 2 }; * const deserializedValue = serde.deserialize(serde.serialize(value)); * * // Will print out { a: 1, b: 2} * console.log(deserializedValue); * * // Will print false * console.log(value === deserializedValue); * ``` */ deserialize<TValue>(serializedValue: TSerializedValue): TValue; /** * @example * ```ts * import type { IFlexibleSerde } from "@daiso-tech/core/serde/contracts"; * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/adapters"; * import { Serde } from "@daiso-tech/core/serde"; * import { ISerializable } from "@daiso-tech/core/serde/contracts"; * * const serde: IFlexibleSerde = new Serde(new SuperJsonSerdeAdapter()); * * type ISerializedUser = { * name: string; * age: number * }; * * class User implements ISerializable<ISerializedUser> { * static deserialize(serializedUser: ISerializedUser): User { * return new User(serializedUser.name, serializedUser.age); * } * * constructor(public readonly name: string, public readonly age: number) {} * * serialize(): ISerializedUser { * return { * name: this.name, * age: this.age, * }; * } * } * * serde.registerClass(AddEvent); * * const user = new User("Carl", 30); * const deserializedUser = serde.deserialize<User>(serde.serialize(user)); * * // Will print "Carl" * console.log(deserializedUser.name); * * // Will print 30 * console.log(deserializedUser.age); * * // Will print true * console.log(deserializedUser instanceof User); * * // Will print false * console.log(user === deserializedUser); * ``` */ registerClass<TSerializedClassInstance>(class_: SerializableClass<TSerializedClassInstance>, prefix?: OneOrMore<string>): this; /** * @example * ```ts * import type { IFlexibleSerde, ISerializable } from "@daiso-tech/core/serde/contracts"; * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/adapters"; * import { Serde } from "@daiso-tech/core/serde"; * * const serde: IFlexibleSerde = new Serde(new SuperJsonSerdeAdapter()); * * type ISerializedUser = { * name: string; * age: number * }; * * class User implements ISerializable<ISerializedUser> { * static deserialize(serializedUser: ISerializedUser): User { * return new User(serializedUser.name, serializedUser.age); * } * * constructor(public readonly name: string, public readonly age: number) {} * * serialize(): ISerializedUser { * return { * name: this.name, * age: this.age, * }; * } * } * * serde.registerCustom<User, ISerializedUser>({ * name: User.name, * isApplicable: (value): value is User => { * return value instanceof User; * }, * serialize: (value: User): ISerializedUser => { * return { * name: value.name, * age: value.age * }; * }, * deserialize: (value: ISerializedUser): User => { * return new User(value.name, value.age); * } * }); * * const user = new User("Carl", 30); * const deserializedUser = serde.deserialize<User>(serde.serialize(user)); * * // Will print "Carl" * console.log(deserializedUser.name); * * // Will print 30 * console.log(deserializedUser.age); * * // Will print true * console.log(deserializedUser instanceof User); * * // Will print false * console.log(user === deserializedUser); * ``` */ registerCustom<TCustomSerialized, TCustomDeserialized>(transformer: ISerdeTransformer<TCustomSerialized, TCustomDeserialized>, prefix?: OneOrMore<string>): this; }