• Stars
    star
    5,740
  • Rank 7,093 (Top 0.2 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created almost 12 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

tap-producing test harness for node and browsers

tape Version Badge

TAP-producing test harness for node and browsers

github actions coverage dependency status dev dependency status License Downloads

npm badge

tape

example

var test = require('tape');

test('timing test', function (t) {
    t.plan(2);

    t.equal(typeof Date.now, 'function');
    var start = Date.now();

    setTimeout(function () {
        t.equal(Date.now() - start, 100);
    }, 100);
});

test('test using promises', async function (t) {
    const result = await someAsyncThing();
    t.ok(result);
});
$ node example/timing.js
TAP version 13
# timing test
ok 1 should be strictly equal
not ok 2 should be strictly equal
  ---
    operator: equal
    expected: 100
    actual:   107
  ...

1..2
# tests 2
# pass  1
# fail  1

usage

You always need to require('tape') in test files. You can run the tests by usual node means (require('test-file.js') or node test-file.js). You can also run tests using the tape binary to utilize globbing, on Windows for example:

$ tape tests/**/*.js

tape's arguments are passed to the glob module. If you want glob to perform the expansion on a system where the shell performs such expansion, quote the arguments as necessary:

$ tape 'tests/**/*.js'
$ tape "tests/**/*.js"

Preloading modules

Additionally, it is possible to make tape load one or more modules before running any tests, by using the -r or --require flag. Here's an example that loads babel-register before running any tests, to allow for JIT compilation:

$ tape -r babel-register tests/**/*.js

Depending on the module you're loading, you may be able to parameterize it using environment variables or auxiliary files. Babel, for instance, will load options from .babelrc at runtime.

The -r flag behaves exactly like node's require, and uses the same module resolution algorithm. This means that if you need to load local modules, you have to prepend their path with ./ or ../ accordingly.

For example:

$ tape -r ./my/local/module tests/**/*.js

Please note that all modules loaded using the -r flag will run before any tests, regardless of when they are specified. For example, tape -r a b -r c will actually load a and c before loading b, since they are flagged as required modules.

things that go well with tape

tape maintains a fairly minimal core. Additional features are usually added by using another module alongside tape.

pretty reporters

The default TAP output is good for machines and humans that are robots.

If you want a more colorful / pretty output there are lots of modules on npm that will output something pretty if you pipe TAP into them:

To use them, try node test/index.js | tap-spec or pipe it into one of the modules of your choice!

uncaught exceptions

By default, uncaught exceptions in your tests will not be intercepted, and will cause tape to crash. If you find this behavior undesirable, use tape-catch to report any exceptions as TAP errors.

other

command-line flags

While running tests, top-level configurations can be passed via the command line to specify desired behavior.

Available configurations are listed below:

--require

Alias: -r

This is used to load modules before running tests and is explained extensively in the preloading modules section.

--ignore

Alias: -i

This flag is used when tests from certain folders and/or files are not intended to be run. The argument is a path to a file that contains the patterns to be ignored. It defaults to .gitignore when passed with no argument.

tape -i .ignore '**/*.js'

An error is thrown if the specified file passed as argument does not exist.

--ignore-pattern

Same functionality as --ignore, but passing the pattern directly instead of an ignore file. If both --ignore and --ignore-pattern are given, the --ignore-pattern argument is appended to the content of the ignore file.

tape --ignore-pattern 'integration_tests/**/*.js' '**/*.js'

--no-only

This is particularly useful in a CI environment where an only test is not supposed to go unnoticed.

By passing the --no-only flag, any existing only test causes tests to fail.

tape --no-only **/*.js

Alternatively, the environment variable NODE_TAPE_NO_ONLY_TEST can be set to true to achieve the same behavior; the command-line flag takes precedence.

methods

The assertion methods in tape are heavily influenced or copied from the methods in node-tap.

var test = require('tape')

test([name], [opts], cb)

Create a new test with an optional name string and optional opts object. cb(t) fires with the new test object t once all preceding tests have finished. Tests execute serially.

Available opts options are:

  • opts.skip = true/false. See test.skip.
  • opts.timeout = 500. Set a timeout for the test, after which it will fail. See test.timeoutAfter.
  • opts.objectPrintDepth = 5. Configure max depth of expected / actual object printing. Environmental variable NODE_TAPE_OBJECT_PRINT_DEPTH can set the desired default depth for all tests; locally-set values will take precedence.
  • opts.todo = true/false. Test will be allowed to fail.

If you forget to t.plan() out how many assertions you are going to run and you don't call t.end() explicitly, or return a Promise that eventually settles, your test will hang.

If cb returns a Promise, it will be implicitly awaited. If that promise rejects, the test will be failed; if it fulfills, the test will end. Explicitly calling t.end() while also returning a Promise that fulfills is an error.

test.skip([name], [opts], cb)

Generate a new test that will be skipped over.

test.onFinish(fn)

The onFinish hook will get invoked when ALL tape tests have finished right before tape is about to print the test summary.

fn is called with no arguments, and its return value is ignored.

test.onFailure(fn)

The onFailure hook will get invoked whenever any tape tests has failed.

fn is called with no arguments, and its return value is ignored.

t.plan(n)

Declare that n assertions should be run. t.end() will be called automatically after the nth assertion. If there are any more assertions after the nth, or after t.end() is called, they will generate errors.

t.end(err)

Declare the end of a test explicitly. If err is passed in t.end will assert that it is falsy.

Do not call t.end() if your test callback returns a Promise.

t.teardown(cb)

Register a callback to run after the individual test has completed. Multiple registered teardown callbacks will run in order. Useful for undoing side effects, closing network connections, etc.

t.fail(msg)

Generate a failing assertion with a message msg.

t.pass(msg)

Generate a passing assertion with a message msg.

t.timeoutAfter(ms)

Automatically timeout the test after X ms.

t.skip(msg)

Generate an assertion that will be skipped over.

t.ok(value, msg)

Assert that value is truthy with an optional description of the assertion msg.

Aliases: t.true(), t.assert()

t.notOk(value, msg)

Assert that value is falsy with an optional description of the assertion msg.

Aliases: t.false(), t.notok()

t.error(err, msg)

Assert that err is falsy. If err is non-falsy, use its err.message as the description message.

Aliases: t.ifError(), t.ifErr(), t.iferror()

t.equal(actual, expected, msg)

Assert that Object.is(actual, expected) with an optional description of the assertion msg.

Aliases: t.equals(), t.isEqual(), t.strictEqual(), t.strictEquals(), t.is()

t.notEqual(actual, expected, msg)

Assert that !Object.is(actual, expected) with an optional description of the assertion msg.

Aliases: t.notEquals(), t.isNotEqual(), t.doesNotEqual(), t.isInequal(), t.notStrictEqual(), t.notStrictEquals(), t.isNot(), t.not()

t.looseEqual(actual, expected, msg)

Assert that actual == expected with an optional description of the assertion msg.

Aliases: t.looseEquals()

t.notLooseEqual(actual, expected, msg)

Assert that actual != expected with an optional description of the assertion msg.

Aliases: t.notLooseEquals()

t.deepEqual(actual, expected, msg)

Assert that actual and expected have the same structure and nested values using node's deepEqual() algorithm with strict comparisons (===) on leaf nodes and an optional description of the assertion msg.

Aliases: t.deepEquals(), t.isEquivalent(), t.same()

t.notDeepEqual(actual, expected, msg)

Assert that actual and expected do not have the same structure and nested values using node's deepEqual() algorithm with strict comparisons (===) on leaf nodes and an optional description of the assertion msg.

Aliases: t.notDeepEquals, t.notEquivalent(), t.notDeeply(), t.notSame(), t.isNotDeepEqual(), t.isNotDeeply(), t.isNotEquivalent(), t.isInequivalent()

t.deepLooseEqual(actual, expected, msg)

Assert that actual and expected have the same structure and nested values using node's deepEqual() algorithm with loose comparisons (==) on leaf nodes and an optional description of the assertion msg.

t.notDeepLooseEqual(actual, expected, msg)

Assert that actual and expected do not have the same structure and nested values using node's deepEqual() algorithm with loose comparisons (==) on leaf nodes and an optional description of the assertion msg.

Aliases: t.notLooseEqual(), t.notLooseEquals()

t.throws(fn, expected, msg)

Assert that the function call fn() throws an exception. expected, if present, must be a RegExp, Function, or Object. The RegExp matches the string representation of the exception, as generated by err.toString(). For example, if you set expected to /user/, the test will pass only if the string representation of the exception contains the word user. Any other exception will result in a failed test. The Function could be the constructor for the Error type thrown, or a predicate function to be called with that exception. Object in this case corresponds to a so-called validation object, in which each property is tested for strict deep equality. As an example, see the following two tests--each passes a validation object to t.throws() as the second parameter. The first test will pass, because all property values in the actual error object are deeply strictly equal to the property values in the validation object.

    const err = new TypeError("Wrong value");
    err.code = 404;
    err.check = true;

    // Passing test.
    t.throws(
        () => {
            throw err;
        },
        {
            code: 404,
            check: true
        },
        "Test message."
    );

This next test will fail, because all property values in the actual error object are not deeply strictly equal to the property values in the validation object.

    const err = new TypeError("Wrong value");
    err.code = 404;
    err.check = "true";

    // Failing test.
    t.throws(
        () => {
            throw err;
        },
        {
            code: 404,
            check: true // This is not deeply strictly equal to err.check.
        },
        "Test message."
    );

This is very similar to how Node's assert.throws() method tests validation objects (please see the Node assert.throws() documentation for more information).

If expected is not of type RegExp, Function, or Object, or omitted entirely, any exception will result in a passed test. msg is an optional description of the assertion.

Please note that the second parameter, expected, cannot be of type string. If a value of type string is provided for expected, then t.throws(fn, expected, msg) will execute, but the value of expected will be set to undefined, and the specified string will be set as the value for the msg parameter (regardless of what actually passed as the third parameter). This can cause unexpected results, so please be mindful.

t.doesNotThrow(fn, expected, msg)

Assert that the function call fn() does not throw an exception. expected, if present, limits what should not be thrown, and must be a RegExp or Function. The RegExp matches the string representation of the exception, as generated by err.toString(). For example, if you set expected to /user/, the test will fail only if the string representation of the exception contains the word user. Any other exception will result in a passed test. The Function is the exception thrown (e.g. Error). If expected is not of type RegExp or Function, or omitted entirely, any exception will result in a failed test. msg is an optional description of the assertion.

Please note that the second parameter, expected, cannot be of type string. If a value of type string is provided for expected, then t.doesNotThrows(fn, expected, msg) will execute, but the value of expected will be set to undefined, and the specified string will be set as the value for the msg parameter (regardless of what actually passed as the third parameter). This can cause unexpected results, so please be mindful.

t.test(name, [opts], cb)

Create a subtest with a new test handle st from cb(st) inside the current test t. cb(st) will only fire when t finishes. Additional tests queued up after t will not be run until all subtests finish.

You may pass the same options that test() accepts.

t.comment(message)

Print a message without breaking the tap output. (Useful when using e.g. tap-colorize where output is buffered & console.log will print in incorrect order vis-a-vis tap output.)

Multiline output will be split by \n characters, and each one printed as a comment.

t.match(string, regexp, message)

Assert that string matches the RegExp regexp. Will fail when the first two arguments are the wrong type.

t.doesNotMatch(string, regexp, message)

Assert that string does not match the RegExp regexp. Will fail when the first two arguments are the wrong type.

var htest = test.createHarness()

Create a new test harness instance, which is a function like test(), but with a new pending stack and test state.

By default the TAP output goes to console.log(). You can pipe the output to someplace else if you htest.createStream().pipe() to a destination stream on the first tick.

test.only([name], [opts], cb)

Like test([name], [opts], cb) except if you use .only this is the only test case that will run for the entire process, all other test cases using tape will be ignored.

Check out how the usage of the --no-only flag could help ensure there is no .only test running in a specified environment.

var stream = test.createStream(opts)

Create a stream of output, bypassing the default output stream that writes messages to console.log(). By default stream will be a text stream of TAP output, but you can get an object stream instead by setting opts.objectMode to true.

tap stream reporter

You can create your own custom test reporter using this createStream() api:

var test = require('tape');
var path = require('path');

test.createStream().pipe(process.stdout);

process.argv.slice(2).forEach(function (file) {
    require(path.resolve(file));
});

You could substitute process.stdout for whatever other output stream you want, like a network connection or a file.

Pass in test files to run as arguments:

$ node tap.js test/x.js test/y.js
TAP version 13
# (anonymous)
not ok 1 should be strictly equal
  ---
    operator: equal
    expected: "boop"
    actual:   "beep"
  ...
# (anonymous)
ok 2 should be strictly equal
ok 3 (unnamed assert)
# wheee
ok 4 (unnamed assert)

1..4
# tests 4
# pass  3
# fail  1

object stream reporter

Here's how you can render an object stream instead of TAP:

var test = require('tape');
var path = require('path');

test.createStream({ objectMode: true }).on('data', function (row) {
    console.log(JSON.stringify(row))
});

process.argv.slice(2).forEach(function (file) {
    require(path.resolve(file));
});

The output for this runner is:

$ node object.js test/x.js test/y.js
{"type":"test","name":"(anonymous)","id":0}
{"id":0,"ok":false,"name":"should be strictly equal","operator":"equal","actual":"beep","expected":"boop","error":{},"test":0,"type":"assert"}
{"type":"end","test":0}
{"type":"test","name":"(anonymous)","id":1}
{"id":0,"ok":true,"name":"should be strictly equal","operator":"equal","actual":2,"expected":2,"test":1,"type":"assert"}
{"id":1,"ok":true,"name":"(unnamed assert)","operator":"ok","actual":true,"expected":true,"test":1,"type":"assert"}
{"type":"end","test":1}
{"type":"test","name":"wheee","id":2}
{"id":0,"ok":true,"name":"(unnamed assert)","operator":"ok","actual":true,"expected":true,"test":2,"type":"assert"}
{"type":"end","test":2}

A convenient alternative to achieve the same:

// report.js
var test = require('tape');

test.createStream({ objectMode: true }).on('data', function (row) {
    console.log(JSON.stringify(row)) // for example
});

and then:

$ tape -r ./report.js **/*.test.js

install

With npm do:

npm install tape --save-dev

troubleshooting

Sometimes t.end() doesn’t preserve the expected output ordering.

For instance the following:

var test = require('tape');

test('first', function (t) {

  setTimeout(function () {
    t.ok(1, 'first test');
    t.end();
  }, 200);

  t.test('second', function (t) {
    t.ok(1, 'second test');
    t.end();
  });
});

test('third', function (t) {
  setTimeout(function () {
    t.ok(1, 'third test');
    t.end();
  }, 100);
});

will output:

ok 1 second test
ok 2 third test
ok 3 first test

because second and third assume first has ended before it actually does.

Use t.plan() instead to let other tests know they should wait:

var test = require('tape');

test('first', function (t) {

+  t.plan(2);

  setTimeout(function () {
    t.ok(1, 'first test');
-    t.end();
  }, 200);

  t.test('second', function (t) {
    t.ok(1, 'second test');
    t.end();
  });
});

test('third', function (t) {
  setTimeout(function () {
    t.ok(1, 'third test');
    t.end();
  }, 100);
});

license

MIT

More Repositories

1

qs

A querystring parser with nesting support
JavaScript
8,010
star
2

prop-types-tools

Custom React PropType validators
JavaScript
671
star
3

faucet

human-readable TAP summarizer
JavaScript
547
star
4

testling

unit tests in all the browsers
JavaScript
353
star
5

prop-types-exact

For use with React PropTypes. Will error on any prop not explicitly specified.
JavaScript
236
star
6

util.promisify

Polyfill/shim for util.promisify in node versions < v8
JavaScript
120
star
7

object.assign

ES6 spec-compliant Object.assign shim. From https://github.com/es-shims/es6-shim
JavaScript
105
star
8

es-abstract

ECMAScript spec abstract operations.
JavaScript
98
star
9

json-stable-stringify

JavaScript
55
star
10

ls-engines

Determine if your dependency graph's stated "engines" criteria is met.
JavaScript
49
star
11

js-traverse

JavaScript
46
star
12

json-file-plus

Read from and write to a JSON file, minimizing diffs and preserving formatting.
JavaScript
43
star
13

object-keys

Object.keys shim
JavaScript
43
star
14

istanbul-merge

Merge multiple istanbul coverage reports into one.
JavaScript
42
star
15

npmignore

Command line tool for creating or updating a .npmignore file based on .gitignore.
JavaScript
27
star
16

aud

Use `npx aud` instead of `npm audit`, whether you have a lockfile or not!
JavaScript
26
star
17

shell-quote

JavaScript
26
star
18

get-intrinsic

Get and robustly cache all JS language-level intrinsics at first require time.
JavaScript
25
star
19

listify

Turn an array into a list of comma-separated values, appropriate for use in an English sentence.
JavaScript
25
star
20

simd

ES7 (proposed) SIMD numeric type shim/polyfill
JavaScript
24
star
21

repo-report

CLI to list all repos a user has access to, and report on their configuration in aggregate.
JavaScript
24
star
22

publishers

Provide a package name, get a list of every version, and who published it.
JavaScript
24
star
23

es-to-primitive

ECMAScript "ToPrimitive" algorithm. Provides ES5 and ES6/ES2015 versions.
JavaScript
22
star
24

safe-publish-latest

Ensure that when you `npm publish`, the "latest" tag is only set for the truly latest version.
JavaScript
21
star
25

define-properties

Define multiple non-enumerable properties at once. Uses `Object.defineProperty` when available; falls back to standard assignment in older engines.
JavaScript
20
star
26

global-cache

Sometimes you have to do horrible things, like use the global object to share a singleton. Abstract that away, with this!
JavaScript
20
star
27

promise-deferred

A lightweight Deferred implementation, on top of Promises/A+
JavaScript
19
star
28

eslint-config

My shareable `eslint` config.
JavaScript
19
star
29

ljharb

19
star
30

camelize

JavaScript
16
star
31

require-allow-edits

A GitHub action to require "allow edits" to be checked on a PR.
JavaScript
16
star
32

can-merge

JavaScript
15
star
33

get-dep-tree

Use npm's Arborist to get a dependency tree for a package.
JavaScript
14
star
34

side-channel

Store information about any JS value in a side channel. Uses WeakMap if available.
JavaScript
14
star
35

es-get-iterator

Get an iterator for any JS language value. Works robustly across all environments, all versions.
JavaScript
13
star
36

list-exports

Given a package name and a version number, or a path to a package.json, what specifiers does it expose?
JavaScript
13
star
37

get-nans

Get an array of all distinct NaN values supported by the engine. There can be only one!
JavaScript
12
star
38

tsconfig

My personal tsconfig(s), so my open source projects can share them.
12
star
39

actions

GitHub actions I use for CI.
JavaScript
11
star
40

uglify-register

The require hook will bind itself to node's require and automatically uglify files on the fly.
JavaScript
11
star
41

promiseback

Accept an optional node-style callback, and also return a spec-compliant Promise!
JavaScript
10
star
42

html-element-map

Look up HTML tag names via HTML Element constructors, and vice versa.
JavaScript
10
star
43

es-errors

A simple cache for a few of the JS Error constructors.
JavaScript
10
star
44

call-bind

Robustly `.call.bind()` a function.
JavaScript
9
star
45

scorecard-cli

A CLI for OpenSSF Scorecard data.
JavaScript
9
star
46

ls-publishers

List your dependency graph, grouped by publishers.
JavaScript
8
star
47

proposal-is-error

ECMAScript Proposal, specs, and reference implementation for Error.isError
CSS
8
star
48

safe-regex-test

Give a regex, get a robust predicate function that tests it against a string.
JavaScript
8
star
49

unused-files

List unused files in your package.
JavaScript
8
star
50

mock-property

Given an object and a property, replaces a property descriptor (or deletes it), and returns a thunk to restore it.
JavaScript
8
star
51

private-fields

What private fields does this object have?
JavaScript
6
star
52

set-function-length

Set a function's length property
JavaScript
6
star
53

unbox-primitive

Unbox a boxed JS primitive value.
JavaScript
6
star
54

document.contains

Polyfill/shim for `document.contains`
JavaScript
5
star
55

npm-lockfile

Safely generate an npm lockfile and output it to the filename of your choice.
JavaScript
5
star
56

make-generator-function

Returns an arbitrary generator function, or undefined if generator syntax is unsupported.
JavaScript
5
star
57

internal-slot

ES spec-like internal slots.
JavaScript
5
star
58

safe-array-concat

`Array.prototype.concat`, but made safe by ignoring Symbol.isConcatSpreadable
JavaScript
5
star
59

npm-deprecations

Given an npm module name, get a map of npm version numbers to deprecation messages.
JavaScript
5
star
60

find-value-locations

Given an object, and a value, return a tuple of the property name, and the object on which it is an own property.
JavaScript
5
star
61

set-function-name

Set a function's name property
JavaScript
4
star
62

stop-iteration-iterator

Firefox 17-26 iterators throw a StopIteration object to indicate "done". This normalizes it.
JavaScript
4
star
63

intl-fallback-symbol

ECMA-402 Intl spec's internal `FallbackSymbol`
JavaScript
4
star
64

make-async-function

Function that returns an arbitrary `async function`, or undefined if `async function` syntax is unsupported.
JavaScript
4
star
65

define-data-property

Define a data property on an object. Will fall back to assignment in an engine without descriptors.
JavaScript
4
star
66

jsonify

JavaScript
4
star
67

.github

4
star
68

tc39-ci

Begin app
JavaScript
4
star
69

es-define-property

`Object.defineProperty`, but not IE 8's broken one.
JavaScript
4
star
70

iterate-value

Iterate any iterable JS value. Works robustly in all environments, all versions.
JavaScript
3
star
71

daytime

npm module to combine two Date objects, "day" and "time"
JavaScript
3
star
72

iterate-iterator

Iterate any JS iterator. Works robustly in all environments, all versions.
JavaScript
3
star
73

concat-map

JavaScript
3
star
74

es-value-fixtures

Fixtures of ES values, for testing purposes.
JavaScript
3
star
75

big-integer-max

Given two valid integers in string form, return the larger of the two.
JavaScript
3
star
76

node-comments

Transform comments in JS files between multiple styles - single-line, multi-line, both, and more to come!
JavaScript
3
star
77

make-arrow-function

Function that returns an arbitrary arrow function, or undefined if arrow function syntax is unsupported.
JavaScript
3
star
78

define-accessor-property

Define an accessor property on an object. Will either throw, or fall back to assignment in loose mode, in an engine without descriptors.
JavaScript
3
star
79

es-object-atoms

ES Object-related atoms: Object, ToObject, RequireObjectCoercible
JavaScript
3
star
80

gfm-footnotes

Prune unused footnote references in GitHub-flavored Markdown
JavaScript
2
star
81

renovate

Shared renovate config.
2
star
82

big-integer-min

Given two valid integers in string form, return the smaller of the two.
JavaScript
2
star
83

lockfile-info

Info about an npm project - which lockfile version, which lockfile(s) are present, etc.
JavaScript
2
star
84

gopd

`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.
JavaScript
2
star
85

resumer

a through stream that starts paused and resumes on the next tick
JavaScript
2
star
86

AsyncIterator.prototype

`AsyncIterator.prototype`, or a shared object to use.
JavaScript
2
star
87

TcoExpand

Expands t.co short links on twitter.com when possible. This only works because Twitter provides the full URL as a data attribute on most shortened links - it's quick and dirty, it may break at any time, and it depends on jQuery to work.
JavaScript
2
star
88

es-shim-unscopables

Helper package to shim a method into `Array.prototype[Symbol.unscopables]`
JavaScript
2
star
89

primordials

node core's "primordials" module, but robust for use in a published package
2
star
90

safe-bigint

Safely create a BigInt from a numerical string, even one larger than MAX_SAFE_INTEGER.
JavaScript
2
star
91

coauthors

A cli to generate a complete git co-authors list, including existing co-authors, for use in a commit message.
JavaScript
2
star
92

open-sauced-goals

1
star
93

es-array-method-boxes-properly

Utility package to determine if an `Array.prototype` method properly boxes the callback's receiver and third argument.
JavaScript
1
star
94

Iterator.prototype

`Iterator.prototype`, or a shared object to use.
JavaScript
1
star
95

array-map

JavaScript
1
star
96

keytween

Encode and decode a string using the "look between X and Y on your keyboard" meme format
JavaScript
1
star
97

repo-report-cache

JavaScript
1
star
98

make-async-generator-function

Function that returns an arbitrary async generator function, or undefined if async generator syntax is unsupported.
JavaScript
1
star
99

validate-exports-object

Validate an object in the "exports" field.
JavaScript
1
star
100

possible-typed-array-names

A simple list of possible Typed Array names.
JavaScript
1
star