UNPKG

@alexaegis/workspace-tools

Version:

Tools for working with javascript workspaces

98 lines (97 loc) 3.82 kB
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 };