mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add migration to new type of key
Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
This commit is contained in:
parent
169bb1b8f6
commit
8d9d710463
@ -6,7 +6,7 @@
|
|||||||
import type { ObservableMap } from "mobx";
|
import type { ObservableMap } from "mobx";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
import { getOrInsertWithAsync } from "../../../common/utils";
|
import { getOrInsert } from "../../../common/utils";
|
||||||
import randomBytesInjectable from "../../../common/utils/random-bytes.injectable";
|
import randomBytesInjectable from "../../../common/utils/random-bytes.injectable";
|
||||||
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
|
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
|
||||||
import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable";
|
import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable";
|
||||||
@ -35,14 +35,16 @@ const ensureHashedDirectoryForExtensionInjectable = getInjectable({
|
|||||||
const hashedDirectoryForLegacyDirPath = registeredExtensions.get(legacyDirPath);
|
const hashedDirectoryForLegacyDirPath = registeredExtensions.get(legacyDirPath);
|
||||||
|
|
||||||
if (hashedDirectoryForLegacyDirPath) {
|
if (hashedDirectoryForLegacyDirPath) {
|
||||||
|
registeredExtensions.set(extensionName, hashedDirectoryForLegacyDirPath);
|
||||||
|
registeredExtensions.delete(legacyDirPath);
|
||||||
dirPath = hashedDirectoryForLegacyDirPath;
|
dirPath = hashedDirectoryForLegacyDirPath;
|
||||||
} else {
|
} else {
|
||||||
dirPath = await getOrInsertWithAsync(registeredExtensions, extensionName, async () => {
|
const salt = randomBytes(32).toString("hex");
|
||||||
const salt = (await randomBytes(32)).toString("hex");
|
const hashedName = getHash(`${extensionName}/${salt}`);
|
||||||
const hashedName = getHash(`${extensionName}/${salt}`);
|
|
||||||
|
|
||||||
return joinPaths(directoryForExtensionData, hashedName);
|
const hashedExtensionDirectory = joinPaths(directoryForExtensionData, hashedName);
|
||||||
});
|
|
||||||
|
dirPath = getOrInsert(registeredExtensions, extensionName, hashedExtensionDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
await ensureDirectory(dirPath);
|
await ensureDirectory(dirPath);
|
||||||
|
|||||||
@ -51,32 +51,51 @@ describe("ensure-hashed-directory-for-extension", () => {
|
|||||||
registeredExtensions,
|
registeredExtensions,
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(actual).not.toBe("some-directory");
|
expect(actual).toBe("some-directory-for-extension-data/12a427eae86fd78610c0404c3c1ef42cb28d8af1605552ed7cf30beaee21e876");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("given extension directory was saved based on extension's package.json path, returns existing directory", async () => {
|
describe("given extension directory was saved based on extension's package.json path", () => {
|
||||||
runInAction(() => {
|
beforeEach(() => {
|
||||||
registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory");
|
runInAction(() => {
|
||||||
});
|
registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory");
|
||||||
const actual = await ensureHashedDirectoryForExtension(
|
});
|
||||||
"some-extension-name",
|
ensureDirMock.mockClear();
|
||||||
registeredExtensions,
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(actual).toBe("some-directory");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("given extension directory was saved based on extension's package.json path, ensure dir is called with right parameter", async () => {
|
|
||||||
runInAction(() => {
|
|
||||||
registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
await ensureHashedDirectoryForExtension(
|
it("returns existing directory", async () => {
|
||||||
"some-extension-name",
|
const actual = await ensureHashedDirectoryForExtension(
|
||||||
registeredExtensions,
|
"some-extension-name",
|
||||||
);
|
registeredExtensions,
|
||||||
|
);
|
||||||
|
|
||||||
expect(ensureDirMock).toHaveBeenCalledWith("some-directory");
|
expect(actual).toBe("some-directory");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("ensure dir is called with some directory", async () => {
|
||||||
|
await ensureHashedDirectoryForExtension(
|
||||||
|
"some-extension-name",
|
||||||
|
registeredExtensions,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(ensureDirMock).toHaveBeenCalledWith("some-directory");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("is migrated to use the extension name as key", async () => {
|
||||||
|
await ensureHashedDirectoryForExtension(
|
||||||
|
"some-extension-name",
|
||||||
|
registeredExtensions,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(registeredExtensions.get("some-extension-name")).toEqual("some-directory");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("old key is removed", async () => {
|
||||||
|
await ensureHashedDirectoryForExtension(
|
||||||
|
"some-extension-name",
|
||||||
|
registeredExtensions,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(registeredExtensions.has("/some-directory-for-user-data/node_modules/some-extension-name/package.json")).toEqual(false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user