Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add TypeScript type definitions (#5582)
* refactor: Resolve types inconsistencies, add test Fixes #5580 - Types are refactored to be exportable and are now provided in the package: - `Stylelint` prefix removed where appropriate, types namespaced under `stylelint`. - Module export definition changed to point to namespace and public API, which allows `require('stylelint')` to be typed correctly. - Types renamed to match those in the `@types/stylelint` package to reduce incompatibilities/breakages downstream. - As a result of these changes, the separate types package can be deprecated in favour of the built-in type definitions. - Internal API endpoints marked with `@internal` where appropriate. - PostCSS types in types definition file scoped under `PostCSS` (e.g. `PostCSS.Root`) to make it clearer which types are imported. - API types (`stylelint.lint`, `stylelint.createPlugin`, etc.) changed from `Function` to more specific types that actually reflect each function's signature. - Refactored export types in public-facing exports (e.g. `lib/index.js`, `lib/createPlugin.js`) to reference API types in type definition file. This ensures that Typescript will report errors if the implementation/ internal type annotations are changed to an incompatible signature. Any types that were only defined in those files as `@typedef` JSDoc comments have been moved to the `.d.ts` definition file. - Fixed problem with `Rule` types that resulted in Typescript errors when using `createPlugin`. Required properties were added in #5418, which broke usage of `createPlugin` as the `rule` parameter would require functions to have the newly added properties, even though this doesn't reflect the implementation accurately. To fix this: - `Rule` type split into `RuleBase` and `Rule`. Added the `Plugin` type as an alias for `RuleBase` to achieve parity with former types at `@types/stylelint`. `RuleBase` represents the rule without any properties attached. `Rule` is a union of `RuleBase` and an object with the properties. - `createPlugin` updated to use `RuleBase`. - Fixed Typescript errors being thrown when the configs passed to the `overrides` option would contain supported properties that were missing from the types definition: - `ConfigOverride` type updated to use `Omit` instead of `Pick`, removing the `overrides` property instead of allow-listing properties. This fix means the `ConfigOverride` type shouldn't need to be manually updated whenever a new configuration property is added. - `RuleMessages` and related types fixed to avoid Typescript errors. The return type of `stylelint.utils.ruleMessages` was incorrectly set to the type of the `messages` parameter, which resulted in type errors in `lib/ruleMessages.js`. This change: - Changes the `ruleMessages` return type to `{ [K in keyof T]: T[K] }` which is correct. There is a distinction between returning the same type as being passed to the function and returning a type with the same keys and value types for those keys. - `RuleMessages` type changed to a mapped type to facilitate the change to `stylelint.utils.ruleMessages`. This allows Typescript to narrow types for the object returned by `ruleMessages`: ```js const messages = stylelint.utils.ruleMessages(ruleName, { violation: 'This a rule violation message', warning: (reason: string) => `This is not allowed because ${reason}`, }); // If a `Record<...>` was used instead, the following lines would // result in Typescript error 2322. const violationMessage: string = messages.violation; const violationFunc: Function = messages.warning; ``` - Type annotations in `lib/ruleMessages.js` updated to refect these changes and to avoid Typescript errors and allow type-checking. - Type test file added to `types/stylelint/type-test.ts`. This file contains code that references the public API as a consuming package would use it. It is not executed, but is used so that if the API or types are changed in a breaking way, the change will be caught by Typescript. If this existed before, the breaking change to the `StylelintRule` type (now `stylelint.Rule`) would have been caught. - Documentation comments added to public API endpoints (`stylelint.*`). - Removed leftover duplicate `Options` type that had no references anywhere in the project. * docs: Document added types in changelog * docs: fix typo, document types in migration guide
- Loading branch information
1 parent
d5edc48
commit 816b19a
Showing
145 changed files
with
730 additions
and
540 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,17 @@ | ||
'use strict'; | ||
|
||
/** @typedef {import('stylelint').StylelintRule} StylelintRule */ | ||
/** @typedef {import('stylelint').Rule} StylelintRule */ | ||
|
||
/** | ||
* @param {string} ruleName | ||
* @param {StylelintRule} rule | ||
* @returns {{ruleName: string, rule: StylelintRule}} | ||
*/ | ||
module.exports = function (ruleName, rule) { | ||
function createPlugin(ruleName, rule) { | ||
return { | ||
ruleName, | ||
rule, | ||
}; | ||
}; | ||
} | ||
|
||
module.exports = /** @type {typeof import('stylelint').createPlugin} */ (createPlugin); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.