1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // @ts-nocheck
- import memoizeCapped from "./memoizeCapped.js";
- const charCodeOfDot = ".".charCodeAt(0);
- const reEscapeChar = /\\(\\)?/g;
- const rePropName = RegExp(
- // Match anything that isn't a dot or bracket.
- "[^.[\\]]+" +
- "|" +
- // Or match property names within brackets.
- "\\[(?:" +
- // Match a non-string expression.
- "([^\"'][^[]*)" +
- "|" +
- // Or match strings (supports escaping characters).
- "([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2" +
- ")\\]" +
- "|" +
- // Or match "" as the space between consecutive dots or empty brackets.
- "(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))", "g");
- /**
- * Converts `string` to a property path array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the property path array.
- */
- const stringToPath = memoizeCapped((string) => {
- const result = [];
- if (string.charCodeAt(0) === charCodeOfDot) {
- result.push("");
- }
- string.replace(rePropName, (match, expression, quote, subString) => {
- let key = match;
- if (quote) {
- key = subString.replace(reEscapeChar, "$1");
- }
- else if (expression) {
- key = expression.trim();
- }
- result.push(key);
- });
- return result;
- });
- export default stringToPath;
|