diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2024-02-16 15:39:48 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-16 15:39:48 +0900 |
| commit | f5459a25df1694b5d13ae0b966e7e1489bc51cc0 (patch) | |
| tree | 3c48a4c53d89359fb7db86d77b6186b34b2cee1c /packages/frontend/src/scripts | |
| parent | New Crowdin updates (#13267) (diff) | |
| download | sharkey-f5459a25df1694b5d13ae0b966e7e1489bc51cc0.tar.gz sharkey-f5459a25df1694b5d13ae0b966e7e1489bc51cc0.tar.bz2 sharkey-f5459a25df1694b5d13ae0b966e7e1489bc51cc0.zip | |
fix(frontend): vue v3.4.16以降でタイムラインが正常に表示できない問題を修正 (#13248)
* fix(frontend): vue v3.4.16でタイムラインが正常に表示できない問題を修正
* type
* Revert "fix: downgrade vue to 3.4.15"
This reverts commit e12369ac13a906321397dfee5142f2af4b12f5b6.
* Update pnpm-lock.yaml
---------
Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Diffstat (limited to 'packages/frontend/src/scripts')
| -rw-r--r-- | packages/frontend/src/scripts/merge.ts | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/packages/frontend/src/scripts/merge.ts b/packages/frontend/src/scripts/merge.ts index 3dc13aca49..4e39a0fa06 100644 --- a/packages/frontend/src/scripts/merge.ts +++ b/packages/frontend/src/scripts/merge.ts @@ -6,6 +6,10 @@ import { deepClone } from './clone.js'; import type { Cloneable } from './clone.js'; +type DeepPartial<T> = { + [P in keyof T]?: T[P] extends Record<string | number | symbol, unknown> ? DeepPartial<T[P]> : T[P]; +}; + function isPureObject(value: unknown): value is Record<string | number | symbol, unknown> { return typeof value === 'object' && value !== null && !Array.isArray(value); } @@ -14,18 +18,18 @@ function isPureObject(value: unknown): value is Record<string | number | symbol, * valueにないキーをdefからもらう(再帰的)\ * nullはそのまま、undefinedはdefの値 **/ -export function deepMerge<X extends Record<string | number | symbol, unknown>>(value: X, def: X): X { +export function deepMerge<X extends Record<string | number | symbol, unknown>>(value: DeepPartial<X>, def: X): X { if (isPureObject(value) && isPureObject(def)) { const result = deepClone(value as Cloneable) as X; for (const [k, v] of Object.entries(def) as [keyof X, X[keyof X]][]) { if (!Object.prototype.hasOwnProperty.call(value, k) || value[k] === undefined) { result[k] = v; } else if (isPureObject(v) && isPureObject(result[k])) { - const child = deepClone(result[k] as Cloneable) as X[keyof X] & Record<string | number | symbol, unknown>; + const child = deepClone(result[k] as Cloneable) as DeepPartial<X[keyof X] & Record<string | number | symbol, unknown>>; result[k] = deepMerge<typeof v>(child, v); } } return result; } - return value; + throw new Error('deepMerge: value and def must be pure objects'); } |