mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-10 09:59:48 +01:00
[EC-648] Fix esm features in node testing environment (#4223)
* Add AST transformer to remove import.meta in tests
This commit is contained in:
parent
4e0c26ddb8
commit
23ec317767
@ -6,7 +6,7 @@ import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
|
|||||||
import { InfiniteScrollModule } from "ngx-infinite-scroll";
|
import { InfiniteScrollModule } from "ngx-infinite-scroll";
|
||||||
|
|
||||||
import { AppComponent } from "./app.component";
|
import { AppComponent } from "./app.component";
|
||||||
import { CoreModule } from "./core/core.module";
|
import { CoreModule } from "./core";
|
||||||
import { OssRoutingModule } from "./oss-routing.module";
|
import { OssRoutingModule } from "./oss-routing.module";
|
||||||
import { OssModule } from "./oss.module";
|
import { OssModule } from "./oss.module";
|
||||||
import { WildcardRoutingModule } from "./wildcard-routing.module";
|
import { WildcardRoutingModule } from "./wildcard-routing.module";
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
// Do not export this here or it will import MultithreadEncryptService (via JslibServicesModule) into test code.
|
export * from "./core.module";
|
||||||
// MultithreadEncryptService contains ES2020 features (import.meta) which are not supported in Node and Jest.
|
|
||||||
// Revisit this when Node & Jest get stable support for ESM.
|
|
||||||
// export * from "./core.module";
|
|
||||||
export * from "./event.service";
|
export * from "./event.service";
|
||||||
export * from "./policy-list.service";
|
export * from "./policy-list.service";
|
||||||
export * from "./router.service";
|
export * from "./router.service";
|
||||||
|
@ -7,7 +7,7 @@ import { RouterModule } from "@angular/router";
|
|||||||
import { InfiniteScrollModule } from "ngx-infinite-scroll";
|
import { InfiniteScrollModule } from "ngx-infinite-scroll";
|
||||||
|
|
||||||
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
||||||
import { CoreModule } from "@bitwarden/web-vault/app/core/core.module";
|
import { CoreModule } from "@bitwarden/web-vault/app/core";
|
||||||
import { OssRoutingModule } from "@bitwarden/web-vault/app/oss-routing.module";
|
import { OssRoutingModule } from "@bitwarden/web-vault/app/oss-routing.module";
|
||||||
import { OssModule } from "@bitwarden/web-vault/app/oss.module";
|
import { OssModule } from "@bitwarden/web-vault/app/oss.module";
|
||||||
import { WildcardRoutingModule } from "@bitwarden/web-vault/app/wildcard-routing.module";
|
import { WildcardRoutingModule } from "@bitwarden/web-vault/app/wildcard-routing.module";
|
||||||
|
36
libs/shared/es2020-transformer.ts
Normal file
36
libs/shared/es2020-transformer.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import * as ts from "typescript";
|
||||||
|
|
||||||
|
// Custom Typescript AST transformer for use with ts-jest / jest-preset-angular
|
||||||
|
// Removes specified ES2020 syntax from source code, as node does not support it yet
|
||||||
|
// Reference: https://kulshekhar.github.io/ts-jest/docs/getting-started/options/astTransformers
|
||||||
|
// Use this tool to understand how we identify and filter AST nodes: https://ts-ast-viewer.com/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remember to increase the version whenever transformer's content is changed. This is to inform Jest to not reuse
|
||||||
|
* the previous cache which contains old transformer's content
|
||||||
|
*/
|
||||||
|
export const version = 1;
|
||||||
|
export const name = "bit-es2020-transformer";
|
||||||
|
|
||||||
|
// Returns true for 'import.meta' statements
|
||||||
|
const isImportMetaStatement = (node: ts.Node) =>
|
||||||
|
ts.isPropertyAccessExpression(node) &&
|
||||||
|
ts.isMetaProperty(node.expression) &&
|
||||||
|
node.expression.keywordToken === ts.SyntaxKind.ImportKeyword;
|
||||||
|
|
||||||
|
export const factory = function (/*opts?: Opts*/) {
|
||||||
|
function visitor(ctx: ts.TransformationContext, sf: ts.SourceFile) {
|
||||||
|
const visitor: ts.Visitor = (node: ts.Node): ts.VisitResult<any> => {
|
||||||
|
if (isImportMetaStatement(node)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Continue searching child nodes
|
||||||
|
return ts.visitEachChild(node, visitor, ctx);
|
||||||
|
};
|
||||||
|
return visitor;
|
||||||
|
}
|
||||||
|
return (ctx: ts.TransformationContext): ts.Transformer<any> => {
|
||||||
|
return (sf: ts.SourceFile) => ts.visitNode(sf, visitor(ctx, sf));
|
||||||
|
};
|
||||||
|
};
|
@ -19,6 +19,9 @@ module.exports = {
|
|||||||
// Makes tests run faster and reduces size/rate of leak, but loses typechecking on test code
|
// Makes tests run faster and reduces size/rate of leak, but loses typechecking on test code
|
||||||
// See https://bitwarden.atlassian.net/browse/EC-497 for more info
|
// See https://bitwarden.atlassian.net/browse/EC-497 for more info
|
||||||
isolatedModules: true,
|
isolatedModules: true,
|
||||||
|
astTransformers: {
|
||||||
|
before: ["<rootDir>/../../libs/shared/es2020-transformer.ts"],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user