diff --git a/.changeset/small-scissors-accept.md b/.changeset/small-scissors-accept.md new file mode 100644 index 000000000..f6f0a638e --- /dev/null +++ b/.changeset/small-scissors-accept.md @@ -0,0 +1,5 @@ +--- +"svelte-ux": patch +--- + +Add `isEmptyObject()` util diff --git a/packages/svelte-ux/src/lib/utils/object.ts b/packages/svelte-ux/src/lib/utils/object.ts index 03b3cb588..d34188a85 100644 --- a/packages/svelte-ux/src/lib/utils/object.ts +++ b/packages/svelte-ux/src/lib/utils/object.ts @@ -5,6 +5,10 @@ export function isLiteralObject(obj: any): obj is object { return obj && typeof obj === 'object' && obj.constructor === Object; } +export function isEmptyObject(obj: any) { + return isLiteralObject(obj) && Object.keys(obj).length === 0; +} + export function camelCaseKeys(obj: any) { return Object.keys(obj).reduce((acc, key) => ((acc[camelCase(key)] = obj[key]), acc), {} as any); } @@ -123,7 +127,7 @@ export function expireObject( expireObject(value, propExpiry); // Remove property if empty object (all properties removed) - if (isLiteralObject(value) && Object.keys(value).length === 0) { + if (isEmptyObject(value)) { delete object[prop as keyof TObject]; } } @@ -131,7 +135,7 @@ export function expireObject( } } - return isLiteralObject(object) && Object.keys(object).length === 0 ? null : object; + return isEmptyObject(object) ? null : object; } /** diff --git a/packages/svelte-ux/src/lib/utils/serialize.ts b/packages/svelte-ux/src/lib/utils/serialize.ts index 43e205a69..30b18d0d3 100644 --- a/packages/svelte-ux/src/lib/utils/serialize.ts +++ b/packages/svelte-ux/src/lib/utils/serialize.ts @@ -1,4 +1,5 @@ import { parse, reviver, stringify } from './json.js'; +import { isEmptyObject } from './object.js'; // See: https://github.com/pbeshai/serialize-query-params/blob/master/src/serialize.ts @@ -457,7 +458,7 @@ export function encodeObject( entrySeparator = '_' ): string | null | undefined { if (obj == null) return obj; // null or undefined - if (!Object.keys(obj).length) return ''; // {} case + if (isEmptyObject(obj)) return ''; // {} case return Object.keys(obj) .map((key) => {