diff --git a/.github/workflows/deploy-demo.yml b/.github/workflows/deploy-demo.yml index cdbcd40..1be735a 100644 --- a/.github/workflows/deploy-demo.yml +++ b/.github/workflows/deploy-demo.yml @@ -21,10 +21,12 @@ jobs: include: - ionic-major: 9 ionic-version: 9.0.0 + eslint-rules-version: 22.0.0 configuration: production wrangler-args: '--env=""' - ionic-major: 8 ionic-version: 8.8.19 + eslint-rules-version: 21.3.0 configuration: production,ionic8 wrangler-args: '--env ionic8' name: Deploy Ionic ${{ matrix.ionic-major }} demo @@ -45,7 +47,7 @@ jobs: - run: npm ci working-directory: ./demo - - run: npm install --no-save --package-lock=false @ionic/angular@${{ matrix.ionic-version }} @ionic/core@${{ matrix.ionic-version }} + - run: npm install --no-save --package-lock=false @ionic/angular@${{ matrix.ionic-version }} @ionic/core@${{ matrix.ionic-version }} @rdlabo/eslint-plugin-rules@${{ matrix.eslint-rules-version }} working-directory: ./demo - run: npm run build -- --configuration=${{ matrix.configuration }} working-directory: ./demo diff --git a/.github/workflows/e2e-main.yml b/.github/workflows/e2e-main.yml index fe4607e..e8a81bc 100644 --- a/.github/workflows/e2e-main.yml +++ b/.github/workflows/e2e-main.yml @@ -38,7 +38,7 @@ jobs: - run: npm ci working-directory: './demo' - if: matrix.ionic-major == 8 - run: npm install --no-save --package-lock=false @ionic/angular@${{ matrix.ionic-version }} @ionic/core@${{ matrix.ionic-version }} + run: npm install --no-save --package-lock=false @ionic/angular@${{ matrix.ionic-version }} @ionic/core@${{ matrix.ionic-version }} @rdlabo/eslint-plugin-rules@21.3.0 working-directory: './demo' - name: Run Playwright tests diff --git a/.github/workflows/e2e-pull_request.yml b/.github/workflows/e2e-pull_request.yml index 6bbfc27..40e0759 100644 --- a/.github/workflows/e2e-pull_request.yml +++ b/.github/workflows/e2e-pull_request.yml @@ -44,7 +44,7 @@ jobs: - run: npm ci working-directory: './demo' - if: matrix.ionic-major == 8 - run: npm install --no-save --package-lock=false @ionic/angular@${{ matrix.ionic-version }} @ionic/core@${{ matrix.ionic-version }} + run: npm install --no-save --package-lock=false @ionic/angular@${{ matrix.ionic-version }} @ionic/core@${{ matrix.ionic-version }} @rdlabo/eslint-plugin-rules@21.3.0 working-directory: './demo' - name: Run Playwright tests diff --git a/.github/workflows/update-screenshots.yml b/.github/workflows/update-screenshots.yml index 7f60d7d..b57c56b 100644 --- a/.github/workflows/update-screenshots.yml +++ b/.github/workflows/update-screenshots.yml @@ -106,7 +106,7 @@ jobs: run: npm run build - name: Install Ionic 8 in demo - run: npm install --no-save --package-lock=false @ionic/angular@8.8.19 @ionic/core@8.8.19 + run: npm install --no-save --package-lock=false @ionic/angular@8.8.19 @ionic/core@8.8.19 @rdlabo/eslint-plugin-rules@21.3.0 working-directory: './demo' - name: Verify Ionic 8 against the same screenshots diff --git a/demo/eslint.config.js b/demo/eslint.config.js index 07fd6bc..5d95372 100644 --- a/demo/eslint.config.js +++ b/demo/eslint.config.js @@ -3,6 +3,10 @@ const eslint = require("@eslint/js"); const tseslint = require("typescript-eslint"); const angular = require("angular-eslint"); const rdlabo = require('@rdlabo/eslint-plugin-rules'); +// The Ionic 8 matrix uses plugin v21; Ionic 9 uses its renamed v22 rule. +const ionicStandaloneRule = 'prefer-ionic-standalone' in rdlabo.rules + ? '@rdlabo/rules/prefer-ionic-standalone' + : '@rdlabo/rules/deny-import-from-ionic-module'; module.exports = tseslint.config( { @@ -29,7 +33,7 @@ module.exports = tseslint.config( "@angular-eslint/directive-selector": "off", "@angular-eslint/component-selector": "off", "@angular-eslint/no-empty-lifecycle-method": "off", - '@rdlabo/rules/deny-import-from-ionic-module': 'error', + [ionicStandaloneRule]: 'error', '@rdlabo/rules/implements-ionic-lifecycle': 'error', '@rdlabo/rules/deny-soft-private-modifier': 'error', '@rdlabo/rules/signal-use-as-signal': 'error', @@ -48,5 +52,12 @@ module.exports = tseslint.config( rules: { '@rdlabo/rules/ionic-attr-type-check': 'error', }, + }, + { + // These replacement entry points deliberately bridge Ionic 8 and 9 imports. + files: ["src/ionic/ionic.ts", "src/ionic/ionic.v8.ts"], + rules: { + [ionicStandaloneRule]: "off", + }, } ); diff --git a/demo/package-lock.json b/demo/package-lock.json index ad4154e..5f8f037 100644 --- a/demo/package-lock.json +++ b/demo/package-lock.json @@ -35,9 +35,9 @@ "@capacitor/cli": "^8.0.0", "@eslint/js": "^9.39.4", "@ionic/angular-toolkit": "^12.0.0", - "@ionic/core": "8.8.19", + "@ionic/core": "9.0.0", "@playwright/test": "1.58.2", - "@rdlabo/eslint-plugin-rules": "^21.0.0", + "@rdlabo/eslint-plugin-rules": "^22.0.0", "angular-eslint": "21.4.0", "eslint": "^9.39.4", "eslint-plugin-import": "^2.29.1", @@ -2716,20 +2716,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@ionic/angular/node_modules/@ionic/core": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-9.0.0.tgz", - "integrity": "sha512-ouHmLIdyP0vTV0PK/kj0QNtQTcDjyoWi2vKRaCkwj0xY3oU9qq3lB0N6w3Cm93ol0inBuXgn3/IN71BTp88c+g==", - "license": "MIT", - "dependencies": { - "@stencil/core": "^4.43.5", - "ionicons": "^8.1.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">= 16" - } - }, "node_modules/@ionic/cli-framework-output": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz", @@ -2746,44 +2732,19 @@ } }, "node_modules/@ionic/core": { - "version": "8.8.19", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.8.19.tgz", - "integrity": "sha512-eAAKZi/qR0U44OxH3MXAyoyLxTl1AeQCoOWvGdzywKbpl/JTVlGnfZJCiJGTmXszQlRsNXsl7fMDOvpsOtf6sQ==", - "dev": true, + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-9.0.0.tgz", + "integrity": "sha512-ouHmLIdyP0vTV0PK/kj0QNtQTcDjyoWi2vKRaCkwj0xY3oU9qq3lB0N6w3Cm93ol0inBuXgn3/IN71BTp88c+g==", "license": "MIT", "dependencies": { - "@stencil/core": "4.43.5", - "ionicons": "^8.0.13", + "@stencil/core": "^4.43.5", + "ionicons": "^8.1.0", "tslib": "^2.1.0" }, "engines": { "node": ">= 16" } }, - "node_modules/@ionic/core/node_modules/@stencil/core": { - "version": "4.43.5", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.43.5.tgz", - "integrity": "sha512-cgWD+GeuvJpTe1WQn40p02+BJ2j0j1YJ17GdkF2qKIQ23s2e3Zivq5yISXS3dcuV6oUJFN93jprdk+nk/sq99Q==", - "dev": true, - "license": "MIT", - "bin": { - "stencil": "bin/stencil" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.10.0" - }, - "optionalDependencies": { - "@rollup/rollup-darwin-arm64": "4.44.0", - "@rollup/rollup-darwin-x64": "4.44.0", - "@rollup/rollup-linux-arm64-gnu": "4.44.0", - "@rollup/rollup-linux-arm64-musl": "4.44.0", - "@rollup/rollup-linux-x64-gnu": "4.44.0", - "@rollup/rollup-linux-x64-musl": "4.44.0", - "@rollup/rollup-win32-arm64-msvc": "4.44.0", - "@rollup/rollup-win32-x64-msvc": "4.44.0" - } - }, "node_modules/@ionic/utils-array": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz", @@ -4168,9 +4129,9 @@ } }, "node_modules/@rdlabo/eslint-plugin-rules": { - "version": "21.3.0", - "resolved": "https://registry.npmjs.org/@rdlabo/eslint-plugin-rules/-/eslint-plugin-rules-21.3.0.tgz", - "integrity": "sha512-EjCDLpsbbd1NXmel4h4qKw/Z+l1qS/6BB//zIlF/9ia0ugHApcdB93J7uGrouDpE0qdZ4iiU6KyKX99Tqe4whw==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@rdlabo/eslint-plugin-rules/-/eslint-plugin-rules-22.0.0.tgz", + "integrity": "sha512-xqtgbzcP6HKRsyCmpINvsRZod+ZlF/vj1JgKZDFuKlrxZxgsm7yrRiDqUFiizrNt6CgG8wyW1g6dlvznIqlw3g==", "dev": true, "license": "MIT", "dependencies": { @@ -4180,8 +4141,9 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@angular-eslint/template-parser": ">=21.0.0 <22.0.0", - "@ionic/core": ">=8.0.0 <9.0.0", + "@angular-eslint/template-parser": ">=21.0.0 <23.0.0", + "@ionic/angular": ">=9.0.0 <10.0.0", + "@ionic/core": ">=9.0.0 <10.0.0", "@typescript-eslint/utils": ">=8.33.0 <9.0.0", "eslint": ">=9.0.0" }, @@ -4189,6 +4151,9 @@ "@angular-eslint/template-parser": { "optional": true }, + "@ionic/angular": { + "optional": true + }, "@ionic/core": { "optional": true } diff --git a/demo/package.json b/demo/package.json index 2160bcd..1131478 100644 --- a/demo/package.json +++ b/demo/package.json @@ -51,9 +51,9 @@ "@capacitor/cli": "^8.0.0", "@eslint/js": "^9.39.4", "@ionic/angular-toolkit": "^12.0.0", - "@ionic/core": "8.8.19", + "@ionic/core": "9.0.0", "@playwright/test": "1.58.2", - "@rdlabo/eslint-plugin-rules": "^21.0.0", + "@rdlabo/eslint-plugin-rules": "^22.0.0", "angular-eslint": "21.4.0", "eslint": "^9.39.4", "eslint-plugin-import": "^2.29.1",