@hyperfrontend/project-scope/nxNX Module
The nx module provides utilities for detecting and working with NX workspaces. It supports NX monorepo detection, workspace configuration reading, and project enumeration.
Capabilities
Workspace Detection
Detect if a directory is an NX workspace.
import { isNxWorkspace, findNxWorkspaceRoot, isNxProject } from '@hyperfrontend/project-scope'
// Check if current directory is NX workspace root
if (isNxWorkspace('./my-monorepo')) {
console.log('This is an NX workspace')
}
// Find workspace root from any nested path
const root = findNxWorkspaceRoot('./libs/my-lib/src/utils')
console.log('Workspace root:', root) // '/home/user/my-monorepo'
// Check if directory is an NX project (has project.json)
if (isNxProject('./libs/my-lib')) {
console.log('This is an NX project')
}
Workspace Information
Get comprehensive workspace details.
import { getNxWorkspaceInfo } from '@hyperfrontend/project-scope'
const info = getNxWorkspaceInfo('./my-monorepo')
console.log('Root:', info.root)
console.log('NX Version:', info.version) // '17.2.0'
console.log('Integrated:', info.isIntegrated) // true
console.log('Default project:', info.defaultProject)
console.log('Layout:', info.workspaceLayout) // { appsDir: 'apps', libsDir: 'libs' }
console.log('NX JSON:', info.nxJson) // Full nx.json content
Project Configuration
Read and parse NX project configuration.
import { readNxProjectConfig, findNxProjects } from '@hyperfrontend/project-scope'
// Read single project config
const config = readNxProjectConfig('./libs/my-lib')
console.log('Name:', config.name)
console.log('Type:', config.projectType) // 'library' | 'application'
console.log('Source root:', config.sourceRoot)
console.log('Tags:', config.tags)
console.log('Targets:', Object.keys(config.targets ?? {}))
// Find all projects in workspace
const projects = findNxProjects('./my-monorepo')
for (const project of projects) {
console.log(`${project.name} (${project.projectType})`)
}
NX Configuration Files
The module detects these NX configuration files:
| File | Description |
|---|---|
nx.json | Main workspace configuration |
workspace.json | Legacy workspace configuration |
project.json | Project-specific configuration |
Interfaces
NxWorkspaceInfo
interface NxWorkspaceInfo {
/** Workspace root path */
root: string
/** NX version from package.json */
version: string | null
/** Parsed nx.json content */
nxJson: NxJson
/** Whether this is an integrated repo */
isIntegrated: boolean
/** Default project name */
defaultProject?: string
/** Workspace layout configuration */
workspaceLayout: NxWorkspaceLayout
}
NxWorkspaceLayout
interface NxWorkspaceLayout {
/** Applications directory (default: 'apps') */
appsDir: string
/** Libraries directory (default: 'libs') */
libsDir: string
}
NxJson
interface NxJson {
defaultProject?: string
workspaceLayout?: Partial<NxWorkspaceLayout>
namedInputs?: Record<string, unknown>
targetDefaults?: Record<string, unknown>
nxCloudAccessToken?: string
plugins?: unknown[]
tasksRunnerOptions?: Record<string, unknown>
defaultBase?: string
[key: string]: unknown
}
Design Principles
- Caching: Results are cached appropriately
- Version agnostic: Supports multiple NX versions
- Standalone support: Detects both integrated and standalone repos
- Type safety: Full TypeScript types for all configurations
API Reference
ƒ Functions
§function
buildSimpleProjectGraph(workspacePath: string, projects?: Map<string, NxProjectConfig>): NxProjectGraph
Build a simple project graph from discovered projects.
Parameters
| Name | Type | Description |
|---|---|---|
§workspacePath | string | Workspace root path |
§projects? | Map<string, NxProjectConfig> | Existing configuration map to skip auto-discovery |
Returns
NxProjectGraphNxProjectGraph with nodes and dependencies
Example
Building a simple project graph
import { buildSimpleProjectGraph } from '@hyperfrontend/project-scope'
const graph = buildSimpleProjectGraph('/workspace')
console.log('Projects:', Object.keys(graph.nodes))
console.log('Dependencies:', graph.dependencies['my-app'])Discover all NX projects in workspace. Supports both workspace.json (older format) and project.json (newer format).
Parameters
| Name | Type | Description |
|---|---|---|
§workspacePath | string | Workspace root path |
Returns
Map<string, NxProjectConfig>Map of project name to configuration
Example
Discovering all NX projects
import { discoverNxProjects } from '@hyperfrontend/project-scope'
const projects = discoverNxProjects('/workspace')
for (const [name, config] of projects) {
console.log(`${name}: ${config.projectType} at ${config.root}`)
}Find NX workspace root from any path.
Parameters
| Name | Type | Description |
|---|---|---|
§startPath | string | Starting path to search from |
Returns
stringWorkspace root path or null if not found
Example
Finding NX workspace root
import { findNxWorkspaceRoot } from '@hyperfrontend/project-scope'
const root = findNxWorkspaceRoot('./libs/my-lib/src')
if (root) {
console.log('Workspace root:', root) // e.g., '/home/user/my-monorepo'
}Get comprehensive NX workspace information.
Parameters
| Name | Type | Description |
|---|---|---|
§workspacePath | string | Workspace root path |
Returns
NxWorkspaceInfoWorkspace info or null if not an NX workspace
Example
Getting NX workspace information
import { getNxWorkspaceInfo } from '@hyperfrontend/project-scope'
const info = getNxWorkspaceInfo('/path/to/monorepo')
if (info) {
console.log('NX version:', info.version)
console.log('Apps dir:', info.workspaceLayout.appsDir)
}Get project configuration from project.json or package.json nx field.
Parameters
Returns
NxProjectConfigProject configuration or null if not found
Example
Getting project configuration
import { getProjectConfig } from '@hyperfrontend/project-scope'
const config = getProjectConfig('./libs/my-lib', '/workspace')
// => { name: 'my-lib', root: 'libs/my-lib', projectType: 'library' }Check if directory is an NX project.
Parameters
| Name | Type | Description |
|---|---|---|
§path | string | Directory path to check |
Returns
booleanTrue if the directory contains project.json
Example
Checking for NX project
import { isNxProject } from '@hyperfrontend/project-scope'
if (isNxProject('./libs/my-lib')) {
console.log('This is an NX project')
}Check if directory is an NX workspace root.
Parameters
| Name | Type | Description |
|---|---|---|
§path | string | Directory path to check |
Returns
booleanTrue if the directory contains nx.json or workspace.json
Example
Checking for NX workspace
import { isNxWorkspace } from '@hyperfrontend/project-scope'
if (isNxWorkspace('./my-project')) {
console.log('This is an NX monorepo')
}Read project.json for an NX project.
Parameters
| Name | Type | Description |
|---|---|---|
§projectPath | string | Project directory path |
Returns
NxProjectConfigParsed project.json or null if not found
Example
Reading NX project.json
import { readProjectJson } from '@hyperfrontend/project-scope'
const config = readProjectJson('./libs/my-lib')
if (config) {
console.log('Project:', config.name, 'Type:', config.projectType)
}◈ Interfaces
nx.json configuration structure.
Properties
NX project configuration from project.json.
Properties
Simplified project dependency.
Simplified project graph.
Properties
Simplified project graph node.
Properties
NX target configuration.
Properties
NX workspace information.
Properties
NX workspace layout configuration.