@cocreate/utils 1.42.0 → 1.42.2

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 (65) hide show
  1. package/dist/cjs/ObjectId.js +54 -0
  2. package/dist/cjs/attributes.js +64 -0
  3. package/dist/cjs/checkValue.js +26 -0
  4. package/dist/cjs/clickedElement.js +48 -0
  5. package/dist/cjs/core.js +33 -0
  6. package/dist/cjs/createUpdate.js +188 -0
  7. package/dist/cjs/cssPath.js +60 -0
  8. package/dist/cjs/dataQuery.js +280 -0
  9. package/dist/cjs/dom.js +29 -0
  10. package/dist/cjs/domParser.js +44 -0
  11. package/dist/cjs/dotNotationToObject.js +103 -0
  12. package/dist/cjs/escapeHtml.js +25 -0
  13. package/dist/cjs/getRelativePath.js +39 -0
  14. package/dist/cjs/getValueFromObject.js +41 -0
  15. package/dist/cjs/index.js +112 -0
  16. package/dist/cjs/init-browser.js +4 -0
  17. package/dist/cjs/isValidDate.js +32 -0
  18. package/dist/cjs/objectToDotNotation.js +53 -0
  19. package/dist/cjs/objectToSearchParams.js +42 -0
  20. package/dist/cjs/operators copy.js +562 -0
  21. package/dist/cjs/operators.js +480 -0
  22. package/dist/cjs/parseTextToHtml.js +27 -0
  23. package/dist/cjs/queryElements.js +155 -0
  24. package/dist/cjs/safeParse.js +169 -0
  25. package/dist/cjs/uid.js +34 -0
  26. package/dist/esm/ObjectId.js +35 -0
  27. package/dist/esm/attributes.js +45 -0
  28. package/dist/esm/checkValue.js +7 -0
  29. package/dist/esm/clickedElement.js +29 -0
  30. package/dist/esm/core.js +14 -0
  31. package/dist/esm/createUpdate.js +185 -0
  32. package/dist/esm/cssPath.js +41 -0
  33. package/dist/esm/dataQuery.js +261 -0
  34. package/dist/esm/dom.js +10 -0
  35. package/dist/esm/domParser.js +25 -0
  36. package/dist/esm/dotNotationToObject.js +84 -0
  37. package/dist/esm/escapeHtml.js +6 -0
  38. package/dist/esm/getRelativePath.js +20 -0
  39. package/dist/esm/getValueFromObject.js +22 -0
  40. package/dist/esm/index.js +93 -0
  41. package/dist/esm/init-browser.js +4 -0
  42. package/dist/esm/isValidDate.js +13 -0
  43. package/dist/esm/objectToDotNotation.js +34 -0
  44. package/dist/esm/objectToSearchParams.js +23 -0
  45. package/dist/esm/operators copy.js +543 -0
  46. package/dist/esm/operators.js +461 -0
  47. package/dist/esm/package.json +3 -0
  48. package/dist/esm/parseTextToHtml.js +8 -0
  49. package/dist/esm/queryElements.js +136 -0
  50. package/dist/esm/safeParse.js +150 -0
  51. package/dist/esm/uid.js +15 -0
  52. package/package.json +9 -111
  53. package/src/index.js +3 -3
  54. package/src/operators copy.js +687 -0
  55. package/src/operators.js +407 -526
  56. package/.github/FUNDING.yml +0 -3
  57. package/.github/workflows/automated.yml +0 -44
  58. package/.github/workflows/manual.yml +0 -44
  59. package/CHANGELOG.md +0 -2075
  60. package/CoCreate.config.js +0 -23
  61. package/demo/index.html +0 -23
  62. package/docs/index.html +0 -331
  63. package/prettier.config.js +0 -16
  64. package/release.config.js +0 -22
  65. package/webpack.config.js +0 -65
@@ -0,0 +1,169 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var safeParse_exports = {};
19
+ __export(safeParse_exports, {
20
+ safeParse: () => safeParse
21
+ });
22
+ module.exports = __toCommonJS(safeParse_exports);
23
+ const constants = { PI: Math.PI, E: Math.E };
24
+ const functions = {
25
+ abs: Math.abs,
26
+ ceil: Math.ceil,
27
+ floor: Math.floor,
28
+ round: Math.round,
29
+ max: Math.max,
30
+ min: Math.min,
31
+ pow: Math.pow,
32
+ sqrt: Math.sqrt,
33
+ log: Math.log,
34
+ sin: Math.sin,
35
+ cos: Math.cos,
36
+ tan: Math.tan
37
+ };
38
+ function safeParse(expression, context = {}) {
39
+ if (typeof expression !== "string") {
40
+ expression = String(expression);
41
+ }
42
+ let currentExpr = expression.trim();
43
+ if (!currentExpr) return null;
44
+ const tokenizerRegex = /('[^']*'|"[^"]*"|\d+(?:\.\d+)?|>=|<=|===|!==|==|!=|&&|\|\||[a-zA-Z_][a-zA-Z0-9_\.]*|[\+\-\*\/\%\(\)\?\:\>\<\!\,\=])/g;
45
+ const tokens = currentExpr.match(tokenizerRegex) || [];
46
+ let pos = 0;
47
+ function peek() {
48
+ return tokens[pos];
49
+ }
50
+ function consume() {
51
+ return tokens[pos++];
52
+ }
53
+ function parse() {
54
+ return parseTernary();
55
+ }
56
+ function parseTernary() {
57
+ let left = parseLogical();
58
+ if (peek() === "?") {
59
+ consume();
60
+ let trueExpr = parseTernary();
61
+ if (peek() === ":") {
62
+ consume();
63
+ let falseExpr = parseTernary();
64
+ return left ? trueExpr : falseExpr;
65
+ }
66
+ }
67
+ return left;
68
+ }
69
+ function parseLogical() {
70
+ let left = parseComparison();
71
+ while (peek() === "&&" || peek() === "||") {
72
+ let op = consume();
73
+ let right = parseComparison();
74
+ if (op === "&&") left = left && right;
75
+ if (op === "||") left = left || right;
76
+ }
77
+ return left;
78
+ }
79
+ function parseComparison() {
80
+ let left = parseAdditive();
81
+ while ([">", "<", ">=", "<=", "===", "!==", "==", "!="].includes(peek())) {
82
+ let op = consume();
83
+ let right = parseAdditive();
84
+ if (op === ">") left = left > right;
85
+ if (op === "<") left = left < right;
86
+ if (op === ">=") left = left >= right;
87
+ if (op === "<=") left = left <= right;
88
+ if (op === "===") left = left === right;
89
+ if (op === "!==") left = left !== right;
90
+ if (op === "==") left = left == right;
91
+ if (op === "!=") left = left != right;
92
+ }
93
+ return left;
94
+ }
95
+ function parseAdditive() {
96
+ let left = parseMultiplicative();
97
+ while (["+", "-"].includes(peek())) {
98
+ let op = consume();
99
+ let right = parseMultiplicative();
100
+ if (op === "+") left = left + right;
101
+ if (op === "-") left = left - right;
102
+ }
103
+ return left;
104
+ }
105
+ function parseMultiplicative() {
106
+ let left = parsePrimary();
107
+ while (["*", "/", "%"].includes(peek())) {
108
+ let op = consume();
109
+ let right = parsePrimary();
110
+ if (op === "*") left = left * right;
111
+ if (op === "/") left = left / right;
112
+ if (op === "%") left = left % right;
113
+ }
114
+ return left;
115
+ }
116
+ function parsePrimary() {
117
+ let token = consume();
118
+ if (!token) return void 0;
119
+ if (/^\d/.test(token)) return parseFloat(token);
120
+ if (token.startsWith("'") || token.startsWith('"')) {
121
+ return token.slice(1, -1);
122
+ }
123
+ if (token === "true") return true;
124
+ if (token === "false") return false;
125
+ if (token === "(") {
126
+ let expr = parse();
127
+ if (peek() === ")") consume();
128
+ return expr;
129
+ }
130
+ if (token === "-") return -parsePrimary();
131
+ if (token === "!") return !parsePrimary();
132
+ if (constants.hasOwnProperty(token)) {
133
+ return constants[token];
134
+ }
135
+ if (peek() === "(" && functions.hasOwnProperty(token)) {
136
+ consume();
137
+ let args = [];
138
+ if (peek() !== ")") {
139
+ args.push(parse());
140
+ while (peek() === ",") {
141
+ consume();
142
+ args.push(parse());
143
+ }
144
+ }
145
+ if (peek() === ")") consume();
146
+ return functions[token](...args);
147
+ }
148
+ let path = token.split(".");
149
+ let val = context;
150
+ for (let part of path) {
151
+ if (val !== null && typeof val === "object" && part in val) {
152
+ val = val[part];
153
+ } else {
154
+ return void 0;
155
+ }
156
+ }
157
+ return val;
158
+ }
159
+ try {
160
+ const result = parse();
161
+ return result !== void 0 ? result : null;
162
+ } catch (error) {
163
+ console.warn(
164
+ `Unexpected parsing error: ${error.message} (Expression context: "${expression}")`,
165
+ error
166
+ );
167
+ return null;
168
+ }
169
+ }
@@ -0,0 +1,34 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var uid_exports = {};
19
+ __export(uid_exports, {
20
+ uid: () => uid
21
+ });
22
+ module.exports = __toCommonJS(uid_exports);
23
+ function uid(length = 36) {
24
+ let pattern = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
25
+ if (length > 36) {
26
+ length = 36;
27
+ }
28
+ let uuid = pattern.replace(/[xy]/g, function(c) {
29
+ var r = Math.random() * 16 | 0;
30
+ var v = c === "x" ? r : r & 3 | 8;
31
+ return v.toString(16);
32
+ }).substring(0, length);
33
+ return uuid;
34
+ }
@@ -0,0 +1,35 @@
1
+ let counter = 0;
2
+ function ObjectId(inputId) {
3
+ if (inputId && /^[0-9a-fA-F]{24}$/.test(inputId)) {
4
+ return {
5
+ timestamp: inputId.substring(0, 8),
6
+ processId: inputId.substring(8, 20),
7
+ counter: inputId.substring(20),
8
+ toString: function() {
9
+ return this.timestamp + this.processId + this.counter;
10
+ }
11
+ };
12
+ } else if (inputId) {
13
+ throw new Error("Invalid ObjectId provided.");
14
+ }
15
+ const timestampHex = Math.floor(
16
+ new Date((/* @__PURE__ */ new Date()).toISOString()).getTime() / 1e3
17
+ ).toString(16).padStart(8, "0");
18
+ const processIdHex = Math.floor(Math.random() * 17592186044416).toString(16).padStart(12, "0");
19
+ counter = (counter + 1) % 1e4;
20
+ if (counter < 2) {
21
+ counter = Math.floor(Math.random() * (5e3 - 100 + 1)) + 100;
22
+ }
23
+ const counterHex = counter.toString(16).padStart(4, "0");
24
+ return {
25
+ timestamp: timestampHex,
26
+ processId: processIdHex,
27
+ counter: counterHex,
28
+ toString: function() {
29
+ return this.timestamp + this.processId + this.counter;
30
+ }
31
+ };
32
+ }
33
+ export {
34
+ ObjectId
35
+ };
@@ -0,0 +1,45 @@
1
+ function getAttributes(el) {
2
+ if (!el) return;
3
+ let attributes = window.CoCreateConfig.attributes;
4
+ let object = {};
5
+ for (let attribute of el.attributes) {
6
+ let variable = attributes[attribute.name];
7
+ if (variable) {
8
+ object[variable] = el.getAttribute(attribute.name);
9
+ }
10
+ }
11
+ return object;
12
+ }
13
+ function getAttributeNames(variables) {
14
+ let reversedObject = {};
15
+ for (const key of Object.keys(CoCreateConfig.attributes)) {
16
+ reversedObject[CoCreateConfig.attributes[key]] = key;
17
+ }
18
+ let attributes = [];
19
+ for (const variable of variables) {
20
+ let attribute = reversedObject[variable];
21
+ if (attribute) attributes.push(attribute);
22
+ }
23
+ return attributes;
24
+ }
25
+ function setAttributeNames(attributes, overWrite) {
26
+ let reversedObject = {};
27
+ for (const key of Object.keys(CoCreateConfig.attributes)) {
28
+ reversedObject[CoCreateConfig.attributes[key]] = key;
29
+ }
30
+ for (const attribute of Object.keys(attributes)) {
31
+ const variable = attributes[attribute];
32
+ if (!reversedObject[variable] || overWrite != false)
33
+ reversedObject[variable] = attribute;
34
+ }
35
+ let revertObject = {};
36
+ for (const key of Object.keys(reversedObject)) {
37
+ revertObject[reversedObject[key]] = key;
38
+ }
39
+ CoCreateConfig.attributes = revertObject;
40
+ }
41
+ export {
42
+ getAttributeNames,
43
+ getAttributes,
44
+ setAttributeNames
45
+ };
@@ -0,0 +1,7 @@
1
+ function checkValue(value) {
2
+ if (/{{\s*([\w\W]+)\s*}}/g.test(value)) return false;
3
+ else return true;
4
+ }
5
+ export {
6
+ checkValue
7
+ };
@@ -0,0 +1,29 @@
1
+ function clickedElement() {
2
+ document.addEventListener("click", (e) => {
3
+ document.clickedElement = e.target;
4
+ });
5
+ try {
6
+ let frames = document.querySelectorAll("iframe");
7
+ for (let frame of frames) {
8
+ try {
9
+ let frameDocument = frame.contentDocument;
10
+ if (!frameDocument.clickedElementListenerAdded) {
11
+ frameDocument.addEventListener("click", (e) => {
12
+ frameDocument.clickedElement = e.target;
13
+ });
14
+ frameDocument.clickedElementListenerAdded = true;
15
+ }
16
+ } catch (iframeError) {
17
+ console.log(
18
+ `Cross-origin frame handling failed for: ${frame}`,
19
+ iframeError
20
+ );
21
+ }
22
+ }
23
+ } catch (e) {
24
+ console.log("Top-level frame document handling failed:", e);
25
+ }
26
+ }
27
+ export {
28
+ clickedElement
29
+ };
@@ -0,0 +1,14 @@
1
+ import { getRelativePath } from "./getRelativePath.js";
2
+ import { ObjectId } from "./ObjectId.js";
3
+ import { uid } from "./uid.js";
4
+ import { checkValue } from "./checkValue.js";
5
+ import { isValidDate } from "./isValidDate.js";
6
+ import { objectToSearchParams } from "./objectToSearchParams.js";
7
+ export {
8
+ ObjectId,
9
+ checkValue,
10
+ getRelativePath,
11
+ isValidDate,
12
+ objectToSearchParams,
13
+ uid
14
+ };
@@ -0,0 +1,185 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ import { dotNotationToObject } from "./dotNotationToObject.js";
18
+ import { objectToDotNotation } from "./objectToDotNotation.js";
19
+ import { getValueFromObject } from "./getValueFromObject.js";
20
+ function isEqualArray(arr1, arr2) {
21
+ if (arr1.length !== arr2.length) {
22
+ return false;
23
+ }
24
+ for (let i = 0; i < arr1.length; i++) {
25
+ if (!isEqualObject(arr1[i], arr2[i])) {
26
+ return false;
27
+ }
28
+ }
29
+ return true;
30
+ }
31
+ function isEqualObject(obj1, obj2) {
32
+ const keys1 = Object.keys(obj1);
33
+ const keys2 = Object.keys(obj2);
34
+ if (keys1.length !== keys2.length) {
35
+ return false;
36
+ }
37
+ for (const key of keys1) {
38
+ if (obj1[key] !== obj2[key]) {
39
+ return false;
40
+ }
41
+ }
42
+ return true;
43
+ }
44
+ function dotNotationToObjectUpdate(data, object = {}) {
45
+ try {
46
+ for (const key of Object.keys(data)) {
47
+ let newObject = object;
48
+ let keys = key.replace(/\[(\d+)\]/g, ".$1").split(".").map((k) => isNaN(k) ? k : Number(k));
49
+ let value = data[key];
50
+ let operator;
51
+ if (keys[0].startsWith("$")) operator = keys.shift();
52
+ let length = keys.length - 1;
53
+ for (let i = 0; i < keys.length; i++) {
54
+ if (length == i) {
55
+ if (operator) {
56
+ let operators = [
57
+ "$rename",
58
+ "$inc",
59
+ "$push",
60
+ "$each",
61
+ "$splice",
62
+ "$unset",
63
+ "$delete",
64
+ "$slice",
65
+ "$pop",
66
+ "$shift",
67
+ "$addToSet",
68
+ "$pull"
69
+ ];
70
+ if (!operators.includes(operator)) continue;
71
+ if (operator === "$rename") {
72
+ newObject[value] = newObject[keys[i]];
73
+ delete newObject[keys[i]];
74
+ } else if (operator === "$delete" || operator === "$unset" || operator === "$slice") {
75
+ if (typeof keys[i] === "number") {
76
+ newObject.splice(keys[i], 1);
77
+ } else {
78
+ delete newObject[keys[i]];
79
+ }
80
+ } else if (operator === "$shift") {
81
+ newObject[keys[i]].shift();
82
+ } else if (operator === "$pop") {
83
+ newObject[keys[i]].pop();
84
+ } else if (operator === "$addToSet") {
85
+ if (!newObject[keys[i]]) newObject[keys[i]] = [];
86
+ let exists;
87
+ if (Array.isArray(value)) {
88
+ exists = newObject[keys[i]].some(
89
+ (item) => Array.isArray(item) && isEqualArray(item, value)
90
+ );
91
+ } else if (typeof value === "object" && value !== null) {
92
+ exists = newObject[keys[i]].some(
93
+ (item) => typeof item === "object" && isEqualObject(item, value)
94
+ );
95
+ } else {
96
+ exists = newObject[keys[i]].includes(value);
97
+ }
98
+ if (!exists) newObject[keys[i]].push(value);
99
+ } else if (operator === "$pull") {
100
+ if (!newObject[keys[i]]) continue;
101
+ if (Array.isArray(value)) {
102
+ newObject[keys[i]] = newObject[keys[i]].filter(
103
+ (item) => !Array.isArray(item) || !isEqualArray(item, value)
104
+ );
105
+ } else if (typeof value === "object" && value !== null) {
106
+ newObject[keys[i]] = newObject[keys[i]].filter(
107
+ (item) => typeof item !== "object" || !isEqualObject(item, value)
108
+ );
109
+ } else {
110
+ newObject[keys[i]] = newObject[keys[i]].filter(
111
+ (item) => item !== value
112
+ );
113
+ }
114
+ } else if (operator === "$push" || operator === "$splice") {
115
+ if (typeof keys[i] === "number" && newObject.length >= keys[i])
116
+ newObject.splice(keys[i], 0, value);
117
+ else if (newObject[keys[i]]) newObject[keys[i]].push(value);
118
+ else newObject[keys[i]] = [value];
119
+ } else if (operator === "$each") {
120
+ if (!Array.isArray(value)) value = [value];
121
+ if (typeof keys[i] === "number")
122
+ newObject.splice(keys[i], 0, ...value);
123
+ else newObject[keys[i]].push(...value);
124
+ } else if (operator === "$inc") {
125
+ if (!newObject[keys[i]] || typeof newObject[keys[i]] !== "number")
126
+ newObject[keys[i]] = value;
127
+ else newObject[keys[i]] += value;
128
+ }
129
+ } else if (value === void 0) {
130
+ if (typeof keys[i] === "number") newObject.splice(keys[i], 1);
131
+ else delete newObject[keys[i]];
132
+ } else if (typeof keys[i] === "number") {
133
+ newObject.splice(keys[i], 0, value);
134
+ } else {
135
+ newObject[keys[i]] = value;
136
+ }
137
+ } else if (typeof keys[i + 1] === "number" && !Array.isArray(newObject[keys[i]])) {
138
+ newObject[keys[i]] = [];
139
+ } else {
140
+ newObject[keys[i]] = newObject[keys[i]] || {};
141
+ }
142
+ newObject = newObject[keys[i]];
143
+ }
144
+ }
145
+ return object;
146
+ } catch (error) {
147
+ console.log("Error converting dot notation to object", error);
148
+ return false;
149
+ }
150
+ }
151
+ function createUpdate(update, data, globalOpertors) {
152
+ let operatorKeys = {};
153
+ if (globalOpertors) operatorKeys = __spreadValues({}, globalOpertors);
154
+ Object.keys(data).forEach((key) => {
155
+ if (key.startsWith("$")) {
156
+ if (!key.includes("."))
157
+ for (let oldkey of Object.keys(data[key]))
158
+ operatorKeys[key + "." + oldkey] = data[key][oldkey];
159
+ else operatorKeys[key] = data[key];
160
+ } else if (typeof data[key] === "string" && data[key].startsWith("$")) {
161
+ operatorKeys[data[key] + "." + key] = data[key];
162
+ } else if (key.endsWith("]")) {
163
+ const regex = /^(.*(?:\[\d+\].*?)?)\[(.*?)\](?:\[\])?$/;
164
+ const match = key.match(regex);
165
+ if (match[2] === "") operatorKeys["$push." + match[1]] = data[key];
166
+ else {
167
+ let index = parseInt(match[2], 10);
168
+ if (Number.isNaN(index))
169
+ operatorKeys[match[2] + "." + match[1]] = data[key];
170
+ else operatorKeys[key] = data[key];
171
+ }
172
+ } else if (key.includes(".")) {
173
+ operatorKeys[key] = data[key];
174
+ } else if (data[key] === void 0) {
175
+ delete update[key];
176
+ } else update[key] = data[key];
177
+ });
178
+ return dotNotationToObjectUpdate(operatorKeys, update);
179
+ }
180
+ export {
181
+ createUpdate,
182
+ dotNotationToObject,
183
+ getValueFromObject,
184
+ objectToDotNotation
185
+ };
@@ -0,0 +1,41 @@
1
+ function cssPath(node, container) {
2
+ let pathSplits = [];
3
+ do {
4
+ if (!node || !node.tagName) return false;
5
+ let pathSplit = node.tagName.toLowerCase();
6
+ if (node.id) {
7
+ pathSplit += "#" + node.id;
8
+ node = "";
9
+ } else {
10
+ let eid = node.getAttribute("eid");
11
+ if (eid && !/{{\s*([\w\W]+)\s*}}/g.test(eid)) {
12
+ pathSplit += `[eid="${eid}"]`;
13
+ node = "";
14
+ } else if (node.parentNode && node.parentNode.children.length > 1) {
15
+ let children = [];
16
+ for (let child of node.parentNode.children) {
17
+ if (child.tagName == node.tagName) children.push(child);
18
+ }
19
+ let index = Array.prototype.indexOf.call(children, node);
20
+ pathSplit += `:nth-of-type(${index + 1})`;
21
+ }
22
+ node = node.parentNode;
23
+ if (node == null || node.tagName == "HTML" || node.tagName == "BODY" || node.tagName == "DOM-PARSER" || node.nodeName == "#document" || node.hasAttribute("contenteditable"))
24
+ node = "";
25
+ }
26
+ pathSplits.unshift(pathSplit);
27
+ } while (node);
28
+ let path = pathSplits.join(" > ");
29
+ if (path && path.includes("<")) {
30
+ let index = path.lastIndexOf(" >");
31
+ if (index != -1) path = path.slice(0, index);
32
+ else {
33
+ index = path.lastIndexOf("<");
34
+ path = path.slice(0, index);
35
+ }
36
+ }
37
+ return path;
38
+ }
39
+ export {
40
+ cssPath
41
+ };