From a6fad681041f588acd2d6c0b8b0e171cf7986815 Mon Sep 17 00:00:00 2001 From: michael faith Date: Sat, 15 Mar 2025 15:52:30 -0500 Subject: [PATCH 1/2] feat(require-types): add new rule This change adds a new `require-types` rule. --- README.md | 1 + docs/rules/require-types.md | 25 ++++++++++++++ src/rules/require-properties.ts | 1 + src/tests/rules/require-types.test.ts | 47 +++++++++++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 docs/rules/require-types.md create mode 100644 src/tests/rules/require-types.test.ts diff --git a/README.md b/README.md index 6a866d80..37598af4 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,7 @@ The default settings don't conflict, and Prettier plugins can quickly fix up ord | [require-files](docs/rules/require-files.md) | Requires the `files` property to be present. | | | | | | [require-keywords](docs/rules/require-keywords.md) | Requires the `keywords` property to be present. | | | | | | [require-name](docs/rules/require-name.md) | Requires the `name` property to be present. | ✅ | | | | +| [require-types](docs/rules/require-types.md) | Requires the `types` property to be present. | | | | | | [require-version](docs/rules/require-version.md) | Requires the `version` property to be present. | ✅ | | | | | [sort-collections](docs/rules/sort-collections.md) | Dependencies, scripts, and configuration values must be declared in alphabetical order. | ✅ | 🔧 | | | | [unique-dependencies](docs/rules/unique-dependencies.md) | Checks a dependency isn't specified more than once (i.e. in `dependencies` and `devDependencies`) | ✅ | | 💡 | | diff --git a/docs/rules/require-types.md b/docs/rules/require-types.md new file mode 100644 index 00000000..a78697c4 --- /dev/null +++ b/docs/rules/require-types.md @@ -0,0 +1,25 @@ +# require-types + + + +This rule checks for the existence of the `"types"` property in a package.json, +and reports a violation if it doesn't exist. + +Example of **incorrect** code for this rule: + +```json +{ + "name": "Thee Silver Mt. Zion", + "version": "13.0.0" +} +``` + +Example of **correct** code for this rule: + +```json +{ + "name": "Thee Silver Mt. Zion", + "version": "13.0.0", + "types": "./index.d.ts" +} +``` diff --git a/src/rules/require-properties.ts b/src/rules/require-properties.ts index 94a8ec1c..294ffde5 100644 --- a/src/rules/require-properties.ts +++ b/src/rules/require-properties.ts @@ -9,6 +9,7 @@ const properties = [ ["files", false], ["keywords", false], ["name", true], + ["types", false], ["version", true], // TODO: More to come! ] satisfies [string, boolean][]; diff --git a/src/tests/rules/require-types.test.ts b/src/tests/rules/require-types.test.ts new file mode 100644 index 00000000..08518f03 --- /dev/null +++ b/src/tests/rules/require-types.test.ts @@ -0,0 +1,47 @@ +import { rules } from "../../rules/require-properties.js"; +import { ruleTester } from "./ruleTester.js"; + +ruleTester.run("require-types", rules["require-types"], { + invalid: [ + { + code: "{}", + errors: [ + { + data: { property: "types" }, + line: 1, + messageId: "missing", + }, + ], + }, + { + code: `{ + "version": "1.0.0" + } + `, + errors: [ + { + data: { property: "types" }, + line: 1, + messageId: "missing", + }, + ], + }, + { + code: `{ + "author": "Jessica Moss", + "bin": { + "types": "./index.js" + } + } + `, + errors: [ + { + data: { property: "types" }, + line: 1, + messageId: "missing", + }, + ], + }, + ], + valid: [`{ "types": "./index.d.ts" }`], +}); From 42ed2ee76ffcb0485d6c251715ea5f8371a9ba42 Mon Sep 17 00:00:00 2001 From: michael faith Date: Mon, 17 Mar 2025 16:53:19 -0500 Subject: [PATCH 2/2] feat(require-types): add new rule This change adds a new `require-types` rule. --- docs/rules/require-types.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/rules/require-types.md b/docs/rules/require-types.md index a78697c4..9a7e0da2 100644 --- a/docs/rules/require-types.md +++ b/docs/rules/require-types.md @@ -23,3 +23,5 @@ Example of **correct** code for this rule: "types": "./index.d.ts" } ``` + +See [TypeScript Handbook > Publishing](https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html) for more information on publishing package types.