diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index dcfd2994e..1e9fe2f71 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -55,7 +55,7 @@ jobs:
CI: true
test_types:
- name: Test Types (core)
+ name: Test Types
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
@@ -65,13 +65,20 @@ jobs:
with:
node-version: "lts/*"
- - name: npm install and test types
+ - name: npm install and test types (core)
working-directory: packages/core
run: |
npm install
npm run build
npm run test:types
+ - name: npm install and test types (plugin-kit)
+ working-directory: packages/plugin-kit
+ run: |
+ npm install
+ npm run build
+ npm run test:types
+
jsr_test:
name: Verify JSR Publish
runs-on: ubuntu-latest
diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml
index d5733d93a..00ce0105f 100644
--- a/.github/workflows/release-please.yml
+++ b/.github/workflows/release-please.yml
@@ -24,8 +24,11 @@ jobs:
run: |
echo "releases_created:" ${{ steps.release.outputs.releases_created }}
echo "packages/compat--release_created:" ${{ steps.release.outputs['packages/compat--release_created'] }}
- echo "packages/object-schema--release_created:" ${{ steps.release.outputs['packages/object-schema--release_created'] }}
echo "packages/config-array--release_created" ${{ steps.release.outputs['packages/config-array--release_created'] }}
+ echo "packages/core--release_created" ${{ steps.release.outputs['packages/core--release_created'] }}
+ echo "packages/migrate-config--release_created" ${{ steps.release.outputs['packages/migrate-config--release_created'] }}
+ echo "packages/object-schema--release_created:" ${{ steps.release.outputs['packages/object-schema--release_created'] }}
+ echo "packages/plugin-kit--release_created" ${{ steps.release.outputs['packages/plugin-kit--release_created'] }}
# Check to see if we need to do any releases and if so check out the repo
- uses: actions/checkout@v4
@@ -66,21 +69,19 @@ jobs:
working-directory: packages/compat
if: ${{ steps.release.outputs['packages/compat--release_created'] }}
- - name: Tweet Release Announcement
- run: npx @humanwhocodes/tweet "eslint/compat v${{ steps.release.outputs['packages/compat--major'] }}.${{ steps.release.outputs['packages/compat--minor'] }}.${{ steps.release.outputs['packages/compat--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/compat--tag_name'] }}"
+ - name: Post Release Announcement
+ run: npx @humanwhocodes/crosspost -t -b -m "eslint/compat v${{ steps.release.outputs['packages/compat--major'] }}.${{ steps.release.outputs['packages/compat--minor'] }}.${{ steps.release.outputs['packages/compat--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/compat--tag_name'] }}"
if: ${{ steps.release.outputs['packages/compat--release_created'] }}
env:
- TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
- TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
+ TWITTER_API_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
+ TWITTER_API_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
-
- - name: Toot Release Announcement
- run: npx @humanwhocodes/toot "eslint/compat v${{ steps.release.outputs['packages/compat--major'] }}.${{ steps.release.outputs['packages/compat--minor'] }}.${{ steps.release.outputs['packages/compat--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/compat--tag_name'] }}"
- if: ${{ steps.release.outputs['packages/compat--release_created'] }}
- env:
MASTODON_ACCESS_TOKEN: ${{ secrets.MASTODON_ACCESS_TOKEN }}
MASTODON_HOST: ${{ secrets.MASTODON_HOST }}
+ BLUESKY_IDENTIFIER: ${{ vars.BLUESKY_IDENTIFIER }}
+ BLUESKY_PASSWORD: ${{ secrets.BLUESKY_PASSWORD }}
+ BLUESKY_HOST: ${{ vars.BLUESKY_HOST }}
#-----------------------------------------------------------------------------
# @eslint/core
@@ -99,21 +100,19 @@ jobs:
working-directory: packages/core
if: ${{ steps.release.outputs['packages/core--release_created'] }}
- - name: Tweet Release Announcement
- run: npx @humanwhocodes/tweet "eslint/core v${{ steps.release.outputs['packages/core--major'] }}.${{ steps.release.outputs['packages/core--minor'] }}.${{ steps.release.outputs['packages/core--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/core--tag_name'] }}"
+ - name: Post Release Announcement
+ run: npx @humanwhocodes/crosspost -t -b -m "eslint/core v${{ steps.release.outputs['packages/core--major'] }}.${{ steps.release.outputs['packages/core--minor'] }}.${{ steps.release.outputs['packages/core--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/core--tag_name'] }}"
if: ${{ steps.release.outputs['packages/core--release_created'] }}
env:
- TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
- TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
+ TWITTER_API_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
+ TWITTER_API_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
-
- - name: Toot Release Announcement
- run: npx @humanwhocodes/toot "eslint/core v${{ steps.release.outputs['packages/core--major'] }}.${{ steps.release.outputs['packages/core--minor'] }}.${{ steps.release.outputs['packages/core--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/core--tag_name'] }}"
- if: ${{ steps.release.outputs['packages/core--release_created'] }}
- env:
MASTODON_ACCESS_TOKEN: ${{ secrets.MASTODON_ACCESS_TOKEN }}
MASTODON_HOST: ${{ secrets.MASTODON_HOST }}
+ BLUESKY_IDENTIFIER: ${{ vars.BLUESKY_IDENTIFIER }}
+ BLUESKY_PASSWORD: ${{ secrets.BLUESKY_PASSWORD }}
+ BLUESKY_HOST: ${{ vars.BLUESKY_HOST }}
#-----------------------------------------------------------------------------
# @eslint/migrate-config
@@ -127,21 +126,19 @@ jobs:
# NOTE: No JSR package because JSR doesn't support CLIs
- - name: Tweet Release Announcement
- run: npx @humanwhocodes/tweet "eslint/migrate-config v${{ steps.release.outputs['packages/migrate-config--major'] }}.${{ steps.release.outputs['packages/migrate-config--minor'] }}.${{ steps.release.outputs['packages/migrate-config--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/migrate-config--tag_name'] }}"
+ - name: Post Release Announcement
+ run: npx @humanwhocodes/crosspost -t -b -m "eslint/migrate-config v${{ steps.release.outputs['packages/migrate-config--major'] }}.${{ steps.release.outputs['packages/migrate-config--minor'] }}.${{ steps.release.outputs['packages/migrate-config--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/migrate-config--tag_name'] }}"
if: ${{ steps.release.outputs['packages/migrate-config--release_created'] }}
env:
- TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
- TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
+ TWITTER_API_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
+ TWITTER_API_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
-
- - name: Toot Release Announcement
- run: npx @humanwhocodes/toot "eslint/migrate-config v${{ steps.release.outputs['packages/migrate-config--major'] }}.${{ steps.release.outputs['packages/migrate-config--minor'] }}.${{ steps.release.outputs['packages/migrate-config--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/migrate-config--tag_name'] }}"
- if: ${{ steps.release.outputs['packages/migrate-config--release_created'] }}
- env:
MASTODON_ACCESS_TOKEN: ${{ secrets.MASTODON_ACCESS_TOKEN }}
MASTODON_HOST: ${{ secrets.MASTODON_HOST }}
+ BLUESKY_IDENTIFIER: ${{ vars.BLUESKY_IDENTIFIER }}
+ BLUESKY_PASSWORD: ${{ secrets.BLUESKY_PASSWORD }}
+ BLUESKY_HOST: ${{ vars.BLUESKY_HOST }}
#-----------------------------------------------------------------------------
# @eslint/object-schema
@@ -158,21 +155,19 @@ jobs:
working-directory: packages/object-schema
if: ${{ steps.release.outputs['packages/object-schema--release_created'] }}
- - name: Tweet Release Announcement
- run: npx @humanwhocodes/tweet "eslint/object-schema v${{ steps.release.outputs['packages/object-schema--major'] }}.${{ steps.release.outputs['packages/object-schema--minor'] }}.${{ steps.release.outputs['packages/object-schema--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/object-schema--tag_name'] }}"
+ - name: Post Release Announcement
+ run: npx @humanwhocodes/crosspost -t -b -m "eslint/object-schema v${{ steps.release.outputs['packages/object-schema--major'] }}.${{ steps.release.outputs['packages/object-schema--minor'] }}.${{ steps.release.outputs['packages/object-schema--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/object-schema--tag_name'] }}"
if: ${{ steps.release.outputs['packages/object-schema--release_created'] }}
env:
- TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
- TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
+ TWITTER_API_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
+ TWITTER_API_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
-
- - name: Toot Release Announcement
- run: npx @humanwhocodes/toot "eslint/object-schema v${{ steps.release.outputs['packages/object-schema--major'] }}.${{ steps.release.outputs['packages/object-schema--minor'] }}.${{ steps.release.outputs['packages/object-schema--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/object-schema--tag_name'] }}"
- if: ${{ steps.release.outputs['packages/object-schema--release_created'] }}
- env:
MASTODON_ACCESS_TOKEN: ${{ secrets.MASTODON_ACCESS_TOKEN }}
MASTODON_HOST: ${{ secrets.MASTODON_HOST }}
+ BLUESKY_IDENTIFIER: ${{ vars.BLUESKY_IDENTIFIER }}
+ BLUESKY_PASSWORD: ${{ secrets.BLUESKY_PASSWORD }}
+ BLUESKY_HOST: ${{ vars.BLUESKY_HOST }}
#-----------------------------------------------------------------------------
# @eslint/config-array
@@ -189,21 +184,19 @@ jobs:
working-directory: packages/config-array
if: ${{ steps.release.outputs['packages/config-array--release_created'] }}
- - name: Tweet Release Announcement
- run: npx @humanwhocodes/tweet "eslint/config-array v${{ steps.release.outputs['packages/config-array--major'] }}.${{ steps.release.outputs['packages/config-array--minor'] }}.${{ steps.release.outputs['packages/config-array--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/config-array--tag_name'] }}"
+ - name: Post Release Announcement
+ run: npx @humanwhocodes/crosspost -t -b -m "eslint/config-array v${{ steps.release.outputs['packages/config-array--major'] }}.${{ steps.release.outputs['packages/config-array--minor'] }}.${{ steps.release.outputs['packages/config-array--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/config-array--tag_name'] }}"
if: ${{ steps.release.outputs['packages/config-array--release_created'] }}
env:
- TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
- TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
+ TWITTER_API_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
+ TWITTER_API_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
-
- - name: Toot Release Announcement
- run: npx @humanwhocodes/toot "eslint/config-array v${{ steps.release.outputs['packages/config-array--major'] }}.${{ steps.release.outputs['packages/config-array--minor'] }}.${{ steps.release.outputs['packages/config-array--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/config-array--tag_name'] }}"
- if: ${{ steps.release.outputs['packages/config-array--release_created'] }}
- env:
MASTODON_ACCESS_TOKEN: ${{ secrets.MASTODON_ACCESS_TOKEN }}
MASTODON_HOST: ${{ secrets.MASTODON_HOST }}
+ BLUESKY_IDENTIFIER: ${{ vars.BLUESKY_IDENTIFIER }}
+ BLUESKY_PASSWORD: ${{ secrets.BLUESKY_PASSWORD }}
+ BLUESKY_HOST: ${{ vars.BLUESKY_HOST }}
#-----------------------------------------------------------------------------
# @eslint/plugin-kit
@@ -220,18 +213,16 @@ jobs:
working-directory: packages/plugin-kit
if: ${{ steps.release.outputs['packages/plugin-kit--release_created'] }}
- - name: Tweet Release Announcement
- run: npx @humanwhocodes/tweet "eslint/plugin-kit v${{ steps.release.outputs['packages/plugin-kit--major'] }}.${{ steps.release.outputs['packages/plugin-kit--minor'] }}.${{ steps.release.outputs['packages/plugin-kit--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/plugin-kit--tag_name'] }}"
+ - name: Post Release Announcement
+ run: npx @humanwhocodes/crosspost -t -b -m "eslint/plugin-kit v${{ steps.release.outputs['packages/plugin-kit--major'] }}.${{ steps.release.outputs['packages/plugin-kit--minor'] }}.${{ steps.release.outputs['packages/plugin-kit--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/plugin-kit--tag_name'] }}"
if: ${{ steps.release.outputs['packages/plugin-kit--release_created'] }}
env:
- TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
- TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
+ TWITTER_API_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}
+ TWITTER_API_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}
TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
-
- - name: Toot Release Announcement
- run: npx @humanwhocodes/toot "eslint/plugin-kit v${{ steps.release.outputs['packages/plugin-kit--major'] }}.${{ steps.release.outputs['packages/plugin-kit--minor'] }}.${{ steps.release.outputs['packages/plugin-kit--patch'] }} has been released!\n\n${{ github.event.repository.html_url }}/releases/tag/${{ steps.release.outputs['packages/plugin-kit--tag_name'] }}"
- if: ${{ steps.release.outputs['packages/plugin-kit--release_created'] }}
- env:
MASTODON_ACCESS_TOKEN: ${{ secrets.MASTODON_ACCESS_TOKEN }}
MASTODON_HOST: ${{ secrets.MASTODON_HOST }}
+ BLUESKY_IDENTIFIER: ${{ vars.BLUESKY_IDENTIFIER }}
+ BLUESKY_PASSWORD: ${{ secrets.BLUESKY_PASSWORD }}
+ BLUESKY_HOST: ${{ vars.BLUESKY_HOST }}
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 9cd5aefd0..af5e0838a 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,8 +1,8 @@
{
- "packages/compat": "1.2.4",
+ "packages/compat": "1.2.5",
"packages/config-array": "0.19.1",
- "packages/core": "0.9.1",
- "packages/migrate-config": "1.3.5",
+ "packages/core": "0.10.0",
+ "packages/migrate-config": "1.3.6",
"packages/object-schema": "2.1.5",
- "packages/plugin-kit": "0.2.4"
+ "packages/plugin-kit": "0.2.5"
}
diff --git a/README.md b/README.md
index cfb3ffe65..3cb975cab 100644
--- a/README.md
+++ b/README.md
@@ -23,8 +23,8 @@ to get your logo on our READMEs and [website](https://eslint.org/sponsors).
Platinum Sponsors

Gold Sponsors

Silver Sponsors
-

Bronze Sponsors
-

+

Bronze Sponsors
+

Technology Sponsors
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.

diff --git a/packages/compat/CHANGELOG.md b/packages/compat/CHANGELOG.md
index e46655946..eb666b543 100644
--- a/packages/compat/CHANGELOG.md
+++ b/packages/compat/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog
+## [1.2.5](https://github.com/eslint/rewrite/compare/compat-v1.2.4...compat-v1.2.5) (2025-01-09)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * devDependencies
+ * @eslint/core bumped from ^0.9.1 to ^0.10.0
+
## [1.2.4](https://github.com/eslint/rewrite/compare/compat-v1.2.3...compat-v1.2.4) (2024-12-04)
diff --git a/packages/compat/README.md b/packages/compat/README.md
index 2927cf4ae..af959d354 100644
--- a/packages/compat/README.md
+++ b/packages/compat/README.md
@@ -198,8 +198,8 @@ to get your logo on our READMEs and [website](https://eslint.org/sponsors).
Platinum Sponsors

Gold Sponsors

Silver Sponsors
-

Bronze Sponsors
-

+

Bronze Sponsors
+

Technology Sponsors
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.

diff --git a/packages/compat/jsr.json b/packages/compat/jsr.json
index ca313e0c4..c9cde1e4a 100644
--- a/packages/compat/jsr.json
+++ b/packages/compat/jsr.json
@@ -1,6 +1,6 @@
{
"name": "@eslint/compat",
- "version": "1.2.4",
+ "version": "1.2.5",
"exports": "./dist/esm/index.js",
"publish": {
"include": [
diff --git a/packages/compat/package.json b/packages/compat/package.json
index 16f58189a..1ed44d78e 100644
--- a/packages/compat/package.json
+++ b/packages/compat/package.json
@@ -1,6 +1,6 @@
{
"name": "@eslint/compat",
- "version": "1.2.4",
+ "version": "1.2.5",
"description": "Compatibility utilities for ESLint",
"type": "module",
"main": "dist/esm/index.js",
@@ -48,7 +48,7 @@
},
"homepage": "https://github.com/eslint/rewrite#readme",
"devDependencies": {
- "@eslint/core": "^0.9.1",
+ "@eslint/core": "^0.10.0",
"c8": "^9.1.0",
"eslint": "^9.11.0",
"mocha": "^10.4.0",
diff --git a/packages/config-array/README.md b/packages/config-array/README.md
index 0ceb8f0cb..96499637a 100644
--- a/packages/config-array/README.md
+++ b/packages/config-array/README.md
@@ -350,8 +350,8 @@ to get your logo on our READMEs and [website](https://eslint.org/sponsors).
Platinum Sponsors

Gold Sponsors

Silver Sponsors
-

Bronze Sponsors
-

+

Bronze Sponsors
+

Technology Sponsors
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.

diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md
index 3f597b7a9..960d4ff1f 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,18 @@
# Changelog
+## [0.10.0](https://github.com/eslint/rewrite/compare/core-v0.9.1...core-v0.10.0) (2025-01-09)
+
+
+### Features
+
+* Check messageIds in context.report() ([#140](https://github.com/eslint/rewrite/issues/140)) ([1c9ca4d](https://github.com/eslint/rewrite/commit/1c9ca4d0a4726218948a92ebc2e8be7a13d224d4))
+
+
+### Bug Fixes
+
+* make `plugin-kit` types usable in CommonJS ([#143](https://github.com/eslint/rewrite/issues/143)) ([f77ba17](https://github.com/eslint/rewrite/commit/f77ba177d4e4c5d2ed828cfd9a5149df2ccb3a7f))
+* Update RuleDefinition type ([#138](https://github.com/eslint/rewrite/issues/138)) ([0a0ea6f](https://github.com/eslint/rewrite/commit/0a0ea6fbac827b354ee18f5b10eefad2bc0794f7))
+
## [0.9.1](https://github.com/eslint/rewrite/compare/core-v0.9.0...core-v0.9.1) (2024-12-04)
diff --git a/packages/core/README.md b/packages/core/README.md
index 0d09207ef..b793d4487 100644
--- a/packages/core/README.md
+++ b/packages/core/README.md
@@ -21,8 +21,8 @@ to get your logo on our READMEs and [website](https://eslint.org/sponsors).
Platinum Sponsors

Gold Sponsors

Silver Sponsors
-

Bronze Sponsors
-

+

Bronze Sponsors
+

Technology Sponsors
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.

diff --git a/packages/core/jsr.json b/packages/core/jsr.json
index eef6b6b48..8049093e6 100644
--- a/packages/core/jsr.json
+++ b/packages/core/jsr.json
@@ -1,6 +1,6 @@
{
"name": "@eslint/core",
- "version": "0.9.1",
+ "version": "0.10.0",
"exports": "./dist/esm/types.d.ts",
"publish": {
"include": [
diff --git a/packages/core/package.json b/packages/core/package.json
index a68b8b478..d6047bfe7 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@eslint/core",
- "version": "0.9.1",
+ "version": "0.10.0",
"description": "Runtime-agnostic core of ESLint",
"type": "module",
"types": "./dist/esm/types.d.ts",
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
index 93b66f9e8..a7c21fa81 100644
--- a/packages/core/src/types.ts
+++ b/packages/core/src/types.ts
@@ -187,6 +187,7 @@ export interface RuleContextTypeOptions {
Code: SourceCode;
RuleOptions: unknown[];
Node: unknown;
+ MessageIds: string;
}
/**
@@ -195,12 +196,7 @@ export interface RuleContextTypeOptions {
* view into the outside world.
*/
export interface RuleContext<
- Options extends RuleContextTypeOptions = {
- LangOptions: LanguageOptions;
- Code: SourceCode;
- RuleOptions: unknown[];
- Node: unknown;
- },
+ Options extends RuleContextTypeOptions = RuleContextTypeOptions,
> {
/**
* The current working directory for the session.
@@ -282,7 +278,9 @@ export interface RuleContext<
* The report function that the rule should use to report problems.
* @param violation The violation to report.
*/
- report(violation: ViolationReport): void;
+ report(
+ violation: ViolationReport,
+ ): void;
}
// #region Rule Fixing
@@ -402,11 +400,16 @@ interface ViolationReportBase {
suggest?: SuggestedEdit[];
}
-type ViolationMessage = { message: string } | { messageId: string };
+type ViolationMessage =
+ | { message: string }
+ | { messageId: MessageIds };
type ViolationLocation = { loc: SourceLocation } | { node: Node };
-export type ViolationReport = ViolationReportBase &
- ViolationMessage &
+export type ViolationReport<
+ Node = unknown,
+ MessageIds = string,
+> = ViolationReportBase &
+ ViolationMessage &
ViolationLocation;
// #region Suggestions
@@ -450,7 +453,9 @@ export interface RuleDefinitionTypeOptions {
/**
* The definition of an ESLint rule.
*/
-export interface RuleDefinition {
+export interface RuleDefinition<
+ Options extends RuleDefinitionTypeOptions = RuleDefinitionTypeOptions,
+> {
/**
* The meta information for the rule.
*/
@@ -467,6 +472,7 @@ export interface RuleDefinition {
Code: Options["Code"];
RuleOptions: Options["RuleOptions"];
Node: Options["Node"];
+ MessageIds: Options["MessageIds"];
}>,
): Options["Visitor"];
}
diff --git a/packages/core/tests/types/cjs-import.test.cts b/packages/core/tests/types/cjs-import.test.cts
new file mode 100644
index 000000000..2fe5e2b2e
--- /dev/null
+++ b/packages/core/tests/types/cjs-import.test.cts
@@ -0,0 +1,10 @@
+/**
+ * @fileoverview CommonJS type import test for ESLint Core.
+ * @author Francesco Trotta
+ */
+
+//-----------------------------------------------------------------------------
+// Imports
+//-----------------------------------------------------------------------------
+
+import "@eslint/core";
diff --git a/packages/core/tests/types/tsconfig.json b/packages/core/tests/types/tsconfig.json
index 7bbf5d887..b3220a777 100644
--- a/packages/core/tests/types/tsconfig.json
+++ b/packages/core/tests/types/tsconfig.json
@@ -5,5 +5,5 @@
"rootDir": "../..",
"strict": true
},
- "files": ["../../dist/esm/types.d.ts", "types.test.ts"]
+ "include": [".", "../../dist"]
}
diff --git a/packages/core/tests/types/types.test.ts b/packages/core/tests/types/types.test.ts
index 5ecc7a399..205a1c665 100644
--- a/packages/core/tests/types/types.test.ts
+++ b/packages/core/tests/types/types.test.ts
@@ -177,11 +177,14 @@ interface TestRuleVisitor extends RuleVisitor {
Node?: (node: TestNode) => void;
}
+type TestMessageIds = "badFoo" | "wrongBar";
+
type TestRuleContext = RuleContext<{
LangOptions: TestLanguageOptions;
Code: TestSourceCode;
RuleOptions: [{ foo: string; bar: number }];
Node: TestNode;
+ MessageIds: TestMessageIds;
}>;
const testRule: RuleDefinition<{
diff --git a/packages/migrate-config/CHANGELOG.md b/packages/migrate-config/CHANGELOG.md
index 5896b21bf..43e31f228 100644
--- a/packages/migrate-config/CHANGELOG.md
+++ b/packages/migrate-config/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog
+## [1.3.6](https://github.com/eslint/rewrite/compare/migrate-config-v1.3.5...migrate-config-v1.3.6) (2025-01-09)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @eslint/compat bumped from ^1.2.4 to ^1.2.5
+
## [1.3.5](https://github.com/eslint/rewrite/compare/migrate-config-v1.3.4...migrate-config-v1.3.5) (2024-12-04)
diff --git a/packages/migrate-config/README.md b/packages/migrate-config/README.md
index ad7c7bd54..cd149aaa5 100644
--- a/packages/migrate-config/README.md
+++ b/packages/migrate-config/README.md
@@ -102,8 +102,8 @@ to get your logo on our READMEs and [website](https://eslint.org/sponsors).
Platinum Sponsors

Gold Sponsors

Silver Sponsors
-

Bronze Sponsors
-

+

Bronze Sponsors
+

Technology Sponsors
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.

diff --git a/packages/migrate-config/package.json b/packages/migrate-config/package.json
index 8ad63ac16..ce4fc5d17 100644
--- a/packages/migrate-config/package.json
+++ b/packages/migrate-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@eslint/migrate-config",
- "version": "1.3.5",
+ "version": "1.3.6",
"description": "Configuration migration for ESLint",
"type": "module",
"bin": {
@@ -46,7 +46,7 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"dependencies": {
- "@eslint/compat": "^1.2.4",
+ "@eslint/compat": "^1.2.5",
"@eslint/eslintrc": "^3.1.0",
"camelcase": "^8.0.0",
"recast": "^0.23.7"
diff --git a/packages/object-schema/README.md b/packages/object-schema/README.md
index 0f4394eed..8e7a3f7cc 100644
--- a/packages/object-schema/README.md
+++ b/packages/object-schema/README.md
@@ -234,8 +234,8 @@ to get your logo on our READMEs and [website](https://eslint.org/sponsors).
Platinum Sponsors

Gold Sponsors

Silver Sponsors
-

Bronze Sponsors
-

+

Bronze Sponsors
+

Technology Sponsors
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.

diff --git a/packages/plugin-kit/CHANGELOG.md b/packages/plugin-kit/CHANGELOG.md
index ffb34f2e5..258e8241a 100644
--- a/packages/plugin-kit/CHANGELOG.md
+++ b/packages/plugin-kit/CHANGELOG.md
@@ -1,5 +1,19 @@
# Changelog
+## [0.2.5](https://github.com/eslint/rewrite/compare/plugin-kit-v0.2.4...plugin-kit-v0.2.5) (2025-01-09)
+
+
+### Bug Fixes
+
+* make `plugin-kit` types usable in CommonJS ([#143](https://github.com/eslint/rewrite/issues/143)) ([f77ba17](https://github.com/eslint/rewrite/commit/f77ba177d4e4c5d2ed828cfd9a5149df2ccb3a7f))
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @eslint/core bumped from ^0.9.1 to ^0.10.0
+
## [0.2.4](https://github.com/eslint/rewrite/compare/plugin-kit-v0.2.3...plugin-kit-v0.2.4) (2024-12-04)
diff --git a/packages/plugin-kit/README.md b/packages/plugin-kit/README.md
index 5b4a9544a..399df437f 100644
--- a/packages/plugin-kit/README.md
+++ b/packages/plugin-kit/README.md
@@ -265,8 +265,8 @@ to get your logo on our READMEs and [website](https://eslint.org/sponsors).
Platinum Sponsors

Gold Sponsors

Silver Sponsors
-

Bronze Sponsors
-

+

Bronze Sponsors
+

Technology Sponsors
Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work.

diff --git a/packages/plugin-kit/build-cts.js b/packages/plugin-kit/build-cts.js
new file mode 100644
index 000000000..ade7ae130
--- /dev/null
+++ b/packages/plugin-kit/build-cts.js
@@ -0,0 +1,16 @@
+/**
+ * @fileoverview Rewrites import expressions for CommonJS compatibility.
+ * This script creates "dist/cjs/index.d.cts" from "dist/esm/index.d.ts" by modifying imports
+ * from `"./types.ts"` to `"./types.cts"`.
+ *
+ * @author Francesco Trotta
+ */
+
+import { readFile, writeFile } from "node:fs/promises";
+
+const oldSourceText = await readFile("dist/esm/index.d.ts", "utf-8");
+const newSourceText = oldSourceText.replaceAll(
+ 'import("./types.ts")',
+ 'import("./types.cts")',
+);
+await writeFile("dist/cjs/index.d.cts", newSourceText);
diff --git a/packages/plugin-kit/jsr.json b/packages/plugin-kit/jsr.json
index 4de87c821..9230dc109 100644
--- a/packages/plugin-kit/jsr.json
+++ b/packages/plugin-kit/jsr.json
@@ -1,6 +1,6 @@
{
"name": "@eslint/plugin-kit",
- "version": "0.2.4",
+ "version": "0.2.5",
"exports": "./dist/esm/index.js",
"publish": {
"include": [
diff --git a/packages/plugin-kit/package.json b/packages/plugin-kit/package.json
index 8113a4fae..d641ab5fa 100644
--- a/packages/plugin-kit/package.json
+++ b/packages/plugin-kit/package.json
@@ -1,6 +1,6 @@
{
"name": "@eslint/plugin-kit",
- "version": "0.2.4",
+ "version": "0.2.5",
"description": "Utilities for building ESLint plugins.",
"author": "Nicholas C. Zakas",
"type": "module",
@@ -32,12 +32,13 @@
"homepage": "https://github.com/eslint/rewrite#readme",
"scripts": {
"build:dedupe-types": "node ../../tools/dedupe-types.js dist/cjs/index.cjs dist/esm/index.js",
- "build:cts": "node -e \"fs.copyFileSync('dist/esm/index.d.ts', 'dist/cjs/index.d.cts')\"",
+ "build:cts": "node ./build-cts.js",
"build": "rollup -c && npm run build:dedupe-types && tsc -p tsconfig.esm.json && npm run build:cts",
- "test:jsr": "npx jsr@latest publish --dry-run",
"pretest": "npm run build",
"test": "mocha tests/",
- "test:coverage": "c8 npm test"
+ "test:coverage": "c8 npm test",
+ "test:jsr": "npx jsr@latest publish --dry-run",
+ "test:types": "tsc -p tests/types/tsconfig.json"
},
"keywords": [
"eslint",
@@ -45,8 +46,11 @@
"eslint-plugin"
],
"license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.10.0",
+ "levn": "^0.4.1"
+ },
"devDependencies": {
- "@eslint/core": "^0.9.1",
"@types/levn": "^0.4.0",
"c8": "^9.1.0",
"mocha": "^10.4.0",
@@ -56,8 +60,5 @@
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "dependencies": {
- "levn": "^0.4.1"
}
}
diff --git a/packages/plugin-kit/rollup.config.js b/packages/plugin-kit/rollup.config.js
index 03a11e126..5b813a884 100644
--- a/packages/plugin-kit/rollup.config.js
+++ b/packages/plugin-kit/rollup.config.js
@@ -16,7 +16,7 @@ export default {
plugins: [
copy({
targets: [
- { src: "src/types.ts", dest: "dist/cjs" },
+ { src: "src/types.ts", dest: "dist/cjs", rename: "types.cts" },
{ src: "src/types.ts", dest: "dist/esm" },
],
}),
diff --git a/packages/plugin-kit/tests/types/cjs-import.test.cts b/packages/plugin-kit/tests/types/cjs-import.test.cts
new file mode 100644
index 000000000..98a6ed1a7
--- /dev/null
+++ b/packages/plugin-kit/tests/types/cjs-import.test.cts
@@ -0,0 +1,10 @@
+/**
+ * @fileoverview CommonJS type import test for ESLint Plugin Kit.
+ * @author Francesco Trotta
+ */
+
+//-----------------------------------------------------------------------------
+// Imports
+//-----------------------------------------------------------------------------
+
+import "@eslint/plugin-kit";
diff --git a/packages/plugin-kit/tests/types/tsconfig.json b/packages/plugin-kit/tests/types/tsconfig.json
new file mode 100644
index 000000000..b3220a777
--- /dev/null
+++ b/packages/plugin-kit/tests/types/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "noEmit": true,
+ "rootDir": "../..",
+ "strict": true
+ },
+ "include": [".", "../../dist"]
+}
diff --git a/packages/plugin-kit/tests/types/types.test.ts b/packages/plugin-kit/tests/types/types.test.ts
new file mode 100644
index 000000000..66438871b
--- /dev/null
+++ b/packages/plugin-kit/tests/types/types.test.ts
@@ -0,0 +1,104 @@
+/**
+ * @fileoverview Type tests for ESLint Plugin Kit.
+ * @author Francesco Trotta
+ */
+
+//-----------------------------------------------------------------------------
+// Imports
+//-----------------------------------------------------------------------------
+
+import {
+ BooleanConfig,
+ CallMethodStep,
+ ConfigCommentParser,
+ Directive,
+ DirectiveType,
+ RulesConfig,
+ SourceLocation,
+ SourceRange,
+ StringConfig,
+ TextSourceCodeBase,
+ VisitNodeStep,
+} from "@eslint/plugin-kit";
+
+//-----------------------------------------------------------------------------
+// Tests
+//-----------------------------------------------------------------------------
+
+// CallMethodStep
+class TestCallMethodStep extends CallMethodStep {
+ constructor({ target, args }: { target: string; args: [string, number] }) {
+ super({ target, args });
+ }
+}
+const step2 = new TestCallMethodStep({ target: "foo", args: ["foo", 42] });
+step2.args satisfies unknown[];
+step2.kind satisfies 2;
+step2.target satisfies string;
+step2.type satisfies "call";
+
+// ConfigCommentParser
+const configCommentParser = new ConfigCommentParser();
+configCommentParser.parseDirective("foo") satisfies
+ | { label: string; value: string; justification: string }
+ | undefined;
+const jsonLikeConfig = configCommentParser.parseJSONLikeConfig("bar");
+if (jsonLikeConfig.ok) {
+ jsonLikeConfig.config satisfies RulesConfig;
+} else {
+ jsonLikeConfig.error.message satisfies string;
+}
+configCommentParser.parseListConfig("baz") satisfies BooleanConfig;
+configCommentParser.parseStringConfig("qux") satisfies StringConfig;
+
+// Directive
+void ((type: "disable" | "enable" | "disable-next-line" | "disable-line") => {
+ const directive = new Directive({
+ type,
+ node: {},
+ value: "foo",
+ justification: "bar",
+ });
+ directive.justification satisfies string;
+ directive.node satisfies unknown;
+ directive.type satisfies DirectiveType;
+ directive.value satisfies string;
+});
+
+// TextSourceCodeBase
+class TestTextSourceCode extends TextSourceCodeBase {
+ declare ast: { foo: string; bar: number };
+ constructor({
+ text,
+ ast,
+ }: {
+ text: string;
+ ast: { foo: string; bar: number };
+ }) {
+ super({ text, ast, lineEndingPattern: /\r\n|[\r\n\u2028\u2029]/u });
+ }
+}
+const sourceCode = new TestTextSourceCode({
+ text: "text",
+ ast: { foo: "ABC", bar: 123 },
+});
+sourceCode.ast satisfies { foo: string; bar: number };
+sourceCode.getAncestors({}) satisfies object[];
+sourceCode.getLoc({}) satisfies SourceLocation;
+sourceCode.getParent({}) satisfies object | undefined;
+sourceCode.getRange({}) satisfies SourceRange;
+sourceCode.getText() satisfies string;
+sourceCode.getText({}, 0, 1) satisfies string;
+
+// VisitNodeStep
+class TestVisitNodeStep extends VisitNodeStep {
+ constructor({ target, phase }: { target: object; phase: 1 | 2 }) {
+ super({ target, phase, args: ["foo", 42] });
+ }
+}
+const step1 = new TestVisitNodeStep({ target: { foo: "bar" }, phase: 2 });
+step1.args satisfies unknown[];
+step1.kind satisfies 1;
+step1.phase satisfies 1 | 2;
+step1.target satisfies object;
+step1.type satisfies "visit";