builtin-type
v0.0.4
Published
What is the type of this builtin JS value?
Maintainers
Readme
Features
- Comprehensive: Supports a ton of builtin types
- Robust: Works cross-realm
- Secure: Resilient to spoofing
- Tiny: One 0.77 kB gzipped package instead of
which-builtin-type's 10.5 kB gzipped total size with 50 dependencies
Install
[!NOTE]
Determining the builtin type in a way that works cross-realm and is resilient to spoofing is significantly slower than plain
instanceoforObject.prototype.toString.call(...). If you don't need those guarantees, then just use these simpler options directly.
$ npm i builtin-typeUsage
import assert from 'node:assert'
import builtinType from 'builtin-type'
assert.equal(builtinType(undefined), `undefined`)
assert.equal(builtinType(null), `null`)
assert.equal(builtinType(false), `boolean`)
assert.equal(builtinType(42), `number`)
assert.equal(builtinType(42n), `bigint`)
assert.equal(builtinType(`foo`), `string`)
assert.equal(builtinType(Symbol()), `symbol`)
assert.equal(builtinType(new Boolean(false)), `Boolean`)
assert.equal(builtinType(new Number(42)), `Number`)
assert.equal(builtinType(Object(42n)), `BigInt`)
assert.equal(builtinType(new String(`foo`)), `String`)
assert.equal(builtinType(Object(Symbol())), `Symbol`)
assert.equal(builtinType([]), `Array`)
assert.equal(builtinType(new Map()), `Map`)
assert.equal(builtinType(new Set()), `Set`)
assert.equal(builtinType(new WeakMap()), `WeakMap`)
assert.equal(builtinType(new WeakSet()), `WeakSet`)
assert.equal(
builtinType(() => {}),
`Function`,
)
assert.equal(
builtinType(function* () {}),
`GeneratorFunction`,
)
assert.equal(
builtinType(async () => {}),
`AsyncFunction`,
)
assert.equal(
builtinType(async function* () {}),
`AsyncGeneratorFunction`,
)
assert.equal(builtinType(Promise.resolve()), `Promise`)
assert.equal(builtinType(new Date()), `Date`)
assert.equal(builtinType(/a/g), `RegExp`)
assert.equal(builtinType(new URL(`https://example.com/`)), `URL`)
assert.equal(builtinType(new URLSearchParams()), `URLSearchParams`)
assert.equal(builtinType(new WeakRef({})), `WeakRef`)
assert.equal(
builtinType(new FinalizationRegistry(() => {})),
`FinalizationRegistry`,
)
assert.equal(builtinType(new ArrayBuffer()), `ArrayBuffer`)
assert.equal(builtinType(new SharedArrayBuffer()), `SharedArrayBuffer`)
assert.equal(builtinType(Buffer.from([])), `Buffer`)
assert.equal(builtinType(new Int8Array()), `Int8Array`)
assert.equal(builtinType(new Uint8Array()), `Uint8Array`)
assert.equal(builtinType(new Uint8ClampedArray()), `Uint8ClampedArray`)
assert.equal(builtinType(new Int16Array()), `Int16Array`)
assert.equal(builtinType(new Uint16Array()), `Uint16Array`)
assert.equal(builtinType(new Int32Array()), `Int32Array`)
assert.equal(builtinType(new Uint32Array()), `Uint32Array`)
assert.equal(builtinType(new BigInt64Array()), `BigInt64Array`)
assert.equal(builtinType(new BigUint64Array()), `BigUint64Array`)
assert.equal(builtinType(new Float16Array()), `Float16Array`)
assert.equal(builtinType(new Float32Array()), `Float32Array`)
assert.equal(builtinType(new Float64Array()), `Float64Array`)
assert.equal(builtinType(new DataView(new ArrayBuffer())), `DataView`)
assert.equal(builtinType(new Temporal.Duration()), `Temporal.Duration`)
assert.equal(
builtinType(Temporal.Instant.fromEpochMilliseconds(0)),
`Temporal.Instant`,
)
assert.equal(
builtinType(new Temporal.PlainDate(2024, 1, 15)),
`Temporal.PlainDate`,
)
assert.equal(
builtinType(new Temporal.PlainDateTime(2024, 1, 15, 12)),
`Temporal.PlainDateTime`,
)
assert.equal(
builtinType(new Temporal.PlainMonthDay(1, 15)),
`Temporal.PlainMonthDay`,
)
assert.equal(builtinType(new Temporal.PlainTime(12)), `Temporal.PlainTime`)
assert.equal(
builtinType(new Temporal.PlainYearMonth(2024, 1)),
`Temporal.PlainYearMonth`,
)
assert.equal(
builtinType(new Temporal.ZonedDateTime(0n, `UTC`)),
`Temporal.ZonedDateTime`,
)
assert.equal(builtinType({}), `Object`)Benchmarks
builtin-type is at least as fast as
which-builtin-type. It may
be slightly faster, but that could just be noise in the benchmarks.
Here's an example run of the benchmark:
✓ src/index.bench.ts 3333ms
name hz min max mean p75 p99 p995 p999 rme samples
· whichBuiltinType 66.9824 14.6727 15.4056 14.9293 15.0297 15.4056 15.4056 15.4056 ±0.43% 34
· builtinType 71.4251 13.7500 14.6090 14.0007 14.0046 14.6090 14.6090 14.6090 ±0.41% 36
builtinType - src/index.bench.ts
1.07x faster than whichBuiltinTypeContributing
Stars are always welcome!
For bugs and feature requests, please create an issue.
