
Research
/Security News
Weaponizing Discord for Command and Control Across npm, PyPI, and RubyGems.org
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
@magic/types
Advanced tools
typechecking utilities
npm install @magic/types
// single function import
import { isArray } from '@magic/types'
isArray([]) // true
import is from '@magic/types'
is.array([]) // true
// comparisons
// test a value for multiple types
is(ele, ...types)
// alias is.eq, isEq, test
// test if a value is not of a type
not(ele, ...types)
// alias is.neq, isNeq, isNot
isSameType('string', 'string')
// alias isSame, is.same, is.sameType
// type comparisons:
isArray([]) // true
// alias isArr, is.array, is.arr
isBoolean(true) // true
// alias isBool, is.boolean, is.bool
isDefined(undefined) //false
// alias isDef, is.defined, is.def
isUndefined(undefined) //false
// alias isUndef, is.undefined, is.undef
isFunction(() => {}) // true
// alias isFunc, isFn, is.function, is.func, is.fn
isAsyncFunction(async () => {}) // true
// alias isAsyncFunc, isAsyncFn, is.asyncFunction, is.asyncFunc, is.asyncFn
isGeneratorFunction(* () => {}) // true
// alias isGeneratorFunc, isGeneratorFunc, is.generatorFunction, is.generatorFunc, is.generatorFn
isNumber(1) // true
// alias isNum, is.number, is.num
isInteger(1) // true
// alias isInt, is.integer, is.int
isFloat(1.1) // true
// alias is.float
isObject({}) // true
// alias isObj, is.object, is.obj
isString('') // true
// alias isStr, is.string, is.str
isRGBAObject({ r: 1, g: 1, b: 1, a: 1 }) // true
// alias isRGBA, is.rgbaObject, is.rgba
isRGBObject
// alias isRGB, is.rgbObject, is.rgb
isHexColor('#333') // true
// alias isHex, is.hex, is.hexColor
isHexAlphaColor('#3333') // true
// alias isHexa, is.hexa, is.hexAlphaColor
isColor('#444') // true
// alias isCol, is.color, is.col
isDate(new Date()) // true
// alias isTime, is.date, is.time
isRegExp(/regexp/) // true
// alias isRegex, is.regexp, is.regExp, is.regex
isTruthy('true') // true
// alias is.truthy
isFalsy(0) // true
// alias is.falsy
isEmpty('') // true
// alias is.empty
isError(new Error('')) // true
// alias isErr, is.error, is.err
isIterable([]) // true
// alias is.iterable
isEmail('a@b.c') // true
// alias isMail, is.email, is.mail
isNull(null) // true
// alias isNil, is.nil, is.null
isUndefinedOrNull(undefined || null) // true
// alias is.undefinedOrNull, is.undefinedOrNil, is.undefOrNull, is.undefOrNil
isBuffer(new Buffer('test')) // true
// alias isBuff, is.buffer, is.buff
isPromise(new Promise()) // true
// alias is.promise, isThenable, isThen, is.thenable, is.then
// removed (for now?)!
isArguments(() => return arguments) // true
// alias isArgs, is.arguments, is.args
isUUID(uuid) // true
// alias is.uuid
testType(42, 'number') // true
// alias is.type
test(42, ['string', 'object']) // false
// alias is.types
isEq(42, 'number') // true
// alias is.eq
isNot = isNeq = is.not(42, 'number') // true
// alias is.neq
isDeepEqual([1, 2, 3], [1, 2, 3]) // true
// alias is.deep.eq, is.deep.equal
isDeepDifferent([1, 2, 3], [1, 2, 3]) // false
// alias is.deep.diff, is.deep.different
isEvery([1, 2, 3], 'number') // true
isEvery([1, 2, 3], is.number) // true
// alias is.every, is.all
isSome([1, 'str', {}], 'number') // true
isSome([1, 'str', {}], is.number) // true
// alias is.some
isNone([1, 2, 3], 'string') // true
isNone([1, 2, 3], is.number) // false
// alias is.none
isInstanceOf(new Date(), Date) // true
// alias is.instance, is.instanceof, is.instanceOf
isCase('UPPERCASE', 'up') // true
isCase('lowercase', 'low') // true
// alias is.case
isUpperCase('UPPERCASE') // true
// alias is.case.upper, is.isCase.upper
isLowerCase('lowercase') // true
// alias is.case.lower, is.isCase.lower
isMergeableObject({}) // true
// alias is.mergeable, is.mergeableObject, isMergeable
const mod = await import('path/to/file')
isModule(mod) // true
// alias is.module
isOwnProp({ test: undefined }, 'test') // true
// alias isOwnProperty, is.ownProperty, is.ownProp, is.prop
added Map, WeakMap, Set and WeakSet
use es6 modules
FIX: add module field to package.json
FIX: is.number no longer errors on node es6 modules and other weird objects
use @magic/deep for is.deep.equal and is.deep.different
is.deep uses @magic/deep now.
this means that is.deep.equal(null, undefined) is returning a function now, because it expects currying.
minimum node version is 13.5.0
remove @magic/deep dependency
fix erroneous '@magic/types' import in src/deep/equal.mjs
add
add is.instanceOf
add isCase, isUpperCase, isLowerCase
add isObjectNative
bump required node version to 14.2.0
deep.equal now does return true for objects that have undefined property values
update dependencies
update dependencies
...
FAQs
typechecking library
The npm package @magic/types receives a total of 336 weekly downloads. As such, @magic/types popularity was classified as not popular.
We found that @magic/types demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
Security News
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
Research
The Socket Threat Research Team is tracking weekly intrusions into the npm registry that follow a repeatable adversarial playbook used by North Korean state-sponsored actors.