UNPKG

4.86 kBJavaScriptView Raw
1"use strict";
2var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
3 if (!privateMap.has(receiver)) {
4 throw new TypeError("attempted to set private field on non-instance");
5 }
6 privateMap.set(receiver, value);
7 return value;
8};
9var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
10 if (!privateMap.has(receiver)) {
11 throw new TypeError("attempted to get private field on non-instance");
12 }
13 return privateMap.get(receiver);
14};
15var _serializers, _defaultSerializer;
16Object.defineProperty(exports, "__esModule", { value: true });
17exports.Serializer = void 0;
18const CustomError = require("./Error");
19const utils = require("./utils");
20class Serializer {
21 constructor() {
22 _serializers.set(this, void 0);
23 _defaultSerializer.set(this, void 0);
24 this.default = {
25 "set": (name) => {
26 if (typeof name === "undefined" || name === null) {
27 name = Serializer.defaultName;
28 }
29 if (!name || typeof name !== "string") {
30 throw new CustomError.InvalidParameter("Field name is required and should be of type string");
31 }
32 if (Object.keys(__classPrivateFieldGet(this, _serializers)).includes(name)) {
33 __classPrivateFieldSet(this, _defaultSerializer, name);
34 }
35 }
36 };
37 __classPrivateFieldSet(this, _serializers, {
38 [Serializer.defaultName]: {
39 "modify": (serialized, original) => (Object.assign({}, original))
40 }
41 });
42 this.default.set();
43 }
44 add(name, options) {
45 if (!name || typeof name !== "string") {
46 throw new CustomError.InvalidParameter("Field name is required and should be of type string");
47 }
48 if (!options || !(Array.isArray(options) || typeof options === "object")) {
49 throw new CustomError.InvalidParameter("Field options is required and should be an object or array");
50 }
51 __classPrivateFieldGet(this, _serializers)[name] = options;
52 }
53 delete(name) {
54 if (!name || typeof name !== "string") {
55 throw new CustomError.InvalidParameter("Field name is required and should be of type string");
56 }
57 if (name === Serializer.defaultName) {
58 throw new CustomError.InvalidParameter("Can not delete primary default serializer");
59 }
60 // Removing serializer
61 if (Object.keys(__classPrivateFieldGet(this, _serializers)).includes(name)) {
62 delete __classPrivateFieldGet(this, _serializers)[name];
63 }
64 // Reset defaultSerializer to default if removing default serializer
65 if (__classPrivateFieldGet(this, _defaultSerializer) === name) {
66 this.default.set();
67 }
68 }
69 _serializeMany(documentsArray, nameOrOptions) {
70 if (!documentsArray || !Array.isArray(documentsArray)) {
71 throw new CustomError.InvalidParameter("documentsArray must be an array of document objects");
72 }
73 return documentsArray.map((document) => {
74 try {
75 return document.serialize(nameOrOptions);
76 }
77 catch (e) {
78 return this._serialize(document, nameOrOptions);
79 }
80 });
81 }
82 _serialize(document, nameOrOptions = __classPrivateFieldGet(this, _defaultSerializer)) {
83 let options;
84 if (typeof nameOrOptions === "string") {
85 options = __classPrivateFieldGet(this, _serializers)[nameOrOptions];
86 }
87 else {
88 options = nameOrOptions;
89 }
90 if (!options || !(Array.isArray(options) || typeof options === "object")) {
91 throw new CustomError.InvalidParameter("Field options is required and should be an object or array");
92 }
93 if (Array.isArray(options)) {
94 return utils.object.pick(document, options);
95 }
96 return [
97 {
98 "if": Boolean(options.include),
99 "function": () => utils.object.pick(document, options.include)
100 },
101 {
102 "if": Boolean(options.exclude),
103 "function": (serialized) => utils.object.delete(serialized, options.exclude)
104 },
105 {
106 "if": Boolean(options.modify),
107 "function": (serialized) => options.modify(serialized, document)
108 }
109 ].filter((item) => item.if).reduce((serialized, item) => item.function(serialized), Object.assign({}, document));
110 }
111}
112exports.Serializer = Serializer;
113_serializers = new WeakMap(), _defaultSerializer = new WeakMap();
114Serializer.defaultName = "_default";
115//# sourceMappingURL=Serializer.js.map
\No newline at end of file