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

Automattic Airbnb

Gold Sponsors

trunk.io

Silver Sponsors

-

SERP Triumph JetBrains Liftoff American Express Workleap

Bronze Sponsors

-

Cybozu WordHint Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

+

SERP Triumph JetBrains Liftoff American Express

Bronze Sponsors

+

Cybozu Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

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.

Netlify Algolia 1Password

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

Automattic Airbnb

Gold Sponsors

trunk.io

Silver Sponsors

-

SERP Triumph JetBrains Liftoff American Express Workleap

Bronze Sponsors

-

Cybozu WordHint Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

+

SERP Triumph JetBrains Liftoff American Express

Bronze Sponsors

+

Cybozu Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

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.

Netlify Algolia 1Password

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

Automattic Airbnb

Gold Sponsors

trunk.io

Silver Sponsors

-

SERP Triumph JetBrains Liftoff American Express Workleap

Bronze Sponsors

-

Cybozu WordHint Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

+

SERP Triumph JetBrains Liftoff American Express

Bronze Sponsors

+

Cybozu Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

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.

Netlify Algolia 1Password

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

Automattic Airbnb

Gold Sponsors

trunk.io

Silver Sponsors

-

SERP Triumph JetBrains Liftoff American Express Workleap

Bronze Sponsors

-

Cybozu WordHint Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

+

SERP Triumph JetBrains Liftoff American Express

Bronze Sponsors

+

Cybozu Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

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.

Netlify Algolia 1Password

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

Automattic Airbnb

Gold Sponsors

trunk.io

Silver Sponsors

-

SERP Triumph JetBrains Liftoff American Express Workleap

Bronze Sponsors

-

Cybozu WordHint Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

+

SERP Triumph JetBrains Liftoff American Express

Bronze Sponsors

+

Cybozu Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

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.

Netlify Algolia 1Password

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

Automattic Airbnb

Gold Sponsors

trunk.io

Silver Sponsors

-

SERP Triumph JetBrains Liftoff American Express Workleap

Bronze Sponsors

-

Cybozu WordHint Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

+

SERP Triumph JetBrains Liftoff American Express

Bronze Sponsors

+

Cybozu Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

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.

Netlify Algolia 1Password

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

Automattic Airbnb

Gold Sponsors

trunk.io

Silver Sponsors

-

SERP Triumph JetBrains Liftoff American Express Workleap

Bronze Sponsors

-

Cybozu WordHint Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

+

SERP Triumph JetBrains Liftoff American Express

Bronze Sponsors

+

Cybozu Anagram Solver Icons8 Discord GitBook Nx Mercedes-Benz Group HeroCoders

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.

Netlify Algolia 1Password

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";