@codependix/nx
v0.0.27
Published
Nx plugin inferring a per-project codependix boundary gate, judged over each project's Nx dependency closure
Maintainers
Readme
🕸️🧬 Codependix Nx
An Nx plugin that checks codependix boundaries per project, built over each project's Nx dependency closure.
Canonical documentation for graph exports, configuration, boundary rules, and
how a finding is charged to a project is in the
@codependix/cli README.
@codependix/cli needs no Nx plugin: --projects and --tags already
narrow a --check boundaries run to the projects it judges, from a plain
shell. This package is the one place in the toolchain that depends on
@nx/devkit, and it adds what only a task runner can:
- A gate on every project, so
nx affected,--projects=tag:…, and the task cache do the selecting. - A failure named after the project whose boundary broke, rather than one workspace-wide task that fails for all of them.
Install
npm install --save-dev @codependix/nxRegister it in nx.json:
{
"plugins": [
{
"plugin": "@codependix/nx",
"options": {
"configurationPath": "projects/configuration/codependix.config.ts",
"gateTargetName": "codependix-gate"
}
}
]
}| Option | Meaning |
| ------ | ------- |
| configurationPath | Required. Where the codependix configuration lives. Registering the plugin without it fails inference, naming the option; there is no default path |
| gateTargetName | Name of the inferred gate target. codependix-gate when omitted |
The gate runs the command line under the @swc-node/register hooks, which
this plugin depends on and registers itself — the workspace does not need to
install them. The workspace root does need a tsconfig.json that emits
decorator metadata: the hooks read it from the working directory, the
boundary check boots NestJS containers from their TypeScript sources, and
constructor injection reads that metadata.
Usage
The gate is inferred onto every project described by a project.json,
except the workspace root, whose dependency closure is the whole workspace. A
project Nx infers from a package.json alone gets no gate until it is given
a project.json as well.
nx run lexico-entities:codependix-gate # one project
nx run-many -t codependix-gate # every project
nx affected -t codependix-gate # only what changedThe gate
Each gate runs, from the workspace root:
node --import <file URL of @codependix/nx/loader> <@codependix/cli/main> \
map --directory <workspaceRoot> --config <configuration> \
--check boundaries --projects <project>@codependix/nx/loader registers the @swc-node/register hooks resolved from
this plugin's own location. The hook's own @swc-node/register/esm-register
would resolve them from the working directory instead — the consumer's root,
where a package manager such as pnpm does not expose this plugin's
dependencies. The loader and the command line's entry are both resolved
through package exports, so the same gate runs the TypeScript sources inside
this workspace and the built dist/ files from an installed copy. Its output
is streamed to the task as it arrives, and the task passes only when it exits
zero.
A dependency's broken boundary is that dependency's gate's business. The graphs are built over the project and everything it depends on, so a cycle reaching into a dependency is still seen — but only a finding charged to the project fails its gate. One charged to a dependency is printed as a note, and fails the dependency's own gate instead.
The target is cached. Its inputs are the project's own sources and its
dependencies' (default, ^default), the workspace configuration the rules
live in, the project's own codependix.config.*, and the codependix command
line itself — because no judged project depends on the code that decides its
verdict, a change to that code would otherwise replay every cached pass:
When
@codependix/cliis a package of the same workspace, two{workspaceRoot}inputs for it and for every workspace package it reaches throughworkspace:dependencies:<package>/package.jsonand<package>/src/**/!(*.test.*|*.spec.*)— the sources without their tests, so a test-only edit to the command line invalidates no gate beyond that package's own and its dependents'. File globs rather than{ "input", "projects" }inputs, because Nx's affected computation follows{workspaceRoot}globs and ignores the latter — so a branch that changes the command line's sources selects every gate, and one that changes only its tests does not. The tests are excluded inside the glob rather than by a!-prefixed input, which the affected computation ignores.When it is installed from a registry, an
externalDependenciesinput naming it and the@codependix/*packages it depends on, so a version bump invalidates the cache. Nx hashes an external dependency together with everything it depends on, so the@codependix/*packages beneath those are covered too.In either case,
{workspaceRoot}/tsconfig.jsonand every tsconfig itextends. The loader (@swc-node/register) takes its compiler options —emitDecoratorMetadataamong them, which decides how NestJS sources compile — fromSWC_NODE_PROJECTorTS_NODE_PROJECT, else from thetsconfig.jsonin the gate's working directory, the workspace root, and never from a package's own. That file reaches its bases throughextends, so inference follows the chain much as TypeScript resolves it — a string or an array, through every level, comments and trailing commas allowed,.jsonappended to a path naming no file, and a bare package name taken to itstsconfig.jsonor itsexports(not to atsconfigfield in its manifest, which is rare):- A base in the workspace, by relative path or through a package of the
same workspace, is another
{workspaceRoot}input. So is one that is missing or cannot be parsed — the edit that fixes it invalidates the gate — though what it would extend cannot be followed, and Nx's logger warns naming it. - A base an installed package provides, such as
@tsconfig/node24— named by package or by a path intonode_modules— is named in anexternalDependenciesinput, so a version bump invalidates the cache, but only when the rootpackage.jsondeclares the package from a registry. Nx fails every task whoseexternalDependenciesnames a package missing from its graph, so one declared only by another package, or throughworkspace:,file:,link:, orportal:, is skipped with a warning instead: declare it in the rootpackage.jsonto have it hashed. - A base outside the workspace, or a package base that resolves to no file, cannot be named by any input, and is skipped with a warning.
A
SWC_NODE_PROJECTorTS_NODE_PROJECTpointing elsewhere is not followed: add that file to the target's inputs yourself. Nor does a gitignored base, such as a generated framework tsconfig, invalidate anything: it is named, but Nx's file map leaves ignored files out.- A base in the workspace, by relative path or through a package of the
same workspace, is another
Each workspace package is resolved on its own, through its entry rather than
its manifest, so one that cannot be resolved costs only its own inputs: Nx's
logger warns naming it, and every other package keeps its inputs. If the
command line itself cannot be resolved while the graph is built, the tool
inputs are left out and the warning names it — never failing the graph. The
tsconfig chain is resolved apart from the command line, so either failing
keeps the other's inputs. The
target declares no configurations, so an aggregator run with
--configuration=check falls through to the defaults.
A gate whose projects or tags select anything other than its own project
is never replayed from the cache. Its inputs cover its own project and that project's dependencies,
not the projects such a run judges, so a hash built from them could replay a
pass after an edit to the very project that now fails. The executor's hasher
gives such a run a hash no other run shares, whether the selection came from
the command line, the target's options, or a configuration; a gate judging
only its own project — including one whose projects names exactly that
project — is hashed from its inputs exactly as Nx would hash it. Because
the target has a hasher, nx show target inputs prints a custom-hasher
warning instead of a file list — the inputs above still decide the hash.
Executor options
nx run lexico-api:codependix-gate --projects=lexico-entities,lexico-api
nx run logging:codependix-gate --tags=type:package --dependencies=false| Option | Meaning |
| ------ | ------- |
| projects | Nx project names to judge, replacing the target's own project |
| tags | Nx project tags, judging every project carrying any of them |
| dependencies | Build over the judged projects' Nx dependency closure. true by default; false builds over the judged projects alone |
| configuration | Overrides the registered configuration path. Required if the registration names none; a blank value is refused |
Nx hands plugin options to inference and to nothing else, so a gate given no
configuration reads this plugin's configurationPath registration back out of
nx.json, so the file a gate reads is the file its cache inputs named. A gate
with neither fails, naming the option: no path is assumed. The executor option
is not Nx's own --configuration flag, which selects a target configuration
such as check or write.
Packages
| Package | Role |
| ------- | ---- |
| @codependix/nx | Nx plugin: a per-project boundary gate, built over the Nx dependency closure |
| @codependix/cli | Orchestrates the four graph builders, delivers their exports, and runs --check boundaries |
| @codependix/boundaries | Builds each level's graph, judges it against the declared rules, and charges each finding to a project |
| @codependix/configuration | Reads codependix.config.ts and resolves per-project export destinations and boundary rules |
Test
nx run codependix-nx:vitestContributing
nx run codependix-nx:lint-code --configuration=checkLicense
MIT — see LICENSE.
👔 Conformetry
This project was generated from the nestjs-service-project conformetry template.
🕸️ Codependix
Dependency graphs exported by codependix, regenerated by nx run configuration:codependix:write.
Nx Neighborhood
graph LR
codependix_cli["codependix-cli"]
codependix_configuration["codependix-configuration"]
codependix_nx["codependix-nx"]
codependix_nx --> codependix_cli
codependix_nx --> codependix_configuration
classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
class codependix_nx subjectNestJS Module Graph
flowchart LR
ConfigurationModule
GateModule
InputModule
MainModule
OverrideResolutionModule
PluginModule
ConfigurationModule --> InputModule
ConfigurationModule --> OverrideResolutionModule
GateModule --> ConfigurationModule
GateModule --> PluginModule
MainModule --> GateModule
MainModule --> PluginModule
PluginModule --> ConfigurationModuleFile Imports
graph LR
file_callidescope_config_ts["callidescope.config.ts"]
file_codependix_config_ts["codependix.config.ts"]
file_codometer_config_ts["codometer.config.ts"]
file_eslint_config_ts["eslint.config.ts"]
file_src_codependix_nx_module_ts["src/codependix-nx.module.ts"]
file_src_executors_gate_executor_integration_test_ts["src/executors/gate/executor.integration.test.ts"]
file_src_executors_gate_executor_ts["src/executors/gate/executor.ts"]
file_src_executors_gate_executor_types_ts["src/executors/gate/executor.types.ts"]
file_src_executors_gate_executor_unit_test_ts["src/executors/gate/executor.unit.test.ts"]
file_src_executors_gate_hasher_ts["src/executors/gate/hasher.ts"]
file_src_executors_gate_hasher_unit_test_ts["src/executors/gate/hasher.unit.test.ts"]
file_src_executors_gate_loader_unit_test_ts["src/executors/gate/loader.unit.test.ts"]
file_src_index_ts["src/index.ts"]
file_src_index_unit_test_ts["src/index.unit.test.ts"]
file_src_modules_gate_gate_constants_ts["src/modules/gate/gate.constants.ts"]
file_src_modules_gate_gate_module_ts["src/modules/gate/gate.module.ts"]
file_src_modules_gate_gate_service_ts["src/modules/gate/gate.service.ts"]
file_src_modules_gate_gate_service_unit_test_ts["src/modules/gate/gate.service.unit.test.ts"]
file_src_modules_gate_gate_types_ts["src/modules/gate/gate.types.ts"]
file_src_modules_plugin_plugin_context_utilities_ts["src/modules/plugin/plugin-context.utilities.ts"]
file_src_modules_plugin_plugin_context_utilities_unit_test_ts["src/modules/plugin/plugin-context.utilities.unit.test.ts"]
file_src_modules_plugin_plugin_inputs_utilities_ts["src/modules/plugin/plugin-inputs.utilities.ts"]
file_src_modules_plugin_plugin_inputs_utilities_unit_test_ts["src/modules/plugin/plugin-inputs.utilities.unit.test.ts"]
file_src_modules_plugin_plugin_tsconfig_utilities_ts["src/modules/plugin/plugin-tsconfig.utilities.ts"]
file_src_modules_plugin_plugin_tsconfig_utilities_unit_test_ts["src/modules/plugin/plugin-tsconfig.utilities.unit.test.ts"]
file_src_modules_plugin_plugin_constants_ts["src/modules/plugin/plugin.constants.ts"]
file_src_modules_plugin_plugin_module_ts["src/modules/plugin/plugin.module.ts"]
file_src_modules_plugin_plugin_service_ts["src/modules/plugin/plugin.service.ts"]
file_src_modules_plugin_plugin_service_unit_test_ts["src/modules/plugin/plugin.service.unit.test.ts"]
file_src_modules_plugin_plugin_types_ts["src/modules/plugin/plugin.types.ts"]
file_testing_mocks_ts["testing/mocks.ts"]
file_testing_setup_ts["testing/setup.ts"]
file_vite_config_ts["vite.config.ts"]
file_vitest_config_ts["vitest.config.ts"]
file_src_codependix_nx_module_ts --> file_src_modules_gate_gate_module_ts
file_src_codependix_nx_module_ts --> file_src_modules_plugin_plugin_module_ts
file_src_executors_gate_executor_integration_test_ts --> file_src_executors_gate_executor_ts
file_src_executors_gate_executor_integration_test_ts --> file_src_executors_gate_executor_types_ts
file_src_executors_gate_executor_ts --> file_src_executors_gate_executor_types_ts
file_src_executors_gate_executor_ts --> file_src_modules_plugin_plugin_context_utilities_ts
file_src_executors_gate_executor_types_ts --> file_src_modules_gate_gate_types_ts
file_src_executors_gate_executor_unit_test_ts --> file_src_executors_gate_executor_ts
file_src_executors_gate_executor_unit_test_ts --> file_src_modules_gate_gate_service_ts
file_src_executors_gate_hasher_ts --> file_src_modules_gate_gate_types_ts
file_src_executors_gate_hasher_ts --> file_src_modules_plugin_plugin_context_utilities_ts
file_src_executors_gate_hasher_unit_test_ts --> file_src_executors_gate_hasher_ts
file_src_executors_gate_hasher_unit_test_ts --> file_src_modules_gate_gate_service_ts
file_src_executors_gate_hasher_unit_test_ts --> file_src_modules_gate_gate_types_ts
file_src_index_ts --> file_src_modules_plugin_plugin_context_utilities_ts
file_src_index_ts --> file_src_modules_plugin_plugin_inputs_utilities_ts
file_src_index_ts --> file_src_modules_plugin_plugin_tsconfig_utilities_ts
file_src_index_ts --> file_src_modules_plugin_plugin_constants_ts
file_src_index_unit_test_ts --> file_src_index_ts
file_src_index_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
file_src_index_unit_test_ts --> file_src_modules_plugin_plugin_types_ts
file_src_modules_gate_gate_module_ts --> file_src_modules_gate_gate_service_ts
file_src_modules_gate_gate_module_ts --> file_src_modules_plugin_plugin_module_ts
file_src_modules_gate_gate_service_ts --> file_src_modules_gate_gate_constants_ts
file_src_modules_gate_gate_service_ts --> file_src_modules_gate_gate_types_ts
file_src_modules_gate_gate_service_ts --> file_src_modules_plugin_plugin_service_ts
file_src_modules_gate_gate_service_unit_test_ts --> file_src_modules_gate_gate_service_ts
file_src_modules_gate_gate_service_unit_test_ts --> file_src_modules_gate_gate_types_ts
file_src_modules_gate_gate_service_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_codependix_nx_module_ts
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_gate_gate_service_ts
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_constants_ts
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_service_ts
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_types_ts
file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_gate_gate_service_ts
file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
file_src_modules_plugin_plugin_inputs_utilities_ts --> file_src_modules_plugin_plugin_constants_ts
file_src_modules_plugin_plugin_inputs_utilities_ts --> file_src_modules_plugin_plugin_types_ts
file_src_modules_plugin_plugin_inputs_utilities_unit_test_ts --> file_src_modules_plugin_plugin_inputs_utilities_ts
file_src_modules_plugin_plugin_inputs_utilities_unit_test_ts --> file_src_modules_plugin_plugin_types_ts
file_src_modules_plugin_plugin_tsconfig_utilities_ts --> file_src_modules_plugin_plugin_inputs_utilities_ts
file_src_modules_plugin_plugin_tsconfig_utilities_ts --> file_src_modules_plugin_plugin_constants_ts
file_src_modules_plugin_plugin_tsconfig_utilities_ts --> file_src_modules_plugin_plugin_types_ts
file_src_modules_plugin_plugin_tsconfig_utilities_unit_test_ts --> file_src_modules_plugin_plugin_tsconfig_utilities_ts
file_src_modules_plugin_plugin_tsconfig_utilities_unit_test_ts --> file_src_modules_plugin_plugin_types_ts
file_src_modules_plugin_plugin_module_ts --> file_src_modules_plugin_plugin_service_ts
file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_constants_ts
file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_types_ts
file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
file_src_modules_plugin_plugin_types_ts --> file_src_modules_plugin_plugin_constants_ts🔭 Callidescope
Call stacks traced through projects/ic-suite/codependix/codependix-nx, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
| Measure | Value | | --- | --- | | Callables | 74 | | Files | 22 | | Calls traced | 90 | | Call stacks | 3 | | Deepest stack | 6 | | Stacks through recursion | 0 | | Unfollowable calls | 6 |
Limits
What this project is judged against, as declared in its own callidescope.config.ts.
| Limit | Value |
| --- | --- |
| maximumDepth | 6 |
| maximumBreadth | 5 |
Call stacks (depth)
1. anonymous — depth ≥ 6 · orphan-root
🚀 anonymous(…): Promise<CreateNodesResultArray> [projects/ic-suite/codependix/codependix-nx/src/index.ts:45]
└─> resolveToolInputs(args: ResolveToolInputsArguments): InferredInput[] [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:65]
↳ The cache inputs that tie a gate to the codependix command line it runs.
└─> resolveWorkspaceInputs(…): InferredInput[] [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:209]
↳ Globs over the sources and manifest of the command line and of every workspace package it reaches, sorted so the cache…
└─> collectWorkspacePackages(cliDirectory: string): WorkspacePackages [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:103]
↳ Collects a workspace package and every workspace package it reaches, development dependencies included: a package this…
└─> readDependencies(directory: string): [string, unknown][] [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:41]
↳ Every dependency a package's manifest declares, in either map.
└─> readManifest(directory: string): Record<string, unknown> [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:173]
↳ Reads a package directory's manifest, or an empty one when there is none or it cannot be parsed — which leaves that…2. gateExecutor — depth ≥ 6 · orphan-root
🚀 gateExecutor(…): Promise<{ success: boolean; }> [projects/ic-suite/codependix/codependix-nx/src/executors/gate/executor.ts:21]
↳ Fails one project's task when a codependix boundary finding is charged to it.
└─> GateService.run(args: RunGateArguments): Promise<boolean> [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:293]
↳ Runs one gate, and settles on whether it passed.
└─> GateService.resolveConfigurationPath(args: { configuration?: string | undefined; workspaceRoot: string; }): string [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:246]
↳ Resolves the configuration path one gate runs with.
└─> PluginService.resolvePluginOptions(args: ResolvePluginOptionsArguments): CodependixPluginOptions [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:156]
↳ Resolves the effective plugin options from an untrusted value. `configurationPath` is required and never searched for:…
└─> ConfigurationService.requireConfigurationPath(configurationPath: string | undefined, surface: string): string [projects/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:309]
↳ Returns the main configuration path, refusing one that is missing.
└─> ConfigurationPathRequiredError.constructor(surface: string): ConfigurationPathRequiredError [projects/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.constants.ts:304]3. gateHasher — depth 6 · orphan-root
🚀 gateHasher(task: Task, context: GateHasherContext): Promise<Hash> [projects/ic-suite/codependix/codependix-nx/src/executors/gate/hasher.ts:17]
↳ Hashes one gate task for Nx's cache.
└─> GateService.hashTask(args: HashGateTaskArguments): Promise<Hash> [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:220]
↳ Hashes one gate task for Nx's cache — or, when it judges any project but its own, gives it a hash no run shares, so its…
└─> GateService.judgesOwnProject(args: HashGateTaskArguments): boolean [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:60]
↳ Whether a gate task judges exactly the project it belongs to.
└─> GateService.resolveSelection(…): GateSelection [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:272]
↳ Resolves which projects one gate judges.
└─> GateService.readNameList(value: readonly string[] | undefined): string[] [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:86]
↳ Reads a list of names out of an executor's options.
└─> GateService.filter(…)(entry: string): boolean [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:90]Breadth
| Callable | Breadth | Calls directly | Location |
| --- | --- | --- | --- |
| resolveToolInputs | 5 | locatePackage, warnUnresolved, isInsideWorkspace, resolveWorkspaceInputs, resolveExternalInputs | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:65 |
| anonymous | 5 | resolvePluginService, PluginService.inferTargets, resolveToolInputs, resolveTsconfigInputs, flatMap(…) | projects/ic-suite/codependix/codependix-nx/src/index.ts:45 |
| PluginService.readRegisteredOptions | 4 | PluginService.toRecord, PluginService.isUnknownArray, PluginService.find(…), PluginService.map(…) | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:134 |
| Callable | Breadth | Calls directly | Location |
| --- | --- | --- | --- |
| GateService.resolveConfigurationPath | 4 | ConfigurationService.requireConfigurationPath, PluginService.resolvePluginOptions, PluginService.readRegisteredOptions, GateService.readNxConfiguration | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:246 |
| GateService.run | 4 | GateService.buildCommandArguments, GateService.resolveSelection, GateService.resolveConfigurationPath, GateService.spawnCommandLine | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:293 |
| collectWorkspacePackages | 4 | map(…), filter(…), readDependencies, locatePackage | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:103 |
| followExtendsChain | 4 | readRegistryDependencies, readExtends, resolveExtendedBase, warnSkipped | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:89 |
| resolveExtendedBase | 4 | resolvePathBase, resolvePackageBase, isInsideWorkspace, readInstalledPackageName | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:204 |
| PluginService.selectProjectRoots | 3 | PluginService.filter(…), PluginService.map(…), PluginService.filter(…) | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:65 |
| PluginService.inferTargets | 3 | PluginService.resolvePluginOptions, PluginService.map(…), PluginService.selectProjectRoots | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:99 |
| PluginService.resolvePluginOptions | 3 | PluginService.toRecord, ConfigurationService.requireConfigurationPath, PluginService.readString | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:156 |
| GateService.judgesOwnProject | 3 | GateService.readTaskOptions, GateService.resolveSelection, GateService.toNameList | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:60 |
| GateService.readNameList | 3 | GateService.filter(…), GateService.map(…), GateService.flatMap(…) | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:86 |
| GateService.anonymous | 3 | GateService.on(…), GateService.on(…), GateService.on(…) | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:148 |
| resolveExternalInputs | 3 | filter(…), map(…), readDependencies | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:197 |
| resolveWorkspaceInputs | 3 | collectWorkspacePackages, warnUnresolved, flatMap(…) | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:209 |
| readRegistryDependencies | 3 | map(…), filter(…), readDependencies | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:180 |
| readDependencies | 2 | readManifest, toRecord | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:41 |
| resolveTsconfigInputs | 2 | followExtendsChain, map(…) | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:42 |
| gateExecutor | 2 | resolveGateService, GateService.run | projects/ic-suite/codependix/codependix-nx/src/executors/gate/executor.ts:21 |
| gateHasher | 2 | resolveGateService, GateService.hashTask | projects/ic-suite/codependix/codependix-nx/src/executors/gate/hasher.ts:17 |
| PluginService.map(…) | 1 | PluginService.toRecord | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:142 |
| GateService.readTaskOptions | 1 | GateService.toRecord | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:116 |
| GateService.spawnCommandLine | 1 | GateService.anonymous | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:144 |
| GateService.toNameList | 1 | GateService.filter(…) | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:167 |
| GateService.hashTask | 1 | GateService.judgesOwnProject | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:220 |
| GateService.resolveSelection | 1 | GateService.readNameList | projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:272 |
| resolveGateService | 1 | resolvePluginContext | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-context.utilities.ts:16 |
| resolvePluginService | 1 | resolvePluginContext | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-context.utilities.ts:23 |
| locatePackage | 1 | readManifest | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:145 |
| flatMap(…) | 1 | map(…) | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:224 |
| readExtends | 1 | filter(…) | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:133 |
| filter(…) | 1 | some(…) | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:184 |
| resolvePackageBase | 1 | flatMap(…) | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:247 |
| warnSkipped | 1 | describeSkippedBase | projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:291 |
⏲️ Codometer
Project
TypeScript
JavaScript
Python
JSON
YAML
TOML
Shell
SQL
HCL
CSS
Conventions
Jupyter
Markdown
