mirror of
https://github.com/bitwarden/browser
synced 2026-02-11 22:13:32 +00:00
fix build errors (web):
• conditionally require chromium importer metadata module from desktop_napi only on desktop • comment out metadata unit tests that will be moved to rust unit tests
This commit is contained in:
8
libs/importer/src/metadata/importers.browser.ts
Normal file
8
libs/importer/src/metadata/importers.browser.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { deepFreeze } from "@bitwarden/common/tools/util";
|
||||
|
||||
import { ImportType } from "../models";
|
||||
|
||||
import { ImporterMetadata } from "./types";
|
||||
|
||||
// Browser builds won't have desktop native metadata available
|
||||
export const Importers: Partial<Record<ImportType, ImporterMetadata>> = deepFreeze({});
|
||||
@@ -1,5 +1,3 @@
|
||||
import { createRequire } from "module";
|
||||
|
||||
import { deepFreeze } from "@bitwarden/common/tools/util";
|
||||
|
||||
import { ImportType } from "../models";
|
||||
@@ -9,16 +7,21 @@ import { DataLoader, ImporterMetadata, InstructionLink } from "./types";
|
||||
|
||||
// Attempt to load metadata from desktop-napi, guaranteed to fail on web and in tests, expected to succeed on desktop
|
||||
let chromium_importer_metadata: { json: () => string } | undefined;
|
||||
type ChromiumImporterMetadata = {
|
||||
chromium_importer_metadata?: { json: () => string };
|
||||
};
|
||||
try {
|
||||
// __filename should be defined on desktop but will never resolve in tests or web
|
||||
const nodeRequire = createRequire(typeof __filename !== "undefined" ? __filename : "");
|
||||
const native = nodeRequire("@bitwarden/desktop-napi");
|
||||
if (
|
||||
native &&
|
||||
native.chromium_importer_metadata &&
|
||||
typeof native.chromium_importer_metadata.json === "function"
|
||||
) {
|
||||
chromium_importer_metadata = native.chromium_importer_metadata as { json: () => string };
|
||||
// __filename is defined for desktop only
|
||||
if (typeof __filename !== "undefined") {
|
||||
const nodeRequire = (0, eval)("require") as (id: string) => unknown;
|
||||
const native = nodeRequire("@bitwarden/desktop-napi") as ChromiumImporterMetadata;
|
||||
if (
|
||||
native &&
|
||||
native.chromium_importer_metadata &&
|
||||
typeof native.chromium_importer_metadata.json === "function"
|
||||
) {
|
||||
chromium_importer_metadata = native.chromium_importer_metadata as { json: () => string };
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// guaranteed to occur in import.service.ts and util.spec.ts, mocks have been added there
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// FIXME: Update this file to be type safe and remove this and next line
|
||||
// @ts-strict-ignore
|
||||
import { mock, MockProxy } from "jest-mock-extended";
|
||||
import { BehaviorSubject, Subject, firstValueFrom } from "rxjs";
|
||||
import { BehaviorSubject } from "rxjs";
|
||||
|
||||
// This import has been flagged as unallowed for this class. It may be involved in a circular dependency loop.
|
||||
// eslint-disable-next-line no-restricted-imports
|
||||
@@ -25,48 +25,13 @@ import { KeyService } from "@bitwarden/key-management";
|
||||
|
||||
import { BitwardenPasswordProtectedImporter } from "../importers/bitwarden/bitwarden-password-protected-importer";
|
||||
import { Importer } from "../importers/importer";
|
||||
import { ImporterMetadata, Instructions, Loader } from "../metadata";
|
||||
import { ImportType } from "../models";
|
||||
// import { ImporterMetadata, Instructions, Loader } from "../metadata";
|
||||
// import { ImportType } from "../models";
|
||||
import { ImportResult } from "../models/import-result";
|
||||
|
||||
import { ImportApiServiceAbstraction } from "./import-api.service.abstraction";
|
||||
import { ImportService } from "./import.service";
|
||||
|
||||
/* TODO add Rust unit tests to cover source of truth used on Desktop and then consider removing these tests entirely
|
||||
since they rely on mocks that are not used in desktop code */
|
||||
jest.mock("@bitwarden/desktop-napi", () => ({
|
||||
chromium_importer_metadata: {
|
||||
json: () =>
|
||||
JSON.stringify({
|
||||
chromecsv: {
|
||||
id: "chromecsv",
|
||||
loaders: ["file"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
operacsv: {
|
||||
id: "operacsv",
|
||||
loaders: ["file", "chromium"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
vivaldicsv: {
|
||||
id: "vivaldicsv",
|
||||
loaders: ["file", "chromium"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
bravecsv: {
|
||||
id: "bravecsv",
|
||||
loaders: ["file", "chromium"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
edgecsv: {
|
||||
id: "edgecsv",
|
||||
loaders: ["file", "chromium"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
}),
|
||||
},
|
||||
}));
|
||||
|
||||
describe("ImportService", () => {
|
||||
let importService: ImportService;
|
||||
let cipherService: MockProxy<CipherService>;
|
||||
@@ -304,7 +269,8 @@ describe("ImportService", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("metadata$", () => {
|
||||
// TODO Move capability/metadata tests to Rust unit tests and remove this disable.
|
||||
/* describe("metadata$", () => {
|
||||
let featureFlagSubject: BehaviorSubject<boolean>;
|
||||
let typeSubject: Subject<ImportType>;
|
||||
let mockLogger: { debug: jest.Mock };
|
||||
@@ -466,7 +432,7 @@ describe("ImportService", () => {
|
||||
"capabilities updated",
|
||||
);
|
||||
});
|
||||
});
|
||||
}); */
|
||||
});
|
||||
|
||||
function createCipher(options: Partial<CipherView> = {}) {
|
||||
|
||||
@@ -1,44 +1,10 @@
|
||||
import { ClientType } from "@bitwarden/client-type";
|
||||
// import { ClientType } from "@bitwarden/client-type";
|
||||
|
||||
/* TODO add Rust unit tests to cover source of truth used on Desktop and then consider removing these tests entirely
|
||||
since they rely on mocks that are not used in desktop code */
|
||||
|
||||
jest.mock("@bitwarden/desktop-napi", () => ({
|
||||
chromium_importer_metadata: {
|
||||
json: () =>
|
||||
JSON.stringify({
|
||||
chromecsv: {
|
||||
id: "chromecsv",
|
||||
loaders: ["file"], // Windows would be ["file"]; macOS/Linux tests could be extended
|
||||
instructions: "chromium",
|
||||
},
|
||||
operacsv: {
|
||||
id: "operacsv",
|
||||
loaders: ["file", "chromium"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
vivaldicsv: {
|
||||
id: "vivaldicsv",
|
||||
loaders: ["file", "chromium"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
bravecsv: {
|
||||
id: "bravecsv",
|
||||
loaders: ["file", "chromium"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
edgecsv: {
|
||||
id: "edgecsv",
|
||||
loaders: ["file", "chromium"],
|
||||
instructions: "chromium",
|
||||
},
|
||||
}),
|
||||
},
|
||||
}));
|
||||
|
||||
import { Loader } from "./metadata";
|
||||
import { availableLoaders } from "./util";
|
||||
// import { Loader } from "./metadata";
|
||||
// import { availableLoaders } from "./util";
|
||||
|
||||
// TODO Recreate metadata capability tests in Rust (source of truth), then remove this disable.
|
||||
/*
|
||||
describe("availableLoaders", () => {
|
||||
describe("given valid import types", () => {
|
||||
it("returns available loaders when client supports all loaders", () => {
|
||||
@@ -94,3 +60,9 @@ describe("availableLoaders", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
*/
|
||||
|
||||
it.skip("placeholder: metadata tests moved to Rust", () => {
|
||||
// TODO(rust): Port availableLoaders tests to Rust
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user