@swagger-api/apidom-core 0.68.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +366 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/LICENSES/MIT.txt +9 -0
  4. package/README.md +679 -0
  5. package/cjs/deepmerge.cjs +87 -0
  6. package/cjs/elements/Annotation.cjs +21 -0
  7. package/cjs/elements/Comment.cjs +13 -0
  8. package/cjs/elements/ParseResult.cjs +51 -0
  9. package/cjs/elements/SourceMap.cjs +29 -0
  10. package/cjs/index.cjs +144 -0
  11. package/cjs/media-types.cjs +24 -0
  12. package/cjs/namespace.cjs +32 -0
  13. package/cjs/predicates/helpers.cjs +28 -0
  14. package/cjs/predicates/index.cjs +149 -0
  15. package/cjs/refractor/index.cjs +37 -0
  16. package/cjs/refractor/plugins/element-identity.cjs +36 -0
  17. package/cjs/refractor/plugins/semantic-element-identity.cjs +36 -0
  18. package/cjs/refractor/plugins/utils/index.cjs +26 -0
  19. package/cjs/refractor/registration.cjs +34 -0
  20. package/cjs/refractor/toolbox.cjs +20 -0
  21. package/cjs/serializers/json.cjs +9 -0
  22. package/cjs/serializers/value/ast/ephemeral-array.cjs +22 -0
  23. package/cjs/serializers/value/ast/ephemeral-object.cjs +21 -0
  24. package/cjs/serializers/value/index.cjs +67 -0
  25. package/cjs/serializers/value/visitor.cjs +54 -0
  26. package/cjs/serializers/yaml-1-2.cjs +93 -0
  27. package/cjs/sexprs.cjs +38 -0
  28. package/cjs/transcluder/Transcluder.cjs +110 -0
  29. package/cjs/transcluder/index.cjs +19 -0
  30. package/cjs/traversal/filter.cjs +20 -0
  31. package/cjs/traversal/find.cjs +20 -0
  32. package/cjs/traversal/findAtOffset.cjs +71 -0
  33. package/cjs/traversal/index.cjs +19 -0
  34. package/cjs/traversal/parents.cjs +47 -0
  35. package/cjs/traversal/reject.cjs +14 -0
  36. package/cjs/traversal/some.cjs +15 -0
  37. package/cjs/traversal/traverse.cjs +54 -0
  38. package/cjs/traversal/visitor.cjs +114 -0
  39. package/cjs/util.cjs +27 -0
  40. package/dist/apidom-core.browser.js +30952 -0
  41. package/dist/apidom-core.browser.min.js +1 -0
  42. package/es/deepmerge.js +84 -0
  43. package/es/elements/Annotation.js +16 -0
  44. package/es/elements/Comment.js +8 -0
  45. package/es/elements/ParseResult.js +46 -0
  46. package/es/elements/SourceMap.js +24 -0
  47. package/es/index.js +72 -0
  48. package/es/media-types.js +22 -0
  49. package/es/namespace.js +24 -0
  50. package/es/predicates/helpers.js +22 -0
  51. package/es/predicates/index.js +124 -0
  52. package/es/refractor/index.js +32 -0
  53. package/es/refractor/plugins/element-identity.js +30 -0
  54. package/es/refractor/plugins/semantic-element-identity.js +34 -0
  55. package/es/refractor/plugins/utils/index.js +19 -0
  56. package/es/refractor/registration.js +19 -0
  57. package/es/refractor/toolbox.js +13 -0
  58. package/es/serializers/json.js +3 -0
  59. package/es/serializers/value/ast/ephemeral-array.js +18 -0
  60. package/es/serializers/value/ast/ephemeral-object.js +17 -0
  61. package/es/serializers/value/index.js +61 -0
  62. package/es/serializers/value/visitor.js +54 -0
  63. package/es/serializers/yaml-1-2.js +87 -0
  64. package/es/sexprs.js +32 -0
  65. package/es/transcluder/Transcluder.js +104 -0
  66. package/es/transcluder/index.js +12 -0
  67. package/es/traversal/filter.js +14 -0
  68. package/es/traversal/find.js +14 -0
  69. package/es/traversal/findAtOffset.js +65 -0
  70. package/es/traversal/index.js +7 -0
  71. package/es/traversal/parents.js +40 -0
  72. package/es/traversal/reject.js +7 -0
  73. package/es/traversal/some.js +8 -0
  74. package/es/traversal/traverse.js +47 -0
  75. package/es/traversal/visitor.js +110 -0
  76. package/es/util.js +23 -0
  77. package/package.json +65 -0
  78. package/types/dist.d.ts +260 -0
  79. package/types/minim.d.ts +222 -0
@@ -0,0 +1,22 @@
1
+ const hasMethod = (name, obj) => typeof (obj === null || obj === void 0 ? void 0 : obj[name]) === 'function';
2
+ const hasBasicElementProps = element => element != null && Object.prototype.hasOwnProperty.call(element, '_storedElement') && Object.prototype.hasOwnProperty.call(element, '_content');
3
+ const primitiveEq = (val, obj) => {
4
+ var _obj$primitive;
5
+ return (obj === null || obj === void 0 ? void 0 : (_obj$primitive = obj.primitive) === null || _obj$primitive === void 0 ? void 0 : _obj$primitive.call(obj)) === val;
6
+ };
7
+ const hasClass = (cls, obj) => {
8
+ var _obj$classes, _obj$classes$includes;
9
+ return (obj === null || obj === void 0 ? void 0 : (_obj$classes = obj.classes) === null || _obj$classes === void 0 ? void 0 : (_obj$classes$includes = _obj$classes.includes) === null || _obj$classes$includes === void 0 ? void 0 : _obj$classes$includes.call(_obj$classes, cls)) || false;
10
+ };
11
+ export const isElementType = (name, element) => (element === null || element === void 0 ? void 0 : element.element) === name;
12
+ const createPredicate = predicateCreator => {
13
+ // @ts-ignore
14
+ return predicateCreator({
15
+ hasMethod,
16
+ hasBasicElementProps,
17
+ primitiveEq,
18
+ isElementType,
19
+ hasClass
20
+ });
21
+ };
22
+ export default createPredicate;
@@ -0,0 +1,124 @@
1
+ import { Element, StringElement, NumberElement, NullElement, BooleanElement, ArrayElement, ObjectElement, MemberElement, LinkElement, RefElement } from 'minim';
2
+ import { all } from 'ramda';
3
+ import { included } from 'ramda-adjunct';
4
+ import AnnotationElement from "../elements/Annotation.js";
5
+ import CommentElement from "../elements/Comment.js";
6
+ import ParserResultElement from "../elements/ParseResult.js";
7
+ import SourceMapElement from "../elements/SourceMap.js";
8
+ import createPredicate, { isElementType as isElementTypeHelper } from "./helpers.js";
9
+ export const isElement = createPredicate(({
10
+ hasBasicElementProps,
11
+ primitiveEq
12
+ }) => {
13
+ return element => element instanceof Element || hasBasicElementProps(element) && primitiveEq(undefined, element);
14
+ });
15
+ export const isStringElement = createPredicate(({
16
+ hasBasicElementProps,
17
+ primitiveEq
18
+ }) => {
19
+ return element => element instanceof StringElement || hasBasicElementProps(element) && primitiveEq('string', element);
20
+ });
21
+ export const isNumberElement = createPredicate(({
22
+ hasBasicElementProps,
23
+ primitiveEq
24
+ }) => {
25
+ return element => element instanceof NumberElement || hasBasicElementProps(element) && primitiveEq('number', element);
26
+ });
27
+ export const isNullElement = createPredicate(({
28
+ hasBasicElementProps,
29
+ primitiveEq
30
+ }) => {
31
+ return element => element instanceof NullElement || hasBasicElementProps(element) && primitiveEq('null', element);
32
+ });
33
+ export const isBooleanElement = createPredicate(({
34
+ hasBasicElementProps,
35
+ primitiveEq
36
+ }) => {
37
+ return element => element instanceof BooleanElement || hasBasicElementProps(element) && primitiveEq('boolean', element);
38
+ });
39
+ export const isObjectElement = createPredicate(({
40
+ hasBasicElementProps,
41
+ primitiveEq,
42
+ hasMethod
43
+ }) => {
44
+ return element => element instanceof ObjectElement || hasBasicElementProps(element) && primitiveEq('object', element) && hasMethod('keys', element) && hasMethod('values', element) && hasMethod('items', element);
45
+ });
46
+ export const isArrayElement = createPredicate(({
47
+ hasBasicElementProps,
48
+ primitiveEq,
49
+ hasMethod
50
+ }) => {
51
+ return element => element instanceof ArrayElement && !(element instanceof ObjectElement) || hasBasicElementProps(element) && primitiveEq('array', element) && hasMethod('push', element) && hasMethod('unshift', element) && hasMethod('map', element) && hasMethod('reduce', element);
52
+ });
53
+ export const isMemberElement = createPredicate(({
54
+ hasBasicElementProps,
55
+ isElementType,
56
+ primitiveEq
57
+ }) => {
58
+ return element => element instanceof MemberElement || hasBasicElementProps(element) && isElementType('member', element) && primitiveEq(undefined, element);
59
+ });
60
+ export const isLinkElement = createPredicate(({
61
+ hasBasicElementProps,
62
+ isElementType,
63
+ primitiveEq
64
+ }) => {
65
+ return element => element instanceof LinkElement || hasBasicElementProps(element) && isElementType('link', element) && primitiveEq(undefined, element);
66
+ });
67
+ export const isRefElement = createPredicate(({
68
+ hasBasicElementProps,
69
+ isElementType,
70
+ primitiveEq
71
+ }) => {
72
+ return element => element instanceof RefElement || hasBasicElementProps(element) && isElementType('ref', element) && primitiveEq(undefined, element);
73
+ });
74
+ export const isAnnotationElement = createPredicate(({
75
+ hasBasicElementProps,
76
+ isElementType,
77
+ primitiveEq
78
+ }) => {
79
+ return element => element instanceof AnnotationElement || hasBasicElementProps(element) && isElementType('annotation', element) && primitiveEq('array', element);
80
+ });
81
+ export const isCommentElement = createPredicate(({
82
+ hasBasicElementProps,
83
+ isElementType,
84
+ primitiveEq
85
+ }) => {
86
+ return element => element instanceof CommentElement || hasBasicElementProps(element) && isElementType('comment', element) && primitiveEq('string', element);
87
+ });
88
+ export const isParseResultElement = createPredicate(({
89
+ hasBasicElementProps,
90
+ isElementType,
91
+ primitiveEq
92
+ }) => {
93
+ return element => element instanceof ParserResultElement || hasBasicElementProps(element) && isElementType('parseResult', element) && primitiveEq('array', element);
94
+ });
95
+ export const isSourceMapElement = createPredicate(({
96
+ hasBasicElementProps,
97
+ isElementType,
98
+ primitiveEq
99
+ }) => {
100
+ return element => element instanceof SourceMapElement || hasBasicElementProps(element) && isElementType('sourceMap', element) && primitiveEq('array', element);
101
+ });
102
+ export const isPrimitiveElement = element => {
103
+ return isElementTypeHelper('object', element) || isElementTypeHelper('array', element) || isElementTypeHelper('boolean', element) || isElementTypeHelper('number', element) || isElementTypeHelper('string', element) || isElementTypeHelper('null', element) || isElementTypeHelper('member', element);
104
+ };
105
+ export const hasElementSourceMap = element => {
106
+ var _element$meta, _element$meta$get;
107
+ return isSourceMapElement(element === null || element === void 0 ? void 0 : (_element$meta = element.meta) === null || _element$meta === void 0 ? void 0 : (_element$meta$get = _element$meta.get) === null || _element$meta$get === void 0 ? void 0 : _element$meta$get.call(_element$meta, 'sourceMap'));
108
+ };
109
+ export const includesSymbols = (symbols, element) => {
110
+ if (symbols.length === 0) {
111
+ return true;
112
+ }
113
+ const elementSymbols = element.attributes.get('symbols');
114
+ if (!isArrayElement(elementSymbols)) {
115
+ return false;
116
+ }
117
+ return all(included(elementSymbols.toValue()), symbols);
118
+ };
119
+ export const includesClasses = (classes, element) => {
120
+ if (classes.length === 0) {
121
+ return true;
122
+ }
123
+ return all(included(element.classes.toValue()), classes);
124
+ };
@@ -0,0 +1,32 @@
1
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ import { dispatchPlugins } from "./plugins/utils/index.js";
5
+ import { getNodeType } from "../traversal/visitor.js";
6
+ import createToolbox from "./toolbox.js";
7
+ const refract = (value, {
8
+ Type,
9
+ plugins = []
10
+ }) => {
11
+ /**
12
+ * This is where values gets refracted into generic ApiDOM.
13
+ * We don't allow consumers to hook into this translation.
14
+ * Though we allow consumers to define their onw plugins on already transformed ApiDOM.
15
+ */
16
+ const element = new Type(value);
17
+
18
+ /**
19
+ * Run plugins only when necessary.
20
+ * Running plugins visitors means extra single traversal === performance hit.
21
+ */
22
+ return dispatchPlugins(element, plugins, {
23
+ toolboxCreator: createToolbox,
24
+ visitorOptions: {
25
+ nodeTypeGetter: getNodeType
26
+ }
27
+ });
28
+ };
29
+ export const createRefractor = Type => (value, options = {}) => refract(value, _objectSpread(_objectSpread({}, options), {}, {
30
+ Type
31
+ }));
32
+ export default refract;
@@ -0,0 +1,30 @@
1
+ // @ts-ignore
2
+ import ShortUniqueId from 'short-unique-id';
3
+ import { StringElement } from 'minim';
4
+
5
+ /**
6
+ * Plugin for decorating every element in ApiDOM tree with UUID.
7
+ */
8
+
9
+ const plugin = ({
10
+ length = 6
11
+ } = {}) => () => {
12
+ let uuid;
13
+ return {
14
+ pre() {
15
+ uuid = new ShortUniqueId({
16
+ length
17
+ });
18
+ },
19
+ visitor: {
20
+ enter(element) {
21
+ // eslint-disable-next-line no-param-reassign
22
+ element.id = new StringElement(uuid());
23
+ }
24
+ },
25
+ post() {
26
+ uuid = null;
27
+ }
28
+ };
29
+ };
30
+ export default plugin;
@@ -0,0 +1,34 @@
1
+ // @ts-ignore
2
+ import ShortUniqueId from 'short-unique-id';
3
+ import { StringElement } from 'minim';
4
+
5
+ /**
6
+ * Plugin for decorating every semantic element in ApiDOM tree with UUID.
7
+ */
8
+
9
+ const plugin = ({
10
+ length = 6
11
+ } = {}) => ({
12
+ predicates
13
+ }) => {
14
+ let uuid;
15
+ return {
16
+ pre() {
17
+ uuid = new ShortUniqueId({
18
+ length
19
+ });
20
+ },
21
+ visitor: {
22
+ enter(element) {
23
+ if (!predicates.isPrimitiveElement(element)) {
24
+ // eslint-disable-next-line no-param-reassign
25
+ element.id = new StringElement(uuid());
26
+ }
27
+ }
28
+ },
29
+ post() {
30
+ uuid = null;
31
+ }
32
+ };
33
+ };
34
+ export default plugin;
@@ -0,0 +1,19 @@
1
+ import { propOr } from 'ramda';
2
+ import { invokeArgs } from 'ramda-adjunct';
3
+ import createToolbox from "../../toolbox.js";
4
+ import { getNodeType, mergeAllVisitors, visit } from "../../../traversal/visitor.js"; // eslint-disable-next-line import/prefer-default-export
5
+ export const dispatchPlugins = (element, plugins, options = {}) => {
6
+ if (plugins.length === 0) return element;
7
+ const toolboxCreator = propOr(createToolbox, 'toolboxCreator', options);
8
+ const visitorOptions = propOr({}, 'visitorOptions', options);
9
+ const nodeTypeGetter = propOr(getNodeType, 'nodeTypeGetter', visitorOptions);
10
+ const toolbox = toolboxCreator();
11
+ const pluginsSpecs = plugins.map(plugin => plugin(toolbox));
12
+ const pluginsVisitor = mergeAllVisitors(pluginsSpecs.map(propOr({}, 'visitor')), {
13
+ nodeTypeGetter
14
+ });
15
+ pluginsSpecs.forEach(invokeArgs(['pre'], []));
16
+ const newElement = visit(element, pluginsVisitor, visitorOptions);
17
+ pluginsSpecs.forEach(invokeArgs(['post'], []));
18
+ return newElement;
19
+ };
@@ -0,0 +1,19 @@
1
+ import { ObjectElement, ArrayElement, StringElement, BooleanElement, NullElement, NumberElement, LinkElement, RefElement } from 'minim';
2
+ import AnnotationElement from "../elements/Annotation.js";
3
+ import CommentElement from "../elements/Comment.js";
4
+ import ParseResultElement from "../elements/ParseResult.js";
5
+ import SourceMapElement from "../elements/SourceMap.js";
6
+ import { createRefractor } from "./index.js";
7
+ ObjectElement.refract = createRefractor(ObjectElement);
8
+ ArrayElement.refract = createRefractor(ArrayElement);
9
+ StringElement.refract = createRefractor(StringElement);
10
+ BooleanElement.refract = createRefractor(BooleanElement);
11
+ NullElement.refract = createRefractor(NullElement);
12
+ NumberElement.refract = createRefractor(NumberElement);
13
+ LinkElement.refract = createRefractor(LinkElement);
14
+ RefElement.refract = createRefractor(RefElement);
15
+ AnnotationElement.refract = createRefractor(AnnotationElement);
16
+ CommentElement.refract = createRefractor(CommentElement);
17
+ ParseResultElement.refract = createRefractor(ParseResultElement);
18
+ SourceMapElement.refract = createRefractor(SourceMapElement);
19
+ export { ObjectElement, ArrayElement, StringElement, BooleanElement, NullElement, NumberElement, LinkElement, RefElement, AnnotationElement, CommentElement, ParseResultElement, SourceMapElement };
@@ -0,0 +1,13 @@
1
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ import * as basePredicates from "../predicates/index.js";
5
+ import defaultNamespaceInstance from "../namespace.js";
6
+ const createToolbox = () => {
7
+ const predicates = _objectSpread({}, basePredicates);
8
+ return {
9
+ predicates,
10
+ namespace: defaultNamespaceInstance
11
+ };
12
+ };
13
+ export default createToolbox;
@@ -0,0 +1,3 @@
1
+ import serializeValue from "./value/index.js";
2
+ const serializer = element => JSON.stringify(serializeValue(element));
3
+ export default serializer;
@@ -0,0 +1,18 @@
1
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
2
+ class EphemeralArray {
3
+ constructor(content) {
4
+ _defineProperty(this, "type", 'EphemeralArray');
5
+ _defineProperty(this, "content", []);
6
+ _defineProperty(this, "reference", undefined);
7
+ this.content = content;
8
+ this.reference = [];
9
+ }
10
+ toReference() {
11
+ return this.reference;
12
+ }
13
+ toArray() {
14
+ this.reference.push(...this.content);
15
+ return this.reference;
16
+ }
17
+ }
18
+ export default EphemeralArray;
@@ -0,0 +1,17 @@
1
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
2
+ class EphemeralObject {
3
+ constructor(content) {
4
+ _defineProperty(this, "type", 'EphemeralObject');
5
+ _defineProperty(this, "content", []);
6
+ _defineProperty(this, "reference", undefined);
7
+ this.content = content;
8
+ this.reference = {};
9
+ }
10
+ toReference() {
11
+ return this.reference;
12
+ }
13
+ toObject() {
14
+ return Object.assign(this.reference, Object.fromEntries(this.content));
15
+ }
16
+ }
17
+ export default EphemeralObject;
@@ -0,0 +1,61 @@
1
+ import stampit from 'stampit';
2
+ import { visit } from "./visitor.js";
3
+ import EphemeralArray from "./ast/ephemeral-array.js";
4
+ import EphemeralObject from "./ast/ephemeral-object.js";
5
+ /* eslint-disable @typescript-eslint/naming-convention */
6
+ const Visitor = stampit.init(function _Visitor() {
7
+ const references = new WeakMap();
8
+ this.BooleanElement = function _BooleanElement(element) {
9
+ return element.toValue();
10
+ };
11
+ this.NumberElement = function _NumberElement(element) {
12
+ return element.toValue();
13
+ };
14
+ this.StringElement = function _StringElement(element) {
15
+ return element.toValue();
16
+ };
17
+ this.NullElement = function _NullElement() {
18
+ return null;
19
+ };
20
+ this.ObjectElement = {
21
+ enter(element) {
22
+ if (references.has(element)) {
23
+ return references.get(element).toReference();
24
+ }
25
+ const ephemeral = new EphemeralObject(element.content);
26
+ references.set(element, ephemeral);
27
+ return ephemeral;
28
+ }
29
+ };
30
+ this.EphemeralObject = {
31
+ leave(ephemeral) {
32
+ return ephemeral.toObject();
33
+ }
34
+ };
35
+ this.MemberElement = {
36
+ enter(element) {
37
+ return [element.key, element.value];
38
+ }
39
+ };
40
+ this.ArrayElement = {
41
+ enter(element) {
42
+ if (references.has(element)) {
43
+ return references.get(element).toReference();
44
+ }
45
+ const ephemeral = new EphemeralArray(element.content);
46
+ references.set(element, ephemeral);
47
+ return ephemeral;
48
+ }
49
+ };
50
+ this.EphemeralArray = {
51
+ leave(ephemeral) {
52
+ return ephemeral.toArray();
53
+ }
54
+ };
55
+ });
56
+ /* eslint-enable */
57
+
58
+ const serializer = element => {
59
+ return visit(element, Visitor());
60
+ };
61
+ export default serializer;
@@ -0,0 +1,54 @@
1
+ import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
2
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
3
+ const _excluded = ["keyMap"],
4
+ _excluded2 = ["keyMap"];
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+ import { T as stubTrue } from 'ramda';
8
+ import { visit as astVisit, keyMapDefault as baseKeyMap, getNodeType as baseGetNodeType } from "../../traversal/visitor.js";
9
+ const nodeTypeGetter = node => {
10
+ if (typeof (node === null || node === void 0 ? void 0 : node.type) === 'string') {
11
+ return node.type;
12
+ }
13
+ return baseGetNodeType(node);
14
+ };
15
+ const keyMapDefault = _objectSpread({
16
+ EphemeralObject: ['content'],
17
+ EphemeralArray: ['content']
18
+ }, baseKeyMap);
19
+
20
+ // eslint-disable-next-line import/prefer-default-export
21
+ export const visit = (root,
22
+ // @ts-ignore
23
+ visitor, _ref = {}) => {
24
+ let {
25
+ keyMap = keyMapDefault
26
+ } = _ref,
27
+ rest = _objectWithoutProperties(_ref, _excluded);
28
+ return astVisit(root, visitor, _objectSpread({
29
+ keyMap,
30
+ // @ts-ignore
31
+ nodeTypeGetter,
32
+ nodePredicate: stubTrue,
33
+ detectCycles: false,
34
+ deleteNodeSymbol: Symbol.for('delete-node'),
35
+ skipVisitingNodeSymbol: Symbol.for('skip-visiting-node')
36
+ }, rest));
37
+ };
38
+
39
+ // @ts-ignore
40
+ visit[Symbol.for('nodejs.util.promisify.custom')] = async (root, _ref2 = {}) => {
41
+ let {
42
+ keyMap = keyMapDefault
43
+ } = _ref2,
44
+ rest = _objectWithoutProperties(_ref2, _excluded2);
45
+ // @ts-ignore
46
+ return astVisit[Symbol.for('nodejs.util.promisify.custom')](root, visitor, _objectSpread({
47
+ keyMap,
48
+ nodeTypeGetter,
49
+ nodePredicate: stubTrue,
50
+ detectCycles: false,
51
+ deleteNodeSymbol: Symbol.for('delete-node'),
52
+ skipVisitingNodeSymbol: Symbol.for('skip-visiting-node')
53
+ }, rest));
54
+ };
@@ -0,0 +1,87 @@
1
+ import stampit from 'stampit';
2
+ import { visit } from "../traversal/visitor.js";
3
+ import serializeValue from "./value/index.js";
4
+ const YamlVisitor = stampit({
5
+ props: {
6
+ result: '',
7
+ indent: 0,
8
+ indentChar: ' '
9
+ },
10
+ init({
11
+ signature = '',
12
+ indent = 0,
13
+ indentChar = ' '
14
+ } = {}) {
15
+ this.result = signature;
16
+ this.indent = indent;
17
+ this.indentChard = indentChar;
18
+ },
19
+ methods: {
20
+ NumberElement(element) {
21
+ this.result += serializeValue(element);
22
+ },
23
+ BooleanElement(element) {
24
+ const value = serializeValue(element);
25
+ this.result += value ? 'true' : 'false';
26
+ },
27
+ StringElement(element) {
28
+ // for simplicity and avoiding ambiguity we always wrap strings in quotes
29
+ this.result += JSON.stringify(serializeValue(element));
30
+ },
31
+ NullElement() {
32
+ this.result += 'null';
33
+ },
34
+ ArrayElement(element) {
35
+ if (element.length === 0) {
36
+ this.result += '[]';
37
+ return false;
38
+ }
39
+ element.forEach(item => {
40
+ const visitor = YamlVisitor({
41
+ indent: this.indent + 1
42
+ });
43
+ const indent = this.indentChar.repeat(this.indent);
44
+ visit(item, visitor);
45
+ const {
46
+ result
47
+ } = visitor;
48
+ this.result += result.startsWith('\n') ? `\n${indent}-${visitor.result}` : `\n${indent}- ${visitor.result}`;
49
+ });
50
+ return false;
51
+ },
52
+ ObjectElement(element) {
53
+ if (element.length === 0) {
54
+ this.result += '{}';
55
+ return false;
56
+ }
57
+ element.forEach((value, key) => {
58
+ const keyVisitor = YamlVisitor({
59
+ indent: this.indent + 1
60
+ });
61
+ const valueVisitor = YamlVisitor({
62
+ indent: this.indent + 1
63
+ });
64
+ const indent = this.indentChar.repeat(this.indent);
65
+ visit(key, keyVisitor);
66
+ visit(value, valueVisitor);
67
+ const {
68
+ result: keyResult
69
+ } = keyVisitor;
70
+ const {
71
+ result: valueResult
72
+ } = valueVisitor;
73
+ this.result += valueResult.startsWith('\n') ? `\n${indent}${keyResult}:${valueResult}` : `\n${indent}${keyResult}: ${valueResult}`;
74
+ });
75
+ return false;
76
+ }
77
+ }
78
+ });
79
+ const serializer = element => {
80
+ const signature = '%YAML 1.2\n---\n';
81
+ const visitor = YamlVisitor({
82
+ signature
83
+ });
84
+ visit(element, visitor);
85
+ return visitor.result;
86
+ };
87
+ export default serializer;
package/es/sexprs.js ADDED
@@ -0,0 +1,32 @@
1
+ import stampit from 'stampit';
2
+ import { visit } from "./traversal/visitor.js";
3
+ const SymbolicExpressionsVisitor = stampit({
4
+ props: {
5
+ nestingLevel: 0,
6
+ result: ''
7
+ },
8
+ methods: {
9
+ enter(element) {
10
+ const {
11
+ element: elementName
12
+ } = element;
13
+ const capitalizedElementName = elementName.charAt(0).toUpperCase() + elementName.slice(1);
14
+ const indent = ' '.repeat(this.nestingLevel);
15
+ this.result += this.nestingLevel > 0 ? '\n' : '';
16
+ this.result += `${indent}(${capitalizedElementName}Element`;
17
+ this.nestingLevel += 1;
18
+ },
19
+ leave() {
20
+ this.nestingLevel -= 1;
21
+ this.result += ')';
22
+ }
23
+ }
24
+ });
25
+
26
+ // transforms ApiDOM into S-expressions (Symbolic Expressions)
27
+ const sexprs = element => {
28
+ const visitor = SymbolicExpressionsVisitor();
29
+ visit(element, visitor);
30
+ return visitor.result;
31
+ };
32
+ export default sexprs;