source: node_modules/@swagger-api/apidom-core/cjs/clone/index.cjs

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 4.4 KB
Line 
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4exports.__esModule = true;
5exports.cloneShallow = exports.cloneDeep = void 0;
6var _minim = require("minim");
7var _index = require("../predicates/index.cjs");
8var _DeepCloneError = _interopRequireDefault(require("./errors/DeepCloneError.cjs"));
9var _ShallowCloneError = _interopRequireDefault(require("./errors/ShallowCloneError.cjs"));
10const cloneDeep = (value, options = {}) => {
11 const {
12 visited = new WeakMap()
13 } = options;
14 const passThroughOptions = {
15 ...options,
16 visited
17 };
18
19 // detect cycle and return memoized value
20 if (visited.has(value)) {
21 return visited.get(value);
22 }
23 if (value instanceof _minim.KeyValuePair) {
24 const {
25 key,
26 value: val
27 } = value;
28 const keyCopy = (0, _index.isElement)(key) ? cloneDeep(key, passThroughOptions) : key;
29 const valueCopy = (0, _index.isElement)(val) ? cloneDeep(val, passThroughOptions) : val;
30 const copy = new _minim.KeyValuePair(keyCopy, valueCopy);
31 visited.set(value, copy);
32 return copy;
33 }
34 if (value instanceof _minim.ObjectSlice) {
35 const mapper = element => cloneDeep(element, passThroughOptions);
36 const items = [...value].map(mapper);
37 const copy = new _minim.ObjectSlice(items);
38 visited.set(value, copy);
39 return copy;
40 }
41 if (value instanceof _minim.ArraySlice) {
42 const mapper = element => cloneDeep(element, passThroughOptions);
43 const items = [...value].map(mapper);
44 const copy = new _minim.ArraySlice(items);
45 visited.set(value, copy);
46 return copy;
47 }
48 if ((0, _index.isElement)(value)) {
49 const copy = cloneShallow(value); // eslint-disable-line @typescript-eslint/no-use-before-define
50
51 visited.set(value, copy);
52 if (value.content) {
53 if ((0, _index.isElement)(value.content)) {
54 copy.content = cloneDeep(value.content, passThroughOptions);
55 } else if (value.content instanceof _minim.KeyValuePair) {
56 copy.content = cloneDeep(value.content, passThroughOptions);
57 } else if (Array.isArray(value.content)) {
58 const mapper = element => cloneDeep(element, passThroughOptions);
59 copy.content = value.content.map(mapper);
60 } else {
61 copy.content = value.content;
62 }
63 } else {
64 copy.content = value.content;
65 }
66 return copy;
67 }
68 throw new _DeepCloneError.default("Value provided to cloneDeep function couldn't be cloned", {
69 value
70 });
71};
72exports.cloneDeep = cloneDeep;
73cloneDeep.safe = value => {
74 try {
75 return cloneDeep(value);
76 } catch {
77 return value;
78 }
79};
80const cloneShallowKeyValuePair = keyValuePair => {
81 const {
82 key,
83 value
84 } = keyValuePair;
85 return new _minim.KeyValuePair(key, value);
86};
87const cloneShallowArraySlice = arraySlice => {
88 const items = [...arraySlice];
89 return new _minim.ArraySlice(items);
90};
91const cloneShallowObjectSlice = objectSlice => {
92 const items = [...objectSlice];
93 return new _minim.ObjectSlice(items);
94};
95
96/* eslint-disable no-underscore-dangle */
97const cloneShallowElement = element => {
98 // @ts-ignore
99 const copy = new element.constructor();
100 copy.element = element.element;
101 if (element.meta.length > 0) {
102 copy._meta = cloneDeep(element.meta);
103 }
104 if (element.attributes.length > 0) {
105 copy._attributes = cloneDeep(element.attributes);
106 }
107 if ((0, _index.isElement)(element.content)) {
108 const content = element.content;
109 copy.content = cloneShallowElement(content);
110 } else if (Array.isArray(element.content)) {
111 copy.content = [...element.content];
112 } else if (element.content instanceof _minim.KeyValuePair) {
113 copy.content = cloneShallowKeyValuePair(element.content);
114 } else {
115 copy.content = element.content;
116 }
117 return copy;
118};
119/* eslint-enable */
120
121const cloneShallow = value => {
122 if (value instanceof _minim.KeyValuePair) {
123 return cloneShallowKeyValuePair(value);
124 }
125 if (value instanceof _minim.ObjectSlice) {
126 return cloneShallowObjectSlice(value);
127 }
128 if (value instanceof _minim.ArraySlice) {
129 return cloneShallowArraySlice(value);
130 }
131 if ((0, _index.isElement)(value)) {
132 return cloneShallowElement(value);
133 }
134 throw new _ShallowCloneError.default("Value provided to cloneShallow function couldn't be cloned", {
135 value
136 });
137};
138exports.cloneShallow = cloneShallow;
139cloneShallow.safe = value => {
140 try {
141 return cloneShallow(value);
142 } catch {
143 return value;
144 }
145};
Note: See TracBrowser for help on using the repository browser.