@burger-editor/utils 4.0.0-alpha.16 → 4.0.0-alpha.18
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/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/merge-items.d.ts +35 -0
- package/dist/merge-items.js +57 -0
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* マージ操作が可能な汎用型
|
|
3
|
+
* 任意のオブジェクト型にdeleteプロパティを追加する
|
|
4
|
+
*/
|
|
5
|
+
export type Mergeable<T extends Record<string, unknown>> = T & {
|
|
6
|
+
readonly delete?: boolean;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* 汎用的なマージ関数
|
|
10
|
+
* 指定されたキーフィールドを基準にアイテムのマージを行う
|
|
11
|
+
* @param defaultItems デフォルトのアイテム配列
|
|
12
|
+
* @param mergeItems マージ設定配列
|
|
13
|
+
* @param keyField キーとなるフィールド名
|
|
14
|
+
* @param isValidForAdd 新規追加時のバリデーション関数
|
|
15
|
+
* @returns マージ後のアイテム配列
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // SelectableValue型での使用例
|
|
19
|
+
* const result = mergeItems(
|
|
20
|
+
* [{ value: 'a', label: 'A' }],
|
|
21
|
+
* [{ value: 'b', label: 'B' }],
|
|
22
|
+
* 'value',
|
|
23
|
+
* (item) => Boolean(item.label)
|
|
24
|
+
* );
|
|
25
|
+
*
|
|
26
|
+
* // 独自型での使用例
|
|
27
|
+
* interface User { id: string; name: string; }
|
|
28
|
+
* const users = mergeItems(
|
|
29
|
+
* [{ id: '1', name: 'Alice' }],
|
|
30
|
+
* [{ id: '2', name: 'Bob' }],
|
|
31
|
+
* 'id'
|
|
32
|
+
* );
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function mergeItems<T extends Record<string, unknown>, K extends keyof T & string>(defaultItems: readonly T[], mergeItems: readonly Mergeable<Partial<T> & Pick<T, K>>[] | undefined, keyField: K, isValidForAdd?: (item: Mergeable<Partial<T> & Pick<T, K>>) => boolean): T[];
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 汎用的なマージ関数
|
|
3
|
+
* 指定されたキーフィールドを基準にアイテムのマージを行う
|
|
4
|
+
* @param defaultItems デフォルトのアイテム配列
|
|
5
|
+
* @param mergeItems マージ設定配列
|
|
6
|
+
* @param keyField キーとなるフィールド名
|
|
7
|
+
* @param isValidForAdd 新規追加時のバリデーション関数
|
|
8
|
+
* @returns マージ後のアイテム配列
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // SelectableValue型での使用例
|
|
12
|
+
* const result = mergeItems(
|
|
13
|
+
* [{ value: 'a', label: 'A' }],
|
|
14
|
+
* [{ value: 'b', label: 'B' }],
|
|
15
|
+
* 'value',
|
|
16
|
+
* (item) => Boolean(item.label)
|
|
17
|
+
* );
|
|
18
|
+
*
|
|
19
|
+
* // 独自型での使用例
|
|
20
|
+
* interface User { id: string; name: string; }
|
|
21
|
+
* const users = mergeItems(
|
|
22
|
+
* [{ id: '1', name: 'Alice' }],
|
|
23
|
+
* [{ id: '2', name: 'Bob' }],
|
|
24
|
+
* 'id'
|
|
25
|
+
* );
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function mergeItems(defaultItems, mergeItems, keyField, isValidForAdd) {
|
|
29
|
+
// マージ設定がない場合はデフォルトをそのまま返す
|
|
30
|
+
if (!mergeItems) {
|
|
31
|
+
return [...defaultItems];
|
|
32
|
+
}
|
|
33
|
+
let result = [...defaultItems];
|
|
34
|
+
for (const mergeItem of mergeItems) {
|
|
35
|
+
if (mergeItem.delete) {
|
|
36
|
+
// 削除: キーが一致するものを除去
|
|
37
|
+
const keyValue = mergeItem[keyField];
|
|
38
|
+
result = result.filter((item) => item[keyField] !== keyValue);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// 追加または更新
|
|
42
|
+
const keyValue = mergeItem[keyField];
|
|
43
|
+
const existingIndex = result.findIndex((item) => item[keyField] === keyValue);
|
|
44
|
+
if (existingIndex === -1) {
|
|
45
|
+
// 新規追加: バリデーション通過が必要
|
|
46
|
+
if (!isValidForAdd || isValidForAdd(mergeItem)) {
|
|
47
|
+
result.push(mergeItem);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// 既存の更新: マージする
|
|
52
|
+
result[existingIndex] = { ...result[existingIndex], ...mergeItem };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burger-editor/utils",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.18",
|
|
4
4
|
"description": "BurgerEditor Editor Utility Functions",
|
|
5
5
|
"author": "D-ZERO",
|
|
6
6
|
"license": "(MIT OR Apache-2.0)",
|
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
"clean": "tsc --build --clean"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"dayjs": "1.11.
|
|
30
|
-
"marked": "16.2.
|
|
29
|
+
"dayjs": "1.11.18",
|
|
30
|
+
"marked": "16.2.1",
|
|
31
31
|
"turndown": "7.2.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/turndown": "5.0.5"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "18fc101a19243250f7c9381c93e6d65d1f7a9fe1"
|
|
37
37
|
}
|