UNPKG

node-json-db

Version:

Database using JSON file as storage for Node.JS

141 lines 3.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultSerializers = exports.BigIntSerializer = exports.RegExpSerializer = exports.MapSerializer = exports.SetSerializer = exports.DateSerializer = void 0; /** * Serializer for JavaScript Date objects. * Serializes a Date as an ISO 8601 string. * * @example * ```json * { "__type": "Date", "__value": "2023-01-01T00:00:00.000Z" } * ``` */ class DateSerializer { type = "Date"; serialize(value) { return value.toISOString(); } deserialize(value) { return new Date(value); } test(value) { return value instanceof Date; } } exports.DateSerializer = DateSerializer; /** * Serializer for JavaScript Set objects. * Serializes a Set as an array of its values. * * @example * ```json * { "__type": "Set", "__value": [1, 2, 3] } * ``` */ class SetSerializer { type = "Set"; serialize(value) { return [...value]; } deserialize(value) { return new Set(value); } test(value) { return value instanceof Set; } } exports.SetSerializer = SetSerializer; /** * Serializer for JavaScript Map objects. * Serializes a Map as an array of key-value pairs. * * @example * ```json * { "__type": "Map", "__value": [["key1", "value1"], ["key2", "value2"]] } * ``` */ class MapSerializer { type = "Map"; serialize(value) { return [...value]; } deserialize(value) { return new Map(value); } test(value) { return value instanceof Map; } } exports.MapSerializer = MapSerializer; /** * Serializer for JavaScript RegExp objects. * Serializes a RegExp as an object with source and flags. * * @example * ```json * { "__type": "RegExp", "__value": { "source": "hello\\s+world", "flags": "gi" } } * ``` */ class RegExpSerializer { type = "RegExp"; serialize(value) { return { source: value.source, flags: value.flags }; } deserialize(value) { return new RegExp(value.source, value.flags); } test(value) { return value instanceof RegExp; } } exports.RegExpSerializer = RegExpSerializer; /** * Serializer for JavaScript BigInt values. * Serializes a BigInt as a string representation. * * @example * ```json * { "__type": "BigInt", "__value": "9007199254740993" } * ``` */ class BigIntSerializer { type = "BigInt"; serialize(value) { return value.toString(); } deserialize(value) { return BigInt(value); } test(value) { return typeof value === 'bigint'; } } exports.BigIntSerializer = BigIntSerializer; /** * Default serializers included with the JsonAdapter. * Provides built-in support for Date, Set, Map, RegExp, and BigInt types. * * This array is frozen (immutable). To extend it with your own serializers, * spread it into a new array: * ```typescript * import { defaultSerializers, ISerializer } from 'node-json-db'; * * const mySerializer: ISerializer = { * type: "MyType", * serialize: (value) => value.toJSON(), * deserialize: (value) => MyType.fromJSON(value), * test: (value) => value instanceof MyType, * }; * * // Use with Config.addSerializer() or spread into a custom list: * const serializers = [...defaultSerializers, mySerializer]; * ``` */ exports.defaultSerializers = Object.freeze([ new DateSerializer(), new SetSerializer(), new MapSerializer(), new RegExpSerializer(), new BigIntSerializer(), ]); //# sourceMappingURL=Serializers.js.map