node-json-db
Version:
Database using JSON file as storage for Node.JS
141 lines • 3.55 kB
JavaScript
;
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