@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
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { ArraySlice, ObjectSlice, KeyValuePair } from 'minim';
|
|
2
|
+
import { isElement } from "../predicates/index.mjs";
|
|
3
|
+
import DeepCloneError from "./errors/DeepCloneError.mjs";
|
|
4
|
+
import ShallowCloneError from "./errors/ShallowCloneError.mjs";
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
export const cloneDeep = (value, options = {}) => {
|
|
15
|
+
const {
|
|
16
|
+
visited = new WeakMap()
|
|
17
|
+
} = options;
|
|
18
|
+
const passThroughOptions = {
|
|
19
|
+
...options,
|
|
20
|
+
visited
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// detect cycle and return memoized value
|
|
24
|
+
if (visited.has(value)) {
|
|
25
|
+
return visited.get(value);
|
|
26
|
+
}
|
|
27
|
+
if (value instanceof KeyValuePair) {
|
|
28
|
+
const {
|
|
29
|
+
key,
|
|
30
|
+
value: val
|
|
31
|
+
} = value;
|
|
32
|
+
const keyCopy = isElement(key) ? cloneDeep(key, passThroughOptions) : key;
|
|
33
|
+
const valueCopy = isElement(val) ? cloneDeep(val, passThroughOptions) : val;
|
|
34
|
+
const copy = new KeyValuePair(keyCopy, valueCopy);
|
|
35
|
+
visited.set(value, copy);
|
|
36
|
+
return copy;
|
|
37
|
+
}
|
|
38
|
+
if (value instanceof ObjectSlice) {
|
|
39
|
+
const mapper = element => cloneDeep(element, passThroughOptions);
|
|
40
|
+
const items = [...value].map(mapper);
|
|
41
|
+
const copy = new ObjectSlice(items);
|
|
42
|
+
visited.set(value, copy);
|
|
43
|
+
return copy;
|
|
44
|
+
}
|
|
45
|
+
if (value instanceof ArraySlice) {
|
|
46
|
+
const mapper = element => cloneDeep(element, passThroughOptions);
|
|
47
|
+
const items = [...value].map(mapper);
|
|
48
|
+
const copy = new ArraySlice(items);
|
|
49
|
+
visited.set(value, copy);
|
|
50
|
+
return copy;
|
|
51
|
+
}
|
|
52
|
+
if (isElement(value)) {
|
|
53
|
+
const copy = cloneShallow(value);
|
|
54
|
+
visited.set(value, copy);
|
|
55
|
+
if (value.content) {
|
|
56
|
+
if (isElement(value.content)) {
|
|
57
|
+
copy.content = cloneDeep(value.content, passThroughOptions);
|
|
58
|
+
} else if (value.content instanceof KeyValuePair) {
|
|
59
|
+
copy.content = cloneDeep(value.content, passThroughOptions);
|
|
60
|
+
} else if (Array.isArray(value.content)) {
|
|
61
|
+
const mapper = element => cloneDeep(element, passThroughOptions);
|
|
62
|
+
copy.content = value.content.map(mapper);
|
|
63
|
+
} else {
|
|
64
|
+
copy.content = value.content;
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
copy.content = value.content;
|
|
68
|
+
}
|
|
69
|
+
return copy;
|
|
70
|
+
}
|
|
71
|
+
throw new DeepCloneError("Value provided to cloneDeep function couldn't be cloned", {
|
|
72
|
+
value
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
cloneDeep.safe = value => {
|
|
76
|
+
try {
|
|
77
|
+
return cloneDeep(value);
|
|
78
|
+
} catch {
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const cloneShallowKeyValuePair = keyValuePair => {
|
|
83
|
+
const {
|
|
84
|
+
key,
|
|
85
|
+
value
|
|
86
|
+
} = keyValuePair;
|
|
87
|
+
return new KeyValuePair(key, value);
|
|
88
|
+
};
|
|
89
|
+
const cloneShallowArraySlice = arraySlice => {
|
|
90
|
+
const items = [...arraySlice];
|
|
91
|
+
return new ArraySlice(items);
|
|
92
|
+
};
|
|
93
|
+
const cloneShallowObjectSlice = objectSlice => {
|
|
94
|
+
const items = [...objectSlice];
|
|
95
|
+
return new ObjectSlice(items);
|
|
96
|
+
};
|
|
97
|
+
const 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 (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 KeyValuePair) {
|
|
113
|
+
copy.content = cloneShallowKeyValuePair(element.content);
|
|
114
|
+
} else {
|
|
115
|
+
copy.content = element.content;
|
|
116
|
+
}
|
|
117
|
+
return copy;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @public
|
|
122
|
+
*/
|
|
123
|
+
export const cloneShallow = value => {
|
|
124
|
+
if (value instanceof KeyValuePair) {
|
|
125
|
+
return cloneShallowKeyValuePair(value);
|
|
126
|
+
}
|
|
127
|
+
if (value instanceof ObjectSlice) {
|
|
128
|
+
return cloneShallowObjectSlice(value);
|
|
129
|
+
}
|
|
130
|
+
if (value instanceof ArraySlice) {
|
|
131
|
+
return cloneShallowArraySlice(value);
|
|
132
|
+
}
|
|
133
|
+
if (isElement(value)) {
|
|
134
|
+
return cloneShallowElement(value);
|
|
135
|
+
}
|
|
136
|
+
throw new ShallowCloneError("Value provided to cloneShallow function couldn't be cloned", {
|
|
137
|
+
value
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
cloneShallow.safe = value => {
|
|
141
|
+
try {
|
|
142
|
+
return cloneShallow(value);
|
|
143
|
+
} catch {
|
|
144
|
+
return value;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _minim = require("minim");
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
class Annotation extends _minim.StringElement {
|
|
10
|
+
// classes: warning | error
|
|
11
|
+
|
|
12
|
+
constructor(content, meta, attributes) {
|
|
13
|
+
super(content, meta, attributes);
|
|
14
|
+
this.element = 'annotation';
|
|
15
|
+
}
|
|
16
|
+
get code() {
|
|
17
|
+
return this.attributes.get('code');
|
|
18
|
+
}
|
|
19
|
+
set code(value) {
|
|
20
|
+
this.attributes.set('code', value);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
var _default = exports.default = Annotation;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { StringElement } from 'minim';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
class Annotation extends StringElement {
|
|
7
|
+
// classes: warning | error
|
|
8
|
+
|
|
9
|
+
constructor(content, meta, attributes) {
|
|
10
|
+
super(content, meta, attributes);
|
|
11
|
+
this.element = 'annotation';
|
|
12
|
+
}
|
|
13
|
+
get code() {
|
|
14
|
+
return this.attributes.get('code');
|
|
15
|
+
}
|
|
16
|
+
set code(value) {
|
|
17
|
+
this.attributes.set('code', value);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export default Annotation;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _minim = require("minim");
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
class Comment extends _minim.StringElement {
|
|
10
|
+
constructor(content, meta, attributes) {
|
|
11
|
+
super(content, meta, attributes);
|
|
12
|
+
this.element = 'comment';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
var _default = exports.default = Comment;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _minim = require("minim");
|
|
6
|
+
var _ramdaAdjunct = require("ramda-adjunct");
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
class ParseResult extends _minim.ArrayElement {
|
|
11
|
+
constructor(content, meta, attributes) {
|
|
12
|
+
super(content, meta, attributes);
|
|
13
|
+
this.element = 'parseResult';
|
|
14
|
+
}
|
|
15
|
+
get api() {
|
|
16
|
+
return this.children.filter(item => item.classes.contains('api')).first;
|
|
17
|
+
}
|
|
18
|
+
get results() {
|
|
19
|
+
return this.children.filter(item => item.classes.contains('result'));
|
|
20
|
+
}
|
|
21
|
+
get result() {
|
|
22
|
+
return this.results.first;
|
|
23
|
+
}
|
|
24
|
+
get annotations() {
|
|
25
|
+
return this.children.filter(item => item.element === 'annotation');
|
|
26
|
+
}
|
|
27
|
+
get warnings() {
|
|
28
|
+
return this.children.filter(item => item.element === 'annotation' && item.classes.contains('warning'));
|
|
29
|
+
}
|
|
30
|
+
get errors() {
|
|
31
|
+
return this.children.filter(item => item.element === 'annotation' && item.classes.contains('error'));
|
|
32
|
+
}
|
|
33
|
+
get isEmpty() {
|
|
34
|
+
return this.children.reject(item => item.element === 'annotation').isEmpty;
|
|
35
|
+
}
|
|
36
|
+
replaceResult(replacement) {
|
|
37
|
+
const {
|
|
38
|
+
result
|
|
39
|
+
} = this;
|
|
40
|
+
if ((0, _ramdaAdjunct.isUndefined)(result)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
const searchIndex = this.content.findIndex(e => e === result);
|
|
46
|
+
if (searchIndex === -1) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
this.content[searchIndex] = replacement;
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
var _default = exports.default = ParseResult;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ArrayElement } from 'minim';
|
|
2
|
+
import { isUndefined } from 'ramda-adjunct';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
class ParseResult extends ArrayElement {
|
|
8
|
+
constructor(content, meta, attributes) {
|
|
9
|
+
super(content, meta, attributes);
|
|
10
|
+
this.element = 'parseResult';
|
|
11
|
+
}
|
|
12
|
+
get api() {
|
|
13
|
+
return this.children.filter(item => item.classes.contains('api')).first;
|
|
14
|
+
}
|
|
15
|
+
get results() {
|
|
16
|
+
return this.children.filter(item => item.classes.contains('result'));
|
|
17
|
+
}
|
|
18
|
+
get result() {
|
|
19
|
+
return this.results.first;
|
|
20
|
+
}
|
|
21
|
+
get annotations() {
|
|
22
|
+
return this.children.filter(item => item.element === 'annotation');
|
|
23
|
+
}
|
|
24
|
+
get warnings() {
|
|
25
|
+
return this.children.filter(item => item.element === 'annotation' && item.classes.contains('warning'));
|
|
26
|
+
}
|
|
27
|
+
get errors() {
|
|
28
|
+
return this.children.filter(item => item.element === 'annotation' && item.classes.contains('error'));
|
|
29
|
+
}
|
|
30
|
+
get isEmpty() {
|
|
31
|
+
return this.children.reject(item => item.element === 'annotation').isEmpty;
|
|
32
|
+
}
|
|
33
|
+
replaceResult(replacement) {
|
|
34
|
+
const {
|
|
35
|
+
result
|
|
36
|
+
} = this;
|
|
37
|
+
if (isUndefined(result)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// @ts-ignore
|
|
42
|
+
const searchIndex = this.content.findIndex(e => e === result);
|
|
43
|
+
if (searchIndex === -1) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
this.content[searchIndex] = replacement;
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export default ParseResult;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _minim = require("minim");
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
class SourceMap extends _minim.ArrayElement {
|
|
18
|
+
constructor(content, meta, attributes) {
|
|
19
|
+
super(content, meta, attributes);
|
|
20
|
+
this.element = 'sourceMap';
|
|
21
|
+
}
|
|
22
|
+
get positionStart() {
|
|
23
|
+
return this.children.filter(item => item.classes.contains('position')).get(0);
|
|
24
|
+
}
|
|
25
|
+
get positionEnd() {
|
|
26
|
+
return this.children.filter(item => item.classes.contains('position')).get(1);
|
|
27
|
+
}
|
|
28
|
+
set position(position) {
|
|
29
|
+
if (typeof position === 'undefined') {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const start = new _minim.ArrayElement([position.start.row, position.start.column, position.start.char]);
|
|
33
|
+
const end = new _minim.ArrayElement([position.end.row, position.end.column, position.end.char]);
|
|
34
|
+
start.classes.push('position');
|
|
35
|
+
end.classes.push('position');
|
|
36
|
+
this.push(start).push(end);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
var _default = exports.default = SourceMap;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ArrayElement } from 'minim';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
class SourceMap extends ArrayElement {
|
|
15
|
+
constructor(content, meta, attributes) {
|
|
16
|
+
super(content, meta, attributes);
|
|
17
|
+
this.element = 'sourceMap';
|
|
18
|
+
}
|
|
19
|
+
get positionStart() {
|
|
20
|
+
return this.children.filter(item => item.classes.contains('position')).get(0);
|
|
21
|
+
}
|
|
22
|
+
get positionEnd() {
|
|
23
|
+
return this.children.filter(item => item.classes.contains('position')).get(1);
|
|
24
|
+
}
|
|
25
|
+
set position(position) {
|
|
26
|
+
if (typeof position === 'undefined') {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const start = new ArrayElement([position.start.row, position.start.column, position.start.char]);
|
|
30
|
+
const end = new ArrayElement([position.end.row, position.end.column, position.end.char]);
|
|
31
|
+
start.classes.push('position');
|
|
32
|
+
end.classes.push('position');
|
|
33
|
+
this.push(start).push(end);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export default SourceMap;
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
class ElementIdentityError extends _apidomError.ApiDOMStructuredError {
|
|
14
|
+
value;
|
|
15
|
+
constructor(message, structuredOptions) {
|
|
16
|
+
super(message, structuredOptions);
|
|
17
|
+
if (typeof structuredOptions !== 'undefined') {
|
|
18
|
+
this.value = structuredOptions.value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
var _default = exports.default = ElementIdentityError;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ApiDOMStructuredError } from '@speclynx/apidom-error';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
class ElementIdentityError extends ApiDOMStructuredError {
|
|
11
|
+
value;
|
|
12
|
+
constructor(message, structuredOptions) {
|
|
13
|
+
super(message, structuredOptions);
|
|
14
|
+
if (typeof structuredOptions !== 'undefined') {
|
|
15
|
+
this.value = structuredOptions.value;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export default ElementIdentityError;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.defaultIdentityManager = exports.IdentityManager = void 0;
|
|
6
|
+
var _minim = require("minim");
|
|
7
|
+
var _shortUniqueId = _interopRequireDefault(require("short-unique-id"));
|
|
8
|
+
var _ElementIdentityError = _interopRequireDefault(require("./errors/ElementIdentityError.cjs"));
|
|
9
|
+
var _index = require("../predicates/index.cjs");
|
|
10
|
+
/**
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
class IdentityManager {
|
|
14
|
+
uuid;
|
|
15
|
+
identityMap;
|
|
16
|
+
constructor({
|
|
17
|
+
length = 6
|
|
18
|
+
} = {}) {
|
|
19
|
+
this.uuid = new _shortUniqueId.default({
|
|
20
|
+
length
|
|
21
|
+
});
|
|
22
|
+
this.identityMap = new WeakMap();
|
|
23
|
+
}
|
|
24
|
+
identify(element) {
|
|
25
|
+
if (!(0, _index.isElement)(element)) {
|
|
26
|
+
throw new _ElementIdentityError.default('Cannot not identify the element. `element` is neither structurally compatible nor a subclass of an Element class.', {
|
|
27
|
+
value: element
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// use already assigned identity
|
|
32
|
+
if (element.meta.hasKey('id') && (0, _index.isStringElement)(element.meta.get('id')) && !element.meta.get('id').equals('')) {
|
|
33
|
+
return element.id;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// assign identity in immutable way
|
|
37
|
+
if (this.identityMap.has(element)) {
|
|
38
|
+
return this.identityMap.get(element);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// return element identity
|
|
42
|
+
const id = new _minim.StringElement(this.generateId());
|
|
43
|
+
this.identityMap.set(element, id);
|
|
44
|
+
return id;
|
|
45
|
+
}
|
|
46
|
+
forget(element) {
|
|
47
|
+
if (this.identityMap.has(element)) {
|
|
48
|
+
this.identityMap.delete(element);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
generateId() {
|
|
54
|
+
return this.uuid.randomUUID();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @public
|
|
60
|
+
*/
|
|
61
|
+
exports.IdentityManager = IdentityManager;
|
|
62
|
+
const defaultIdentityManager = exports.defaultIdentityManager = new IdentityManager();
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { StringElement } from 'minim';
|
|
2
|
+
import ShortUniqueId from 'short-unique-id';
|
|
3
|
+
import ElementIdentityError from "./errors/ElementIdentityError.mjs";
|
|
4
|
+
import { isElement, isStringElement } from "../predicates/index.mjs";
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export class IdentityManager {
|
|
9
|
+
uuid;
|
|
10
|
+
identityMap;
|
|
11
|
+
constructor({
|
|
12
|
+
length = 6
|
|
13
|
+
} = {}) {
|
|
14
|
+
this.uuid = new ShortUniqueId({
|
|
15
|
+
length
|
|
16
|
+
});
|
|
17
|
+
this.identityMap = new WeakMap();
|
|
18
|
+
}
|
|
19
|
+
identify(element) {
|
|
20
|
+
if (!isElement(element)) {
|
|
21
|
+
throw new ElementIdentityError('Cannot not identify the element. `element` is neither structurally compatible nor a subclass of an Element class.', {
|
|
22
|
+
value: element
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// use already assigned identity
|
|
27
|
+
if (element.meta.hasKey('id') && isStringElement(element.meta.get('id')) && !element.meta.get('id').equals('')) {
|
|
28
|
+
return element.id;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// assign identity in immutable way
|
|
32
|
+
if (this.identityMap.has(element)) {
|
|
33
|
+
return this.identityMap.get(element);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// return element identity
|
|
37
|
+
const id = new StringElement(this.generateId());
|
|
38
|
+
this.identityMap.set(element, id);
|
|
39
|
+
return id;
|
|
40
|
+
}
|
|
41
|
+
forget(element) {
|
|
42
|
+
if (this.identityMap.has(element)) {
|
|
43
|
+
this.identityMap.delete(element);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
generateId() {
|
|
49
|
+
return this.uuid.randomUUID();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @public
|
|
55
|
+
*/
|
|
56
|
+
export const defaultIdentityManager = new IdentityManager();
|
package/src/index.cjs
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
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.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
|
+
var _index = require("./refractor/plugins/dispatcher/index.cjs");
|
|
8
|
+
exports.dispatchRefractorPlugins = _index.dispatchPluginsSync;
|
|
9
|
+
var _elementIdentity = _interopRequireDefault(require("./refractor/plugins/element-identity.cjs"));
|
|
10
|
+
exports.refractorPluginElementIdentity = _elementIdentity.default;
|
|
11
|
+
var _semanticElementIdentity = _interopRequireDefault(require("./refractor/plugins/semantic-element-identity.cjs"));
|
|
12
|
+
exports.refractorPluginSemanticElementIdentity = _semanticElementIdentity.default;
|
|
13
|
+
var _mediaTypes = _interopRequireDefault(require("./media-types.cjs"));
|
|
14
|
+
exports.MediaTypes = _mediaTypes.default;
|
|
15
|
+
var _minim = require("minim");
|
|
16
|
+
exports.Element = _minim.Element;
|
|
17
|
+
exports.MemberElement = _minim.MemberElement;
|
|
18
|
+
exports.KeyValuePair = _minim.KeyValuePair;
|
|
19
|
+
exports.ObjectSlice = _minim.ObjectSlice;
|
|
20
|
+
exports.ArraySlice = _minim.ArraySlice;
|
|
21
|
+
exports.refract = _minim.refract;
|
|
22
|
+
var _namespace = _interopRequireWildcard(require("./namespace.cjs"));
|
|
23
|
+
exports.namespace = _namespace.default;
|
|
24
|
+
exports.Namespace = _namespace.Namespace;
|
|
25
|
+
exports.createNamespace = _namespace.createNamespace;
|
|
26
|
+
var _registration = require("./refractor/registration.cjs");
|
|
27
|
+
exports.ObjectElement = _registration.ObjectElement;
|
|
28
|
+
exports.ArrayElement = _registration.ArrayElement;
|
|
29
|
+
exports.BooleanElement = _registration.BooleanElement;
|
|
30
|
+
exports.NullElement = _registration.NullElement;
|
|
31
|
+
exports.NumberElement = _registration.NumberElement;
|
|
32
|
+
exports.StringElement = _registration.StringElement;
|
|
33
|
+
exports.LinkElement = _registration.LinkElement;
|
|
34
|
+
exports.RefElement = _registration.RefElement;
|
|
35
|
+
exports.AnnotationElement = _registration.AnnotationElement;
|
|
36
|
+
exports.CommentElement = _registration.CommentElement;
|
|
37
|
+
exports.ParseResultElement = _registration.ParseResultElement;
|
|
38
|
+
exports.SourceMapElement = _registration.SourceMapElement;
|
|
39
|
+
var _index2 = require("./predicates/index.cjs");
|
|
40
|
+
exports.isElement = _index2.isElement;
|
|
41
|
+
exports.isStringElement = _index2.isStringElement;
|
|
42
|
+
exports.isNumberElement = _index2.isNumberElement;
|
|
43
|
+
exports.isNullElement = _index2.isNullElement;
|
|
44
|
+
exports.isBooleanElement = _index2.isBooleanElement;
|
|
45
|
+
exports.isArrayElement = _index2.isArrayElement;
|
|
46
|
+
exports.isObjectElement = _index2.isObjectElement;
|
|
47
|
+
exports.isMemberElement = _index2.isMemberElement;
|
|
48
|
+
exports.isLinkElement = _index2.isLinkElement;
|
|
49
|
+
exports.isRefElement = _index2.isRefElement;
|
|
50
|
+
exports.isAnnotationElement = _index2.isAnnotationElement;
|
|
51
|
+
exports.isParseResultElement = _index2.isParseResultElement;
|
|
52
|
+
exports.isSourceMapElement = _index2.isSourceMapElement;
|
|
53
|
+
exports.isPrimitiveElement = _index2.isPrimitiveElement;
|
|
54
|
+
exports.hasElementSourceMap = _index2.hasElementSourceMap;
|
|
55
|
+
exports.includesSymbols = _index2.includesSymbols;
|
|
56
|
+
exports.includesClasses = _index2.includesClasses;
|
|
57
|
+
var _helpers = _interopRequireDefault(require("./predicates/helpers.cjs"));
|
|
58
|
+
exports.createPredicate = _helpers.default;
|
|
59
|
+
var _index3 = require("./traversal/index.cjs");
|
|
60
|
+
exports.filter = _index3.filter;
|
|
61
|
+
exports.reject = _index3.reject;
|
|
62
|
+
exports.find = _index3.find;
|
|
63
|
+
exports.findAtOffset = _index3.findAtOffset;
|
|
64
|
+
exports.some = _index3.some;
|
|
65
|
+
exports.traverse = _index3.traverse;
|
|
66
|
+
exports.parents = _index3.parents;
|
|
67
|
+
var _visitor = require("./traversal/visitor.cjs");
|
|
68
|
+
exports.visit = _visitor.visit;
|
|
69
|
+
exports.BREAK = _visitor.BREAK;
|
|
70
|
+
exports.mergeAllVisitors = _visitor.mergeAllVisitors;
|
|
71
|
+
exports.getNodeType = _visitor.getNodeType;
|
|
72
|
+
exports.cloneNode = _visitor.cloneNode;
|
|
73
|
+
exports.keyMap = _visitor.keyMapDefault;
|
|
74
|
+
var _index4 = _interopRequireWildcard(require("./transcluder/index.cjs"));
|
|
75
|
+
exports.transclude = _index4.transclude;
|
|
76
|
+
exports.Transcluder = _index4.default;
|
|
77
|
+
var _util = require("./util.cjs");
|
|
78
|
+
exports.dereference = _util.dereference;
|
|
79
|
+
var _index5 = require("./clone/index.cjs");
|
|
80
|
+
exports.cloneShallow = _index5.cloneShallow;
|
|
81
|
+
exports.cloneDeep = _index5.cloneDeep;
|
|
82
|
+
var _CloneError = _interopRequireDefault(require("./clone/errors/CloneError.cjs"));
|
|
83
|
+
exports.CloneError = _CloneError.default;
|
|
84
|
+
var _DeepCloneError = _interopRequireDefault(require("./clone/errors/DeepCloneError.cjs"));
|
|
85
|
+
exports.DeepCloneError = _DeepCloneError.default;
|
|
86
|
+
var _ShallowCloneError = _interopRequireDefault(require("./clone/errors/ShallowCloneError.cjs"));
|
|
87
|
+
exports.ShallowCloneError = _ShallowCloneError.default;
|
|
88
|
+
var _index6 = require("./identity/index.cjs");
|
|
89
|
+
exports.defaultIdentityManager = _index6.defaultIdentityManager;
|
|
90
|
+
exports.IdentityManager = _index6.IdentityManager;
|
|
91
|
+
var _ElementIdentityError = _interopRequireDefault(require("./identity/errors/ElementIdentityError.cjs"));
|
|
92
|
+
exports.ElementIdentityError = _ElementIdentityError.default;
|
|
93
|
+
var _from = _interopRequireDefault(require("./transformers/from.cjs"));
|
|
94
|
+
exports.from = _from.default;
|
|
95
|
+
var _index7 = _interopRequireDefault(require("./transformers/serializers/value/index.cjs"));
|
|
96
|
+
exports.toValue = _index7.default;
|
|
97
|
+
var _json = _interopRequireDefault(require("./transformers/serializers/json.cjs"));
|
|
98
|
+
exports.toJSON = _json.default;
|
|
99
|
+
var _yaml = _interopRequireDefault(require("./transformers/serializers/yaml-1-2.cjs"));
|
|
100
|
+
exports.toYAML = _yaml.default;
|
|
101
|
+
var _dehydrate = _interopRequireDefault(require("./transformers/dehydrate.cjs"));
|
|
102
|
+
exports.dehydrate = _dehydrate.default;
|
|
103
|
+
var _toString = _interopRequireDefault(require("./transformers/to-string.cjs"));
|
|
104
|
+
exports.toString = _toString.default;
|
|
105
|
+
var _sexprs = _interopRequireDefault(require("./transformers/sexprs.cjs"));
|
|
106
|
+
exports.sexprs = _sexprs.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;
|