From c9bbc35f4d87cfa206281ddf6eb0e595f7994b7e Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Fri, 8 Mar 2024 09:19:53 -0800 Subject: [PATCH] add types --- index.d.ts | 3 +++ index.js | 3 +++ package.json | 18 +++++++++++++----- tsconfig.json | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 index.d.ts create mode 100644 tsconfig.json diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..36192e6 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,3 @@ +declare function isWeakSet(value: unknown): value is WeakSet; + +export = isWeakSet; \ No newline at end of file diff --git a/index.js b/index.js index b5197dd..e1864bf 100644 --- a/index.js +++ b/index.js @@ -10,6 +10,7 @@ var $setHas = callBound('WeakSet.prototype.has', true); if ($setHas) { var $mapHas = callBound('WeakMap.prototype.has', true); + /** @type {import('.')} */ module.exports = function isWeakSet(x) { if (!x || typeof x !== 'object') { return false; @@ -23,11 +24,13 @@ if ($setHas) { return true; } } + // @ts-expect-error TS can't figure out that $WeakSet is always truthy here return x instanceof $WeakSet; // core-js workaround, pre-v3 } catch (e) {} return false; }; } else { + /** @type {import('.')} */ // eslint-disable-next-line no-unused-vars module.exports = function isWeakSet(x) { // `WeakSet` does not exist, or does not have a `has` method diff --git a/package.json b/package.json index ab1fe61..e74bee3 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "prepublish": "not-in-publish || npm run prepublishOnly", "pretest": "npm run lint", "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", "tests-only": "nyc tape 'test/**/*.js'", "tests:shims": "nyc tape --require=es5-shim --require=es6-shim 'test/**/*.js'", "tests:corejs": "nyc tape --require=core-js 'test/**/*.js'", @@ -40,8 +41,18 @@ "url": "https://github.com/inspect-js/is-weakset/issues" }, "homepage": "https://github.com/inspect-js/is-weakset#readme", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, "devDependencies": { + "@arethetypeswrong/cli": "^0.15.0", "@ljharb/eslint-config": "^21.1.0", + "@types/call-bind": "^1.0.5", + "@types/for-each": "^0.3.3", + "@types/get-intrinsic": "^1.2.2", + "@types/object-inspect": "^1.8.4", + "@types/tape": "^5.6.4", "aud": "^2.0.4", "auto-changelog": "^2.4.0", "core-js": "^2.6.12", @@ -54,7 +65,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" }, "auto-changelog": { "output": "CHANGELOG.md", @@ -64,10 +76,6 @@ "backfillLimit": false, "hideCredit": true }, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, "publishConfig": { "ignore": [ ".github/workflows" 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" + ] +}