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: `