@alexaegis/workspace-tools
Version:
Tools for working with javascript workspaces
98 lines (97 loc) • 3.82 kB
JavaScript
import { asyncFilterMap } from "@alexaegis/common";
import { readFile } from "node:fs/promises";
import { join } from "node:path";
import { n as normalizeCollectFileDirnamesUpDirectoryTreeOptions, g as getWorkspaceRoot, c as collectFileDirnamePathsUpDirectoryTree, b as PACKAGE_JSON_DEPENDENCY_FIELDS } from "./get-workspace-root.function-BIw0sIyQ.js";
import { N, P, a } from "./get-workspace-root.function-BIw0sIyQ.js";
import { NEWLINE, HASH_COMMENT } from "@alexaegis/fs";
import "@alexaegis/match";
import "globby";
import "@alexaegis/logging";
import { c, n } from "./collect-workspace-packages.function-B-Oa_gK4.js";
import { g } from "./get-current-package-root.function-D2-xrN6D.js";
import { n as n2 } from "./normalize-package-json-workspaces-field.function-c4DpIRCW.js";
import { D, c as c2, n as n3 } from "./normalize-json-sorting-preference.function-CDxESZZ5.js";
const GITIGNORE_FILENAME = ".gitignore";
const normalizeCollectIgnoreEntriesOptions = (options) => {
return {
...normalizeCollectFileDirnamesUpDirectoryTreeOptions(options),
ignoreFileName: options?.ignoreFileName ?? GITIGNORE_FILENAME
};
};
const splitAndStripHashComments = (content) => {
return content.split(NEWLINE).map((line) => line.replace(HASH_COMMENT, "").trim()).filter((line) => !!line);
};
const collectIgnoreEntries = async (rawOptions) => {
const options = normalizeCollectIgnoreEntriesOptions(rawOptions);
const workspaceRoot = getWorkspaceRoot();
if (!workspaceRoot) {
throw new Error("Not in a workspace!");
}
const ignoreFileDirnames = collectFileDirnamePathsUpDirectoryTree(
options.ignoreFileName,
options
);
const ignoreFilePathsWithinWorkspace = ignoreFileDirnames.filter((ignoreFileDirname) => ignoreFileDirname.startsWith(workspaceRoot)).map((ignoreFileDirname) => join(ignoreFileDirname, options.ignoreFileName));
const ignoreFileLines = await asyncFilterMap(
ignoreFilePathsWithinWorkspace,
async (ignoreFile) => {
const gitIgnoreFile = await readFile(ignoreFile, {
encoding: "utf8"
});
return splitAndStripHashComments(gitIgnoreFile);
}
);
return ignoreFileLines.flat();
};
const getPackageJsonTemplateVariables = (packageJson) => {
const packageName = packageJson.name ?? "";
let packageOrg;
let packageNameWithoutOrg = packageName;
if (packageName.includes("/")) {
const [splitPackageOrg, ...splitPackageName] = packageName.split("/");
packageOrg = splitPackageOrg;
packageNameWithoutOrg = splitPackageName.join("/");
}
return {
packageOrg: packageOrg ?? "",
packageName,
packageNameWithoutOrg
};
};
const isPackageJsonDependencyField = (field) => {
return PACKAGE_JSON_DEPENDENCY_FIELDS.includes(field);
};
const getEncodedArchetype = (archetypeMatcher) => {
if (!archetypeMatcher || typeof archetypeMatcher === "function") {
return "";
}
const orderedValues = [
archetypeMatcher.platform,
archetypeMatcher.framework,
archetypeMatcher.language,
archetypeMatcher.kind,
archetypeMatcher.bundler,
archetypeMatcher.testing
];
return orderedValues.filter((value) => typeof value === "string").join("-");
};
export {
D as DEFAULT_PACKAGE_JSON_SORTING_PREFERENCE,
N as NODE_MODULES_DIRECTORY_NAME,
PACKAGE_JSON_DEPENDENCY_FIELDS,
P as PACKAGE_JSON_NAME,
a as PNPM_WORKSPACE_FILE_NAME,
collectFileDirnamePathsUpDirectoryTree,
collectIgnoreEntries,
c as collectWorkspacePackages,
c2 as createJsonSortingPreferenceNormalizer,
g as getCurrentPackageRoot,
getEncodedArchetype,
getPackageJsonTemplateVariables,
getWorkspaceRoot,
isPackageJsonDependencyField,
n as normalizeCollectWorkspacePackagesOptions,
n2 as normalizePackageJsonWorkspacesField,
n3 as normalizeSortingPreferenceForPackageJson,
splitAndStripHashComments
};