@swagger-api/apidom-core 0.95.0 → 0.97.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +138 -3
- package/cjs/identity/index.cjs +1 -1
- package/cjs/index.cjs +7 -3
- package/cjs/{deepmerge.cjs → merge/deepmerge.cjs} +36 -16
- package/cjs/merge/merge-left.cjs +13 -0
- package/cjs/merge/merge-right.cjs +28 -0
- package/cjs/refractor/index.cjs +10 -0
- package/cjs/refractor/plugins/element-identity.cjs +1 -2
- package/cjs/refractor/plugins/semantic-element-identity.cjs +1 -2
- package/cjs/transformers/serializers/value/index.cjs +14 -0
- package/dist/apidom-core.browser.js +1504 -1413
- package/dist/apidom-core.browser.min.js +1 -1
- package/es/identity/index.mjs +1 -1
- package/es/index.mjs +3 -1
- package/es/{deepmerge.mjs → merge/deepmerge.mjs} +35 -17
- package/es/merge/merge-left.mjs +8 -0
- package/es/merge/merge-right.mjs +23 -0
- package/es/refractor/index.mjs +10 -0
- package/es/refractor/plugins/element-identity.mjs +1 -2
- package/es/refractor/plugins/semantic-element-identity.mjs +1 -2
- package/es/transformers/serializers/value/index.mjs +14 -0
- package/package.json +5 -5
- package/types/dist.d.ts +20 -2
- package/types/minim.d.ts +10 -8
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,27 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.97.0](https://github.com/swagger-api/apidom/compare/v0.96.0...v0.97.0) (2024-03-07)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **core:** add support for RefElement and LinkElement ([#3884](https://github.com/swagger-api/apidom/issues/3884)) ([342ee3f](https://github.com/swagger-api/apidom/commit/342ee3f653f492d3b07ac9b467eba55f0d02b3f9)), closes [#3882](https://github.com/swagger-api/apidom/issues/3882)
|
|
11
|
+
- **core:** handle RefElement serialization in toValue serializer ([#3901](https://github.com/swagger-api/apidom/issues/3901)) ([f205211](https://github.com/swagger-api/apidom/commit/f205211722481004b9c81d6dbe8477adbdbbca2d)), closes [#3894](https://github.com/swagger-api/apidom/issues/3894)
|
|
12
|
+
|
|
13
|
+
# [0.96.0](https://github.com/swagger-api/apidom/compare/v0.95.0...v0.96.0) (2024-02-28)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- **core:** assign unique ID to elements only when missing ([#3841](https://github.com/swagger-api/apidom/issues/3841)) ([89af0a9](https://github.com/swagger-api/apidom/commit/89af0a95c1675706c1b8aec6f67a656f5d85f96b)), closes [#3840](https://github.com/swagger-api/apidom/issues/3840)
|
|
18
|
+
- **core:** retain meta & attributes during refracting ([#3843](https://github.com/swagger-api/apidom/issues/3843)) ([a7aac32](https://github.com/swagger-api/apidom/commit/a7aac3217730cb058370f906c2d8cc333c8111ee)), closes [#3842](https://github.com/swagger-api/apidom/issues/3842)
|
|
19
|
+
- **playground:** fix bug related to instantiating parser ([#3851](https://github.com/swagger-api/apidom/issues/3851)) ([9b23628](https://github.com/swagger-api/apidom/commit/9b23628d20dda075cb844d5eca0f1d63018de70b))
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
- **core:** add mechanism for left shallow merge ([#3849](https://github.com/swagger-api/apidom/issues/3849)) ([3334c6b](https://github.com/swagger-api/apidom/commit/3334c6bd200adedf84c8215bb263ab9009b1d1de)), closes [#3845](https://github.com/swagger-api/apidom/issues/3845)
|
|
24
|
+
- **core:** add mechanism for right shallow merge ([#3846](https://github.com/swagger-api/apidom/issues/3846)) ([2059f28](https://github.com/swagger-api/apidom/commit/2059f28b810c70159d6fa4ddec1115cb38fa330b)), closes [#3845](https://github.com/swagger-api/apidom/issues/3845)
|
|
25
|
+
- **core:** customize meta & attributes merges for deepmerge function ([#3855](https://github.com/swagger-api/apidom/issues/3855)) ([1e94924](https://github.com/swagger-api/apidom/commit/1e94924ab474f4ce4773239f9a9b175d129602f0)), closes [#3853](https://github.com/swagger-api/apidom/issues/3853)
|
|
26
|
+
|
|
6
27
|
# [0.95.0](https://github.com/swagger-api/apidom/compare/v0.94.0...v0.95.0) (2024-02-09)
|
|
7
28
|
|
|
8
29
|
**Note:** Version bump only for package @swagger-api/apidom-core
|
package/README.md
CHANGED
|
@@ -104,6 +104,105 @@ transcluder.transclude(search, replace); // => ArrayElement<[1, 4, 3]>
|
|
|
104
104
|
|
|
105
105
|
---
|
|
106
106
|
|
|
107
|
+
## Shallow merging
|
|
108
|
+
|
|
109
|
+
`mergeRight` and `mergeLeft` functions merge members of two or more ObjectElements shallowly
|
|
110
|
+
and handles shallow merging of ArrayElements as well.
|
|
111
|
+
|
|
112
|
+
### API
|
|
113
|
+
|
|
114
|
+
#### mergeRight(target, source, [options])
|
|
115
|
+
|
|
116
|
+
Merges two ApiDOM elements target and source shallowly, returning a new merged ApiDOM element with the elements
|
|
117
|
+
from both target and source. If an element at the same key is present for both target and source,
|
|
118
|
+
the value from source will appear in the result. Merging creates a new ApiDOM element,
|
|
119
|
+
so that neither target nor source is modified (operation is immutable).
|
|
120
|
+
|
|
121
|
+
```js
|
|
122
|
+
import { mergeRight, ObjectElement } from '@swagger-api/apidom-core';
|
|
123
|
+
|
|
124
|
+
const x = new ObjectElement({
|
|
125
|
+
foo: { bar: 3 },
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const y = new ObjectElement({
|
|
129
|
+
foo: { baz: 4 },
|
|
130
|
+
quux: 5,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
const output = mergeRight(x, y);
|
|
134
|
+
// =>
|
|
135
|
+
// ObjectElement({
|
|
136
|
+
// foo: ObjectElement({
|
|
137
|
+
// baz: 4,
|
|
138
|
+
// }),
|
|
139
|
+
// quux: 5,
|
|
140
|
+
// })
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### mergeRight.all([element1, element2, ...], [options])
|
|
144
|
+
|
|
145
|
+
Merges shallowly any number of ApiDOM elements into a single ApiDOM element.
|
|
146
|
+
|
|
147
|
+
```js
|
|
148
|
+
import { mergeRight, ObjectElement } from '@swagger-api/apidom-core';
|
|
149
|
+
|
|
150
|
+
const foobar = new ObjectElement({ foo: { bar: 3 } });
|
|
151
|
+
const foobaz = new ObjectElement({ foo: { baz: 4 } });
|
|
152
|
+
const bar = new ObjectElement({ bar: 'yay!' });
|
|
153
|
+
|
|
154
|
+
const output = mergeRight.all([ foobar, foobaz, bar ]);
|
|
155
|
+
// => ObjectElement({ foo: { baz: 4 }, bar: 'yay!' })
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### mergeLeft(source, target, [options])
|
|
159
|
+
|
|
160
|
+
Merges two ApiDOM elements source and target shallowly, returning a new merged ApiDOM element with the elements
|
|
161
|
+
from both target and source. If an element at the same key is present for both target and source,
|
|
162
|
+
the value from source will appear in the result. Merging creates a new ApiDOM element,
|
|
163
|
+
so that neither target nor source is modified (operation is immutable).
|
|
164
|
+
|
|
165
|
+
```js
|
|
166
|
+
import { mergeLeft, ObjectElement } from '@swagger-api/apidom-core';
|
|
167
|
+
|
|
168
|
+
const x = new ObjectElement({
|
|
169
|
+
foo: { bar: 3 },
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
const y = new ObjectElement({
|
|
173
|
+
foo: { baz: 4 },
|
|
174
|
+
quux: 5,
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
const output = mergeLeft(x, y);
|
|
178
|
+
// =>
|
|
179
|
+
// ObjectElement({
|
|
180
|
+
// foo: ObjectElement({
|
|
181
|
+
// bar: 3,
|
|
182
|
+
// }),
|
|
183
|
+
// quux: 5,
|
|
184
|
+
// })
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
#### mergeLeft.all([element1, element2, ...], [options])
|
|
188
|
+
|
|
189
|
+
Merges shallowly any number of ApiDOM elements into a single ApiDOM element.
|
|
190
|
+
|
|
191
|
+
```js
|
|
192
|
+
import { mergeLeft, ObjectElement } from '@swagger-api/apidom-core';
|
|
193
|
+
|
|
194
|
+
const foobar = new ObjectElement({ foo: { bar: 3 } });
|
|
195
|
+
const foobaz = new ObjectElement({ foo: { baz: 4 } });
|
|
196
|
+
const bar = new ObjectElement({ bar: 'yay!' });
|
|
197
|
+
|
|
198
|
+
const output = mergeLeft.all([ foobar, foobaz, bar ]);
|
|
199
|
+
// => ObjectElement({ foo: { baz: 3 }, bar: 'yay!' })
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Shallow merge Options
|
|
203
|
+
|
|
204
|
+
`mergeRight` and `mergeLeft` take the same options as [deepmerge](#deepmerge-options), except for `customMerge` and `clone`.
|
|
205
|
+
|
|
107
206
|
## Deep merging
|
|
108
207
|
|
|
109
208
|
`deepmerge` functions merged members of two or more ObjectElements deeply
|
|
@@ -115,7 +214,7 @@ that works equivalently on ApiDOM structures.
|
|
|
115
214
|
|
|
116
215
|
#### deepmerge(target, source, [options])
|
|
117
216
|
|
|
118
|
-
|
|
217
|
+
Merges two ApiDOM elements target and source deeply, returning a new merged ApiDOM element with the elements
|
|
119
218
|
from both target and source. If an element at the same key is present for both target and source,
|
|
120
219
|
the value from source will appear in the result. Merging creates a new ApiDOM element,
|
|
121
220
|
so that neither target nor source is modified (operation is immutable).
|
|
@@ -173,7 +272,7 @@ const output = deepmerge(x, y);
|
|
|
173
272
|
|
|
174
273
|
#### deepmerge.all([element1, element2, ...], [options])
|
|
175
274
|
|
|
176
|
-
Merges any number of ApiDOM elements into a single ApiDOM element.
|
|
275
|
+
Merges deeply any number of ApiDOM elements into a single ApiDOM element.
|
|
177
276
|
|
|
178
277
|
```js
|
|
179
278
|
import { deepmerge, ObjectElement } from '@swagger-api/apidom-core';
|
|
@@ -186,7 +285,7 @@ const output = deepmerge.all([ foobar, foobaz, bar ]);
|
|
|
186
285
|
// => ObjectElement({ foo: { bar: 3, baz: 4 }, bar: 'yay!' })
|
|
187
286
|
```
|
|
188
287
|
|
|
189
|
-
### Options
|
|
288
|
+
### Deepmerge Options
|
|
190
289
|
|
|
191
290
|
#### arrayElementMerge
|
|
192
291
|
|
|
@@ -292,6 +391,42 @@ const output = deepmerge(alex, tony, { customMerge });
|
|
|
292
391
|
// output.get('pets'); // => ArrayElement(['Cat', 'Parrot', 'Dog'])
|
|
293
392
|
```
|
|
294
393
|
|
|
394
|
+
#### customMetaMerge
|
|
395
|
+
|
|
396
|
+
Specifies a function which can be used to override the default metadata merge behavior.
|
|
397
|
+
The `customMetaMerge` function will be passed target and source metadata. If not specified,
|
|
398
|
+
the default behavior is to deep copy metadata from target to new merged element.
|
|
399
|
+
|
|
400
|
+
```js
|
|
401
|
+
import { deepmerge, ObjectElement } from '@swagger-api/apidom-core';
|
|
402
|
+
|
|
403
|
+
const alex = new ObjectElement({ name: { first: 'Alex' } }, { metaKey: true });
|
|
404
|
+
const tony = new ObjectElement({ name: { first: 'Tony' } }, { metaKey: false });
|
|
405
|
+
|
|
406
|
+
const customMetaMerge = (targetMeta, sourceMeta) => deepmerge(targetMeta, sourceMeta);
|
|
407
|
+
|
|
408
|
+
const output = deepmerge(alex, tony, { customMetaMerge });
|
|
409
|
+
// output.meta.get('metaKey') // => BooleanElement(false)
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
#### customAttributesMerge
|
|
413
|
+
|
|
414
|
+
Specifies a function which can be used to override the default attributes merge behavior.
|
|
415
|
+
The `customAttributesMerge` function will be passed target and source attributes. If not specified,
|
|
416
|
+
the default behavior is to deep copy attributes from target to new merged element.
|
|
417
|
+
|
|
418
|
+
```js
|
|
419
|
+
import { deepmerge, ObjectElement } from '@swagger-api/apidom-core';
|
|
420
|
+
|
|
421
|
+
const alex = new ObjectElement({ name: { first: 'Alex' } }, undefined, { attributeKey: true });
|
|
422
|
+
const tony = new ObjectElement({ name: { first: 'Tony' } }, undefined, { attributeKey: false });
|
|
423
|
+
|
|
424
|
+
const customAttributesMerge = (targetMeta, sourceMeta) => deepmerge(targetMeta, sourceMeta);
|
|
425
|
+
|
|
426
|
+
const output = deepmerge(alex, tony, { customAttributesMerge });
|
|
427
|
+
// output.attributs.get('attributeKey') // => BooleanElement(false)
|
|
428
|
+
```
|
|
429
|
+
|
|
295
430
|
#### clone
|
|
296
431
|
|
|
297
432
|
Defaults to `true`.
|
package/cjs/identity/index.cjs
CHANGED
|
@@ -33,7 +33,7 @@ const IdentityManager = exports.IdentityManager = (0, _stampit.default)({
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
// use already assigned identity
|
|
36
|
-
if (element.meta.hasKey('id') && (0, _index.isStringElement)(element.meta.id) && !element.meta.id.equals('')) {
|
|
36
|
+
if (element.meta.hasKey('id') && (0, _index.isStringElement)(element.meta.get('id')) && !element.meta.get('id').equals('')) {
|
|
37
37
|
return element.id;
|
|
38
38
|
}
|
|
39
39
|
|
package/cjs/index.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
exports.visit = exports.traverse = exports.transclude = exports.toYAML = exports.toValue = exports.toString = exports.toJSON = exports.some = exports.sexprs = exports.reject = exports.refractorPluginSemanticElementIdentity = exports.refractorPluginElementIdentity = exports.refract = exports.parents = exports.namespace = exports.mergeAllVisitors = exports.keyMap = exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isElement = exports.isBooleanElement = exports.isArrayElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementSourceMap = exports.getNodeType = exports.from = exports.findAtOffset = exports.find = exports.filter = exports.dispatchRefractorPlugins = exports.dereference = exports.dehydrate = exports.defaultIdentityManager = exports.deepmerge = exports.createPredicate = exports.createNamespace = exports.cloneShallow = exports.cloneNode = exports.cloneDeep = exports.Transcluder = exports.StringElement = exports.SourceMapElement = exports.ShallowCloneError = exports.RefElement = exports.ParseResultElement = exports.ObjectSlice = exports.ObjectElement = exports.NumberElement = exports.NullElement = exports.Namespace = exports.MemberElement = exports.MediaTypes = exports.LinkElement = exports.KeyValuePair = exports.IdentityManager = exports.ElementIdentityError = exports.Element = exports.DeepCloneError = exports.CommentElement = exports.CloneError = exports.BooleanElement = exports.BREAK = exports.ArraySlice = exports.ArrayElement = exports.AnnotationElement = void 0;
|
|
6
|
+
exports.visit = exports.traverse = exports.transclude = exports.toYAML = exports.toValue = exports.toString = exports.toJSON = exports.some = exports.sexprs = exports.reject = exports.refractorPluginSemanticElementIdentity = exports.refractorPluginElementIdentity = exports.refract = exports.parents = exports.namespace = exports.mergeRight = exports.mergeLeft = exports.mergeAllVisitors = exports.keyMap = exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isElement = exports.isBooleanElement = exports.isArrayElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementSourceMap = exports.getNodeType = exports.from = exports.findAtOffset = exports.find = exports.filter = exports.dispatchRefractorPlugins = exports.dereference = exports.dehydrate = exports.defaultIdentityManager = exports.deepmerge = exports.createPredicate = exports.createNamespace = exports.cloneShallow = exports.cloneNode = exports.cloneDeep = exports.Transcluder = exports.StringElement = exports.SourceMapElement = exports.ShallowCloneError = exports.RefElement = exports.ParseResultElement = exports.ObjectSlice = exports.ObjectElement = exports.NumberElement = exports.NullElement = exports.Namespace = exports.MemberElement = exports.MediaTypes = exports.LinkElement = exports.KeyValuePair = exports.IdentityManager = exports.ElementIdentityError = exports.Element = exports.DeepCloneError = exports.CommentElement = exports.CloneError = exports.BooleanElement = exports.BREAK = exports.ArraySlice = exports.ArrayElement = exports.AnnotationElement = void 0;
|
|
7
7
|
var _index = require("./refractor/plugins/utils/index.cjs");
|
|
8
8
|
exports.dispatchRefractorPlugins = _index.dispatchPlugins;
|
|
9
9
|
var _elementIdentity = _interopRequireDefault(require("./refractor/plugins/element-identity.cjs"));
|
|
@@ -104,5 +104,9 @@ var _toString = _interopRequireDefault(require("./transformers/to-string.cjs"));
|
|
|
104
104
|
exports.toString = _toString.default;
|
|
105
105
|
var _sexprs = _interopRequireDefault(require("./transformers/sexprs.cjs"));
|
|
106
106
|
exports.sexprs = _sexprs.default;
|
|
107
|
-
var _deepmerge = _interopRequireDefault(require("./deepmerge.cjs"));
|
|
108
|
-
exports.deepmerge = _deepmerge.default;
|
|
107
|
+
var _deepmerge = _interopRequireDefault(require("./merge/deepmerge.cjs"));
|
|
108
|
+
exports.deepmerge = _deepmerge.default;
|
|
109
|
+
var _mergeRight = _interopRequireDefault(require("./merge/merge-right.cjs"));
|
|
110
|
+
exports.mergeRight = _mergeRight.default;
|
|
111
|
+
var _mergeLeft = _interopRequireDefault(require("./merge/merge-left.cjs"));
|
|
112
|
+
exports.mergeLeft = _mergeLeft.default;
|
|
@@ -3,19 +3,21 @@
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
4
|
exports.__esModule = true;
|
|
5
5
|
exports.default = deepmerge;
|
|
6
|
+
exports.emptyElement = exports.defaultOptions = void 0;
|
|
6
7
|
var _minim = require("minim");
|
|
7
|
-
var _index = require("
|
|
8
|
-
var _index2 = require("
|
|
9
|
-
var _index3 = _interopRequireDefault(require("
|
|
8
|
+
var _index = require("../predicates/index.cjs");
|
|
9
|
+
var _index2 = require("../clone/index.cjs");
|
|
10
|
+
var _index3 = _interopRequireDefault(require("../transformers/serializers/value/index.cjs"));
|
|
10
11
|
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
11
12
|
|
|
12
13
|
const emptyElement = element => {
|
|
13
|
-
const meta = (0, _index2.cloneDeep)(element.meta);
|
|
14
|
-
const attributes = (0, _index2.cloneDeep)(element.attributes);
|
|
14
|
+
const meta = element.meta.length > 0 ? (0, _index2.cloneDeep)(element.meta) : undefined;
|
|
15
|
+
const attributes = element.attributes.length > 0 ? (0, _index2.cloneDeep)(element.attributes) : undefined;
|
|
15
16
|
|
|
16
17
|
// @ts-ignore
|
|
17
18
|
return new element.constructor(undefined, meta, attributes);
|
|
18
19
|
};
|
|
20
|
+
exports.emptyElement = emptyElement;
|
|
19
21
|
const cloneUnlessOtherwiseSpecified = (element, options) => options.clone && options.isMergeableElement(element) ? deepmerge(emptyElement(element), element, options) : element;
|
|
20
22
|
const getMergeFunction = (keyElement, options) => {
|
|
21
23
|
if (typeof options.customMerge !== 'function') {
|
|
@@ -24,6 +26,18 @@ const getMergeFunction = (keyElement, options) => {
|
|
|
24
26
|
const customMerge = options.customMerge(keyElement, options);
|
|
25
27
|
return typeof customMerge === 'function' ? customMerge : deepmerge;
|
|
26
28
|
};
|
|
29
|
+
const getMetaMergeFunction = options => {
|
|
30
|
+
if (typeof options.customMetaMerge !== 'function') {
|
|
31
|
+
return targetMeta => (0, _index2.cloneDeep)(targetMeta);
|
|
32
|
+
}
|
|
33
|
+
return options.customMetaMerge;
|
|
34
|
+
};
|
|
35
|
+
const getAttributesMergeFunction = options => {
|
|
36
|
+
if (typeof options.customAttributesMerge !== 'function') {
|
|
37
|
+
return targetAttributes => (0, _index2.cloneDeep)(targetAttributes);
|
|
38
|
+
}
|
|
39
|
+
return options.customAttributesMerge;
|
|
40
|
+
};
|
|
27
41
|
const mergeArrayElement = (targetElement, sourceElement, options) => targetElement.concat(sourceElement)['fantasy-land/map'](item => cloneUnlessOtherwiseSpecified(item, options));
|
|
28
42
|
const mergeObjectElement = (targetElement, sourceElement, options) => {
|
|
29
43
|
const destination = (0, _index.isObjectElement)(targetElement) ? emptyElement(targetElement) : emptyElement(sourceElement);
|
|
@@ -50,15 +64,17 @@ const mergeObjectElement = (targetElement, sourceElement, options) => {
|
|
|
50
64
|
});
|
|
51
65
|
return destination;
|
|
52
66
|
};
|
|
67
|
+
const defaultOptions = exports.defaultOptions = {
|
|
68
|
+
clone: true,
|
|
69
|
+
isMergeableElement: element => (0, _index.isObjectElement)(element) || (0, _index.isArrayElement)(element),
|
|
70
|
+
arrayElementMerge: mergeArrayElement,
|
|
71
|
+
objectElementMerge: mergeObjectElement,
|
|
72
|
+
customMerge: undefined,
|
|
73
|
+
customMetaMerge: undefined,
|
|
74
|
+
customAttributesMerge: undefined
|
|
75
|
+
};
|
|
53
76
|
function deepmerge(targetElement, sourceElement, options) {
|
|
54
77
|
var _mergedOptions$isMerg, _mergedOptions$arrayE, _mergedOptions$object;
|
|
55
|
-
const defaultOptions = {
|
|
56
|
-
clone: true,
|
|
57
|
-
isMergeableElement: element => (0, _index.isObjectElement)(element) || (0, _index.isArrayElement)(element),
|
|
58
|
-
arrayElementMerge: mergeArrayElement,
|
|
59
|
-
objectElementMerge: mergeObjectElement,
|
|
60
|
-
customMerge: undefined
|
|
61
|
-
};
|
|
62
78
|
const mergedOptions = {
|
|
63
79
|
...defaultOptions,
|
|
64
80
|
...options
|
|
@@ -72,10 +88,14 @@ function deepmerge(targetElement, sourceElement, options) {
|
|
|
72
88
|
if (!sourceAndTargetTypesMatch) {
|
|
73
89
|
return cloneUnlessOtherwiseSpecified(sourceElement, mergedOptions);
|
|
74
90
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
91
|
+
|
|
92
|
+
// merging two elements
|
|
93
|
+
const mergedElement = sourceIsArrayElement && typeof mergedOptions.arrayElementMerge === 'function' ? mergedOptions.arrayElementMerge(targetElement, sourceElement, mergedOptions) : mergedOptions.objectElementMerge(targetElement, sourceElement, mergedOptions);
|
|
94
|
+
|
|
95
|
+
// merging meta & attributes
|
|
96
|
+
mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
|
|
97
|
+
mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
|
|
98
|
+
return mergedElement;
|
|
79
99
|
}
|
|
80
100
|
deepmerge.all = (list, options) => {
|
|
81
101
|
if (!Array.isArray(list)) {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _mergeRight = _interopRequireDefault(require("./merge-right.cjs"));
|
|
7
|
+
const mergeLeft = (...[sourceElement, targetElement, options]) => {
|
|
8
|
+
return (0, _mergeRight.default)(targetElement, sourceElement, options);
|
|
9
|
+
};
|
|
10
|
+
mergeLeft.all = (...[list, options]) => {
|
|
11
|
+
return _mergeRight.default.all([...list].reverse(), options);
|
|
12
|
+
};
|
|
13
|
+
var _default = exports.default = mergeLeft;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _minim = require("minim");
|
|
7
|
+
var _deepmerge = _interopRequireWildcard(require("./deepmerge.cjs"));
|
|
8
|
+
const mergeRight = (targetElement, sourceElement, options) => {
|
|
9
|
+
const mergedOptions = {
|
|
10
|
+
..._deepmerge.defaultOptions,
|
|
11
|
+
...options,
|
|
12
|
+
customMerge: () => (target, source) => source,
|
|
13
|
+
clone: false
|
|
14
|
+
};
|
|
15
|
+
return (0, _deepmerge.default)(targetElement, sourceElement, mergedOptions);
|
|
16
|
+
};
|
|
17
|
+
mergeRight.all = (list, options) => {
|
|
18
|
+
if (!Array.isArray(list)) {
|
|
19
|
+
throw new TypeError('First argument of mergeRight should be an array.');
|
|
20
|
+
}
|
|
21
|
+
if (list.length === 0) {
|
|
22
|
+
return new _minim.ObjectElement();
|
|
23
|
+
}
|
|
24
|
+
return list.reduce((target, source) => {
|
|
25
|
+
return mergeRight(target, source, options);
|
|
26
|
+
}, (0, _deepmerge.emptyElement)(list[0]));
|
|
27
|
+
};
|
|
28
|
+
var _default = exports.default = mergeRight;
|
package/cjs/refractor/index.cjs
CHANGED
|
@@ -5,6 +5,8 @@ exports.__esModule = true;
|
|
|
5
5
|
exports.default = exports.createRefractor = void 0;
|
|
6
6
|
var _index = require("./plugins/utils/index.cjs");
|
|
7
7
|
var _visitor = require("../traversal/visitor.cjs");
|
|
8
|
+
var _index2 = require("../clone/index.cjs");
|
|
9
|
+
var _index3 = require("../predicates/index.cjs");
|
|
8
10
|
var _toolbox = _interopRequireDefault(require("./toolbox.cjs"));
|
|
9
11
|
const refract = (value, {
|
|
10
12
|
Type,
|
|
@@ -16,6 +18,14 @@ const refract = (value, {
|
|
|
16
18
|
* Though we allow consumers to define their onw plugins on already transformed ApiDOM.
|
|
17
19
|
*/
|
|
18
20
|
const element = new Type(value);
|
|
21
|
+
if ((0, _index3.isElement)(value)) {
|
|
22
|
+
if (value.meta.length > 0) {
|
|
23
|
+
element.meta = (0, _index2.cloneDeep)(value.meta);
|
|
24
|
+
}
|
|
25
|
+
if (value.attributes.length > 0) {
|
|
26
|
+
element.attributes = (0, _index2.cloneDeep)(value.attributes);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
19
29
|
|
|
20
30
|
/**
|
|
21
31
|
* Run plugins only when necessary.
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
|
-
var _minim = require("minim");
|
|
6
5
|
var _index = require("../../identity/index.cjs");
|
|
7
6
|
/**
|
|
8
7
|
* Plugin for decorating every element in ApiDOM tree with UUID.
|
|
@@ -20,7 +19,7 @@ const plugin = ({
|
|
|
20
19
|
},
|
|
21
20
|
visitor: {
|
|
22
21
|
enter(element) {
|
|
23
|
-
element.id =
|
|
22
|
+
element.id = identityManager.identify(element); // eslint-disable-line no-param-reassign
|
|
24
23
|
}
|
|
25
24
|
},
|
|
26
25
|
post() {
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
|
-
var _minim = require("minim");
|
|
6
5
|
var _index = require("../../identity/index.cjs");
|
|
7
6
|
/**
|
|
8
7
|
* Plugin for decorating every semantic element in ApiDOM tree with UUID.
|
|
@@ -23,7 +22,7 @@ const plugin = ({
|
|
|
23
22
|
visitor: {
|
|
24
23
|
enter(element) {
|
|
25
24
|
if (!predicates.isPrimitiveElement(element)) {
|
|
26
|
-
element.id =
|
|
25
|
+
element.id = identityManager.identify(element); // eslint-disable-line no-param-reassign
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
28
|
},
|
|
@@ -58,6 +58,20 @@ class Visitor {
|
|
|
58
58
|
NullElement() {
|
|
59
59
|
return null;
|
|
60
60
|
}
|
|
61
|
+
RefElement(element, ...rest) {
|
|
62
|
+
var _ancestors;
|
|
63
|
+
const ancestors = rest[3];
|
|
64
|
+
if (((_ancestors = ancestors[ancestors.length - 1]) == null ? void 0 : _ancestors.type) === 'EphemeralObject') {
|
|
65
|
+
return Symbol.for('delete-node');
|
|
66
|
+
}
|
|
67
|
+
return String(element.toValue());
|
|
68
|
+
}
|
|
69
|
+
LinkElement(element) {
|
|
70
|
+
if ((0, _index.isStringElement)(element.href)) {
|
|
71
|
+
return element.href.toValue();
|
|
72
|
+
}
|
|
73
|
+
return '';
|
|
74
|
+
}
|
|
61
75
|
}
|
|
62
76
|
const serializer = element => {
|
|
63
77
|
if (!(0, _index.isElement)(element)) return element;
|