1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

feat: Support duplicate files in linking

Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>
Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>
This commit is contained in:
Iku-turso 2023-04-21 15:24:31 +03:00
parent 2de353294e
commit 3cf2948c7a
2 changed files with 15 additions and 2 deletions

View File

@ -1,8 +1,8 @@
import { flatten, map, partition, uniq, uniqBy } from "lodash/fp";
import type { PackageJsonAndPath } from "./package-json-and-path"; import type { PackageJsonAndPath } from "./package-json-and-path";
import { globInjectable } from "./fs/glob.injectable"; import { globInjectable } from "./fs/glob.injectable";
import { resolvePathInjectable } from "./path/resolve-path.injectable"; import { resolvePathInjectable } from "./path/resolve-path.injectable";
import { awaitAll } from "./await-all"; import { awaitAll } from "./await-all";
import { flatten, map, partition } from "lodash/fp";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { pipeline } from "@ogre-tools/fp"; import { pipeline } from "@ogre-tools/fp";
import { getLensLinkDirectoryInjectable } from "./get-lens-link-directory.injectable"; import { getLensLinkDirectoryInjectable } from "./get-lens-link-directory.injectable";
@ -44,6 +44,8 @@ export const getSymlinkPathsInjectable = getInjectable({
const notGlobbedFilesOrDirectories = await pipeline( const notGlobbedFilesOrDirectories = await pipeline(
toNotBeGlobbed, toNotBeGlobbed,
uniq,
map(async (fileOrDirectory) => { map(async (fileOrDirectory) => {
const target = resolvePath(moduleDirectory, fileOrDirectory); const target = resolvePath(moduleDirectory, fileOrDirectory);
@ -77,6 +79,8 @@ export const getSymlinkPathsInjectable = getInjectable({
awaitAll, awaitAll,
flatten, flatten,
uniqBy((x) => x.source),
); );
}; };
}, },

View File

@ -236,6 +236,8 @@ describe("lens-link", () => {
await readJsonFileMock.resolveSpecific(([path]) => path === "/some-directory/some-module/package.json", { await readJsonFileMock.resolveSpecific(([path]) => path === "/some-directory/some-module/package.json", {
name: "@some-scope/some-module", name: "@some-scope/some-module",
files: [ files: [
"some-duplicate-file",
"some-duplicate-file",
"some-build-directory-with-asterisk/*", "some-build-directory-with-asterisk/*",
"some-build-directory-with-wild-card/**", "some-build-directory-with-wild-card/**",
"some-build-directory-with-wild-card-before-asterisk/**/*", "some-build-directory-with-wild-card-before-asterisk/**/*",
@ -286,8 +288,9 @@ describe("lens-link", () => {
describe("when globbing resolves and files or directories are identified", () => { describe("when globbing resolves and files or directories are identified", () => {
beforeEach(async () => { beforeEach(async () => {
await globMock.resolve(["some-directory-from-glob/some-file-from-glob.txt"]); await globMock.resolve(["some-directory-from-glob/some-file-from-glob.txt", "some-duplicate-file"]);
await isFileOrDirectoryMock.resolve("file");
await isFileOrDirectoryMock.resolve("dir"); await isFileOrDirectoryMock.resolve("dir");
await isFileOrDirectoryMock.resolve("dir"); await isFileOrDirectoryMock.resolve("dir");
await isFileOrDirectoryMock.resolve("dir"); await isFileOrDirectoryMock.resolve("dir");
@ -307,6 +310,12 @@ describe("lens-link", () => {
"file", "file",
], ],
[
"/some-directory/some-module/some-duplicate-file",
"/some-directory/some-project/node_modules/@some-scope/some-module/some-duplicate-file",
"file",
],
[ [
"/some-directory/some-module/some-build-directory-with-asterisk", "/some-directory/some-module/some-build-directory-with-asterisk",
"/some-directory/some-project/node_modules/@some-scope/some-module/some-build-directory-with-asterisk", "/some-directory/some-project/node_modules/@some-scope/some-module/some-build-directory-with-asterisk",