1 | "use strict";
|
---|
2 |
|
---|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
---|
4 |
|
---|
5 | Object.defineProperty(exports, "__esModule", {
|
---|
6 | value: true
|
---|
7 | });
|
---|
8 | exports.createChildren = createChildren;
|
---|
9 | exports.createClassNameString = createClassNameString;
|
---|
10 | exports.createStyleObject = createStyleObject;
|
---|
11 | exports["default"] = createElement;
|
---|
12 |
|
---|
13 | var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
---|
14 |
|
---|
15 | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
---|
16 |
|
---|
17 | var _react = _interopRequireDefault(require("react"));
|
---|
18 |
|
---|
19 | 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; }
|
---|
20 |
|
---|
21 | 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) { (0, _defineProperty2["default"])(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; }
|
---|
22 |
|
---|
23 | // Get all possible permutations of all power sets
|
---|
24 | //
|
---|
25 | // Super simple, non-algorithmic solution since the
|
---|
26 | // number of class names will not be greater than 4
|
---|
27 | function powerSetPermutations(arr) {
|
---|
28 | var arrLength = arr.length;
|
---|
29 | if (arrLength === 0 || arrLength === 1) return arr;
|
---|
30 |
|
---|
31 | if (arrLength === 2) {
|
---|
32 | // prettier-ignore
|
---|
33 | return [arr[0], arr[1], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0])];
|
---|
34 | }
|
---|
35 |
|
---|
36 | if (arrLength === 3) {
|
---|
37 | return [arr[0], arr[1], arr[2], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2]), "".concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0])];
|
---|
38 | }
|
---|
39 |
|
---|
40 | if (arrLength >= 4) {
|
---|
41 | // Currently does not support more than 4 extra
|
---|
42 | // class names (after `.token` has been removed)
|
---|
43 | return [arr[0], arr[1], arr[2], arr[3], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[3]), "".concat(arr[3], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[1], ".").concat(arr[0])];
|
---|
44 | }
|
---|
45 | }
|
---|
46 |
|
---|
47 | var classNameCombinations = {};
|
---|
48 |
|
---|
49 | function getClassNameCombinations(classNames) {
|
---|
50 | if (classNames.length === 0 || classNames.length === 1) return classNames;
|
---|
51 | var key = classNames.join('.');
|
---|
52 |
|
---|
53 | if (!classNameCombinations[key]) {
|
---|
54 | classNameCombinations[key] = powerSetPermutations(classNames);
|
---|
55 | }
|
---|
56 |
|
---|
57 | return classNameCombinations[key];
|
---|
58 | }
|
---|
59 |
|
---|
60 | function createStyleObject(classNames) {
|
---|
61 | var elementStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
---|
62 | var stylesheet = arguments.length > 2 ? arguments[2] : undefined;
|
---|
63 | var nonTokenClassNames = classNames.filter(function (className) {
|
---|
64 | return className !== 'token';
|
---|
65 | });
|
---|
66 | var classNamesCombinations = getClassNameCombinations(nonTokenClassNames);
|
---|
67 | return classNamesCombinations.reduce(function (styleObject, className) {
|
---|
68 | return _objectSpread(_objectSpread({}, styleObject), stylesheet[className]);
|
---|
69 | }, elementStyle);
|
---|
70 | }
|
---|
71 |
|
---|
72 | function createClassNameString(classNames) {
|
---|
73 | return classNames.join(' ');
|
---|
74 | }
|
---|
75 |
|
---|
76 | function createChildren(stylesheet, useInlineStyles) {
|
---|
77 | var childrenCount = 0;
|
---|
78 | return function (children) {
|
---|
79 | childrenCount += 1;
|
---|
80 | return children.map(function (child, i) {
|
---|
81 | return createElement({
|
---|
82 | node: child,
|
---|
83 | stylesheet: stylesheet,
|
---|
84 | useInlineStyles: useInlineStyles,
|
---|
85 | key: "code-segment-".concat(childrenCount, "-").concat(i)
|
---|
86 | });
|
---|
87 | });
|
---|
88 | };
|
---|
89 | }
|
---|
90 |
|
---|
91 | function createElement(_ref) {
|
---|
92 | var node = _ref.node,
|
---|
93 | stylesheet = _ref.stylesheet,
|
---|
94 | _ref$style = _ref.style,
|
---|
95 | style = _ref$style === void 0 ? {} : _ref$style,
|
---|
96 | useInlineStyles = _ref.useInlineStyles,
|
---|
97 | key = _ref.key;
|
---|
98 | var properties = node.properties,
|
---|
99 | type = node.type,
|
---|
100 | TagName = node.tagName,
|
---|
101 | value = node.value;
|
---|
102 |
|
---|
103 | if (type === 'text') {
|
---|
104 | return value;
|
---|
105 | } else if (TagName) {
|
---|
106 | var childrenCreator = createChildren(stylesheet, useInlineStyles);
|
---|
107 | var props;
|
---|
108 |
|
---|
109 | if (!useInlineStyles) {
|
---|
110 | props = _objectSpread(_objectSpread({}, properties), {}, {
|
---|
111 | className: createClassNameString(properties.className)
|
---|
112 | });
|
---|
113 | } else {
|
---|
114 | var allStylesheetSelectors = Object.keys(stylesheet).reduce(function (classes, selector) {
|
---|
115 | selector.split('.').forEach(function (className) {
|
---|
116 | if (!classes.includes(className)) classes.push(className);
|
---|
117 | });
|
---|
118 | return classes;
|
---|
119 | }, []); // For compatibility with older versions of react-syntax-highlighter
|
---|
120 |
|
---|
121 | var startingClassName = properties.className && properties.className.includes('token') ? ['token'] : [];
|
---|
122 | var className = properties.className && startingClassName.concat(properties.className.filter(function (className) {
|
---|
123 | return !allStylesheetSelectors.includes(className);
|
---|
124 | }));
|
---|
125 | props = _objectSpread(_objectSpread({}, properties), {}, {
|
---|
126 | className: createClassNameString(className) || undefined,
|
---|
127 | style: createStyleObject(properties.className, Object.assign({}, properties.style, style), stylesheet)
|
---|
128 | });
|
---|
129 | }
|
---|
130 |
|
---|
131 | var children = childrenCreator(node.children);
|
---|
132 | return /*#__PURE__*/_react["default"].createElement(TagName, (0, _extends2["default"])({
|
---|
133 | key: key
|
---|
134 | }, props), children);
|
---|
135 | }
|
---|
136 | } |
---|