@speclynx/apidom-core 2.13.1 → 3.1.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 +14 -0
- package/README.md +7 -3
- package/dist/apidom-core.browser.js +202 -70
- package/dist/apidom-core.browser.min.js +1 -1
- package/package.json +5 -5
- package/src/identity/index.cjs +4 -4
- package/src/identity/index.mjs +5 -5
- package/src/merge/deepmerge.cjs +16 -4
- package/src/merge/deepmerge.mjs +16 -4
- package/types/apidom-core.d.ts +4 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speclynx/apidom-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Tools for manipulating ApiDOM structures.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"license": "Apache-2.0",
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@babel/runtime-corejs3": "^7.28.4",
|
|
43
|
-
"@speclynx/apidom-datamodel": "
|
|
44
|
-
"@speclynx/apidom-error": "
|
|
45
|
-
"@speclynx/apidom-traverse": "
|
|
43
|
+
"@speclynx/apidom-datamodel": "3.1.0",
|
|
44
|
+
"@speclynx/apidom-error": "3.1.0",
|
|
45
|
+
"@speclynx/apidom-traverse": "3.1.0",
|
|
46
46
|
"ramda": "~0.32.0",
|
|
47
47
|
"ramda-adjunct": "^6.0.0",
|
|
48
48
|
"short-unique-id": "^5.3.2",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"README.md",
|
|
60
60
|
"CHANGELOG.md"
|
|
61
61
|
],
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "c0807dd0b7770eaaf594bd0013be65e2c28c504a"
|
|
63
63
|
}
|
package/src/identity/index.cjs
CHANGED
|
@@ -29,9 +29,9 @@ class IdentityManager {
|
|
|
29
29
|
|
|
30
30
|
// use already assigned identity
|
|
31
31
|
if (element.hasMetaProperty('id')) {
|
|
32
|
-
const existingId = element.
|
|
33
|
-
if (
|
|
34
|
-
return
|
|
32
|
+
const existingId = element.id;
|
|
33
|
+
if (typeof existingId === 'string' && existingId !== '') {
|
|
34
|
+
return existingId;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -41,7 +41,7 @@ class IdentityManager {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
// return element identity
|
|
44
|
-
const id =
|
|
44
|
+
const id = this.generateId();
|
|
45
45
|
this.identityMap.set(element, id);
|
|
46
46
|
return id;
|
|
47
47
|
}
|
package/src/identity/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isElement } from '@speclynx/apidom-datamodel';
|
|
2
2
|
import ShortUniqueId from 'short-unique-id';
|
|
3
3
|
import ElementIdentityError from "./errors/ElementIdentityError.mjs";
|
|
4
4
|
/**
|
|
@@ -24,9 +24,9 @@ export class IdentityManager {
|
|
|
24
24
|
|
|
25
25
|
// use already assigned identity
|
|
26
26
|
if (element.hasMetaProperty('id')) {
|
|
27
|
-
const existingId = element.
|
|
28
|
-
if (
|
|
29
|
-
return
|
|
27
|
+
const existingId = element.id;
|
|
28
|
+
if (typeof existingId === 'string' && existingId !== '') {
|
|
29
|
+
return existingId;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -36,7 +36,7 @@ export class IdentityManager {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
// return element identity
|
|
39
|
-
const id =
|
|
39
|
+
const id = this.generateId();
|
|
40
40
|
this.identityMap.set(element, id);
|
|
41
41
|
return id;
|
|
42
42
|
}
|
package/src/merge/deepmerge.cjs
CHANGED
|
@@ -46,7 +46,7 @@ var _value = _interopRequireDefault(require("../transformers/serializers/value.c
|
|
|
46
46
|
*/
|
|
47
47
|
|
|
48
48
|
const emptyElement = element => {
|
|
49
|
-
const meta = !element.isMetaEmpty ?
|
|
49
|
+
const meta = !element.isMetaEmpty ? element.meta.cloneDeep() : undefined;
|
|
50
50
|
const attributes = !element.isAttributesEmpty ? (0, _apidomDatamodel.cloneDeep)(element.attributes) : undefined;
|
|
51
51
|
|
|
52
52
|
// @ts-ignore
|
|
@@ -63,7 +63,7 @@ const getMergeFunction = (keyElement, options) => {
|
|
|
63
63
|
};
|
|
64
64
|
const getMetaMergeFunction = options => {
|
|
65
65
|
if (typeof options.customMetaMerge !== 'function') {
|
|
66
|
-
return targetMeta =>
|
|
66
|
+
return targetMeta => targetMeta.cloneDeep();
|
|
67
67
|
}
|
|
68
68
|
return options.customMetaMerge;
|
|
69
69
|
};
|
|
@@ -135,8 +135,20 @@ const deepmerge = (targetElement, sourceElement, options) => {
|
|
|
135
135
|
const mergedElement = sourceIsArrayElement && typeof mergedOptions.arrayElementMerge === 'function' ? mergedOptions.arrayElementMerge(targetElement, sourceElement, mergedOptions) : mergedOptions.objectElementMerge(targetElement, sourceElement, mergedOptions);
|
|
136
136
|
|
|
137
137
|
// merging meta & attributes
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
if (!targetElement.isMetaEmpty && !sourceElement.isMetaEmpty) {
|
|
139
|
+
mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
|
|
140
|
+
} else if (!targetElement.isMetaEmpty) {
|
|
141
|
+
mergedElement.meta = targetElement.meta.cloneDeep();
|
|
142
|
+
} else if (!sourceElement.isMetaEmpty) {
|
|
143
|
+
mergedElement.meta = sourceElement.meta.cloneDeep();
|
|
144
|
+
}
|
|
145
|
+
if (!targetElement.isAttributesEmpty && !sourceElement.isAttributesEmpty) {
|
|
146
|
+
mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
|
|
147
|
+
} else if (!targetElement.isAttributesEmpty) {
|
|
148
|
+
mergedElement.attributes = (0, _apidomDatamodel.cloneDeep)(targetElement.attributes);
|
|
149
|
+
} else if (!sourceElement.isAttributesEmpty) {
|
|
150
|
+
mergedElement.attributes = (0, _apidomDatamodel.cloneDeep)(sourceElement.attributes);
|
|
151
|
+
}
|
|
140
152
|
return mergedElement;
|
|
141
153
|
};
|
|
142
154
|
deepmerge.all = (list, options) => {
|
package/src/merge/deepmerge.mjs
CHANGED
|
@@ -31,7 +31,7 @@ import toValue from "../transformers/serializers/value.mjs";
|
|
|
31
31
|
* @public
|
|
32
32
|
*/
|
|
33
33
|
export const emptyElement = element => {
|
|
34
|
-
const meta = !element.isMetaEmpty ?
|
|
34
|
+
const meta = !element.isMetaEmpty ? element.meta.cloneDeep() : undefined;
|
|
35
35
|
const attributes = !element.isAttributesEmpty ? cloneDeep(element.attributes) : undefined;
|
|
36
36
|
|
|
37
37
|
// @ts-ignore
|
|
@@ -47,7 +47,7 @@ const getMergeFunction = (keyElement, options) => {
|
|
|
47
47
|
};
|
|
48
48
|
const getMetaMergeFunction = options => {
|
|
49
49
|
if (typeof options.customMetaMerge !== 'function') {
|
|
50
|
-
return targetMeta => cloneDeep(
|
|
50
|
+
return targetMeta => targetMeta.cloneDeep();
|
|
51
51
|
}
|
|
52
52
|
return options.customMetaMerge;
|
|
53
53
|
};
|
|
@@ -119,8 +119,20 @@ const deepmerge = (targetElement, sourceElement, options) => {
|
|
|
119
119
|
const mergedElement = sourceIsArrayElement && typeof mergedOptions.arrayElementMerge === 'function' ? mergedOptions.arrayElementMerge(targetElement, sourceElement, mergedOptions) : mergedOptions.objectElementMerge(targetElement, sourceElement, mergedOptions);
|
|
120
120
|
|
|
121
121
|
// merging meta & attributes
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
if (!targetElement.isMetaEmpty && !sourceElement.isMetaEmpty) {
|
|
123
|
+
mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
|
|
124
|
+
} else if (!targetElement.isMetaEmpty) {
|
|
125
|
+
mergedElement.meta = targetElement.meta.cloneDeep();
|
|
126
|
+
} else if (!sourceElement.isMetaEmpty) {
|
|
127
|
+
mergedElement.meta = sourceElement.meta.cloneDeep();
|
|
128
|
+
}
|
|
129
|
+
if (!targetElement.isAttributesEmpty && !sourceElement.isAttributesEmpty) {
|
|
130
|
+
mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
|
|
131
|
+
} else if (!targetElement.isAttributesEmpty) {
|
|
132
|
+
mergedElement.attributes = cloneDeep(targetElement.attributes);
|
|
133
|
+
} else if (!sourceElement.isAttributesEmpty) {
|
|
134
|
+
mergedElement.attributes = cloneDeep(sourceElement.attributes);
|
|
135
|
+
}
|
|
124
136
|
return mergedElement;
|
|
125
137
|
};
|
|
126
138
|
deepmerge.all = (list, options) => {
|
package/types/apidom-core.d.ts
CHANGED
|
@@ -23,12 +23,12 @@ import { isPrimitiveElement } from '@speclynx/apidom-datamodel';
|
|
|
23
23
|
import { isRefElement } from '@speclynx/apidom-datamodel';
|
|
24
24
|
import { isSourceMapElement } from '@speclynx/apidom-datamodel';
|
|
25
25
|
import { isStringElement } from '@speclynx/apidom-datamodel';
|
|
26
|
+
import { Metadata } from '@speclynx/apidom-datamodel';
|
|
26
27
|
import { Namespace } from '@speclynx/apidom-datamodel';
|
|
27
28
|
import { ObjectElement } from '@speclynx/apidom-datamodel';
|
|
28
29
|
import { Path } from '@speclynx/apidom-traverse';
|
|
29
30
|
import { SchemaOptions } from 'yaml';
|
|
30
31
|
import ShortUniqueId from 'short-unique-id';
|
|
31
|
-
import { StringElement } from '@speclynx/apidom-datamodel';
|
|
32
32
|
import { ToStringOptions } from 'yaml';
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -72,7 +72,7 @@ export declare type DeepMergeCustomMerge = (keyElement: Element_2, options: Deep
|
|
|
72
72
|
/**
|
|
73
73
|
* @public
|
|
74
74
|
*/
|
|
75
|
-
export declare type DeepMergeCustomMetaMerge = (targetElementMeta:
|
|
75
|
+
export declare type DeepMergeCustomMetaMerge = (targetElementMeta: Metadata, sourceElementMeta: Metadata) => Metadata;
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
78
|
* @public
|
|
@@ -222,11 +222,11 @@ export declare const from: (data: unknown, namespace?: Namespace) => Element_2 |
|
|
|
222
222
|
*/
|
|
223
223
|
export declare class IdentityManager {
|
|
224
224
|
protected readonly uuid: ShortUniqueId;
|
|
225
|
-
protected readonly identityMap: WeakMap<Element_2,
|
|
225
|
+
protected readonly identityMap: WeakMap<Element_2, string>;
|
|
226
226
|
constructor({ length }?: {
|
|
227
227
|
length?: number | undefined;
|
|
228
228
|
});
|
|
229
|
-
identify<T extends Element_2>(this: IdentityManager, element: T):
|
|
229
|
+
identify<T extends Element_2>(this: IdentityManager, element: T): string;
|
|
230
230
|
forget<T extends Element_2>(element: T): boolean;
|
|
231
231
|
generateId(): string;
|
|
232
232
|
}
|