pathtrace 1.0.0-beta.2 → 1.0.0
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/README.md +1 -0
- package/dist/index.cjs +79 -48
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.mjs +78 -49
- package/dist/index.mjs.map +1 -1
- package/dist/path-expand/index.d.ts +2 -0
- package/dist/path-expand/module.d.ts +16 -0
- package/dist/path-expand/types.d.ts +4 -0
- package/dist/{get-path-info.d.ts → path-info/helper.d.ts} +1 -1
- package/dist/path-info/index.d.ts +2 -0
- package/dist/path-value/index.d.ts +2 -0
- package/package.json +10 -8
- package/dist/expand-path.d.ts +0 -7
- /package/dist/{constants.d.ts → path-expand/constants.d.ts} +0 -0
- /package/dist/{path-info.d.ts → path-info/module.d.ts} +0 -0
- /package/dist/{get-path-value.d.ts → path-value/get.d.ts} +0 -0
- /package/dist/{set-path-value.d.ts → path-value/set.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# pathtrace 🔍
|
|
2
2
|
|
|
3
3
|
[](https://badge.fury.io/js/pathtrace)
|
|
4
|
+
[](https://codecov.io/gh/tada5hi/pathtrace)
|
|
4
5
|
[](https://github.com/tada5hi/pathtrace/actions/workflows/main.yml)
|
|
5
6
|
[](https://snyk.io/test/github/tada5hi/pathtrace)
|
|
6
7
|
[](https://conventionalcommits.org)
|
package/dist/index.cjs
CHANGED
|
@@ -81,12 +81,15 @@
|
|
|
81
81
|
return !!input && typeof input === 'object' && !Array.isArray(input);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
function
|
|
84
|
+
function expandPathVerboseInternal(data, path, currPath = [], currMatches = []) {
|
|
85
85
|
const segments = Array.isArray(path) ? path : pathToArray(path);
|
|
86
86
|
if (!segments.length) {
|
|
87
87
|
// no more paths to traverse
|
|
88
88
|
return [
|
|
89
|
-
|
|
89
|
+
{
|
|
90
|
+
value: arrayToPath(currPath),
|
|
91
|
+
matches: currMatches
|
|
92
|
+
}
|
|
90
93
|
];
|
|
91
94
|
}
|
|
92
95
|
const key = segments[0];
|
|
@@ -96,7 +99,10 @@ function expandPathInternal(data, path, currPath = []) {
|
|
|
96
99
|
if (!rest.length) {
|
|
97
100
|
// globstar leaves are always selected
|
|
98
101
|
return [
|
|
99
|
-
|
|
102
|
+
{
|
|
103
|
+
value: arrayToPath(currPath),
|
|
104
|
+
matches: currMatches
|
|
105
|
+
}
|
|
100
106
|
];
|
|
101
107
|
}
|
|
102
108
|
return [];
|
|
@@ -107,33 +113,56 @@ function expandPathInternal(data, path, currPath = []) {
|
|
|
107
113
|
// value is a primitive, paths being traversed from here might be in their prototype,
|
|
108
114
|
// return the entire path
|
|
109
115
|
return [
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
116
|
+
{
|
|
117
|
+
value: arrayToPath([
|
|
118
|
+
...currPath,
|
|
119
|
+
...segments
|
|
120
|
+
]),
|
|
121
|
+
matches: currMatches
|
|
122
|
+
}
|
|
114
123
|
];
|
|
115
124
|
}
|
|
116
125
|
// Use a non-null value so that non-existing fields are still selected
|
|
117
126
|
data = data || {};
|
|
118
127
|
if (key === Character.WILDCARD) {
|
|
119
|
-
return Object.keys(data).flatMap((key)=>
|
|
128
|
+
return Object.keys(data).flatMap((key)=>expandPathVerboseInternal(data[key], arrayToPath(rest), currPath.concat(key), currMatches.concat(key)));
|
|
120
129
|
}
|
|
121
130
|
if (key === Character.GLOBSTAR) {
|
|
122
131
|
return Object.keys(data).flatMap((key)=>{
|
|
123
132
|
const nextPath = currPath.concat(key);
|
|
124
133
|
const value = data[key];
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
]
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
// recursively find matching sub-paths & skip the first remaining segment, if it matches the current key
|
|
135
|
+
const children = expandPathVerboseInternal(value, arrayToPath(segments), nextPath, [
|
|
136
|
+
key
|
|
137
|
+
]).concat(rest[0] === key ? expandPathVerboseInternal(value, arrayToPath(rest.slice(1)), nextPath, []) : []);
|
|
138
|
+
const pathMatches = [];
|
|
139
|
+
const output = [];
|
|
140
|
+
for(let i = 0; i < children.length; i++){
|
|
141
|
+
/* istanbul ignore next */ if (pathMatches.indexOf(children[i].value) !== -1) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
pathMatches.push(children[i].value);
|
|
145
|
+
output.push({
|
|
146
|
+
value: children[i].value,
|
|
147
|
+
matches: children[i].matches.length > 0 ? [
|
|
148
|
+
...currMatches,
|
|
149
|
+
children[i].matches.flat()
|
|
150
|
+
] : currMatches
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return output;
|
|
134
154
|
});
|
|
135
155
|
}
|
|
136
|
-
return
|
|
156
|
+
return expandPathVerboseInternal(data[key], rest, currPath.concat(key), currMatches);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Verbose expand wildcard and glob patterns.
|
|
160
|
+
* Track wildcard/glob pattern matches.
|
|
161
|
+
*
|
|
162
|
+
* @param data
|
|
163
|
+
* @param path
|
|
164
|
+
*/ function expandPathVerbose(data, path) {
|
|
165
|
+
return expandPathVerboseInternal(data, path);
|
|
137
166
|
}
|
|
138
167
|
/**
|
|
139
168
|
* Expand wildcard and glob patterns to paths.
|
|
@@ -141,7 +170,7 @@ function expandPathInternal(data, path, currPath = []) {
|
|
|
141
170
|
* @param data
|
|
142
171
|
* @param path
|
|
143
172
|
*/ function expandPath(data, path) {
|
|
144
|
-
return
|
|
173
|
+
return expandPathVerbose(data, path).map((el)=>el.value);
|
|
145
174
|
}
|
|
146
175
|
|
|
147
176
|
function getPathValue(data, path) {
|
|
@@ -168,6 +197,35 @@ function getPathValue(data, path) {
|
|
|
168
197
|
return res;
|
|
169
198
|
}
|
|
170
199
|
|
|
200
|
+
const NUMBER_REGEX = /^\d+$/;
|
|
201
|
+
function setPathValue(data, path, value) {
|
|
202
|
+
const parts = Array.isArray(path) ? path : pathToArray(path);
|
|
203
|
+
let temp = data;
|
|
204
|
+
let index = 0;
|
|
205
|
+
while(index < parts.length){
|
|
206
|
+
/* istanbul ignore next */ if (!Array.isArray(temp) && !isObject(temp)) {
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
const key = parts[index];
|
|
210
|
+
// [foo, '0']
|
|
211
|
+
if (typeof temp[key] === 'undefined') {
|
|
212
|
+
const match = NUMBER_REGEX.test(key);
|
|
213
|
+
if (match) {
|
|
214
|
+
temp[key] = [];
|
|
215
|
+
} else {
|
|
216
|
+
temp[key] = {};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (index === parts.length - 1) {
|
|
220
|
+
temp[key] = value;
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
index++;
|
|
224
|
+
temp = temp[key];
|
|
225
|
+
}
|
|
226
|
+
return data;
|
|
227
|
+
}
|
|
228
|
+
|
|
171
229
|
class PathInfo {
|
|
172
230
|
get value() {
|
|
173
231
|
if (typeof this._value !== 'undefined') {
|
|
@@ -230,38 +288,11 @@ function getPathInfo(data, path) {
|
|
|
230
288
|
return new PathInfo(data, path);
|
|
231
289
|
}
|
|
232
290
|
|
|
233
|
-
const NUMBER_REGEX = /^\d+$/;
|
|
234
|
-
function setPathValue(data, path, value) {
|
|
235
|
-
const parts = Array.isArray(path) ? path : pathToArray(path);
|
|
236
|
-
let temp = data;
|
|
237
|
-
let index = 0;
|
|
238
|
-
while(index < parts.length){
|
|
239
|
-
/* istanbul ignore next */ if (!Array.isArray(temp) && !isObject(temp)) {
|
|
240
|
-
break;
|
|
241
|
-
}
|
|
242
|
-
const key = parts[index];
|
|
243
|
-
// [foo, '0']
|
|
244
|
-
if (typeof temp[key] === 'undefined') {
|
|
245
|
-
const match = NUMBER_REGEX.test(key);
|
|
246
|
-
if (match) {
|
|
247
|
-
temp[key] = [];
|
|
248
|
-
} else {
|
|
249
|
-
temp[key] = {};
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
if (index === parts.length - 1) {
|
|
253
|
-
temp[key] = value;
|
|
254
|
-
break;
|
|
255
|
-
}
|
|
256
|
-
index++;
|
|
257
|
-
temp = temp[key];
|
|
258
|
-
}
|
|
259
|
-
return data;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
291
|
exports.BRACKET_NUMBER_REGEX = BRACKET_NUMBER_REGEX;
|
|
292
|
+
exports.PathInfo = PathInfo;
|
|
263
293
|
exports.arrayToPath = arrayToPath;
|
|
264
294
|
exports.expandPath = expandPath;
|
|
295
|
+
exports.expandPathVerbose = expandPathVerbose;
|
|
265
296
|
exports.getPathInfo = getPathInfo;
|
|
266
297
|
exports.getPathValue = getPathValue;
|
|
267
298
|
exports.pathToArray = pathToArray;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/helpers/array-to-path.ts","../src/helpers/path-to-array.ts","../src/constants.ts","../src/utils/is-object.ts","../src/expand-path.ts","../src/get-path-value.ts","../src/path-info.ts","../src/get-path-info.ts","../src/set-path-value.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/**\n * @see https://github.com/express-validator/express-validator/blob/bec1dcbaa29002dcd21093ec84818c4671063b5d/src/field-selection.ts#L214\n * @param parts\n */\nexport function arrayToPath(parts: readonly string[]) : string {\n return parts.reduce((prev, segment) => {\n let part = '';\n\n segment = segment.replace(/^\\[(\\d+)]$/g, '\\\\[$1]');\n segment = segment.replace(/\\./g, '\\\\.');\n\n if (/^\\d+$/.test(segment)) {\n // Index access\n part = `[${segment}]`;\n } else if (prev) {\n // Object key access\n part = `.${segment}`;\n } else {\n // Top level key\n part = segment;\n }\n\n return prev + part;\n }, '');\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport const BRACKET_NUMBER_REGEX = /(?<!\\\\)\\[(\\d+)]$/;\n\n/**\n * Convert string to property path array.\n *\n * @see https://github.com/lodash/lodash/blob/main/src/.internal/stringToPath.ts\n * @see https://github.com/chaijs/pathval\n *\n * @param segment\n */\nexport function pathToArray(segment: string) : string[] {\n const str = segment.replace(/([^\\\\])\\[/g, '$1.[');\n const parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n if (!parts) {\n return [];\n }\n\n const result : string[] = [];\n\n for (let i = 0; i < parts.length; i++) {\n if (\n parts[i] === 'constructor' ||\n parts[i] === '__proto__' ||\n parts[i] === 'prototype'\n ) {\n continue;\n }\n\n const regex = BRACKET_NUMBER_REGEX.exec(parts[i]);\n if (regex) {\n result.push(regex[1]);\n } else {\n result.push(parts[i].replace(/\\\\([.[\\]])/g, '$1'));\n }\n }\n\n return result;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum Character {\n WILDCARD = '*',\n GLOBSTAR = '**',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(input: unknown) : input is Record<string, any> {\n return !!input &&\n typeof input === 'object' &&\n !Array.isArray(input);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Character } from './constants';\nimport { isObject } from './utils';\nimport { arrayToPath, pathToArray } from './helpers';\n\nfunction expandPathInternal(\n data: Record<string, any>,\n path: string | string[],\n currPath: readonly string[] = [],\n): string[] {\n const segments = Array.isArray(path) ? path : pathToArray(path);\n if (!segments.length) {\n // no more paths to traverse\n return [arrayToPath(currPath)];\n }\n\n const key = segments[0];\n const rest = segments.slice(1);\n\n if (\n typeof data !== 'undefined' &&\n data !== null &&\n !isObject(data) &&\n !Array.isArray(data)\n ) {\n if (key === Character.GLOBSTAR) {\n if (!rest.length) {\n // globstar leaves are always selected\n return [arrayToPath(currPath)];\n }\n\n return [];\n }\n\n if (key === Character.WILDCARD) {\n return [];\n }\n\n // value is a primitive, paths being traversed from here might be in their prototype,\n // return the entire path\n return [arrayToPath([...currPath, ...segments])];\n }\n\n // Use a non-null value so that non-existing fields are still selected\n data = data || {};\n\n if (key === Character.WILDCARD) {\n return Object.keys(data)\n .flatMap((key) => expandPathInternal(data[key], arrayToPath(rest), currPath.concat(key)));\n }\n\n if (key === Character.GLOBSTAR) {\n return Object.keys(data)\n .flatMap((key) => {\n const nextPath = currPath.concat(key);\n const value = data[key];\n const set = new Set([\n // recursively find matching sub-paths\n ...expandPathInternal(value, arrayToPath(segments), nextPath),\n // skip the first remaining segment, if it matches the current key\n ...(rest[0] === key ? expandPathInternal(value, arrayToPath(rest.slice(1)), nextPath) : []),\n ]);\n\n return [...set];\n });\n }\n\n return expandPathInternal(data[key], rest, currPath.concat(key));\n}\n\n/**\n * Expand wildcard and glob patterns to paths.\n *\n * @param data\n * @param path\n */\nexport function expandPath(\n data: Record<string, any>,\n path: string | string[],\n): string[] {\n return expandPathInternal(data, path);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pathToArray } from './helpers';\n\nexport function getPathValue(\n data: unknown,\n path: string | string[],\n): unknown {\n const parts = Array.isArray(path) ?\n path :\n pathToArray(path);\n\n let res : unknown | undefined;\n let temp = data;\n let index = 0;\n while (index < parts.length) {\n if (temp === null || typeof temp === 'undefined') {\n break;\n }\n\n if (parts[index] in Object(temp)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n temp = temp[parts[index]];\n } else {\n break;\n }\n\n if (index === parts.length - 1) {\n res = temp;\n }\n\n index++;\n }\n\n return res;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getPathValue } from './get-path-value';\nimport { pathToArray } from './helpers';\n\nexport class PathInfo {\n protected data: unknown;\n\n protected pathParts: string[];\n\n protected _value: unknown;\n\n protected _parent: PathInfo | null | undefined;\n\n protected _exists: boolean | undefined;\n\n constructor(data: unknown, path: string | string[]) {\n this.data = data;\n\n if (Array.isArray(path)) {\n this.pathParts = path;\n } else {\n this.pathParts = pathToArray(path);\n }\n }\n\n get value() {\n if (typeof this._value !== 'undefined') {\n return this._value;\n }\n\n if (this.pathParts.length > 0) {\n this._value = getPathValue(this.data, this.pathParts);\n } else {\n this._value = this.data;\n }\n\n return this._value;\n }\n\n get name() : string | null {\n if (this.pathParts.length > 0) {\n return this.pathParts[this.pathParts.length - 1];\n }\n\n return null;\n }\n\n get parent() : PathInfo | null {\n if (typeof this._parent !== 'undefined') {\n return this._parent;\n }\n\n if (this.pathParts.length === 0) {\n this._parent = null;\n return this._parent;\n }\n\n if (this.pathParts.length > 1) {\n this._parent = new PathInfo(\n this.data,\n this.pathParts.slice(0, this.pathParts.length - 1),\n );\n } else {\n this._parent = new PathInfo(this.data, []);\n }\n\n return this._parent;\n }\n\n get exists() : boolean {\n if (typeof this._exists !== 'undefined') {\n return this._exists;\n }\n\n if (!this.name || !this.parent) {\n this._exists = true;\n return this._exists;\n }\n\n if (\n this.parent.value !== null &&\n typeof this.parent.value !== 'undefined'\n ) {\n this._exists = this.name in Object(this.parent.value);\n } else {\n this._exists = false;\n }\n\n return this._exists;\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PathInfo } from './path-info';\n\nexport function getPathInfo(\n data: Record<string, any>,\n path: string | string[],\n) : PathInfo {\n return new PathInfo(data, path);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pathToArray } from './helpers';\nimport { isObject } from './utils';\n\nconst NUMBER_REGEX = /^\\d+$/;\n\nexport function setPathValue(\n data: Record<string, any> | Record<string, any>[],\n path: string | string[],\n value: unknown,\n) {\n const parts = Array.isArray(path) ?\n path :\n pathToArray(path);\n\n let temp = data;\n let index = 0;\n while (index < parts.length) {\n /* istanbul ignore next */\n if (!Array.isArray(temp) && !isObject(temp)) {\n break;\n }\n\n const key = parts[index] as keyof typeof temp;\n\n // [foo, '0']\n if (typeof temp[key] === 'undefined') {\n const match = NUMBER_REGEX.test(key);\n if (match) {\n (temp as Record<string, any>)[key] = [];\n } else {\n temp[key] = {};\n }\n }\n\n if (index === parts.length - 1) {\n temp[key] = value;\n break;\n }\n\n index++;\n temp = temp[key];\n }\n\n return data;\n}\n"],"names":["arrayToPath","parts","reduce","prev","segment","part","replace","test","BRACKET_NUMBER_REGEX","pathToArray","str","match","result","i","length","regex","exec","push","Character","isObject","input","Array","isArray","expandPathInternal","data","path","currPath","segments","key","rest","slice","GLOBSTAR","WILDCARD","Object","keys","flatMap","concat","nextPath","value","set","Set","expandPath","getPathValue","res","temp","index","PathInfo","_value","pathParts","name","parent","_parent","exists","_exists","constructor","getPathInfo","NUMBER_REGEX","setPathValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/helpers/array-to-path.ts","../src/helpers/path-to-array.ts","../src/path-expand/constants.ts","../src/utils/is-object.ts","../src/path-expand/module.ts","../src/path-value/get.ts","../src/path-value/set.ts","../src/path-info/module.ts","../src/path-info/helper.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/**\n * @see https://github.com/express-validator/express-validator/blob/bec1dcbaa29002dcd21093ec84818c4671063b5d/src/field-selection.ts#L214\n * @param parts\n */\nexport function arrayToPath(parts: readonly string[]) : string {\n return parts.reduce((prev, segment) => {\n let part = '';\n\n segment = segment.replace(/^\\[(\\d+)]$/g, '\\\\[$1]');\n segment = segment.replace(/\\./g, '\\\\.');\n\n if (/^\\d+$/.test(segment)) {\n // Index access\n part = `[${segment}]`;\n } else if (prev) {\n // Object key access\n part = `.${segment}`;\n } else {\n // Top level key\n part = segment;\n }\n\n return prev + part;\n }, '');\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport const BRACKET_NUMBER_REGEX = /(?<!\\\\)\\[(\\d+)]$/;\n\n/**\n * Convert string to property path array.\n *\n * @see https://github.com/lodash/lodash/blob/main/src/.internal/stringToPath.ts\n * @see https://github.com/chaijs/pathval\n *\n * @param segment\n */\nexport function pathToArray(segment: string) : string[] {\n const str = segment.replace(/([^\\\\])\\[/g, '$1.[');\n const parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n if (!parts) {\n return [];\n }\n\n const result : string[] = [];\n\n for (let i = 0; i < parts.length; i++) {\n if (\n parts[i] === 'constructor' ||\n parts[i] === '__proto__' ||\n parts[i] === 'prototype'\n ) {\n continue;\n }\n\n const regex = BRACKET_NUMBER_REGEX.exec(parts[i]);\n if (regex) {\n result.push(regex[1]);\n } else {\n result.push(parts[i].replace(/\\\\([.[\\]])/g, '$1'));\n }\n }\n\n return result;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum Character {\n WILDCARD = '*',\n GLOBSTAR = '**',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(input: unknown) : input is Record<string, any> {\n return !!input &&\n typeof input === 'object' &&\n !Array.isArray(input);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Character } from './constants';\nimport type { PathExpanded } from './types';\nimport { isObject } from '../utils';\nimport { arrayToPath, pathToArray } from '../helpers';\n\nfunction expandPathVerboseInternal(\n data: Record<string, any>,\n path: string | string[],\n currPath: readonly string[] = [],\n currMatches: readonly (string | string[])[] = [],\n): PathExpanded[] {\n const segments = Array.isArray(path) ? path : pathToArray(path);\n if (!segments.length) {\n // no more paths to traverse\n return [\n {\n value: arrayToPath(currPath),\n matches: currMatches,\n },\n ];\n }\n\n const key = segments[0];\n const rest = segments.slice(1);\n\n if (\n typeof data !== 'undefined' &&\n data !== null &&\n !isObject(data) &&\n !Array.isArray(data)\n ) {\n if (key === Character.GLOBSTAR) {\n if (!rest.length) {\n // globstar leaves are always selected\n return [\n {\n value: arrayToPath(currPath),\n matches: currMatches,\n },\n ];\n }\n\n return [];\n }\n\n if (key === Character.WILDCARD) {\n return [];\n }\n\n // value is a primitive, paths being traversed from here might be in their prototype,\n // return the entire path\n return [{ value: arrayToPath([...currPath, ...segments]), matches: currMatches }];\n }\n\n // Use a non-null value so that non-existing fields are still selected\n data = data || {};\n\n if (key === Character.WILDCARD) {\n return Object.keys(data)\n .flatMap((key) => expandPathVerboseInternal(\n data[key],\n arrayToPath(rest),\n currPath.concat(key),\n currMatches.concat(key),\n ));\n }\n\n if (key === Character.GLOBSTAR) {\n return Object.keys(data)\n .flatMap((key) => {\n const nextPath = currPath.concat(key);\n const value = data[key];\n\n // recursively find matching sub-paths & skip the first remaining segment, if it matches the current key\n const children = expandPathVerboseInternal(value, arrayToPath(segments), nextPath, [key])\n .concat(rest[0] === key ? expandPathVerboseInternal(value, arrayToPath(rest.slice(1)), nextPath, []) : []);\n\n const pathMatches : string[] = [];\n const output : PathExpanded[] = [];\n for (let i = 0; i < children.length; i++) {\n /* istanbul ignore next */\n if (pathMatches.indexOf(children[i].value) !== -1) {\n continue;\n }\n\n pathMatches.push(children[i].value);\n\n output.push({\n value: children[i].value,\n matches: children[i].matches.length > 0 ?\n [...currMatches, children[i].matches.flat()] :\n currMatches,\n });\n }\n\n return output;\n });\n }\n\n return expandPathVerboseInternal(data[key], rest, currPath.concat(key), currMatches);\n}\n\n/**\n * Verbose expand wildcard and glob patterns.\n * Track wildcard/glob pattern matches.\n *\n * @param data\n * @param path\n */\nexport function expandPathVerbose(\n data: Record<string, any>,\n path: string | string[],\n): PathExpanded[] {\n return expandPathVerboseInternal(data, path);\n}\n\n/**\n * Expand wildcard and glob patterns to paths.\n *\n * @param data\n * @param path\n */\nexport function expandPath(\n data: Record<string, any>,\n path: string | string[],\n): string[] {\n return expandPathVerbose(data, path)\n .map((el) => el.value);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pathToArray } from '../helpers';\n\nexport function getPathValue(\n data: unknown,\n path: string | string[],\n): unknown {\n const parts = Array.isArray(path) ?\n path :\n pathToArray(path);\n\n let res : unknown | undefined;\n let temp = data;\n let index = 0;\n while (index < parts.length) {\n if (temp === null || typeof temp === 'undefined') {\n break;\n }\n\n if (parts[index] in Object(temp)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n temp = temp[parts[index]];\n } else {\n break;\n }\n\n if (index === parts.length - 1) {\n res = temp;\n }\n\n index++;\n }\n\n return res;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pathToArray } from '../helpers';\nimport { isObject } from '../utils';\n\nconst NUMBER_REGEX = /^\\d+$/;\n\nexport function setPathValue(\n data: Record<string, any> | Record<string, any>[],\n path: string | string[],\n value: unknown,\n) {\n const parts = Array.isArray(path) ?\n path :\n pathToArray(path);\n\n let temp = data;\n let index = 0;\n while (index < parts.length) {\n /* istanbul ignore next */\n if (!Array.isArray(temp) && !isObject(temp)) {\n break;\n }\n\n const key = parts[index] as keyof typeof temp;\n\n // [foo, '0']\n if (typeof temp[key] === 'undefined') {\n const match = NUMBER_REGEX.test(key);\n if (match) {\n (temp as Record<string, any>)[key] = [];\n } else {\n temp[key] = {};\n }\n }\n\n if (index === parts.length - 1) {\n temp[key] = value;\n break;\n }\n\n index++;\n temp = temp[key];\n }\n\n return data;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getPathValue } from '../path-value/get';\nimport { pathToArray } from '../helpers';\n\nexport class PathInfo {\n protected data: unknown;\n\n protected pathParts: string[];\n\n protected _value: unknown;\n\n protected _parent: PathInfo | null | undefined;\n\n protected _exists: boolean | undefined;\n\n constructor(data: unknown, path: string | string[]) {\n this.data = data;\n\n if (Array.isArray(path)) {\n this.pathParts = path;\n } else {\n this.pathParts = pathToArray(path);\n }\n }\n\n get value() {\n if (typeof this._value !== 'undefined') {\n return this._value;\n }\n\n if (this.pathParts.length > 0) {\n this._value = getPathValue(this.data, this.pathParts);\n } else {\n this._value = this.data;\n }\n\n return this._value;\n }\n\n get name() : string | null {\n if (this.pathParts.length > 0) {\n return this.pathParts[this.pathParts.length - 1];\n }\n\n return null;\n }\n\n get parent() : PathInfo | null {\n if (typeof this._parent !== 'undefined') {\n return this._parent;\n }\n\n if (this.pathParts.length === 0) {\n this._parent = null;\n return this._parent;\n }\n\n if (this.pathParts.length > 1) {\n this._parent = new PathInfo(\n this.data,\n this.pathParts.slice(0, this.pathParts.length - 1),\n );\n } else {\n this._parent = new PathInfo(this.data, []);\n }\n\n return this._parent;\n }\n\n get exists() : boolean {\n if (typeof this._exists !== 'undefined') {\n return this._exists;\n }\n\n if (!this.name || !this.parent) {\n this._exists = true;\n return this._exists;\n }\n\n if (\n this.parent.value !== null &&\n typeof this.parent.value !== 'undefined'\n ) {\n this._exists = this.name in Object(this.parent.value);\n } else {\n this._exists = false;\n }\n\n return this._exists;\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PathInfo } from './module';\n\nexport function getPathInfo(\n data: Record<string, any>,\n path: string | string[],\n) : PathInfo {\n return new PathInfo(data, path);\n}\n"],"names":["arrayToPath","parts","reduce","prev","segment","part","replace","test","BRACKET_NUMBER_REGEX","pathToArray","str","match","result","i","length","regex","exec","push","Character","isObject","input","Array","isArray","expandPathVerboseInternal","data","path","currPath","currMatches","segments","value","matches","key","rest","slice","GLOBSTAR","WILDCARD","Object","keys","flatMap","concat","nextPath","children","pathMatches","output","indexOf","flat","expandPathVerbose","expandPath","map","el","getPathValue","res","temp","index","NUMBER_REGEX","setPathValue","PathInfo","_value","pathParts","name","parent","_parent","exists","_exists","constructor","getPathInfo"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -79,12 +79,15 @@
|
|
|
79
79
|
return !!input && typeof input === 'object' && !Array.isArray(input);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
function
|
|
82
|
+
function expandPathVerboseInternal(data, path, currPath = [], currMatches = []) {
|
|
83
83
|
const segments = Array.isArray(path) ? path : pathToArray(path);
|
|
84
84
|
if (!segments.length) {
|
|
85
85
|
// no more paths to traverse
|
|
86
86
|
return [
|
|
87
|
-
|
|
87
|
+
{
|
|
88
|
+
value: arrayToPath(currPath),
|
|
89
|
+
matches: currMatches
|
|
90
|
+
}
|
|
88
91
|
];
|
|
89
92
|
}
|
|
90
93
|
const key = segments[0];
|
|
@@ -94,7 +97,10 @@ function expandPathInternal(data, path, currPath = []) {
|
|
|
94
97
|
if (!rest.length) {
|
|
95
98
|
// globstar leaves are always selected
|
|
96
99
|
return [
|
|
97
|
-
|
|
100
|
+
{
|
|
101
|
+
value: arrayToPath(currPath),
|
|
102
|
+
matches: currMatches
|
|
103
|
+
}
|
|
98
104
|
];
|
|
99
105
|
}
|
|
100
106
|
return [];
|
|
@@ -105,33 +111,56 @@ function expandPathInternal(data, path, currPath = []) {
|
|
|
105
111
|
// value is a primitive, paths being traversed from here might be in their prototype,
|
|
106
112
|
// return the entire path
|
|
107
113
|
return [
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
114
|
+
{
|
|
115
|
+
value: arrayToPath([
|
|
116
|
+
...currPath,
|
|
117
|
+
...segments
|
|
118
|
+
]),
|
|
119
|
+
matches: currMatches
|
|
120
|
+
}
|
|
112
121
|
];
|
|
113
122
|
}
|
|
114
123
|
// Use a non-null value so that non-existing fields are still selected
|
|
115
124
|
data = data || {};
|
|
116
125
|
if (key === Character.WILDCARD) {
|
|
117
|
-
return Object.keys(data).flatMap((key)=>
|
|
126
|
+
return Object.keys(data).flatMap((key)=>expandPathVerboseInternal(data[key], arrayToPath(rest), currPath.concat(key), currMatches.concat(key)));
|
|
118
127
|
}
|
|
119
128
|
if (key === Character.GLOBSTAR) {
|
|
120
129
|
return Object.keys(data).flatMap((key)=>{
|
|
121
130
|
const nextPath = currPath.concat(key);
|
|
122
131
|
const value = data[key];
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
]
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
+
// recursively find matching sub-paths & skip the first remaining segment, if it matches the current key
|
|
133
|
+
const children = expandPathVerboseInternal(value, arrayToPath(segments), nextPath, [
|
|
134
|
+
key
|
|
135
|
+
]).concat(rest[0] === key ? expandPathVerboseInternal(value, arrayToPath(rest.slice(1)), nextPath, []) : []);
|
|
136
|
+
const pathMatches = [];
|
|
137
|
+
const output = [];
|
|
138
|
+
for(let i = 0; i < children.length; i++){
|
|
139
|
+
/* istanbul ignore next */ if (pathMatches.indexOf(children[i].value) !== -1) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
pathMatches.push(children[i].value);
|
|
143
|
+
output.push({
|
|
144
|
+
value: children[i].value,
|
|
145
|
+
matches: children[i].matches.length > 0 ? [
|
|
146
|
+
...currMatches,
|
|
147
|
+
children[i].matches.flat()
|
|
148
|
+
] : currMatches
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return output;
|
|
132
152
|
});
|
|
133
153
|
}
|
|
134
|
-
return
|
|
154
|
+
return expandPathVerboseInternal(data[key], rest, currPath.concat(key), currMatches);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Verbose expand wildcard and glob patterns.
|
|
158
|
+
* Track wildcard/glob pattern matches.
|
|
159
|
+
*
|
|
160
|
+
* @param data
|
|
161
|
+
* @param path
|
|
162
|
+
*/ function expandPathVerbose(data, path) {
|
|
163
|
+
return expandPathVerboseInternal(data, path);
|
|
135
164
|
}
|
|
136
165
|
/**
|
|
137
166
|
* Expand wildcard and glob patterns to paths.
|
|
@@ -139,7 +168,7 @@ function expandPathInternal(data, path, currPath = []) {
|
|
|
139
168
|
* @param data
|
|
140
169
|
* @param path
|
|
141
170
|
*/ function expandPath(data, path) {
|
|
142
|
-
return
|
|
171
|
+
return expandPathVerbose(data, path).map((el)=>el.value);
|
|
143
172
|
}
|
|
144
173
|
|
|
145
174
|
function getPathValue(data, path) {
|
|
@@ -166,6 +195,35 @@ function getPathValue(data, path) {
|
|
|
166
195
|
return res;
|
|
167
196
|
}
|
|
168
197
|
|
|
198
|
+
const NUMBER_REGEX = /^\d+$/;
|
|
199
|
+
function setPathValue(data, path, value) {
|
|
200
|
+
const parts = Array.isArray(path) ? path : pathToArray(path);
|
|
201
|
+
let temp = data;
|
|
202
|
+
let index = 0;
|
|
203
|
+
while(index < parts.length){
|
|
204
|
+
/* istanbul ignore next */ if (!Array.isArray(temp) && !isObject(temp)) {
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
const key = parts[index];
|
|
208
|
+
// [foo, '0']
|
|
209
|
+
if (typeof temp[key] === 'undefined') {
|
|
210
|
+
const match = NUMBER_REGEX.test(key);
|
|
211
|
+
if (match) {
|
|
212
|
+
temp[key] = [];
|
|
213
|
+
} else {
|
|
214
|
+
temp[key] = {};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (index === parts.length - 1) {
|
|
218
|
+
temp[key] = value;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
index++;
|
|
222
|
+
temp = temp[key];
|
|
223
|
+
}
|
|
224
|
+
return data;
|
|
225
|
+
}
|
|
226
|
+
|
|
169
227
|
class PathInfo {
|
|
170
228
|
get value() {
|
|
171
229
|
if (typeof this._value !== 'undefined') {
|
|
@@ -228,34 +286,5 @@ function getPathInfo(data, path) {
|
|
|
228
286
|
return new PathInfo(data, path);
|
|
229
287
|
}
|
|
230
288
|
|
|
231
|
-
|
|
232
|
-
function setPathValue(data, path, value) {
|
|
233
|
-
const parts = Array.isArray(path) ? path : pathToArray(path);
|
|
234
|
-
let temp = data;
|
|
235
|
-
let index = 0;
|
|
236
|
-
while(index < parts.length){
|
|
237
|
-
/* istanbul ignore next */ if (!Array.isArray(temp) && !isObject(temp)) {
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
const key = parts[index];
|
|
241
|
-
// [foo, '0']
|
|
242
|
-
if (typeof temp[key] === 'undefined') {
|
|
243
|
-
const match = NUMBER_REGEX.test(key);
|
|
244
|
-
if (match) {
|
|
245
|
-
temp[key] = [];
|
|
246
|
-
} else {
|
|
247
|
-
temp[key] = {};
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
if (index === parts.length - 1) {
|
|
251
|
-
temp[key] = value;
|
|
252
|
-
break;
|
|
253
|
-
}
|
|
254
|
-
index++;
|
|
255
|
-
temp = temp[key];
|
|
256
|
-
}
|
|
257
|
-
return data;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
export { BRACKET_NUMBER_REGEX, arrayToPath, expandPath, getPathInfo, getPathValue, pathToArray, setPathValue };
|
|
289
|
+
export { BRACKET_NUMBER_REGEX, PathInfo, arrayToPath, expandPath, expandPathVerbose, getPathInfo, getPathValue, pathToArray, setPathValue };
|
|
261
290
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/helpers/array-to-path.ts","../src/helpers/path-to-array.ts","../src/constants.ts","../src/utils/is-object.ts","../src/expand-path.ts","../src/get-path-value.ts","../src/path-info.ts","../src/get-path-info.ts","../src/set-path-value.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/**\n * @see https://github.com/express-validator/express-validator/blob/bec1dcbaa29002dcd21093ec84818c4671063b5d/src/field-selection.ts#L214\n * @param parts\n */\nexport function arrayToPath(parts: readonly string[]) : string {\n return parts.reduce((prev, segment) => {\n let part = '';\n\n segment = segment.replace(/^\\[(\\d+)]$/g, '\\\\[$1]');\n segment = segment.replace(/\\./g, '\\\\.');\n\n if (/^\\d+$/.test(segment)) {\n // Index access\n part = `[${segment}]`;\n } else if (prev) {\n // Object key access\n part = `.${segment}`;\n } else {\n // Top level key\n part = segment;\n }\n\n return prev + part;\n }, '');\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport const BRACKET_NUMBER_REGEX = /(?<!\\\\)\\[(\\d+)]$/;\n\n/**\n * Convert string to property path array.\n *\n * @see https://github.com/lodash/lodash/blob/main/src/.internal/stringToPath.ts\n * @see https://github.com/chaijs/pathval\n *\n * @param segment\n */\nexport function pathToArray(segment: string) : string[] {\n const str = segment.replace(/([^\\\\])\\[/g, '$1.[');\n const parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n if (!parts) {\n return [];\n }\n\n const result : string[] = [];\n\n for (let i = 0; i < parts.length; i++) {\n if (\n parts[i] === 'constructor' ||\n parts[i] === '__proto__' ||\n parts[i] === 'prototype'\n ) {\n continue;\n }\n\n const regex = BRACKET_NUMBER_REGEX.exec(parts[i]);\n if (regex) {\n result.push(regex[1]);\n } else {\n result.push(parts[i].replace(/\\\\([.[\\]])/g, '$1'));\n }\n }\n\n return result;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum Character {\n WILDCARD = '*',\n GLOBSTAR = '**',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(input: unknown) : input is Record<string, any> {\n return !!input &&\n typeof input === 'object' &&\n !Array.isArray(input);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Character } from './constants';\nimport { isObject } from './utils';\nimport { arrayToPath, pathToArray } from './helpers';\n\nfunction expandPathInternal(\n data: Record<string, any>,\n path: string | string[],\n currPath: readonly string[] = [],\n): string[] {\n const segments = Array.isArray(path) ? path : pathToArray(path);\n if (!segments.length) {\n // no more paths to traverse\n return [arrayToPath(currPath)];\n }\n\n const key = segments[0];\n const rest = segments.slice(1);\n\n if (\n typeof data !== 'undefined' &&\n data !== null &&\n !isObject(data) &&\n !Array.isArray(data)\n ) {\n if (key === Character.GLOBSTAR) {\n if (!rest.length) {\n // globstar leaves are always selected\n return [arrayToPath(currPath)];\n }\n\n return [];\n }\n\n if (key === Character.WILDCARD) {\n return [];\n }\n\n // value is a primitive, paths being traversed from here might be in their prototype,\n // return the entire path\n return [arrayToPath([...currPath, ...segments])];\n }\n\n // Use a non-null value so that non-existing fields are still selected\n data = data || {};\n\n if (key === Character.WILDCARD) {\n return Object.keys(data)\n .flatMap((key) => expandPathInternal(data[key], arrayToPath(rest), currPath.concat(key)));\n }\n\n if (key === Character.GLOBSTAR) {\n return Object.keys(data)\n .flatMap((key) => {\n const nextPath = currPath.concat(key);\n const value = data[key];\n const set = new Set([\n // recursively find matching sub-paths\n ...expandPathInternal(value, arrayToPath(segments), nextPath),\n // skip the first remaining segment, if it matches the current key\n ...(rest[0] === key ? expandPathInternal(value, arrayToPath(rest.slice(1)), nextPath) : []),\n ]);\n\n return [...set];\n });\n }\n\n return expandPathInternal(data[key], rest, currPath.concat(key));\n}\n\n/**\n * Expand wildcard and glob patterns to paths.\n *\n * @param data\n * @param path\n */\nexport function expandPath(\n data: Record<string, any>,\n path: string | string[],\n): string[] {\n return expandPathInternal(data, path);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pathToArray } from './helpers';\n\nexport function getPathValue(\n data: unknown,\n path: string | string[],\n): unknown {\n const parts = Array.isArray(path) ?\n path :\n pathToArray(path);\n\n let res : unknown | undefined;\n let temp = data;\n let index = 0;\n while (index < parts.length) {\n if (temp === null || typeof temp === 'undefined') {\n break;\n }\n\n if (parts[index] in Object(temp)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n temp = temp[parts[index]];\n } else {\n break;\n }\n\n if (index === parts.length - 1) {\n res = temp;\n }\n\n index++;\n }\n\n return res;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getPathValue } from './get-path-value';\nimport { pathToArray } from './helpers';\n\nexport class PathInfo {\n protected data: unknown;\n\n protected pathParts: string[];\n\n protected _value: unknown;\n\n protected _parent: PathInfo | null | undefined;\n\n protected _exists: boolean | undefined;\n\n constructor(data: unknown, path: string | string[]) {\n this.data = data;\n\n if (Array.isArray(path)) {\n this.pathParts = path;\n } else {\n this.pathParts = pathToArray(path);\n }\n }\n\n get value() {\n if (typeof this._value !== 'undefined') {\n return this._value;\n }\n\n if (this.pathParts.length > 0) {\n this._value = getPathValue(this.data, this.pathParts);\n } else {\n this._value = this.data;\n }\n\n return this._value;\n }\n\n get name() : string | null {\n if (this.pathParts.length > 0) {\n return this.pathParts[this.pathParts.length - 1];\n }\n\n return null;\n }\n\n get parent() : PathInfo | null {\n if (typeof this._parent !== 'undefined') {\n return this._parent;\n }\n\n if (this.pathParts.length === 0) {\n this._parent = null;\n return this._parent;\n }\n\n if (this.pathParts.length > 1) {\n this._parent = new PathInfo(\n this.data,\n this.pathParts.slice(0, this.pathParts.length - 1),\n );\n } else {\n this._parent = new PathInfo(this.data, []);\n }\n\n return this._parent;\n }\n\n get exists() : boolean {\n if (typeof this._exists !== 'undefined') {\n return this._exists;\n }\n\n if (!this.name || !this.parent) {\n this._exists = true;\n return this._exists;\n }\n\n if (\n this.parent.value !== null &&\n typeof this.parent.value !== 'undefined'\n ) {\n this._exists = this.name in Object(this.parent.value);\n } else {\n this._exists = false;\n }\n\n return this._exists;\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PathInfo } from './path-info';\n\nexport function getPathInfo(\n data: Record<string, any>,\n path: string | string[],\n) : PathInfo {\n return new PathInfo(data, path);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pathToArray } from './helpers';\nimport { isObject } from './utils';\n\nconst NUMBER_REGEX = /^\\d+$/;\n\nexport function setPathValue(\n data: Record<string, any> | Record<string, any>[],\n path: string | string[],\n value: unknown,\n) {\n const parts = Array.isArray(path) ?\n path :\n pathToArray(path);\n\n let temp = data;\n let index = 0;\n while (index < parts.length) {\n /* istanbul ignore next */\n if (!Array.isArray(temp) && !isObject(temp)) {\n break;\n }\n\n const key = parts[index] as keyof typeof temp;\n\n // [foo, '0']\n if (typeof temp[key] === 'undefined') {\n const match = NUMBER_REGEX.test(key);\n if (match) {\n (temp as Record<string, any>)[key] = [];\n } else {\n temp[key] = {};\n }\n }\n\n if (index === parts.length - 1) {\n temp[key] = value;\n break;\n }\n\n index++;\n temp = temp[key];\n }\n\n return data;\n}\n"],"names":["arrayToPath","parts","reduce","prev","segment","part","replace","test","BRACKET_NUMBER_REGEX","pathToArray","str","match","result","i","length","regex","exec","push","Character","isObject","input","Array","isArray","expandPathInternal","data","path","currPath","segments","key","rest","slice","GLOBSTAR","WILDCARD","Object","keys","flatMap","concat","nextPath","value","set","Set","expandPath","getPathValue","res","temp","index","PathInfo","_value","pathParts","name","parent","_parent","exists","_exists","constructor","getPathInfo","NUMBER_REGEX","setPathValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/helpers/array-to-path.ts","../src/helpers/path-to-array.ts","../src/path-expand/constants.ts","../src/utils/is-object.ts","../src/path-expand/module.ts","../src/path-value/get.ts","../src/path-value/set.ts","../src/path-info/module.ts","../src/path-info/helper.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n/**\n * @see https://github.com/express-validator/express-validator/blob/bec1dcbaa29002dcd21093ec84818c4671063b5d/src/field-selection.ts#L214\n * @param parts\n */\nexport function arrayToPath(parts: readonly string[]) : string {\n return parts.reduce((prev, segment) => {\n let part = '';\n\n segment = segment.replace(/^\\[(\\d+)]$/g, '\\\\[$1]');\n segment = segment.replace(/\\./g, '\\\\.');\n\n if (/^\\d+$/.test(segment)) {\n // Index access\n part = `[${segment}]`;\n } else if (prev) {\n // Object key access\n part = `.${segment}`;\n } else {\n // Top level key\n part = segment;\n }\n\n return prev + part;\n }, '');\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport const BRACKET_NUMBER_REGEX = /(?<!\\\\)\\[(\\d+)]$/;\n\n/**\n * Convert string to property path array.\n *\n * @see https://github.com/lodash/lodash/blob/main/src/.internal/stringToPath.ts\n * @see https://github.com/chaijs/pathval\n *\n * @param segment\n */\nexport function pathToArray(segment: string) : string[] {\n const str = segment.replace(/([^\\\\])\\[/g, '$1.[');\n const parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n if (!parts) {\n return [];\n }\n\n const result : string[] = [];\n\n for (let i = 0; i < parts.length; i++) {\n if (\n parts[i] === 'constructor' ||\n parts[i] === '__proto__' ||\n parts[i] === 'prototype'\n ) {\n continue;\n }\n\n const regex = BRACKET_NUMBER_REGEX.exec(parts[i]);\n if (regex) {\n result.push(regex[1]);\n } else {\n result.push(parts[i].replace(/\\\\([.[\\]])/g, '$1'));\n }\n }\n\n return result;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum Character {\n WILDCARD = '*',\n GLOBSTAR = '**',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function isObject(input: unknown) : input is Record<string, any> {\n return !!input &&\n typeof input === 'object' &&\n !Array.isArray(input);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Character } from './constants';\nimport type { PathExpanded } from './types';\nimport { isObject } from '../utils';\nimport { arrayToPath, pathToArray } from '../helpers';\n\nfunction expandPathVerboseInternal(\n data: Record<string, any>,\n path: string | string[],\n currPath: readonly string[] = [],\n currMatches: readonly (string | string[])[] = [],\n): PathExpanded[] {\n const segments = Array.isArray(path) ? path : pathToArray(path);\n if (!segments.length) {\n // no more paths to traverse\n return [\n {\n value: arrayToPath(currPath),\n matches: currMatches,\n },\n ];\n }\n\n const key = segments[0];\n const rest = segments.slice(1);\n\n if (\n typeof data !== 'undefined' &&\n data !== null &&\n !isObject(data) &&\n !Array.isArray(data)\n ) {\n if (key === Character.GLOBSTAR) {\n if (!rest.length) {\n // globstar leaves are always selected\n return [\n {\n value: arrayToPath(currPath),\n matches: currMatches,\n },\n ];\n }\n\n return [];\n }\n\n if (key === Character.WILDCARD) {\n return [];\n }\n\n // value is a primitive, paths being traversed from here might be in their prototype,\n // return the entire path\n return [{ value: arrayToPath([...currPath, ...segments]), matches: currMatches }];\n }\n\n // Use a non-null value so that non-existing fields are still selected\n data = data || {};\n\n if (key === Character.WILDCARD) {\n return Object.keys(data)\n .flatMap((key) => expandPathVerboseInternal(\n data[key],\n arrayToPath(rest),\n currPath.concat(key),\n currMatches.concat(key),\n ));\n }\n\n if (key === Character.GLOBSTAR) {\n return Object.keys(data)\n .flatMap((key) => {\n const nextPath = currPath.concat(key);\n const value = data[key];\n\n // recursively find matching sub-paths & skip the first remaining segment, if it matches the current key\n const children = expandPathVerboseInternal(value, arrayToPath(segments), nextPath, [key])\n .concat(rest[0] === key ? expandPathVerboseInternal(value, arrayToPath(rest.slice(1)), nextPath, []) : []);\n\n const pathMatches : string[] = [];\n const output : PathExpanded[] = [];\n for (let i = 0; i < children.length; i++) {\n /* istanbul ignore next */\n if (pathMatches.indexOf(children[i].value) !== -1) {\n continue;\n }\n\n pathMatches.push(children[i].value);\n\n output.push({\n value: children[i].value,\n matches: children[i].matches.length > 0 ?\n [...currMatches, children[i].matches.flat()] :\n currMatches,\n });\n }\n\n return output;\n });\n }\n\n return expandPathVerboseInternal(data[key], rest, currPath.concat(key), currMatches);\n}\n\n/**\n * Verbose expand wildcard and glob patterns.\n * Track wildcard/glob pattern matches.\n *\n * @param data\n * @param path\n */\nexport function expandPathVerbose(\n data: Record<string, any>,\n path: string | string[],\n): PathExpanded[] {\n return expandPathVerboseInternal(data, path);\n}\n\n/**\n * Expand wildcard and glob patterns to paths.\n *\n * @param data\n * @param path\n */\nexport function expandPath(\n data: Record<string, any>,\n path: string | string[],\n): string[] {\n return expandPathVerbose(data, path)\n .map((el) => el.value);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pathToArray } from '../helpers';\n\nexport function getPathValue(\n data: unknown,\n path: string | string[],\n): unknown {\n const parts = Array.isArray(path) ?\n path :\n pathToArray(path);\n\n let res : unknown | undefined;\n let temp = data;\n let index = 0;\n while (index < parts.length) {\n if (temp === null || typeof temp === 'undefined') {\n break;\n }\n\n if (parts[index] in Object(temp)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n temp = temp[parts[index]];\n } else {\n break;\n }\n\n if (index === parts.length - 1) {\n res = temp;\n }\n\n index++;\n }\n\n return res;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pathToArray } from '../helpers';\nimport { isObject } from '../utils';\n\nconst NUMBER_REGEX = /^\\d+$/;\n\nexport function setPathValue(\n data: Record<string, any> | Record<string, any>[],\n path: string | string[],\n value: unknown,\n) {\n const parts = Array.isArray(path) ?\n path :\n pathToArray(path);\n\n let temp = data;\n let index = 0;\n while (index < parts.length) {\n /* istanbul ignore next */\n if (!Array.isArray(temp) && !isObject(temp)) {\n break;\n }\n\n const key = parts[index] as keyof typeof temp;\n\n // [foo, '0']\n if (typeof temp[key] === 'undefined') {\n const match = NUMBER_REGEX.test(key);\n if (match) {\n (temp as Record<string, any>)[key] = [];\n } else {\n temp[key] = {};\n }\n }\n\n if (index === parts.length - 1) {\n temp[key] = value;\n break;\n }\n\n index++;\n temp = temp[key];\n }\n\n return data;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getPathValue } from '../path-value/get';\nimport { pathToArray } from '../helpers';\n\nexport class PathInfo {\n protected data: unknown;\n\n protected pathParts: string[];\n\n protected _value: unknown;\n\n protected _parent: PathInfo | null | undefined;\n\n protected _exists: boolean | undefined;\n\n constructor(data: unknown, path: string | string[]) {\n this.data = data;\n\n if (Array.isArray(path)) {\n this.pathParts = path;\n } else {\n this.pathParts = pathToArray(path);\n }\n }\n\n get value() {\n if (typeof this._value !== 'undefined') {\n return this._value;\n }\n\n if (this.pathParts.length > 0) {\n this._value = getPathValue(this.data, this.pathParts);\n } else {\n this._value = this.data;\n }\n\n return this._value;\n }\n\n get name() : string | null {\n if (this.pathParts.length > 0) {\n return this.pathParts[this.pathParts.length - 1];\n }\n\n return null;\n }\n\n get parent() : PathInfo | null {\n if (typeof this._parent !== 'undefined') {\n return this._parent;\n }\n\n if (this.pathParts.length === 0) {\n this._parent = null;\n return this._parent;\n }\n\n if (this.pathParts.length > 1) {\n this._parent = new PathInfo(\n this.data,\n this.pathParts.slice(0, this.pathParts.length - 1),\n );\n } else {\n this._parent = new PathInfo(this.data, []);\n }\n\n return this._parent;\n }\n\n get exists() : boolean {\n if (typeof this._exists !== 'undefined') {\n return this._exists;\n }\n\n if (!this.name || !this.parent) {\n this._exists = true;\n return this._exists;\n }\n\n if (\n this.parent.value !== null &&\n typeof this.parent.value !== 'undefined'\n ) {\n this._exists = this.name in Object(this.parent.value);\n } else {\n this._exists = false;\n }\n\n return this._exists;\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PathInfo } from './module';\n\nexport function getPathInfo(\n data: Record<string, any>,\n path: string | string[],\n) : PathInfo {\n return new PathInfo(data, path);\n}\n"],"names":["arrayToPath","parts","reduce","prev","segment","part","replace","test","BRACKET_NUMBER_REGEX","pathToArray","str","match","result","i","length","regex","exec","push","Character","isObject","input","Array","isArray","expandPathVerboseInternal","data","path","currPath","currMatches","segments","value","matches","key","rest","slice","GLOBSTAR","WILDCARD","Object","keys","flatMap","concat","nextPath","children","pathMatches","output","indexOf","flat","expandPathVerbose","expandPath","map","el","getPathValue","res","temp","index","NUMBER_REGEX","setPathValue","PathInfo","_value","pathParts","name","parent","_parent","exists","_exists","constructor","getPathInfo"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PathExpanded } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Verbose expand wildcard and glob patterns.
|
|
4
|
+
* Track wildcard/glob pattern matches.
|
|
5
|
+
*
|
|
6
|
+
* @param data
|
|
7
|
+
* @param path
|
|
8
|
+
*/
|
|
9
|
+
export declare function expandPathVerbose(data: Record<string, any>, path: string | string[]): PathExpanded[];
|
|
10
|
+
/**
|
|
11
|
+
* Expand wildcard and glob patterns to paths.
|
|
12
|
+
*
|
|
13
|
+
* @param data
|
|
14
|
+
* @param path
|
|
15
|
+
*/
|
|
16
|
+
export declare function expandPath(data: Record<string, any>, path: string | string[]): string[];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { PathInfo } from './
|
|
1
|
+
import { PathInfo } from './module';
|
|
2
2
|
export declare function getPathInfo(data: Record<string, any>, path: string | string[]): PathInfo;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pathtrace",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Simplifies working with nested objects and arrays by providing easy methods to retrieve, set, and check values at any path.",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./package.json": "./package.json",
|
|
@@ -26,11 +26,13 @@
|
|
|
26
26
|
"lint:fix": "npm run lint -- --fix"
|
|
27
27
|
},
|
|
28
28
|
"keywords": [
|
|
29
|
-
"nested-objects",
|
|
30
29
|
"path",
|
|
31
|
-
"path-retrival",
|
|
32
|
-
"javascript",
|
|
33
30
|
"path-info",
|
|
31
|
+
"path-value",
|
|
32
|
+
"expand-path",
|
|
33
|
+
"path-retrival",
|
|
34
|
+
"get-path",
|
|
35
|
+
"nested-objects",
|
|
34
36
|
"deep-access"
|
|
35
37
|
],
|
|
36
38
|
"author": {
|
|
@@ -51,18 +53,18 @@
|
|
|
51
53
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
52
54
|
"@rollup/plugin-swc": "^0.3.1",
|
|
53
55
|
"@swc/jest": "^0.2.36",
|
|
54
|
-
"@tada5hi/commitlint-config": "^1.2.
|
|
55
|
-
"@tada5hi/eslint-config-typescript": "^1.2.
|
|
56
|
+
"@tada5hi/commitlint-config": "^1.2.2",
|
|
57
|
+
"@tada5hi/eslint-config-typescript": "^1.2.12",
|
|
56
58
|
"@tada5hi/semantic-release": "^0.3.1",
|
|
57
59
|
"@tada5hi/tsconfig": "^0.5.1",
|
|
58
60
|
"@types/jest": "^29.5.12",
|
|
59
|
-
"@types/node": "^22.5.
|
|
61
|
+
"@types/node": "^22.5.2",
|
|
60
62
|
"@types/pathval": "^1.1.2",
|
|
61
63
|
"cross-env": "^7.0.3",
|
|
62
64
|
"eslint": "^8.37.0",
|
|
63
65
|
"husky": "^9.0.11",
|
|
64
66
|
"jest": "^29.7.0",
|
|
65
|
-
"rollup": "^4.21.
|
|
67
|
+
"rollup": "^4.21.2",
|
|
66
68
|
"semantic-release": "^22.0.12",
|
|
67
69
|
"ts-jest": "^29.2.5",
|
|
68
70
|
"typescript": "^5.5.4"
|
package/dist/expand-path.d.ts
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|