@alexaegis/workspace-tools
Version:
Tools for working with javascript workspaces
108 lines (107 loc) • 5.02 kB
JavaScript
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