diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index f95c1c71..a013923e 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -11,10 +11,10 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - run: npm install - run: npm run bootstrap - run: npm run lint @@ -24,10 +24,10 @@ jobs: needs: build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 registry-url: https://registry.npmjs.org/ - run: npm install - run: npm run bootstrap diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index a0cc770c..a1807427 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -14,12 +14,12 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x, 20.x] + node-version: [18.x, 20.x, 22.x] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - run: npm install diff --git a/packages/angular/angular.json b/packages/angular/angular.json index 83f47bdb..2badb315 100644 --- a/packages/angular/angular.json +++ b/packages/angular/angular.json @@ -29,7 +29,8 @@ "polyfills": ["zone.js", "zone.js/testing"], "tsConfig": "projects/tx-native-angular-sdk/tsconfig.spec.json", "karmaConfig": "projects/tx-native-angular-sdk/karma.conf.js", - "codeCoverage": true + "codeCoverage": true, + "watch": false } }, "lint": { @@ -53,5 +54,8 @@ "@angular-eslint/schematics:library": { "setParserOptionsProject": true } + }, + "cli": { + "analytics": false } } diff --git a/packages/angular/package.json b/packages/angular/package.json index c68dc714..6213bf34 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -31,36 +31,39 @@ "test": "ng test" }, "private": true, + "engines": { + "node": ">=18.19.0" + }, "dependencies": { - "@angular/animations": "~16.2.7", - "@angular/common": "~16.2.7", - "@angular/compiler": "~16.2.7", - "@angular/core": "~16.2.7", - "@angular/forms": "~16.2.7", - "@angular/platform-browser": "^16.2.7", - "@angular/platform-browser-dynamic": "^16.2.7", - "@angular/router": "~16.2.7", + "@angular/animations": "~19.2.19", + "@angular/common": "~19.2.19", + "@angular/compiler": "~19.2.19", + "@angular/core": "~19.2.19", + "@angular/forms": "~19.2.19", + "@angular/platform-browser": "~19.2.19", + "@angular/platform-browser-dynamic": "~19.2.19", + "@angular/router": "~19.2.19", "@transifex/native": "^7.1.5", - "rxjs": "~6.6.0", + "rxjs": "~7.8.0", "tslib": "^2.6.2", - "zone.js": "^0.13.3" + "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/architect": "^0.1602.4", - "@angular-devkit/build-angular": "^16.2.4", - "@angular-eslint/builder": "^16.2.0", - "@angular-eslint/eslint-plugin": "^16.2.0", - "@angular-eslint/eslint-plugin-template": "^16.2.0", - "@angular-eslint/schematics": "16.2.0", - "@angular-eslint/template-parser": "^16.2.0", - "@angular/cli": "^16.2.4", - "@angular/compiler-cli": "^16.2.7", - "@types/jasmine": "~4.0.0", - "@types/node": "^16.18.70", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@angular-devkit/architect": "0.1902.19", + "@angular-devkit/build-angular": "~19.2.19", + "@angular-eslint/builder": "~19.2.0", + "@angular-eslint/eslint-plugin": "~19.2.0", + "@angular-eslint/eslint-plugin-template": "~19.2.0", + "@angular-eslint/schematics": "~19.2.0", + "@angular-eslint/template-parser": "~19.2.0", + "@angular/cli": "~19.2.0", + "@angular/compiler-cli": "~19.2.19", + "@types/jasmine": "~5.1.0", + "@types/node": "^20.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.56.0", - "eslint-config-airbnb-typescript": "^16.2.0", + "eslint-config-airbnb-typescript": "^18.0.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.29.1", "eslint-plugin-prefer-arrow": "^1.2.3", @@ -69,15 +72,15 @@ "eslint-plugin-rxjs-angular": "^2.0.1", "eslint-plugin-tsdoc": "^0.2.17", "eslint-plugin-unicorn": "^46.0.1", - "jasmine-core": "~4.3.0", + "jasmine-core": "~5.1.0", "jasmine-spec-reporter": "^7.0.0", "karma": "~6.4.1", "karma-chrome-launcher": "~3.1.1", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", - "ng-packagr": "^16.2.3", - "ts-node": "~8.3.0", - "typescript": "~4.9.5" + "ng-packagr": "~19.2.0", + "ts-node": "~10.9.0", + "typescript": "~5.5.0" } } diff --git a/packages/angular/projects/tx-native-angular-sdk/karma.conf.js b/packages/angular/projects/tx-native-angular-sdk/karma.conf.js index 6a1db930..9d150439 100644 --- a/packages/angular/projects/tx-native-angular-sdk/karma.conf.js +++ b/packages/angular/projects/tx-native-angular-sdk/karma.conf.js @@ -16,7 +16,7 @@ module.exports = function (config) { jasmine: { failSpecWithNoExpectations: true, }, - clearContext: false + clearContext: true, // Suppresses "full page reload" false positive in Chrome 128+ }, jasmineHtmlReporter: { suppressAll: true @@ -30,7 +30,7 @@ module.exports = function (config) { { type: 'text-summary' } ] }, - reporters: ['progress', 'kjhtml'], + reporters: ['progress', 'coverage'], port: 9876, colors: true, logLevel: config.LOG_INFO, @@ -44,10 +44,11 @@ module.exports = function (config) { }, ChromeHeadlessNoSandbox: { base: 'ChromeHeadless', - flags: ['--no-sandbox'], + flags: ['--no-sandbox', '--headless=old'], }, }, - singleRun: true, // Moved this property outside the customLaunchers object - restartOnFileChange: true, // Moved this property outside the customLaunchers object + singleRun: true, + restartOnFileChange: false, + browserDisconnectTolerance: 2, }); }; diff --git a/packages/angular/projects/tx-native-angular-sdk/package.json b/packages/angular/projects/tx-native-angular-sdk/package.json index 6f0178fe..79891def 100644 --- a/packages/angular/projects/tx-native-angular-sdk/package.json +++ b/packages/angular/projects/tx-native-angular-sdk/package.json @@ -17,8 +17,8 @@ "repository": "git://github.com/transifex/transifex-javascript.git", "license": "Apache-2.0", "peerDependencies": { - "@angular/common": "^16.0.0", - "@angular/core": " ^16.0.0", + "@angular/common": "^19.0.0", + "@angular/core": "^19.0.0", "@transifex/native": "^7.0.1" } } diff --git a/packages/angular/projects/tx-native-angular-sdk/src/lib/T.component.ts b/packages/angular/projects/tx-native-angular-sdk/src/lib/T.component.ts index c98b3f2c..4d379935 100644 --- a/packages/angular/projects/tx-native-angular-sdk/src/lib/T.component.ts +++ b/packages/angular/projects/tx-native-angular-sdk/src/lib/T.component.ts @@ -1,15 +1,19 @@ import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { Observable, Subscription } from 'rxjs'; import { TXInstanceComponent } from './instance.component'; import { ITranslateParams } from './interfaces'; +import { SafeHtmlPipe } from './safe-html.pipe'; import { TranslationService } from './translation.service'; /** * A translation component **/ @Component({ + standalone: true, selector: 'T', + imports: [CommonModule, SafeHtmlPipe], template: ` {{ translatedStr }} diff --git a/packages/angular/projects/tx-native-angular-sdk/src/lib/T.decorator.ts b/packages/angular/projects/tx-native-angular-sdk/src/lib/T.decorator.ts index 444764de..c0fee7a4 100644 --- a/packages/angular/projects/tx-native-angular-sdk/src/lib/T.decorator.ts +++ b/packages/angular/projects/tx-native-angular-sdk/src/lib/T.decorator.ts @@ -8,7 +8,7 @@ import {ITXInstanceConfiguration} from "./interfaces"; */ export const T = (str: string, params?: Record, - instanceConfig?: ITXInstanceConfiguration) => (target: any, key: string) => { + instanceConfig?: ITXInstanceConfiguration) => (target: object, key: string) => { const injector = Injector.create( { providers: [ diff --git a/packages/angular/projects/tx-native-angular-sdk/src/lib/TXNative.module.ts b/packages/angular/projects/tx-native-angular-sdk/src/lib/TXNative.module.ts index 7461d52a..8c0fb4bb 100644 --- a/packages/angular/projects/tx-native-angular-sdk/src/lib/TXNative.module.ts +++ b/packages/angular/projects/tx-native-angular-sdk/src/lib/TXNative.module.ts @@ -12,7 +12,8 @@ import { LoadTranslationsDirective } from './load-translations.directive'; @NgModule({ - declarations: [ + imports: [ + CommonModule, TComponent, UTComponent, LanguagePickerComponent, @@ -21,7 +22,6 @@ import { LoadTranslationsDirective } from './load-translations.directive'; TXInstanceComponent, LoadTranslationsDirective, ], - imports: [CommonModule], exports: [ TComponent, UTComponent, diff --git a/packages/angular/projects/tx-native-angular-sdk/src/lib/UT.component.ts b/packages/angular/projects/tx-native-angular-sdk/src/lib/UT.component.ts index b1697a52..d1e0c9f9 100644 --- a/packages/angular/projects/tx-native-angular-sdk/src/lib/UT.component.ts +++ b/packages/angular/projects/tx-native-angular-sdk/src/lib/UT.component.ts @@ -1,11 +1,15 @@ import { Component, ViewEncapsulation } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { TXInstanceComponent } from './instance.component'; +import { SafeHtmlPipe } from './safe-html.pipe'; import { TComponent } from './T.component'; import { TranslationService } from './translation.service'; @Component({ + standalone: true, selector: 'UT', + imports: [CommonModule, SafeHtmlPipe], template: `
diff --git a/packages/angular/projects/tx-native-angular-sdk/src/lib/instance.component.ts b/packages/angular/projects/tx-native-angular-sdk/src/lib/instance.component.ts index 59d302bb..e6c9d411 100644 --- a/packages/angular/projects/tx-native-angular-sdk/src/lib/instance.component.ts +++ b/packages/angular/projects/tx-native-angular-sdk/src/lib/instance.component.ts @@ -5,6 +5,7 @@ import { TranslationService } from './translation.service'; import {TxNative} from "@transifex/native"; @Component({ + standalone: true, selector: 'tx-instance', template: ` diff --git a/packages/angular/projects/tx-native-angular-sdk/src/lib/language-picker.component.ts b/packages/angular/projects/tx-native-angular-sdk/src/lib/language-picker.component.ts index 2a6148b0..9d3d1841 100644 --- a/packages/angular/projects/tx-native-angular-sdk/src/lib/language-picker.component.ts +++ b/packages/angular/projects/tx-native-angular-sdk/src/lib/language-picker.component.ts @@ -1,4 +1,5 @@ import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { Observable, Subscription } from 'rxjs'; import { TXInstanceComponent } from './instance.component'; @@ -9,7 +10,9 @@ import { TranslationService } from './translation.service'; * A language picker component with the available languages already populated */ @Component({ + standalone: true, selector: 'tx-language-picker', + imports: [CommonModule], template: `