@tmagic/utils 1.8.0-beta.11 → 1.8.0-beta.13
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/dist/es/index.js +20 -3
- package/dist/tmagic-utils.umd.cjs +1303 -1155
- package/package.json +2 -2
- package/src/index.ts +25 -3
- package/types/index.d.ts +7 -1
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.8.0-beta.
|
|
2
|
+
"version": "1.8.0-beta.13",
|
|
3
3
|
"name": "@tmagic/utils",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"typescript": "^6.0.3",
|
|
38
|
-
"@tmagic/schema": "1.8.0-beta.
|
|
38
|
+
"@tmagic/schema": "1.8.0-beta.13"
|
|
39
39
|
},
|
|
40
40
|
"peerDependenciesMeta": {
|
|
41
41
|
"typescript": {
|
package/src/index.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import { cloneDeep, set as objectSet } from 'lodash-es';
|
|
20
|
+
import { cloneDeep, get as objectGet, set as objectSet } from 'lodash-es';
|
|
21
21
|
|
|
22
22
|
import type {
|
|
23
23
|
DataSchema,
|
|
@@ -308,6 +308,13 @@ export const getKeysArray = (keys: string | number) =>
|
|
|
308
308
|
// 将 array[0] 转成 array.0
|
|
309
309
|
`${keys}`.replace(/\[(\d+)\]/g, '.$1').split('.');
|
|
310
310
|
|
|
311
|
+
/**
|
|
312
|
+
* 判断某一层 key 是否为数组下标(纯数字)
|
|
313
|
+
* @param key 单层 key
|
|
314
|
+
* @returns 是否为数组下标
|
|
315
|
+
*/
|
|
316
|
+
export const isArrayIndex = (key: string | number): boolean => /^\d+$/.test(`${key}`);
|
|
317
|
+
|
|
311
318
|
export const getValueByKeyPath = (
|
|
312
319
|
keys: number | string | string[] = '',
|
|
313
320
|
data: Record<string | number, any> = {},
|
|
@@ -327,8 +334,23 @@ export const getValueByKeyPath = (
|
|
|
327
334
|
}, data);
|
|
328
335
|
};
|
|
329
336
|
|
|
330
|
-
export const setValueByKeyPath = (keys: string | number, value: any, data: Record<string | number, any> = {}): any =>
|
|
331
|
-
|
|
337
|
+
export const setValueByKeyPath = (keys: string | number, value: any, data: Record<string | number, any> = {}): any => {
|
|
338
|
+
if (typeof value === 'undefined') {
|
|
339
|
+
// 仅数组下标场景需要特殊处理:lodash 的 set 会把 undefined 写入数组得到 [undefined],
|
|
340
|
+
// 此处改为只创建父级空数组,避免出现 [undefined]。对象属性场景 undefined 会被 JSON 自然丢弃,保持原行为。
|
|
341
|
+
// 注意:这里将「数字型末级 key」统一按数组下标处理,无法区分数字型对象 key,属于预期内的取舍。
|
|
342
|
+
const keyArray = getKeysArray(keys);
|
|
343
|
+
const lastKey = keyArray[keyArray.length - 1];
|
|
344
|
+
if (keyArray.length > 1 && isArrayIndex(lastKey)) {
|
|
345
|
+
const parentPath = keyArray.slice(0, -1).join('.');
|
|
346
|
+
if (typeof objectGet(data, parentPath) === 'undefined') {
|
|
347
|
+
objectSet(data, parentPath, []);
|
|
348
|
+
}
|
|
349
|
+
return data;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return objectSet(data, keys, value);
|
|
353
|
+
};
|
|
332
354
|
|
|
333
355
|
export const getNodes = (ids: Id[], data: MNode[] = []): MNode[] => {
|
|
334
356
|
const nodes: MNode[] = [];
|
package/types/index.d.ts
CHANGED
|
@@ -87,6 +87,12 @@ declare const isSameDomain: (targetUrl?: string, source?: string) => boolean;
|
|
|
87
87
|
*/
|
|
88
88
|
declare const guid: (digit?: number) => string;
|
|
89
89
|
declare const getKeysArray: (keys: string | number) => string[];
|
|
90
|
+
/**
|
|
91
|
+
* 判断某一层 key 是否为数组下标(纯数字)
|
|
92
|
+
* @param key 单层 key
|
|
93
|
+
* @returns 是否为数组下标
|
|
94
|
+
*/
|
|
95
|
+
declare const isArrayIndex: (key: string | number) => boolean;
|
|
90
96
|
declare const getValueByKeyPath: (keys?: number | string | string[], data?: Record<string | number, any>) => any;
|
|
91
97
|
declare const setValueByKeyPath: (keys: string | number, value: any, data?: Record<string | number, any>) => any;
|
|
92
98
|
declare const getNodes: (ids: Id[], data?: MNode[]) => MNode[];
|
|
@@ -126,4 +132,4 @@ declare const traverseNode: <T extends NodeItem = NodeItem>(node: T, cb: (node:
|
|
|
126
132
|
declare const isValueIncludeDataSource: (value: any) => boolean;
|
|
127
133
|
declare const removeDataSourceFieldPrefix: (id?: string) => string;
|
|
128
134
|
//#endregion
|
|
129
|
-
export { DATA_SOURCE_FIELDS_CHANGE_EVENT_PREFIX, DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX, DATA_SOURCE_SET_DATA_METHOD_NAME, DSL_NODE_KEY_COPY_PREFIX, IS_DSL_NODE_KEY, NodeItem, PAGE_FRAGMENT_CONTAINER_ID_KEY, addClassName, addParamToUrl, asyncLoadCss, asyncLoadJs, calcValueByFontsize, calculatePercentage, compiledCond, compiledNode, convertToNumber, createDiv, dataSourceTemplateRegExp, delQueStr, emptyFn, filterXSS, getDefaultValueFromFields, getDepKeys, getDepNodeIds, getDocument, getElById, getGlobalThis, getHost, getIdFromEl, getKeys, getKeysArray, getNodeInfo, getNodePath, getNodes, getSearchObj, getUrlParam, getValueByKeyPath, guid, injectStyle, isDslNode, isNumber, isObject, isPage, isPageFragment, isPercentage, isPop, isSameDomain, isValueIncludeDataSource, removeClassName, removeClassNameByClassName, removeDataSourceFieldPrefix, replaceChildNode, setDslDomRelateConfig, setIdToEl, setUrlParam, setValueByKeyPath, sleep, toHump, toLine, traverseNode };
|
|
135
|
+
export { DATA_SOURCE_FIELDS_CHANGE_EVENT_PREFIX, DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX, DATA_SOURCE_SET_DATA_METHOD_NAME, DSL_NODE_KEY_COPY_PREFIX, IS_DSL_NODE_KEY, NodeItem, PAGE_FRAGMENT_CONTAINER_ID_KEY, addClassName, addParamToUrl, asyncLoadCss, asyncLoadJs, calcValueByFontsize, calculatePercentage, compiledCond, compiledNode, convertToNumber, createDiv, dataSourceTemplateRegExp, delQueStr, emptyFn, filterXSS, getDefaultValueFromFields, getDepKeys, getDepNodeIds, getDocument, getElById, getGlobalThis, getHost, getIdFromEl, getKeys, getKeysArray, getNodeInfo, getNodePath, getNodes, getSearchObj, getUrlParam, getValueByKeyPath, guid, injectStyle, isArrayIndex, isDslNode, isNumber, isObject, isPage, isPageFragment, isPercentage, isPop, isSameDomain, isValueIncludeDataSource, removeClassName, removeClassNameByClassName, removeDataSourceFieldPrefix, replaceChildNode, setDslDomRelateConfig, setIdToEl, setUrlParam, setValueByKeyPath, sleep, toHump, toLine, traverseNode };
|