diff options
Diffstat (limited to 'shared/utils/src/is-pojo.ts')
| -rw-r--r-- | shared/utils/src/is-pojo.ts | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/shared/utils/src/is-pojo.ts b/shared/utils/src/is-pojo.ts new file mode 100644 index 0000000..4363454 --- /dev/null +++ b/shared/utils/src/is-pojo.ts @@ -0,0 +1,20 @@ +/** + * Determine if {@linkcode arg} is a Plain Old JavaScript Object. + * + * @see https://masteringjs.io/tutorials/fundamentals/pojo + * + * @param arg to test + * @returns true if {@linkcode arg} is a POJO + */ +export function isPOJO(arg: unknown): arg is Record<string, unknown> { + if (!arg || typeof arg !== 'object') { + return false; + } + + const proto = Object.getPrototypeOf(arg); + if (!proto) { + return true; // `Object.create(null)` + } + + return proto === Object.prototype; +} |
