diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..27005a8 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,13 @@ +/** + * Determines the type of the given collection, or returns false. + * + * @param {unknown} value The potential collection + * @returns {'Map' | 'Set' | 'WeakMap' | 'WeakSet' | false} 'Map' | 'Set' | 'WeakMap' | 'WeakSet' | false + */ +declare function whichCollection(value: Map): 'Map'; +declare function whichCollection(value: Set): 'Set'; +declare function whichCollection(value: WeakMap): 'WeakMap'; +declare function whichCollection(value: WeakSet): 'WeakSet'; +declare function whichCollection(value: null | undefined | boolean | number | bigint | symbol | unknown): false; + +export = whichCollection; diff --git a/index.js b/index.js index 71c7f95..cc8d097 100644 --- a/index.js +++ b/index.js @@ -5,7 +5,8 @@ var isSet = require('is-set'); var isWeakMap = require('is-weakmap'); var isWeakSet = require('is-weakset'); -module.exports = function whichCollection(value) { +/** @type {import('.')} */ +module.exports = function whichCollection(/** @type {unknown} */ value) { if (value && typeof value === 'object') { if (isMap(value)) { return 'Map'; diff --git a/package.json b/package.json index 39c1b6f..e8e213c 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "prepublish": "not-in-publish || npm run prepublishOnly", "lint": "eslint --ext=js,mjs .", "pretest": "npm run lint", + "postlint": "tsc -p . && attw -P", "tests-only": "nyc tape 'test/**/*.js'", "test": "npm run tests-only", "posttest": "npx aud --production", @@ -42,7 +43,11 @@ }, "homepage": "https://github.com/inspect-js/which-collection#readme", "devDependencies": { + "@arethetypeswrong/cli": "^0.15.0", "@ljharb/eslint-config": "^21.1.0", + "@types/for-each": "^0.3.3", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", "aud": "^2.0.4", "auto-changelog": "^2.4.0", "eslint": "=8.8.0", @@ -52,7 +57,8 @@ "nyc": "^10.3.2", "object-inspect": "^1.13.1", "safe-publish-latest": "^2.0.0", - "tape": "^5.7.5" + "tape": "^5.7.5", + "typescript": "next" }, "dependencies": { "is-map": "^2.0.3", diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..2002ce5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 0, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + //"skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +}