{"version":3,"file":"get-workspace-root.mjs","names":[],"sources":["../src/get-workspace-root.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n                       ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website:                  https://stormsoftware.com\n Repository:               https://github.com/storm-software/stryke\n Documentation:            https://docs.stormsoftware.com/projects/stryke\n Contact:                  https://stormsoftware.com/contact\n\n SPDX-License-Identifier:  Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { findWorkspaceRootSafe } from \"@storm-software/config-tools\";\nimport { cwd } from \"@stryke/path/cwd\";\nimport { relativePath } from \"@stryke/path/file-path-fns\";\nimport { isSystemRoot } from \"@stryke/path/is-root-dir\";\nimport { getParentPath } from \"./get-parent-path\";\n\nexport const WORKSPACE_ROOT_CONTENT: string[] = [\n  \".all-contributorsrc\",\n  \".commitlintrc\",\n  \".github\",\n  \".git\",\n  \".husky\",\n  \".huskyrc\",\n  \".lintstagedrc\",\n  \".log4brains.yml\",\n  \".npmrc\",\n  \".nx\",\n  \".storm-workspace.js\",\n  \".storm-workspace.json\",\n  \".storm-workspace.ts\",\n  \".storm-workspace.yaml\",\n  \".storm-workspace.yml\",\n  \".vscode\",\n  \".whitesource\",\n  \"bun.lock\",\n  \"bun.lockb\",\n  \"lefthook.yaml\",\n  \"lefthook.yml\",\n  \"lerna.json\",\n  \"npm-lock.json\",\n  \"npm-lock.yaml\",\n  \"npm-lock.yml\",\n  \"npm-workspace.json\",\n  \"npm-workspace.yaml\",\n  \"npm-workspace.yml\",\n  \"nx.json\",\n  \"package-lock.json\",\n  \"patches\",\n  \"pnpm-lock.json\",\n  \"pnpm-lock.yaml\",\n  \"pnpm-lock.yml\",\n  \"pnpm-workspace.json\",\n  \"pnpm-workspace.yaml\",\n  \"pnpm-workspace.yml\",\n  \"socket.yaml\",\n  \"storm-workspace.js\",\n  \"storm-workspace.json\",\n  \"storm-workspace.ts\",\n  \"storm-workspace.yaml\",\n  \"storm-workspace.yml\",\n  \"syncpack.config.js\",\n  \"syncpack.json\",\n  \"turbo.json\",\n  \"yarn-lock.json\",\n  \"yarn-lock.yaml\",\n  \"yarn-lock.yml\",\n  \"yarn-workspace.json\",\n  \"yarn-workspace.yaml\",\n  \"yarn-workspace.yml\",\n  \"yarn.lock\"\n] as const;\n\nexport const PROJECT_ROOT_CONTENT: string[] = [\n  \".powerlines\",\n  \".storm\",\n  \"package.json\",\n  \"powerlines.json\",\n  \"powerlines.yaml\",\n  \"powerlines.yml\",\n  \"powerlines.toml\",\n  \"powerlines.config.js\",\n  \"powerlines.config.ts\",\n  \"project.json\"\n] as const;\n\n/**\n * Get the workspace root path\n *\n * @param dir - A directory to start the search from\n * @returns The workspace root path\n */\nexport function getWorkspaceRoot(dir = cwd()) {\n  if (process.env.STORM_WORKSPACE_ROOT || process.env.NX_WORKSPACE_ROOT_PATH) {\n    return (process.env.STORM_WORKSPACE_ROOT ||\n      process.env.NX_WORKSPACE_ROOT_PATH)!;\n  }\n\n  const root = findWorkspaceRootSafe(dir);\n  if (root) {\n    return root;\n  }\n\n  let result = getParentPath(WORKSPACE_ROOT_CONTENT, dir);\n  if (result) {\n    return result;\n  }\n\n  result = dir;\n  while (result && !isSystemRoot(result)) {\n    result = getParentPath(\"storm-workspace.json\", result, {\n      skipCwd: true,\n      includeNameInResults: false\n    });\n    if (result) {\n      return result;\n    }\n  }\n\n  return dir;\n}\n\n/**\n * Check if the given directory is the workspace root\n *\n * @param dir - A directory to check\n * @returns True if the directory is the workspace root, false otherwise\n */\nexport function isWorkspaceRoot(dir = cwd()): boolean {\n  const workspaceRoot = getWorkspaceRoot(dir);\n  if (workspaceRoot) {\n    return workspaceRoot === dir;\n  }\n\n  return false;\n}\n\n/**\n * Get the project root path\n *\n * @param dir - A directory to start the search from\n * @returns The project root path\n */\nexport function getProjectRoot(dir = cwd()) {\n  const result = getParentPath(PROJECT_ROOT_CONTENT, dir);\n\n  if (result) {\n    return result;\n  }\n\n  return dir;\n}\n\n/**\n * Check if the given directory is the project root\n *\n * @param dir - A directory to check\n * @returns True if the directory is the project root, false otherwise\n */\nexport function isProjectRoot(dir = cwd()): boolean {\n  const projectRoot = getProjectRoot(dir);\n  if (projectRoot) {\n    return projectRoot === dir;\n  }\n\n  return false;\n}\n\n/**\n * Find the file path relative to the workspace root path.\n *\n * @param filePath - The file path to process\n * @returns The file path relative to the workspace root\n */\nexport function relativeToWorkspaceRoot(filePath: string) {\n  return relativePath(filePath, getWorkspaceRoot());\n}\n\n/**\n * Find the file path relative to the project root path.\n *\n * @param filePath - The file path to process\n * @returns The file path relative to the project root\n */\nexport function relativeToProjectRoot(filePath: string) {\n  return relativePath(filePath, getProjectRoot());\n}\n"],"mappings":";;;;;;;AAwBA,MAAa,yBAAmC;CAC9C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,uBAAiC;CAC5C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;AAQD,SAAgB,iBAAiB,MAAM,KAAK,EAAE;AAC5C,KAAI,QAAQ,IAAI,wBAAwB,QAAQ,IAAI,uBAClD,QAAQ,QAAQ,IAAI,wBAClB,QAAQ,IAAI;CAGhB,MAAM,OAAO,sBAAsB,IAAI;AACvC,KAAI,KACF,QAAO;CAGT,IAAI,SAAS,cAAc,wBAAwB,IAAI;AACvD,KAAI,OACF,QAAO;AAGT,UAAS;AACT,QAAO,UAAU,CAAC,aAAa,OAAO,EAAE;AACtC,WAAS,cAAc,wBAAwB,QAAQ;GACrD,SAAS;GACT,sBAAsB;GACvB,CAAC;AACF,MAAI,OACF,QAAO;;AAIX,QAAO;;;;;;;;AAST,SAAgB,gBAAgB,MAAM,KAAK,EAAW;CACpD,MAAM,gBAAgB,iBAAiB,IAAI;AAC3C,KAAI,cACF,QAAO,kBAAkB;AAG3B,QAAO;;;;;;;;AAST,SAAgB,eAAe,MAAM,KAAK,EAAE;CAC1C,MAAM,SAAS,cAAc,sBAAsB,IAAI;AAEvD,KAAI,OACF,QAAO;AAGT,QAAO;;;;;;;;AAST,SAAgB,cAAc,MAAM,KAAK,EAAW;CAClD,MAAM,cAAc,eAAe,IAAI;AACvC,KAAI,YACF,QAAO,gBAAgB;AAGzB,QAAO;;;;;;;;AAST,SAAgB,wBAAwB,UAAkB;AACxD,QAAO,aAAa,UAAU,kBAAkB,CAAC;;;;;;;;AASnD,SAAgB,sBAAsB,UAAkB;AACtD,QAAO,aAAa,UAAU,gBAAgB,CAAC"}