1 | "use strict";
|
2 | var __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 | };
|
9 | var __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 | };
|
15 | var _serializers, _defaultSerializer;
|
16 | Object.defineProperty(exports, "__esModule", { value: true });
|
17 | exports.Serializer = void 0;
|
18 | const CustomError = require("./Error");
|
19 | const utils = require("./utils");
|
20 | class 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 |
|
61 | if (Object.keys(__classPrivateFieldGet(this, _serializers)).includes(name)) {
|
62 | delete __classPrivateFieldGet(this, _serializers)[name];
|
63 | }
|
64 |
|
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 | }
|
112 | exports.Serializer = Serializer;
|
113 | _serializers = new WeakMap(), _defaultSerializer = new WeakMap();
|
114 | Serializer.defaultName = "_default";
|
115 |
|
\ | No newline at end of file |