@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
TypeScript
/**
* @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;
}