UNPKG

@alexaegis/workspace-tools

Version:

Tools for working with javascript workspaces

108 lines (107 loc) 5.02 kB
import { a as PACKAGE_JSON_NAME, i as PACKAGE_JSON_DEPENDENCY_FIELDS, n as collectFileDirnamePathsUpDirectoryTree, o as PNPM_WORKSPACE_FILE_NAME, r as NODE_MODULES_DIRECTORY_NAME, s as normalizeCollectFileDirnamesUpDirectoryTreeOptions, t as getWorkspaceRoot } from "./get-workspace-root.function-DnORClbN.js"; import { n as normalizePackageJsonWorkspacesField, r as normalizeGetRootPackageJsonOptions, t as getRootPackageJson } from "./get-root-package-json.function-CFklF0V2.js"; import { n as normalizeCollectWorkspacePackagesOptions, t as collectWorkspacePackages } from "./monorepo-oshQmH-3.js"; import { t as getCurrentPackageRoot } from "./npm-CqgJ7Snd.js"; import { n as normalizeSortingPreferenceForPackageJson, r as DEFAULT_PACKAGE_JSON_SORTING_PREFERENCE, t as createJsonSortingPreferenceNormalizer } from "./sort-CAYg0bDG.js"; import { asyncFilterMap } from "@alexaegis/common"; import { readFile } from "node:fs/promises"; import { join } from "node:path"; import { HASH_COMMENT, NEWLINE } from "@alexaegis/fs"; //#region src/ignore/collect-ignore-entries.function.options.ts var GITIGNORE_FILENAME = ".gitignore"; var normalizeCollectIgnoreEntriesOptions = (options) => { return { ...normalizeCollectFileDirnamesUpDirectoryTreeOptions(options), ignoreFileName: options?.ignoreFileName ?? ".gitignore" }; }; //#endregion //#region src/ignore/parse-ignore-file.function.ts /** * Strips out comments from lines, returns the then non-empty lines. * It is meant for ignore files like `.gitignore` but all it does is split * a string line by line and strip hash comments off so the name is more * generic too * * @param content content of a file like .gitignore * * @example a file like * * ```text * foo * bar * * # comment * * * zed # comment * # * ``` * * will be parsed as ['foo', 'bar', 'zed'] by this function */ var splitAndStripHashComments = (content) => { return content.split(NEWLINE).map((line) => line.replace(HASH_COMMENT, "").trim()).filter((line) => !!line); }; //#endregion //#region src/ignore/collect-ignore-entries.function.ts /** * Collects every ignore entry within a workspace affecting cwd * It will only collect ignore * * @param rawOptions by default ignoreFile is `.gitignore` */ var collectIgnoreEntries = async (rawOptions) => { const options = normalizeCollectIgnoreEntriesOptions(rawOptions); const workspaceRoot = getWorkspaceRoot(); if (!workspaceRoot) throw new Error("Not in a workspace!"); return (await asyncFilterMap(collectFileDirnamePathsUpDirectoryTree(options.ignoreFileName, options).filter((ignoreFileDirname) => ignoreFileDirname.startsWith(workspaceRoot)).map((ignoreFileDirname) => join(ignoreFileDirname, options.ignoreFileName)), async (ignoreFile) => { return splitAndStripHashComments(await readFile(ignoreFile, { encoding: "utf8" })); })).flat(); }; //#endregion //#region src/package-json/get-package-json-template-variables.function.ts var 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 }; }; //#endregion //#region src/package-json/is-package-json-dependency-field.function.ts /** * Returns true for 'dependencies', 'devDependencies', * 'optionalDependencies' and 'peerDependencies' */ var isPackageJsonDependencyField = (field) => { return PACKAGE_JSON_DEPENDENCY_FIELDS.includes(field); }; //#endregion //#region src/package-json/package-archetype.interface.ts /** * This will return names for when you want to denote the archetype in a * filename: `tsconfig.web-svelte-lib.json` or `tsconfig.node-lib.json` */ var getEncodedArchetype = (archetypeMatcher) => { if (!archetypeMatcher || typeof archetypeMatcher === "function") return ""; return [ archetypeMatcher.platform, archetypeMatcher.framework, archetypeMatcher.language, archetypeMatcher.kind, archetypeMatcher.bundler, archetypeMatcher.testing ].filter((value) => typeof value === "string").join("-"); }; //#endregion export { DEFAULT_PACKAGE_JSON_SORTING_PREFERENCE, GITIGNORE_FILENAME, NODE_MODULES_DIRECTORY_NAME, PACKAGE_JSON_DEPENDENCY_FIELDS, PACKAGE_JSON_NAME, PNPM_WORKSPACE_FILE_NAME, collectFileDirnamePathsUpDirectoryTree, collectIgnoreEntries, collectWorkspacePackages, createJsonSortingPreferenceNormalizer, getCurrentPackageRoot, getEncodedArchetype, getPackageJsonTemplateVariables, getRootPackageJson, getWorkspaceRoot, isPackageJsonDependencyField, normalizeCollectFileDirnamesUpDirectoryTreeOptions, normalizeCollectIgnoreEntriesOptions, normalizeCollectWorkspacePackagesOptions, normalizeGetRootPackageJsonOptions, normalizePackageJsonWorkspacesField, normalizeSortingPreferenceForPackageJson, splitAndStripHashComments }; //# sourceMappingURL=index.js.map