# could-be-class

> Checks if an object could be an instantiable class.

Latest version **0.2.1** (published 2021-08-06) · MIT license · 0 weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install could-be-class
pnpm add could-be-class
yarn add could-be-class
bun add could-be-class
```

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 0.2.1 |
| Published | 2021-08-06 |
| First published | 2018-09-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 8.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Ayon Lee |
| Maintainers | hyurl |
| Keywords | is-class, instantiable |

## Links

- npm: https://www.npmjs.com/package/could-be-class
- Repository: https://github.com/hyurl/could-be-class
- Homepage: https://github.com/hyurl/could-be-class#readme
- Issues: https://github.com/hyurl/could-be-class/issues
- npm.io page: https://npm.io/package/could-be-class

## Recent versions

- 0.2.1 (latest) — 2021-08-06
- 0.2.0 — 2020-04-04
- 0.1.4 — 2019-01-19
- 0.1.3 — 2018-09-14
- 0.1.2 — 2018-09-14
- 0.1.1 — 2018-09-12
- 0.1.0 — 2018-09-11

## README

# couldBeClass

**Checks if an object could be an instantiable class.**

This module also works with those classes that are written in ES5 style.

## Example

```javascript
"use strict";

const assert = require("assert");
const couldBeClass = require("could-be-class").default;

var str = "This is a string";
assert.ok(!couldBeClass(str));

var num = 123;
assert.ok(!couldBeClass(num));

class A { }
assert.ok(couldBeClass(A));

function B() {
    this.name = this.constructor.name;
}
assert.ok(couldBeClass(B));

function C() {
    this["name"] = this.constructor.name;
}
assert.ok(couldBeClass(C));

function D() { }
D.prototype.show = function () { }
assert.ok(couldBeClass(D));

function E() { }
Object.defineProperty(E.prototype, "size", {
    get() {
        return this.length;
    }
});
assert.ok(couldBeClass(E));

function TsEs5Class() {
    var _this = _super.call(this) || this;
    _this.desc = "This class form might be generated from TypeScript to ES5";
}
assert.ok(couldBeClass(TsEs5Class));

function notClass() {
    console.log("this is not a class");
}
assert.ok(!couldBeClass(notClass));

function aMethod() {
    this.desc = "this is a method instead of a class";
}
assert.ok(!couldBeClass(aMethod));

function default_1() {
    this.dec = "this might be a class generated by typescript";
}
assert.ok(couldBeClass(default_1));

function default_2() {
    console.log("this is not class");
}
assert.ok(!couldBeClass(default_2));

function* GenFunc() {
    this.desc = "Error will be thrown if trying to instantiate a Generator function.";
}
assert.ok(!couldBeClass(GenFunc));

if (parseFloat(process.version.slice(1)) >= 7.6) {
    // this block should only appear when you NodeJS version higher than 7.6, 
    // otherwise a SyntaxError will be thrown.
    async function AsyncFunc() {
        this.desc = "Error will be thrown if trying to instantiate an async function.";
    }
    assert.ok(!couldBeClass(AsyncFunc));
}

console.log("#### OK ####"); // should outout OK
```

## Tip

Commonly, any functions (except async, generator and arrow functions) in 
JavaScript could be instantiated as a class constructor, however, in most cases, 
a class written in ES5 style will carry some special fingerprints that the
detector can test if it could be a class constructor or just a pure function.

**WARN** This module only performs about 98% percent of accuracy when testing 
ES5 class.

---
_Source: https://npm.io/package/could-be-class · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
