@speclynx/apidom-core 1.12.1
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 +82 -0
- package/LICENSE +202 -0
- package/LICENSES/AFL-3.0.txt +182 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/LICENSES/BSD-3-Clause.txt +26 -0
- package/LICENSES/MIT.txt +9 -0
- package/NOTICE +65 -0
- package/README.md +881 -0
- package/dist/apidom-core.browser.js +14724 -0
- package/dist/apidom-core.browser.min.js +1 -0
- package/package.json +67 -0
- package/src/clone/errors/CloneError.cjs +22 -0
- package/src/clone/errors/CloneError.mjs +19 -0
- package/src/clone/errors/DeepCloneError.cjs +11 -0
- package/src/clone/errors/DeepCloneError.mjs +6 -0
- package/src/clone/errors/ShallowCloneError.cjs +11 -0
- package/src/clone/errors/ShallowCloneError.mjs +6 -0
- package/src/clone/index.cjs +155 -0
- package/src/clone/index.mjs +146 -0
- package/src/elements/Annotation.cjs +23 -0
- package/src/elements/Annotation.mjs +20 -0
- package/src/elements/Comment.cjs +15 -0
- package/src/elements/Comment.mjs +12 -0
- package/src/elements/ParseResult.cjs +53 -0
- package/src/elements/ParseResult.mjs +50 -0
- package/src/elements/SourceMap.cjs +39 -0
- package/src/elements/SourceMap.mjs +36 -0
- package/src/identity/errors/ElementIdentityError.cjs +22 -0
- package/src/identity/errors/ElementIdentityError.mjs +19 -0
- package/src/identity/index.cjs +62 -0
- package/src/identity/index.mjs +56 -0
- package/src/index.cjs +112 -0
- package/src/index.mjs +50 -0
- package/src/media-types.cjs +21 -0
- package/src/media-types.mjs +18 -0
- package/src/merge/deepmerge.cjs +151 -0
- package/src/merge/deepmerge.mjs +135 -0
- package/src/merge/merge-left.cjs +16 -0
- package/src/merge/merge-left.mjs +11 -0
- package/src/merge/merge-right.cjs +35 -0
- package/src/merge/merge-right.mjs +29 -0
- package/src/namespace.cjs +42 -0
- package/src/namespace.mjs +35 -0
- package/src/predicates/helpers.cjs +85 -0
- package/src/predicates/helpers.mjs +77 -0
- package/src/predicates/index.cjs +208 -0
- package/src/predicates/index.mjs +198 -0
- package/src/refractor/index.cjs +46 -0
- package/src/refractor/index.mjs +40 -0
- package/src/refractor/plugins/dispatcher/index.cjs +71 -0
- package/src/refractor/plugins/dispatcher/index.mjs +61 -0
- package/src/refractor/plugins/element-identity.cjs +31 -0
- package/src/refractor/plugins/element-identity.mjs +26 -0
- package/src/refractor/plugins/semantic-element-identity.cjs +38 -0
- package/src/refractor/plugins/semantic-element-identity.mjs +33 -0
- package/src/refractor/registration.cjs +34 -0
- package/src/refractor/registration.mjs +19 -0
- package/src/refractor/toolbox.cjs +29 -0
- package/src/refractor/toolbox.mjs +21 -0
- package/src/transcluder/Transcluder.cjs +111 -0
- package/src/transcluder/Transcluder.mjs +107 -0
- package/src/transcluder/index.cjs +19 -0
- package/src/transcluder/index.mjs +13 -0
- package/src/transformers/dehydrate.cjs +15 -0
- package/src/transformers/dehydrate.mjs +10 -0
- package/src/transformers/from.cjs +34 -0
- package/src/transformers/from.mjs +29 -0
- package/src/transformers/serializers/json.cjs +11 -0
- package/src/transformers/serializers/json.mjs +6 -0
- package/src/transformers/serializers/value/ast/ephemeral-array.cjs +21 -0
- package/src/transformers/serializers/value/ast/ephemeral-array.mjs +17 -0
- package/src/transformers/serializers/value/ast/ephemeral-object.cjs +20 -0
- package/src/transformers/serializers/value/ast/ephemeral-object.mjs +16 -0
- package/src/transformers/serializers/value/index.cjs +85 -0
- package/src/transformers/serializers/value/index.mjs +80 -0
- package/src/transformers/serializers/value/visitor.cjs +52 -0
- package/src/transformers/serializers/value/visitor.mjs +47 -0
- package/src/transformers/serializers/yaml-1-2.cjs +90 -0
- package/src/transformers/serializers/yaml-1-2.mjs +85 -0
- package/src/transformers/sexprs.cjs +34 -0
- package/src/transformers/sexprs.mjs +30 -0
- package/src/transformers/to-string.cjs +16 -0
- package/src/transformers/to-string.mjs +11 -0
- package/src/traversal/filter.cjs +18 -0
- package/src/traversal/filter.mjs +14 -0
- package/src/traversal/find.cjs +19 -0
- package/src/traversal/find.mjs +15 -0
- package/src/traversal/findAtOffset.cjs +65 -0
- package/src/traversal/findAtOffset.mjs +60 -0
- package/src/traversal/index.cjs +19 -0
- package/src/traversal/index.mjs +7 -0
- package/src/traversal/parents.cjs +38 -0
- package/src/traversal/parents.mjs +34 -0
- package/src/traversal/reject.cjs +15 -0
- package/src/traversal/reject.mjs +10 -0
- package/src/traversal/some.cjs +15 -0
- package/src/traversal/some.mjs +10 -0
- package/src/traversal/traverse.cjs +60 -0
- package/src/traversal/traverse.mjs +53 -0
- package/src/traversal/visitor.cjs +123 -0
- package/src/traversal/visitor.mjs +115 -0
- package/src/util.cjs +28 -0
- package/src/util.mjs +24 -0
- package/types/apidom-core.d.ts +806 -0
- package/types/minim.d.ts +236 -0
package/src/index.mjs
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export { dispatchPluginsSync as dispatchRefractorPlugins } from "./refractor/plugins/dispatcher/index.mjs";
|
|
2
|
+
export { default as refractorPluginElementIdentity } from "./refractor/plugins/element-identity.mjs";
|
|
3
|
+
export { default as refractorPluginSemanticElementIdentity } from "./refractor/plugins/semantic-element-identity.mjs";
|
|
4
|
+
export { default as MediaTypes } from "./media-types.mjs";
|
|
5
|
+
export { Element, MemberElement, KeyValuePair, ObjectSlice, ArraySlice, refract } from 'minim';
|
|
6
|
+
export { default as namespace, Namespace, createNamespace } from "./namespace.mjs";
|
|
7
|
+
export { ObjectElement, ArrayElement, BooleanElement, NullElement, NumberElement, StringElement, LinkElement, RefElement, AnnotationElement, CommentElement, ParseResultElement, SourceMapElement } from "./refractor/registration.mjs";
|
|
8
|
+
export { isElement, isStringElement, isNumberElement, isNullElement, isBooleanElement, isArrayElement, isObjectElement, isMemberElement, isLinkElement, isRefElement, isAnnotationElement, isParseResultElement, isSourceMapElement, isPrimitiveElement, hasElementSourceMap, includesSymbols, includesClasses } from "./predicates/index.mjs";
|
|
9
|
+
export { default as createPredicate } from "./predicates/helpers.mjs";
|
|
10
|
+
export { filter, reject, find, findAtOffset, some, traverse, parents } from "./traversal/index.mjs";
|
|
11
|
+
export { visit, BREAK, mergeAllVisitors, getNodeType, cloneNode, keyMapDefault as keyMap } from "./traversal/visitor.mjs";
|
|
12
|
+
export { transclude, default as Transcluder } from "./transcluder/index.mjs";
|
|
13
|
+
export { dereference } from "./util.mjs";
|
|
14
|
+
export { cloneShallow, cloneDeep } from "./clone/index.mjs";
|
|
15
|
+
export { default as CloneError } from "./clone/errors/CloneError.mjs";
|
|
16
|
+
export { default as DeepCloneError } from "./clone/errors/DeepCloneError.mjs";
|
|
17
|
+
export { default as ShallowCloneError } from "./clone/errors/ShallowCloneError.mjs";
|
|
18
|
+
export { defaultIdentityManager, IdentityManager } from "./identity/index.mjs";
|
|
19
|
+
export { default as ElementIdentityError } from "./identity/errors/ElementIdentityError.mjs";
|
|
20
|
+
/**
|
|
21
|
+
* Transforms data to an Element from a particular namespace.
|
|
22
|
+
*/
|
|
23
|
+
export { default as from } from "./transformers/from.mjs";
|
|
24
|
+
/**
|
|
25
|
+
* Transforms the ApiDOM into JavaScript POJO.
|
|
26
|
+
* This POJO would be the result of interpreting the ApiDOM
|
|
27
|
+
* into JavaScript structure.
|
|
28
|
+
*/
|
|
29
|
+
export { default as toValue } from "./transformers/serializers/value/index.mjs";
|
|
30
|
+
/**
|
|
31
|
+
* Transforms the ApiDOM into JSON string.
|
|
32
|
+
*/
|
|
33
|
+
export { default as toJSON } from "./transformers/serializers/json.mjs";
|
|
34
|
+
/**
|
|
35
|
+
* Transforms the ApiDOM into YAML string.
|
|
36
|
+
*/
|
|
37
|
+
export { default as toYAML } from "./transformers/serializers/yaml-1-2.mjs";
|
|
38
|
+
/**
|
|
39
|
+
* Creates a refract representation of an Element.
|
|
40
|
+
* https://github.com/refractproject/refract-spec
|
|
41
|
+
*/
|
|
42
|
+
export { default as dehydrate } from "./transformers/dehydrate.mjs";
|
|
43
|
+
/**
|
|
44
|
+
* Create a refracted string representation of an Element.
|
|
45
|
+
*/
|
|
46
|
+
export { default as toString } from "./transformers/to-string.mjs";
|
|
47
|
+
export { default as sexprs } from "./transformers/sexprs.mjs";
|
|
48
|
+
export { default as deepmerge } from "./merge/deepmerge.mjs";
|
|
49
|
+
export { default as mergeRight } from "./merge/merge-right.mjs";
|
|
50
|
+
export { default as mergeLeft } from "./merge/merge-left.mjs";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _apidomError = require("@speclynx/apidom-error");
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
class MediaTypes extends Array {
|
|
10
|
+
unknownMediaType = 'application/octet-stream';
|
|
11
|
+
filterByFormat() {
|
|
12
|
+
throw new _apidomError.NotImplementedError('filterByFormat method in MediaTypes class is not yet implemented.');
|
|
13
|
+
}
|
|
14
|
+
findBy() {
|
|
15
|
+
throw new _apidomError.NotImplementedError('findBy method in MediaTypes class is not yet implemented.');
|
|
16
|
+
}
|
|
17
|
+
latest() {
|
|
18
|
+
throw new _apidomError.NotImplementedError('latest method in MediaTypes class is not yet implemented.');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
var _default = exports.default = MediaTypes;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { NotImplementedError } from '@speclynx/apidom-error';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
class MediaTypes extends Array {
|
|
7
|
+
unknownMediaType = 'application/octet-stream';
|
|
8
|
+
filterByFormat() {
|
|
9
|
+
throw new NotImplementedError('filterByFormat method in MediaTypes class is not yet implemented.');
|
|
10
|
+
}
|
|
11
|
+
findBy() {
|
|
12
|
+
throw new NotImplementedError('findBy method in MediaTypes class is not yet implemented.');
|
|
13
|
+
}
|
|
14
|
+
latest() {
|
|
15
|
+
throw new NotImplementedError('latest method in MediaTypes class is not yet implemented.');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export default MediaTypes;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.emptyElement = exports.defaultOptions = exports.default = void 0;
|
|
6
|
+
var _minim = require("minim");
|
|
7
|
+
var _index = require("../predicates/index.cjs");
|
|
8
|
+
var _index2 = require("../clone/index.cjs");
|
|
9
|
+
var _index3 = _interopRequireDefault(require("../transformers/serializers/value/index.cjs"));
|
|
10
|
+
/**
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @public
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
const emptyElement = element => {
|
|
51
|
+
const meta = element.meta.length > 0 ? (0, _index2.cloneDeep)(element.meta) : undefined;
|
|
52
|
+
const attributes = element.attributes.length > 0 ? (0, _index2.cloneDeep)(element.attributes) : undefined;
|
|
53
|
+
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
return new element.constructor(undefined, meta, attributes);
|
|
56
|
+
};
|
|
57
|
+
exports.emptyElement = emptyElement;
|
|
58
|
+
const cloneUnlessOtherwiseSpecified = (element, options) => options.clone && options.isMergeableElement(element) ? deepmerge(emptyElement(element), element, options) : element;
|
|
59
|
+
const getMergeFunction = (keyElement, options) => {
|
|
60
|
+
if (typeof options.customMerge !== 'function') {
|
|
61
|
+
return deepmerge;
|
|
62
|
+
}
|
|
63
|
+
const customMerge = options.customMerge(keyElement, options);
|
|
64
|
+
return typeof customMerge === 'function' ? customMerge : deepmerge;
|
|
65
|
+
};
|
|
66
|
+
const getMetaMergeFunction = options => {
|
|
67
|
+
if (typeof options.customMetaMerge !== 'function') {
|
|
68
|
+
return targetMeta => (0, _index2.cloneDeep)(targetMeta);
|
|
69
|
+
}
|
|
70
|
+
return options.customMetaMerge;
|
|
71
|
+
};
|
|
72
|
+
const getAttributesMergeFunction = options => {
|
|
73
|
+
if (typeof options.customAttributesMerge !== 'function') {
|
|
74
|
+
return targetAttributes => (0, _index2.cloneDeep)(targetAttributes);
|
|
75
|
+
}
|
|
76
|
+
return options.customAttributesMerge;
|
|
77
|
+
};
|
|
78
|
+
const mergeArrayElement = (targetElement, sourceElement, options) => targetElement.concat(sourceElement)['fantasy-land/map'](item => cloneUnlessOtherwiseSpecified(item, options));
|
|
79
|
+
const mergeObjectElement = (targetElement, sourceElement, options) => {
|
|
80
|
+
const destination = (0, _index.isObjectElement)(targetElement) ? emptyElement(targetElement) : emptyElement(sourceElement);
|
|
81
|
+
if ((0, _index.isObjectElement)(targetElement)) {
|
|
82
|
+
targetElement.forEach((value, key, member) => {
|
|
83
|
+
const clonedMember = (0, _index2.cloneShallow)(member);
|
|
84
|
+
clonedMember.value = cloneUnlessOtherwiseSpecified(value, options);
|
|
85
|
+
destination.content.push(clonedMember);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
sourceElement.forEach((value, key, member) => {
|
|
89
|
+
const keyValue = (0, _index3.default)(key);
|
|
90
|
+
let clonedMember;
|
|
91
|
+
if ((0, _index.isObjectElement)(targetElement) && targetElement.hasKey(keyValue) && options.isMergeableElement(value)) {
|
|
92
|
+
const targetValue = targetElement.get(keyValue);
|
|
93
|
+
clonedMember = (0, _index2.cloneShallow)(member);
|
|
94
|
+
clonedMember.value = getMergeFunction(key, options)(targetValue, value, options);
|
|
95
|
+
} else {
|
|
96
|
+
clonedMember = (0, _index2.cloneShallow)(member);
|
|
97
|
+
clonedMember.value = cloneUnlessOtherwiseSpecified(value, options);
|
|
98
|
+
}
|
|
99
|
+
destination.remove(keyValue);
|
|
100
|
+
destination.content.push(clonedMember);
|
|
101
|
+
});
|
|
102
|
+
return destination;
|
|
103
|
+
};
|
|
104
|
+
const defaultOptions = exports.defaultOptions = {
|
|
105
|
+
clone: true,
|
|
106
|
+
isMergeableElement: element => (0, _index.isObjectElement)(element) || (0, _index.isArrayElement)(element),
|
|
107
|
+
arrayElementMerge: mergeArrayElement,
|
|
108
|
+
objectElementMerge: mergeObjectElement,
|
|
109
|
+
customMerge: undefined,
|
|
110
|
+
customMetaMerge: undefined,
|
|
111
|
+
customAttributesMerge: undefined
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @public
|
|
116
|
+
*/
|
|
117
|
+
const deepmerge = (targetElement, sourceElement, options) => {
|
|
118
|
+
const mergedOptions = {
|
|
119
|
+
...defaultOptions,
|
|
120
|
+
...options
|
|
121
|
+
};
|
|
122
|
+
mergedOptions.isMergeableElement = mergedOptions.isMergeableElement ?? defaultOptions.isMergeableElement;
|
|
123
|
+
mergedOptions.arrayElementMerge = mergedOptions.arrayElementMerge ?? defaultOptions.arrayElementMerge;
|
|
124
|
+
mergedOptions.objectElementMerge = mergedOptions.objectElementMerge ?? defaultOptions.objectElementMerge;
|
|
125
|
+
const sourceIsArrayElement = (0, _index.isArrayElement)(sourceElement);
|
|
126
|
+
const targetIsArrayElement = (0, _index.isArrayElement)(targetElement);
|
|
127
|
+
const sourceAndTargetTypesMatch = sourceIsArrayElement === targetIsArrayElement;
|
|
128
|
+
if (!sourceAndTargetTypesMatch) {
|
|
129
|
+
return cloneUnlessOtherwiseSpecified(sourceElement, mergedOptions);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// merging two elements
|
|
133
|
+
const mergedElement = sourceIsArrayElement && typeof mergedOptions.arrayElementMerge === 'function' ? mergedOptions.arrayElementMerge(targetElement, sourceElement, mergedOptions) : mergedOptions.objectElementMerge(targetElement, sourceElement, mergedOptions);
|
|
134
|
+
|
|
135
|
+
// merging meta & attributes
|
|
136
|
+
mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
|
|
137
|
+
mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
|
|
138
|
+
return mergedElement;
|
|
139
|
+
};
|
|
140
|
+
deepmerge.all = (list, options) => {
|
|
141
|
+
if (!Array.isArray(list)) {
|
|
142
|
+
throw new TypeError('First argument of deepmerge should be an array.');
|
|
143
|
+
}
|
|
144
|
+
if (list.length === 0) {
|
|
145
|
+
return new _minim.ObjectElement();
|
|
146
|
+
}
|
|
147
|
+
return list.reduce((target, source) => {
|
|
148
|
+
return deepmerge(target, source, options);
|
|
149
|
+
}, emptyElement(list[0]));
|
|
150
|
+
};
|
|
151
|
+
var _default = exports.default = deepmerge;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { ObjectElement } from 'minim';
|
|
2
|
+
import { isObjectElement, isArrayElement } from "../predicates/index.mjs";
|
|
3
|
+
import { cloneDeep, cloneShallow } from "../clone/index.mjs";
|
|
4
|
+
import toValue from "../transformers/serializers/value/index.mjs";
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* @public
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export const emptyElement = element => {
|
|
36
|
+
const meta = element.meta.length > 0 ? cloneDeep(element.meta) : undefined;
|
|
37
|
+
const attributes = element.attributes.length > 0 ? cloneDeep(element.attributes) : undefined;
|
|
38
|
+
|
|
39
|
+
// @ts-ignore
|
|
40
|
+
return new element.constructor(undefined, meta, attributes);
|
|
41
|
+
};
|
|
42
|
+
const cloneUnlessOtherwiseSpecified = (element, options) => options.clone && options.isMergeableElement(element) ? deepmerge(emptyElement(element), element, options) : element;
|
|
43
|
+
const getMergeFunction = (keyElement, options) => {
|
|
44
|
+
if (typeof options.customMerge !== 'function') {
|
|
45
|
+
return deepmerge;
|
|
46
|
+
}
|
|
47
|
+
const customMerge = options.customMerge(keyElement, options);
|
|
48
|
+
return typeof customMerge === 'function' ? customMerge : deepmerge;
|
|
49
|
+
};
|
|
50
|
+
const getMetaMergeFunction = options => {
|
|
51
|
+
if (typeof options.customMetaMerge !== 'function') {
|
|
52
|
+
return targetMeta => cloneDeep(targetMeta);
|
|
53
|
+
}
|
|
54
|
+
return options.customMetaMerge;
|
|
55
|
+
};
|
|
56
|
+
const getAttributesMergeFunction = options => {
|
|
57
|
+
if (typeof options.customAttributesMerge !== 'function') {
|
|
58
|
+
return targetAttributes => cloneDeep(targetAttributes);
|
|
59
|
+
}
|
|
60
|
+
return options.customAttributesMerge;
|
|
61
|
+
};
|
|
62
|
+
const mergeArrayElement = (targetElement, sourceElement, options) => targetElement.concat(sourceElement)['fantasy-land/map'](item => cloneUnlessOtherwiseSpecified(item, options));
|
|
63
|
+
const mergeObjectElement = (targetElement, sourceElement, options) => {
|
|
64
|
+
const destination = isObjectElement(targetElement) ? emptyElement(targetElement) : emptyElement(sourceElement);
|
|
65
|
+
if (isObjectElement(targetElement)) {
|
|
66
|
+
targetElement.forEach((value, key, member) => {
|
|
67
|
+
const clonedMember = cloneShallow(member);
|
|
68
|
+
clonedMember.value = cloneUnlessOtherwiseSpecified(value, options);
|
|
69
|
+
destination.content.push(clonedMember);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
sourceElement.forEach((value, key, member) => {
|
|
73
|
+
const keyValue = toValue(key);
|
|
74
|
+
let clonedMember;
|
|
75
|
+
if (isObjectElement(targetElement) && targetElement.hasKey(keyValue) && options.isMergeableElement(value)) {
|
|
76
|
+
const targetValue = targetElement.get(keyValue);
|
|
77
|
+
clonedMember = cloneShallow(member);
|
|
78
|
+
clonedMember.value = getMergeFunction(key, options)(targetValue, value, options);
|
|
79
|
+
} else {
|
|
80
|
+
clonedMember = cloneShallow(member);
|
|
81
|
+
clonedMember.value = cloneUnlessOtherwiseSpecified(value, options);
|
|
82
|
+
}
|
|
83
|
+
destination.remove(keyValue);
|
|
84
|
+
destination.content.push(clonedMember);
|
|
85
|
+
});
|
|
86
|
+
return destination;
|
|
87
|
+
};
|
|
88
|
+
export const defaultOptions = {
|
|
89
|
+
clone: true,
|
|
90
|
+
isMergeableElement: element => isObjectElement(element) || isArrayElement(element),
|
|
91
|
+
arrayElementMerge: mergeArrayElement,
|
|
92
|
+
objectElementMerge: mergeObjectElement,
|
|
93
|
+
customMerge: undefined,
|
|
94
|
+
customMetaMerge: undefined,
|
|
95
|
+
customAttributesMerge: undefined
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
const deepmerge = (targetElement, sourceElement, options) => {
|
|
102
|
+
const mergedOptions = {
|
|
103
|
+
...defaultOptions,
|
|
104
|
+
...options
|
|
105
|
+
};
|
|
106
|
+
mergedOptions.isMergeableElement = mergedOptions.isMergeableElement ?? defaultOptions.isMergeableElement;
|
|
107
|
+
mergedOptions.arrayElementMerge = mergedOptions.arrayElementMerge ?? defaultOptions.arrayElementMerge;
|
|
108
|
+
mergedOptions.objectElementMerge = mergedOptions.objectElementMerge ?? defaultOptions.objectElementMerge;
|
|
109
|
+
const sourceIsArrayElement = isArrayElement(sourceElement);
|
|
110
|
+
const targetIsArrayElement = isArrayElement(targetElement);
|
|
111
|
+
const sourceAndTargetTypesMatch = sourceIsArrayElement === targetIsArrayElement;
|
|
112
|
+
if (!sourceAndTargetTypesMatch) {
|
|
113
|
+
return cloneUnlessOtherwiseSpecified(sourceElement, mergedOptions);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// merging two elements
|
|
117
|
+
const mergedElement = sourceIsArrayElement && typeof mergedOptions.arrayElementMerge === 'function' ? mergedOptions.arrayElementMerge(targetElement, sourceElement, mergedOptions) : mergedOptions.objectElementMerge(targetElement, sourceElement, mergedOptions);
|
|
118
|
+
|
|
119
|
+
// merging meta & attributes
|
|
120
|
+
mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
|
|
121
|
+
mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
|
|
122
|
+
return mergedElement;
|
|
123
|
+
};
|
|
124
|
+
deepmerge.all = (list, options) => {
|
|
125
|
+
if (!Array.isArray(list)) {
|
|
126
|
+
throw new TypeError('First argument of deepmerge should be an array.');
|
|
127
|
+
}
|
|
128
|
+
if (list.length === 0) {
|
|
129
|
+
return new ObjectElement();
|
|
130
|
+
}
|
|
131
|
+
return list.reduce((target, source) => {
|
|
132
|
+
return deepmerge(target, source, options);
|
|
133
|
+
}, emptyElement(list[0]));
|
|
134
|
+
};
|
|
135
|
+
export default deepmerge;
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
const mergeLeft = (...[sourceElement, targetElement, options]) => {
|
|
11
|
+
return (0, _mergeRight.default)(targetElement, sourceElement, options);
|
|
12
|
+
};
|
|
13
|
+
mergeLeft.all = (...[list, options]) => {
|
|
14
|
+
return _mergeRight.default.all([...list].reverse(), options);
|
|
15
|
+
};
|
|
16
|
+
var _default = exports.default = mergeLeft;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import mergeRight from "./merge-right.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
5
|
+
const mergeLeft = (...[sourceElement, targetElement, options]) => {
|
|
6
|
+
return mergeRight(targetElement, sourceElement, options);
|
|
7
|
+
};
|
|
8
|
+
mergeLeft.all = (...[list, options]) => {
|
|
9
|
+
return mergeRight.all([...list].reverse(), options);
|
|
10
|
+
};
|
|
11
|
+
export default mergeLeft;
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
/**
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
const mergeRight = (targetElement, sourceElement, options) => {
|
|
16
|
+
const mergedOptions = {
|
|
17
|
+
..._deepmerge.defaultOptions,
|
|
18
|
+
...options,
|
|
19
|
+
customMerge: () => (target, source) => source,
|
|
20
|
+
clone: false
|
|
21
|
+
};
|
|
22
|
+
return (0, _deepmerge.default)(targetElement, sourceElement, mergedOptions);
|
|
23
|
+
};
|
|
24
|
+
mergeRight.all = (list, options) => {
|
|
25
|
+
if (!Array.isArray(list)) {
|
|
26
|
+
throw new TypeError('First argument of mergeRight should be an array.');
|
|
27
|
+
}
|
|
28
|
+
if (list.length === 0) {
|
|
29
|
+
return new _minim.ObjectElement();
|
|
30
|
+
}
|
|
31
|
+
return list.reduce((target, source) => {
|
|
32
|
+
return mergeRight(target, source, options);
|
|
33
|
+
}, (0, _deepmerge.emptyElement)(list[0]));
|
|
34
|
+
};
|
|
35
|
+
var _default = exports.default = mergeRight;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ObjectElement } from 'minim';
|
|
2
|
+
import deepmerge, { defaultOptions as defaultDeepmergeOptions, emptyElement } from "./deepmerge.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
const mergeRight = (targetElement, sourceElement, options) => {
|
|
10
|
+
const mergedOptions = {
|
|
11
|
+
...defaultDeepmergeOptions,
|
|
12
|
+
...options,
|
|
13
|
+
customMerge: () => (target, source) => source,
|
|
14
|
+
clone: false
|
|
15
|
+
};
|
|
16
|
+
return deepmerge(targetElement, sourceElement, mergedOptions);
|
|
17
|
+
};
|
|
18
|
+
mergeRight.all = (list, options) => {
|
|
19
|
+
if (!Array.isArray(list)) {
|
|
20
|
+
throw new TypeError('First argument of mergeRight should be an array.');
|
|
21
|
+
}
|
|
22
|
+
if (list.length === 0) {
|
|
23
|
+
return new ObjectElement();
|
|
24
|
+
}
|
|
25
|
+
return list.reduce((target, source) => {
|
|
26
|
+
return mergeRight(target, source, options);
|
|
27
|
+
}, emptyElement(list[0]));
|
|
28
|
+
};
|
|
29
|
+
export default mergeRight;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = exports.createNamespace = exports.Namespace = void 0;
|
|
6
|
+
var _minim = require("minim");
|
|
7
|
+
var _ramdaAdjunct = require("ramda-adjunct");
|
|
8
|
+
var _Annotation = _interopRequireDefault(require("./elements/Annotation.cjs"));
|
|
9
|
+
var _Comment = _interopRequireDefault(require("./elements/Comment.cjs"));
|
|
10
|
+
var _ParseResult = _interopRequireDefault(require("./elements/ParseResult.cjs"));
|
|
11
|
+
var _SourceMap = _interopRequireDefault(require("./elements/SourceMap.cjs"));
|
|
12
|
+
/**
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
class Namespace extends _minim.Namespace {
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
this.register('annotation', _Annotation.default);
|
|
19
|
+
this.register('comment', _Comment.default);
|
|
20
|
+
this.register('parseResult', _ParseResult.default);
|
|
21
|
+
this.register('sourceMap', _SourceMap.default);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
exports.Namespace = Namespace;
|
|
29
|
+
const namespace = new Namespace();
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @public
|
|
33
|
+
*/
|
|
34
|
+
const createNamespace = namespacePlugin => {
|
|
35
|
+
const namespaceInstance = new Namespace();
|
|
36
|
+
if ((0, _ramdaAdjunct.isPlainObject)(namespacePlugin)) {
|
|
37
|
+
namespaceInstance.use(namespacePlugin);
|
|
38
|
+
}
|
|
39
|
+
return namespaceInstance;
|
|
40
|
+
};
|
|
41
|
+
exports.createNamespace = createNamespace;
|
|
42
|
+
var _default = exports.default = namespace;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Namespace as MinimNamespace } from 'minim';
|
|
2
|
+
import { isPlainObject } from 'ramda-adjunct';
|
|
3
|
+
import AnnotationElement from "./elements/Annotation.mjs";
|
|
4
|
+
import CommentElement from "./elements/Comment.mjs";
|
|
5
|
+
import ParseResultElement from "./elements/ParseResult.mjs";
|
|
6
|
+
import SourceMapElement from "./elements/SourceMap.mjs";
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export class Namespace extends MinimNamespace {
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
this.register('annotation', AnnotationElement);
|
|
14
|
+
this.register('comment', CommentElement);
|
|
15
|
+
this.register('parseResult', ParseResultElement);
|
|
16
|
+
this.register('sourceMap', SourceMapElement);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
const namespace = new Namespace();
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
export const createNamespace = namespacePlugin => {
|
|
29
|
+
const namespaceInstance = new Namespace();
|
|
30
|
+
if (isPlainObject(namespacePlugin)) {
|
|
31
|
+
namespaceInstance.use(namespacePlugin);
|
|
32
|
+
}
|
|
33
|
+
return namespaceInstance;
|
|
34
|
+
};
|
|
35
|
+
export default namespace;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.primitiveEq = exports.isElementType = exports.hasMethod = exports.hasClass = exports.hasBasicElementProps = exports.default = void 0;
|
|
5
|
+
var _minim = require("minim");
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
const hasMethod = (name, element) => {
|
|
38
|
+
return typeof element === 'object' && element !== null && name in element && typeof element[name] === 'function';
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
exports.hasMethod = hasMethod;
|
|
45
|
+
const hasBasicElementProps = element => typeof element === 'object' && element != null && '_storedElement' in element && typeof element._storedElement === 'string' && '_content' in element;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @public
|
|
49
|
+
*/
|
|
50
|
+
exports.hasBasicElementProps = hasBasicElementProps;
|
|
51
|
+
const primitiveEq = (val, element) => {
|
|
52
|
+
if (typeof element === 'object' && element !== null && 'primitive' in element) {
|
|
53
|
+
return typeof element.primitive === 'function' && element.primitive() === val;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @public
|
|
60
|
+
*/
|
|
61
|
+
exports.primitiveEq = primitiveEq;
|
|
62
|
+
const hasClass = (cls, element) => {
|
|
63
|
+
return typeof element === 'object' && element !== null && 'classes' in element && (Array.isArray(element.classes) || element.classes instanceof _minim.ArrayElement) && element.classes.includes(cls);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @public
|
|
68
|
+
*/
|
|
69
|
+
exports.hasClass = hasClass;
|
|
70
|
+
const isElementType = (name, element) => typeof element === 'object' && element !== null && 'element' in element && element.element === name;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @public
|
|
74
|
+
*/
|
|
75
|
+
exports.isElementType = isElementType;
|
|
76
|
+
const createPredicate = predicateCreator => {
|
|
77
|
+
return predicateCreator({
|
|
78
|
+
hasMethod,
|
|
79
|
+
hasBasicElementProps,
|
|
80
|
+
primitiveEq,
|
|
81
|
+
isElementType,
|
|
82
|
+
hasClass
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
var _default = exports.default = createPredicate;
|