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

chore: Refactor for simpler application root

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 11:54:41 +03:00
parent 395d75a9b4
commit d61deb8b73
7 changed files with 96 additions and 44 deletions

View File

@ -0,0 +1,16 @@
import { getInjectable } from "@ogre-tools/injectable";
import { resolvePathInjectable } from "./path/resolve-path.injectable";
import { workingDirectoryInjectable } from "./working-directory.injectable";
const configFilePathInjectable = getInjectable({
id: "config-file-path",
instantiate: (di) => {
const resolvePath = di.inject(resolvePathInjectable);
const workingDirectory = di.inject(workingDirectoryInjectable);
return resolvePath(workingDirectory, ".lens-links.json");
},
});
export default configFilePathInjectable;

View File

@ -0,0 +1,18 @@
import { getInjectable } from "@ogre-tools/injectable";
import { writeJsonFileInjectable } from "./fs/write-json-file.injectable";
import configFilePathInjectable from "./config-file-path.injectable";
const createEmptyConfigInjectable = getInjectable({
id: "create-empty-config",
instantiate: (di) => {
const configFilePath = di.inject(configFilePathInjectable);
const writeJsonFile = di.inject(writeJsonFileInjectable);
return async () => {
await writeJsonFile(configFilePath, []);
};
},
});
export default createEmptyConfigInjectable;

View File

@ -3,16 +3,20 @@ import { awaitAll } from "./await-all";
import { getInjectable } from "@ogre-tools/injectable";
import { pipeline } from "@ogre-tools/fp";
import { createSymlinkInjectable } from "./fs/create-symlink.injectable";
import type { PackageJsonAndPath } from "./package-json-and-path";
import { getSymlinkPathsInjectable } from "./get-symlink-paths.injectable";
export const createSymLinksInjectable = getInjectable({
id: "create-sym-links",
export const createSymlinksInjectable = getInjectable({
id: "create-symlinks",
instantiate: (di) => {
const getSymlinkPaths = di.inject(getSymlinkPathsInjectable);
const createSymlink = di.inject(createSymlinkInjectable);
return async (symlinkPaths: { target: string; source: string; type: "file" | "dir" }[]) => {
return async (packageJsons: PackageJsonAndPath[]) => {
await pipeline(
symlinkPaths,
packageJsons,
getSymlinkPaths,
map(({ target, source, type }) => createSymlink(target, source, type)),
awaitAll,
);

View File

@ -0,0 +1,28 @@
import { getInjectable } from "@ogre-tools/injectable";
import { existsInjectable } from "./fs/exists.injectable";
import { readJsonFileInjectable } from "./fs/read-json-file.injectable";
import configFilePathInjectable from "./config-file-path.injectable";
export type Config = string[];
const getConfigInjectable = getInjectable({
id: "get-config",
instantiate: (di) => {
const exists = di.inject(existsInjectable);
const readJsonFile = di.inject(readJsonFileInjectable);
const configFilePath = di.inject(configFilePathInjectable);
return async () => {
const configFileExists = await exists(configFilePath);
if (!configFileExists) {
return;
}
return readJsonFile(configFilePath) as unknown as Config;
};
},
});
export default getConfigInjectable;

View File

@ -1,20 +1,16 @@
import { getInjectable } from "@ogre-tools/injectable";
import { resolvePathInjectable } from "./path/resolve-path.injectable";
import { workingDirectoryInjectable } from "./working-directory.injectable";
import { readJsonFileInjectable } from "./fs/read-json-file.injectable";
import type { Config } from "./get-config.injectable";
export const getPackageJsonPathsInjectable = getInjectable({
id: "get-package-json-paths",
instantiate: (di) => {
const readJsonFile = di.inject(readJsonFileInjectable);
const resolvePath = di.inject(resolvePathInjectable);
const workingDirectory = di.inject(workingDirectoryInjectable);
return async (configFilePath: string) => {
const configFile = (await readJsonFile(configFilePath)) as string[];
return configFile.map((linkPath: string) => resolvePath(workingDirectory, linkPath, "package.json"));
};
return (config: Config) =>
config.map((linkPath: string) => resolvePath(workingDirectory, linkPath, "package.json"));
},
});

View File

@ -4,15 +4,24 @@ import { map } from "lodash/fp";
import type { PackageJson } from "./package-json-and-path";
import { getInjectable } from "@ogre-tools/injectable";
import { readJsonFileInjectable } from "./fs/read-json-file.injectable";
import { getPackageJsonPathsInjectable } from "./get-package-json-paths.injectable";
import { checkForMissingPackageJsonsInjectable } from "./check-for-missing-package-jsons.injectable";
import type { Config } from "./get-config.injectable";
export const getPackageJsonsInjectable = getInjectable({
id: "get-package-jsons",
instantiate: (di) => {
const readJsonFile = di.inject(readJsonFileInjectable);
const getPackageJsonPaths = di.inject(getPackageJsonPathsInjectable);
const checkForMissingPackageJsons = di.inject(checkForMissingPackageJsonsInjectable);
return async (packageJsonPaths: string[]) =>
pipeline(
return async (config: Config) => {
const packageJsonPaths = await getPackageJsonPaths(config);
await checkForMissingPackageJsons(packageJsonPaths);
return pipeline(
packageJsonPaths,
map(async (packageJsonPath) => ({
@ -22,5 +31,6 @@ export const getPackageJsonsInjectable = getInjectable({
awaitAll,
);
};
},
});

View File

@ -1,15 +1,10 @@
import { removeExistingLensLinkDirectoriesInjectable } from "./remove-existing-lens-link-directories.injectable";
import { createLensLinkDirectoriesInjectable } from "./create-lens-link-directories.injectable";
import { getPackageJsonsInjectable } from "./get-package-jsons.injectable";
import { getPackageJsonPathsInjectable } from "./get-package-json-paths.injectable";
import { getInjectable } from "@ogre-tools/injectable";
import { resolvePathInjectable } from "./path/resolve-path.injectable";
import { existsInjectable } from "./fs/exists.injectable";
import { writeJsonFileInjectable } from "./fs/write-json-file.injectable";
import { workingDirectoryInjectable } from "./working-directory.injectable";
import { getSymlinkPathsInjectable } from "./get-symlink-paths.injectable";
import { createSymLinksInjectable } from "./create-sym-links.injectable";
import { checkForMissingPackageJsonsInjectable } from "./check-for-missing-package-jsons.injectable";
import { createSymlinksInjectable } from "./create-symlinks.injectable";
import getConfigInjectable from "./get-config.injectable";
import createEmptyConfigInjectable from "./create-empty-config.injectable";
export type LensLink = () => Promise<void>;
@ -20,39 +15,24 @@ const lensLinkInjectable = getInjectable({
const getPackageJsons = di.inject(getPackageJsonsInjectable);
const removeExistingLensLinkDirectories = di.inject(removeExistingLensLinkDirectoriesInjectable);
const createLensLinkDirectories = di.inject(createLensLinkDirectoriesInjectable);
const getPackageJsonPaths = di.inject(getPackageJsonPathsInjectable);
const resolvePath = di.inject(resolvePathInjectable);
const exists = di.inject(existsInjectable);
const writeJsonFile = di.inject(writeJsonFileInjectable);
const workingDirectory = di.inject(workingDirectoryInjectable);
const getSymlinkPaths = di.inject(getSymlinkPathsInjectable);
const createSymLinks = di.inject(createSymLinksInjectable);
const checkForMissingPackageJsons = di.inject(checkForMissingPackageJsonsInjectable);
const createSymlinks = di.inject(createSymlinksInjectable);
const getConfig = di.inject(getConfigInjectable);
const createEmptyConfig = di.inject(createEmptyConfigInjectable);
return async () => {
const configFilePath = resolvePath(workingDirectory, ".lens-links.json");
const config = await getConfig();
const configFileExists = await exists(configFilePath);
if (!configFileExists) {
await writeJsonFile(configFilePath, []);
if (!config) {
await createEmptyConfig();
return;
}
const packageJsonPaths = await getPackageJsonPaths(configFilePath);
await checkForMissingPackageJsons(packageJsonPaths);
const packageJsons = await getPackageJsons(packageJsonPaths);
const packageJsons = await getPackageJsons(config);
await removeExistingLensLinkDirectories(packageJsons);
await createLensLinkDirectories(packageJsons);
const symlinkPaths = await getSymlinkPaths(packageJsons);
await createSymLinks(symlinkPaths);
await createSymlinks(packageJsons);
};
},
});