From be424f91fb7ab02c2cfba276b053e90a1cc0ef04 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 10 Jul 2025 22:02:59 +0500 Subject: [PATCH 1/5] Throw error if trying to optional chain in template tagged literal. --- packages/typescript-estree/src/convert.ts | 9 +++++++++ packages/typescript-estree/tests/lib/convert.test.ts | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index f2a504aa4a1d..96773aae666a 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -1918,6 +1918,15 @@ export class Converter { } case SyntaxKind.TaggedTemplateExpression: + if ( + node.tag.kind === SyntaxKind.PropertyAccessExpression && + node.tag.flags & ts.NodeFlags.OptionalChain + ) { + this.#throwError( + node, + 'Cannot have an optional chain in TaggedTemplateExpression.', + ); + } return this.createNode(node, { type: AST_NODE_TYPES.TaggedTemplateExpression, quasi: this.convertChild(node.template), diff --git a/packages/typescript-estree/tests/lib/convert.test.ts b/packages/typescript-estree/tests/lib/convert.test.ts index 77dea1f5f4b4..b5eb7793a3c1 100644 --- a/packages/typescript-estree/tests/lib/convert.test.ts +++ b/packages/typescript-estree/tests/lib/convert.test.ts @@ -238,6 +238,15 @@ describe('convert', () => { type: AST_NODE_TYPES.TSAbstractKeyword, }); }); + + it('should throw an error if optional chaining in TaggedTemplateExpression', () => { + const ast = convertCode('a?.b``'); + const instance = new Converter(ast); + + expect(() => instance.convertProgram()).toThrow( + 'Cannot have an optional chain in TaggedTemplateExpression.', + ); + }); }); /* eslint-enable @typescript-eslint/dot-notation */ From d164b796c2d201a60ffc416d3ec84dc6faf47c74 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 10 Jul 2025 22:07:32 +0500 Subject: [PATCH 2/5] No optional chain in tag. --- .../ast-spec/src/expression/TaggedTemplateExpression/spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/spec.ts b/packages/ast-spec/src/expression/TaggedTemplateExpression/spec.ts index 3000f2ec94a3..34d9da3bfff4 100644 --- a/packages/ast-spec/src/expression/TaggedTemplateExpression/spec.ts +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/spec.ts @@ -1,5 +1,6 @@ import type { AST_NODE_TYPES } from '../../ast-node-types'; import type { BaseNode } from '../../base/BaseNode'; +import type { ChainExpression } from '../../expression/ChainExpression/spec'; import type { TSTypeParameterInstantiation } from '../../special/TSTypeParameterInstantiation/spec'; import type { Expression } from '../../unions/Expression'; import type { TemplateLiteral } from '../TemplateLiteral/spec'; @@ -7,6 +8,6 @@ import type { TemplateLiteral } from '../TemplateLiteral/spec'; export interface TaggedTemplateExpression extends BaseNode { type: AST_NODE_TYPES.TaggedTemplateExpression; quasi: TemplateLiteral; - tag: Expression; + tag: Exclude; typeArguments: TSTypeParameterInstantiation | undefined; } From 6b23367d31306f571fb86809de0d382586ac0838 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 10 Jul 2025 22:39:29 +0500 Subject: [PATCH 3/5] Fix codecov error... --- packages/typescript-estree/src/convert.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 96773aae666a..5dfdf9b791ef 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -1917,7 +1917,7 @@ export class Converter { return result; } - case SyntaxKind.TaggedTemplateExpression: + case SyntaxKind.TaggedTemplateExpression: { if ( node.tag.kind === SyntaxKind.PropertyAccessExpression && node.tag.flags & ts.NodeFlags.OptionalChain @@ -1938,6 +1938,7 @@ export class Converter { node, ), }); + } case SyntaxKind.TemplateHead: case SyntaxKind.TemplateMiddle: From f4657a53f32cd1b2755aa4147ebdfd571b2d104f Mon Sep 17 00:00:00 2001 From: MK Date: Mon, 14 Jul 2025 17:19:47 +0500 Subject: [PATCH 4/5] Fixes + ast-spec tests. --- .../_error_/optional-nested-function-tag/fixture.ts | 1 + .../snapshots/1-TSESTree-Error.shot | 7 +++++++ .../snapshots/2-Babel-Error.shot | 8 ++++++++ .../snapshots/3-Alignment-Error.shot | 4 ++++ .../fixtures/_error_/optional-nested-tag/fixture.ts | 1 + .../optional-nested-tag/snapshots/1-TSESTree-Error.shot | 7 +++++++ .../optional-nested-tag/snapshots/2-Babel-Error.shot | 8 ++++++++ .../optional-nested-tag/snapshots/3-Alignment-Error.shot | 4 ++++ .../fixtures/_error_/optional-tag/fixture.ts | 1 + .../_error_/optional-tag/snapshots/1-TSESTree-Error.shot | 7 +++++++ .../_error_/optional-tag/snapshots/2-Babel-Error.shot | 8 ++++++++ .../optional-tag/snapshots/3-Alignment-Error.shot | 4 ++++ .../src/expression/TaggedTemplateExpression/spec.ts | 3 +-- packages/typescript-estree/src/convert.ts | 5 +---- packages/typescript-estree/tests/lib/convert.test.ts | 9 --------- 15 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/fixture.ts create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/1-TSESTree-Error.shot create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/2-Babel-Error.shot create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/3-Alignment-Error.shot create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/fixture.ts create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/2-Babel-Error.shot create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/3-Alignment-Error.shot create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/fixture.ts create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/1-TSESTree-Error.shot create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/2-Babel-Error.shot create mode 100644 packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/3-Alignment-Error.shot diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/fixture.ts b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/fixture.ts new file mode 100644 index 000000000000..7fc56660a355 --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/fixture.ts @@ -0,0 +1 @@ +a?.b()`...` diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/1-TSESTree-Error.shot new file mode 100644 index 000000000000..798a95e09e48 --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,7 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-nested-function-tag > TSESTree - Error`] +TSError +> 1 | a?.b()`...` + | ^^^^^^^^^^^ Cannot have an optional chain in TaggedTemplateExpression. + 2 | diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/2-Babel-Error.shot new file mode 100644 index 000000000000..69c9ea2f84ea --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/2-Babel-Error.shot @@ -0,0 +1,8 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-nested-function-tag > Babel - Error`] +BabelError +> 1 | a?.b()`...` + | ^ Tagged Template Literals are not allowed in optionalChain. (1:0) + 2 | + diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/3-Alignment-Error.shot new file mode 100644 index 000000000000..11aea0c55d48 --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/3-Alignment-Error.shot @@ -0,0 +1,4 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-nested-function-tag > Error Alignment`] +Both errored diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/fixture.ts b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/fixture.ts new file mode 100644 index 000000000000..d6e041652e3d --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/fixture.ts @@ -0,0 +1 @@ +a?.b.c`...` diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot new file mode 100644 index 000000000000..9a0e83741b45 --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,7 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-nested-tag > TSESTree - Error`] +TSError +> 1 | a?.b.c`...` + | ^^^^^^^^^^^ Cannot have an optional chain in TaggedTemplateExpression. + 2 | diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/2-Babel-Error.shot new file mode 100644 index 000000000000..e27266628424 --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/2-Babel-Error.shot @@ -0,0 +1,8 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-nested-tag > Babel - Error`] +BabelError +> 1 | a?.b.c`...` + | ^ Tagged Template Literals are not allowed in optionalChain. (1:0) + 2 | + diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/3-Alignment-Error.shot new file mode 100644 index 000000000000..87a5ea5117c6 --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/3-Alignment-Error.shot @@ -0,0 +1,4 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-nested-tag > Error Alignment`] +Both errored diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/fixture.ts b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/fixture.ts new file mode 100644 index 000000000000..fb8c8604a1d5 --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/fixture.ts @@ -0,0 +1 @@ +a?.b`...` diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/1-TSESTree-Error.shot new file mode 100644 index 000000000000..b322c5153683 --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/1-TSESTree-Error.shot @@ -0,0 +1,7 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-tag > TSESTree - Error`] +TSError +> 1 | a?.b`...` + | ^^^^^^^^^ Cannot have an optional chain in TaggedTemplateExpression. + 2 | diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/2-Babel-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/2-Babel-Error.shot new file mode 100644 index 000000000000..23079d1b071e --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/2-Babel-Error.shot @@ -0,0 +1,8 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-tag > Babel - Error`] +BabelError +> 1 | a?.b`...` + | ^ Tagged Template Literals are not allowed in optionalChain. (1:0) + 2 | + diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/3-Alignment-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/3-Alignment-Error.shot new file mode 100644 index 000000000000..d32839672fdb --- /dev/null +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/3-Alignment-Error.shot @@ -0,0 +1,4 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-tag > Error Alignment`] +Both errored diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/spec.ts b/packages/ast-spec/src/expression/TaggedTemplateExpression/spec.ts index 34d9da3bfff4..3000f2ec94a3 100644 --- a/packages/ast-spec/src/expression/TaggedTemplateExpression/spec.ts +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/spec.ts @@ -1,6 +1,5 @@ import type { AST_NODE_TYPES } from '../../ast-node-types'; import type { BaseNode } from '../../base/BaseNode'; -import type { ChainExpression } from '../../expression/ChainExpression/spec'; import type { TSTypeParameterInstantiation } from '../../special/TSTypeParameterInstantiation/spec'; import type { Expression } from '../../unions/Expression'; import type { TemplateLiteral } from '../TemplateLiteral/spec'; @@ -8,6 +7,6 @@ import type { TemplateLiteral } from '../TemplateLiteral/spec'; export interface TaggedTemplateExpression extends BaseNode { type: AST_NODE_TYPES.TaggedTemplateExpression; quasi: TemplateLiteral; - tag: Exclude; + tag: Expression; typeArguments: TSTypeParameterInstantiation | undefined; } diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 5dfdf9b791ef..9a10408719ab 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -1918,10 +1918,7 @@ export class Converter { } case SyntaxKind.TaggedTemplateExpression: { - if ( - node.tag.kind === SyntaxKind.PropertyAccessExpression && - node.tag.flags & ts.NodeFlags.OptionalChain - ) { + if (node.tag.flags & ts.NodeFlags.OptionalChain) { this.#throwError( node, 'Cannot have an optional chain in TaggedTemplateExpression.', diff --git a/packages/typescript-estree/tests/lib/convert.test.ts b/packages/typescript-estree/tests/lib/convert.test.ts index b5eb7793a3c1..77dea1f5f4b4 100644 --- a/packages/typescript-estree/tests/lib/convert.test.ts +++ b/packages/typescript-estree/tests/lib/convert.test.ts @@ -238,15 +238,6 @@ describe('convert', () => { type: AST_NODE_TYPES.TSAbstractKeyword, }); }); - - it('should throw an error if optional chaining in TaggedTemplateExpression', () => { - const ast = convertCode('a?.b``'); - const instance = new Converter(ast); - - expect(() => instance.convertProgram()).toThrow( - 'Cannot have an optional chain in TaggedTemplateExpression.', - ); - }); }); /* eslint-enable @typescript-eslint/dot-notation */ From b7da0ce5785abf53284d5d8324866dd70174a423 Mon Sep 17 00:00:00 2001 From: MK Date: Tue, 15 Jul 2025 21:58:05 +0500 Subject: [PATCH 5/5] Change err msg + update snapshots. --- .../snapshots/1-TSESTree-Error.shot | 2 +- .../_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot | 2 +- .../_error_/optional-tag/snapshots/1-TSESTree-Error.shot | 2 +- packages/typescript-estree/src/convert.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/1-TSESTree-Error.shot index 798a95e09e48..e096b5f6d715 100644 --- a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/1-TSESTree-Error.shot +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-function-tag/snapshots/1-TSESTree-Error.shot @@ -3,5 +3,5 @@ exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-nested-function-tag > TSESTree - Error`] TSError > 1 | a?.b()`...` - | ^^^^^^^^^^^ Cannot have an optional chain in TaggedTemplateExpression. + | ^^^^^^^^^^^ Tagged template expressions are not permitted in an optional chain. 2 | diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot index 9a0e83741b45..3be80a77ffb4 100644 --- a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-nested-tag/snapshots/1-TSESTree-Error.shot @@ -3,5 +3,5 @@ exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-nested-tag > TSESTree - Error`] TSError > 1 | a?.b.c`...` - | ^^^^^^^^^^^ Cannot have an optional chain in TaggedTemplateExpression. + | ^^^^^^^^^^^ Tagged template expressions are not permitted in an optional chain. 2 | diff --git a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/1-TSESTree-Error.shot b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/1-TSESTree-Error.shot index b322c5153683..b7909f67ed9e 100644 --- a/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/1-TSESTree-Error.shot +++ b/packages/ast-spec/src/expression/TaggedTemplateExpression/fixtures/_error_/optional-tag/snapshots/1-TSESTree-Error.shot @@ -3,5 +3,5 @@ exports[`AST Fixtures > expression > TaggedTemplateExpression > _error_ > optional-tag > TSESTree - Error`] TSError > 1 | a?.b`...` - | ^^^^^^^^^ Cannot have an optional chain in TaggedTemplateExpression. + | ^^^^^^^^^ Tagged template expressions are not permitted in an optional chain. 2 | diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 9a10408719ab..7ebc034afdec 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -1921,7 +1921,7 @@ export class Converter { if (node.tag.flags & ts.NodeFlags.OptionalChain) { this.#throwError( node, - 'Cannot have an optional chain in TaggedTemplateExpression.', + 'Tagged template expressions are not permitted in an optional chain.', ); } return this.createNode(node, { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy