@codependix/nx 0.0.13 β†’ 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## 0.0.15 (2026-10-15)
2
+
3
+ ### πŸ’… Refactors
4
+
5
+ - **callidescope,codependix,codometer,conformetry:** ♻️ require --config on every ic-suite command line ([#1598](https://github.com/organizzolini/codebase/pull/1598))
6
+
7
+ ### 🧱 Updated Dependencies
8
+
9
+ - Updated codependix-configuration to 0.0.30
10
+ - Updated codependix-cli to 0.0.30
11
+
12
+ ## 0.0.14 (2026-10-15)
13
+
14
+ ### πŸ’… Refactors
15
+
16
+ - **configuration,documentation:** ♻️ move the configuration folder into an nx project ([#1509](https://github.com/organizzolini/codebase/pull/1509))
17
+
18
+ ### 🧱 Updated Dependencies
19
+
20
+ - Updated codependix-cli to 0.0.29
21
+
1
22
  ## 0.0.13 (2026-10-15)
2
23
 
3
24
  ### 🧱 Updated Dependencies
package/README.md CHANGED
@@ -31,7 +31,7 @@ Register it in `nx.json`:
31
31
  {
32
32
  "plugin": "@codependix/nx",
33
33
  "options": {
34
- "configurationPath": "configuration/codependix.config.ts",
34
+ "configurationPath": "projects/configuration/codependix.config.ts",
35
35
  "gateTargetName": "codependix-gate"
36
36
  }
37
37
  }
@@ -41,7 +41,7 @@ Register it in `nx.json`:
41
41
 
42
42
  | Option | Meaning |
43
43
  | ------ | ------- |
44
- | `configurationPath` | Where the codependix configuration lives. `codependix.config.ts`, then `configuration/codependix.config.ts`, are searched when omitted |
44
+ | `configurationPath` | **Required.** Where the codependix configuration lives. Registering the plugin without it fails inference, naming the option; there is no default path |
45
45
  | `gateTargetName` | Name of the inferred gate target. `codependix-gate` when omitted |
46
46
 
47
47
  The gate runs the command line under the `@swc-node/register` hooks, which
@@ -70,7 +70,7 @@ Each gate runs, from the workspace root:
70
70
 
71
71
  ```bash
72
72
  node --import <file URL of @codependix/nx/loader> <@codependix/cli/main> \
73
- map --directory <workspaceRoot> --config <configurationPath> \
73
+ map --directory <workspaceRoot> --config <configuration> \
74
74
  --check boundaries --projects <project>
75
75
  ```
76
76
 
@@ -179,12 +179,14 @@ nx run logging:codependix-gate --tags=type:package --dependencies=false
179
179
  | `projects` | Nx project names to judge, replacing the target's own project |
180
180
  | `tags` | Nx project tags, judging every project carrying **any** of them |
181
181
  | `dependencies` | Build over the judged projects' Nx dependency closure. `true` by default; `false` builds over the judged projects alone |
182
- | `configurationPath` | Overrides the registered configuration path |
182
+ | `configuration` | Overrides the registered configuration path. Required if the registration names none; a blank value is refused |
183
183
 
184
184
  Nx hands plugin options to inference and to nothing else, so a gate given no
185
- `configurationPath` reads this plugin's registration back out of `nx.json` β€”
186
- and resolves it exactly as inference did, so the file a gate reads is the file
187
- its cache inputs named.
185
+ `configuration` reads this plugin's `configurationPath` registration back out of
186
+ `nx.json`, so the file a gate reads is the file its cache inputs named. A gate
187
+ with neither fails, naming the option: no path is assumed. The executor option
188
+ is not Nx's own `--configuration` flag, which selects a target configuration
189
+ such as `check` or `write`.
188
190
 
189
191
  ## Packages
190
192
 
@@ -213,11 +215,11 @@ MIT β€” see [LICENSE](../../../../LICENSE).
213
215
 
214
216
  ## πŸ‘” Conformetry
215
217
 
216
- This project was generated from the [nestjs-service-project](../../../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
218
+ This project was generated from the [nestjs-service-project](../../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
217
219
 
218
220
  ## πŸ•ΈοΈ Codependix
219
221
 
220
- Dependency graphs exported by [codependix](https://github.com/Organizzolini/codebase/tree/main/projects/ic-suite/codependix/codependix-cli), regenerated by `nx run codebase:codependix:write`.
222
+ Dependency graphs exported by [codependix](https://github.com/Organizzolini/codebase/tree/main/projects/ic-suite/codependix/codependix-cli), regenerated by `nx run configuration:codependix:write`.
221
223
 
222
224
  ### Nx Neighborhood
223
225
 
@@ -225,8 +227,10 @@ Dependency graphs exported by [codependix](https://github.com/Organizzolini/code
225
227
  ```mermaid
226
228
  graph LR
227
229
  codependix_cli["codependix-cli"]
230
+ codependix_configuration["codependix-configuration"]
228
231
  codependix_nx["codependix-nx"]
229
232
  codependix_nx --> codependix_cli
233
+ codependix_nx --> codependix_configuration
230
234
  classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
231
235
  class codependix_nx subject
232
236
  ```
@@ -237,12 +241,19 @@ graph LR
237
241
  <!-- codependix:start name="codependix-nestjs-modules" -->
238
242
  ```mermaid
239
243
  flowchart LR
244
+ ConfigurationModule
240
245
  GateModule
246
+ InputModule
241
247
  MainModule
248
+ OverrideResolutionModule
242
249
  PluginModule
250
+ ConfigurationModule --> InputModule
251
+ ConfigurationModule --> OverrideResolutionModule
252
+ GateModule --> ConfigurationModule
243
253
  GateModule --> PluginModule
244
254
  MainModule --> GateModule
245
255
  MainModule --> PluginModule
256
+ PluginModule --> ConfigurationModule
246
257
  ```
247
258
  <!-- codependix:end name="codependix-nestjs-modules" -->
248
259
 
@@ -347,13 +358,13 @@ Call stacks traced through `projects/ic-suite/codependix/codependix-nx`, deepest
347
358
 
348
359
  | Measure | Value |
349
360
  | --- | --- |
350
- | Callables | 77 |
361
+ | Callables | 74 |
351
362
  | Files | 22 |
352
- | Calls traced | 89 |
363
+ | Calls traced | 90 |
353
364
  | Call stacks | 3 |
354
365
  | Deepest stack | 6 |
355
366
  | Stacks through recursion | 0 |
356
- | Unfollowable calls | 7 |
367
+ | Unfollowable calls | 6 |
357
368
 
358
369
  ### Limits
359
370
 
@@ -387,15 +398,15 @@ What this project is judged against, as declared in its own `callidescope.config
387
398
  ```text
388
399
  πŸš€ gateExecutor(…): Promise<{ success: boolean; }> [projects/ic-suite/codependix/codependix-nx/src/executors/gate/executor.ts:21]
389
400
  ↳ Fails one project's task when a codependix boundary finding is charged to it.
390
- └─> GateService.run(args: RunGateArguments): Promise<boolean> [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:287]
401
+ └─> GateService.run(args: RunGateArguments): Promise<boolean> [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:293]
391
402
  ↳ Runs one gate, and settles on whether it passed.
392
- └─> GateService.resolveConfigurationPath(…): string [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:241]
403
+ └─> GateService.resolveConfigurationPath(args: { configuration?: string | undefined; workspaceRoot: string; }): string [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:246]
393
404
  ↳ Resolves the configuration path one gate runs with.
394
- └─> PluginService.readRegisteredOptions(nxConfiguration: unknown): unknown [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:136]
395
- ↳ Finds this plugin's own entry in an `nx.json` and returns its options.
396
- └─> PluginService.map(…)(entry: unknown): Record<string, unknown> [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:144]
397
- └─> PluginService.toRecord(value: unknown): Record<string, unknown> [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:79]
398
- ↳ Copies an untrusted value into a record, or an empty one.
405
+ └─> PluginService.resolvePluginOptions(args: ResolvePluginOptionsArguments): CodependixPluginOptions [projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:156]
406
+ ↳ Resolves the effective plugin options from an untrusted value. `configurationPath` is required and never searched for:…
407
+ └─> ConfigurationService.requireConfigurationPath(configurationPath: string | undefined, surface: string): string [projects/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:309]
408
+ ↳ Returns the main configuration path, refusing one that is missing.
409
+ └─> ConfigurationPathRequiredError.constructor(surface: string): ConfigurationPathRequiredError [projects/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.constants.ts:304]
399
410
  ```
400
411
 
401
412
  **3. `gateHasher`** β€” depth 6 Β· orphan-root
@@ -403,15 +414,15 @@ What this project is judged against, as declared in its own `callidescope.config
403
414
  ```text
404
415
  πŸš€ gateHasher(task: Task, context: GateHasherContext): Promise<Hash> [projects/ic-suite/codependix/codependix-nx/src/executors/gate/hasher.ts:17]
405
416
  ↳ Hashes one gate task for Nx's cache.
406
- └─> GateService.hashTask(args: HashGateTaskArguments): Promise<Hash> [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:215]
417
+ └─> GateService.hashTask(args: HashGateTaskArguments): Promise<Hash> [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:220]
407
418
  ↳ 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…
408
- └─> GateService.judgesOwnProject(args: HashGateTaskArguments): boolean [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:55]
419
+ └─> GateService.judgesOwnProject(args: HashGateTaskArguments): boolean [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:60]
409
420
  ↳ Whether a gate task judges exactly the project it belongs to.
410
- └─> GateService.resolveSelection(…): GateSelection [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:266]
421
+ └─> GateService.resolveSelection(…): GateSelection [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:272]
411
422
  ↳ Resolves which projects one gate judges.
412
- └─> GateService.readNameList(value: readonly string[] | undefined): string[] [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:81]
423
+ └─> GateService.readNameList(value: readonly string[] | undefined): string[] [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:86]
413
424
  ↳ Reads a list of names out of an executor's options.
414
- └─> GateService.filter(…)(entry: string): boolean [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:85]
425
+ └─> GateService.filter(…)(entry: string): boolean [projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:90]
415
426
  ```
416
427
 
417
428
  ### Breadth
@@ -420,24 +431,24 @@ What this project is judged against, as declared in its own `callidescope.config
420
431
  | --- | --- | --- | --- |
421
432
  | `resolveToolInputs` | 5 | `locatePackage`, `warnUnresolved`, `isInsideWorkspace`, `resolveWorkspaceInputs`, `resolveExternalInputs` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:65` |
422
433
  | `anonymous` | 5 | `resolvePluginService`, `PluginService.inferTargets`, `resolveToolInputs`, `resolveTsconfigInputs`, `flatMap(…)` | `projects/ic-suite/codependix/codependix-nx/src/index.ts:45` |
423
- | `PluginService.readRegisteredOptions` | 4 | `PluginService.toRecord`, `PluginService.isUnknownArray`, `PluginService.find(…)`, `PluginService.map(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:136` |
434
+ | `PluginService.readRegisteredOptions` | 4 | `PluginService.toRecord`, `PluginService.isUnknownArray`, `PluginService.find(…)`, `PluginService.map(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:134` |
424
435
 
425
436
  <details>
426
437
  <summary>32 more callables</summary>
427
438
 
428
439
  | Callable | Breadth | Calls directly | Location |
429
440
  | --- | --- | --- | --- |
430
- | `GateService.run` | 4 | `GateService.buildCommandArguments`, `GateService.resolveSelection`, `GateService.resolveConfigurationPath`, `GateService.spawnCommandLine` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:287` |
441
+ | `GateService.resolveConfigurationPath` | 4 | `ConfigurationService.requireConfigurationPath`, `PluginService.resolvePluginOptions`, `PluginService.readRegisteredOptions`, `GateService.readNxConfiguration` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:246` |
442
+ | `GateService.run` | 4 | `GateService.buildCommandArguments`, `GateService.resolveSelection`, `GateService.resolveConfigurationPath`, `GateService.spawnCommandLine` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:293` |
431
443
  | `collectWorkspacePackages` | 4 | `map(…)`, `filter(…)`, `readDependencies`, `locatePackage` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:103` |
432
444
  | `followExtendsChain` | 4 | `readRegistryDependencies`, `readExtends`, `resolveExtendedBase`, `warnSkipped` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:89` |
433
445
  | `resolveExtendedBase` | 4 | `resolvePathBase`, `resolvePackageBase`, `isInsideWorkspace`, `readInstalledPackageName` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:204` |
434
446
  | `PluginService.selectProjectRoots` | 3 | `PluginService.filter(…)`, `PluginService.map(…)`, `PluginService.filter(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:65` |
435
447
  | `PluginService.inferTargets` | 3 | `PluginService.resolvePluginOptions`, `PluginService.map(…)`, `PluginService.selectProjectRoots` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:99` |
436
- | `PluginService.resolvePluginOptions` | 3 | `PluginService.toRecord`, `PluginService.readString`, `PluginService.find(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:158` |
437
- | `GateService.judgesOwnProject` | 3 | `GateService.readTaskOptions`, `GateService.resolveSelection`, `GateService.toNameList` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:55` |
438
- | `GateService.readNameList` | 3 | `GateService.filter(…)`, `GateService.map(…)`, `GateService.flatMap(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:81` |
439
- | `GateService.anonymous` | 3 | `GateService.on(…)`, `GateService.on(…)`, `GateService.on(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:143` |
440
- | `GateService.resolveConfigurationPath` | 3 | `PluginService.resolvePluginOptions`, `PluginService.readRegisteredOptions`, `GateService.readNxConfiguration` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:241` |
448
+ | `PluginService.resolvePluginOptions` | 3 | `PluginService.toRecord`, `ConfigurationService.requireConfigurationPath`, `PluginService.readString` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:156` |
449
+ | `GateService.judgesOwnProject` | 3 | `GateService.readTaskOptions`, `GateService.resolveSelection`, `GateService.toNameList` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:60` |
450
+ | `GateService.readNameList` | 3 | `GateService.filter(…)`, `GateService.map(…)`, `GateService.flatMap(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:86` |
451
+ | `GateService.anonymous` | 3 | `GateService.on(…)`, `GateService.on(…)`, `GateService.on(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:148` |
441
452
  | `resolveExternalInputs` | 3 | `filter(…)`, `map(…)`, `readDependencies` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:197` |
442
453
  | `resolveWorkspaceInputs` | 3 | `collectWorkspacePackages`, `warnUnresolved`, `flatMap(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:209` |
443
454
  | `readRegistryDependencies` | 3 | `map(…)`, `filter(…)`, `readDependencies` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:180` |
@@ -445,12 +456,12 @@ What this project is judged against, as declared in its own `callidescope.config
445
456
  | `resolveTsconfigInputs` | 2 | `followExtendsChain`, `map(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts:42` |
446
457
  | `gateExecutor` | 2 | `resolveGateService`, `GateService.run` | `projects/ic-suite/codependix/codependix-nx/src/executors/gate/executor.ts:21` |
447
458
  | `gateHasher` | 2 | `resolveGateService`, `GateService.hashTask` | `projects/ic-suite/codependix/codependix-nx/src/executors/gate/hasher.ts:17` |
448
- | `PluginService.map(…)` | 1 | `PluginService.toRecord` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:144` |
449
- | `GateService.readTaskOptions` | 1 | `GateService.toRecord` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:111` |
450
- | `GateService.spawnCommandLine` | 1 | `GateService.anonymous` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:139` |
451
- | `GateService.toNameList` | 1 | `GateService.filter(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:162` |
452
- | `GateService.hashTask` | 1 | `GateService.judgesOwnProject` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:215` |
453
- | `GateService.resolveSelection` | 1 | `GateService.readNameList` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:266` |
459
+ | `PluginService.map(…)` | 1 | `PluginService.toRecord` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts:142` |
460
+ | `GateService.readTaskOptions` | 1 | `GateService.toRecord` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:116` |
461
+ | `GateService.spawnCommandLine` | 1 | `GateService.anonymous` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:144` |
462
+ | `GateService.toNameList` | 1 | `GateService.filter(…)` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:167` |
463
+ | `GateService.hashTask` | 1 | `GateService.judgesOwnProject` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:220` |
464
+ | `GateService.resolveSelection` | 1 | `GateService.readNameList` | `projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.service.ts:272` |
454
465
  | `resolveGateService` | 1 | `resolvePluginContext` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-context.utilities.ts:16` |
455
466
  | `resolvePluginService` | 1 | `resolvePluginContext` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-context.utilities.ts:23` |
456
467
  | `locatePackage` | 1 | `readManifest` | `projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts:145` |
@@ -469,8 +480,8 @@ What this project is judged against, as declared in its own `callidescope.config
469
480
 
470
481
  ### Project
471
482
 
472
- ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-3917-22c55e?style=flat-square)
473
- ![Repository Size](https://img.shields.io/badge/Repository_Size-141.73_kB-6b7280?style=flat-square)
483
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-3927-22c55e?style=flat-square)
484
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-143.03_kB-6b7280?style=flat-square)
474
485
  ![Folders](https://img.shields.io/badge/Folders-7-4a4a4a?style=flat-square)
475
486
  ![Source Files](https://img.shields.io/badge/Source_Files-35-3178c6?style=flat-square)
476
487
 
@@ -481,24 +492,24 @@ What this project is judged against, as declared in its own `callidescope.config
481
492
  ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
482
493
  ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
483
494
  ![Decorators](https://img.shields.io/badge/Decorators-5-db2777?style=flat-square)
484
- ![Doc Comments](https://img.shields.io/badge/Doc_Comments-119-6366f1?style=flat-square)
495
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-118-6366f1?style=flat-square)
485
496
  ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
486
497
 
487
498
  ### JavaScript
488
499
 
489
500
  ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-1-f7df1e?style=flat-square)
490
501
  ![Test Files](https://img.shields.io/badge/Test_Files-10-10b981?style=flat-square)
491
- ![External Packages](https://img.shields.io/badge/External_Packages-14-8b5cf6?style=flat-square)
502
+ ![External Packages](https://img.shields.io/badge/External_Packages-15-8b5cf6?style=flat-square)
492
503
  ![Classes](https://img.shields.io/badge/Classes-5-7c3aed?style=flat-square)
493
- ![Functions](https://img.shields.io/badge/Functions-208-16a34a?style=flat-square)
494
- ![Methods](https://img.shields.io/badge/Methods-36-15803d?style=flat-square)
495
- ![Sync Functions](https://img.shields.io/badge/Sync_Functions-199-4ade80?style=flat-square)
504
+ ![Functions](https://img.shields.io/badge/Functions-206-16a34a?style=flat-square)
505
+ ![Methods](https://img.shields.io/badge/Methods-33-15803d?style=flat-square)
506
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-194-4ade80?style=flat-square)
496
507
  ![Async Functions](https://img.shields.io/badge/Async_Functions-45-059669?style=flat-square)
497
- ![Constants](https://img.shields.io/badge/Constants-163-dc2626?style=flat-square)
498
- ![Imports](https://img.shields.io/badge/Imports-132-0284c7?style=flat-square)
499
- ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-53-ea580c?style=flat-square)
500
- ![Comments](https://img.shields.io/badge/Comments-211-64748b?style=flat-square)
501
- ![Comment Lines](https://img.shields.io/badge/Comment_Lines-511-475569?style=flat-square)
508
+ ![Constants](https://img.shields.io/badge/Constants-164-dc2626?style=flat-square)
509
+ ![Imports](https://img.shields.io/badge/Imports-136-0284c7?style=flat-square)
510
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-54-ea580c?style=flat-square)
511
+ ![Comments](https://img.shields.io/badge/Comments-210-64748b?style=flat-square)
512
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-508-475569?style=flat-square)
502
513
  ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
503
514
 
504
515
  ### Python
@@ -519,16 +530,16 @@ What this project is judged against, as declared in its own `callidescope.config
519
530
  ### JSON
520
531
 
521
532
  ![JSON Files](https://img.shields.io/badge/JSON_Files-6-a16207?style=flat-square)
522
- ![JSON Lines](https://img.shields.io/badge/JSON_Lines-227-ca8a04?style=flat-square)
533
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-228-ca8a04?style=flat-square)
523
534
  ![JSON Objects](https://img.shields.io/badge/JSON_Objects-52-7c3aed?style=flat-square)
524
535
  ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-15-8b5cf6?style=flat-square)
525
- ![JSON Properties](https://img.shields.io/badge/JSON_Properties-148-0284c7?style=flat-square)
526
- ![JSON Strings](https://img.shields.io/badge/JSON_Strings-126-16a34a?style=flat-square)
536
+ ![JSON Properties](https://img.shields.io/badge/JSON_Properties-149-0284c7?style=flat-square)
537
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-127-16a34a?style=flat-square)
527
538
  ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1-059669?style=flat-square)
528
539
  ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-8-0ea5e9?style=flat-square)
529
540
  ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
530
541
  ![JSON Items](https://img.shields.io/badge/JSON_Items-48-475569?style=flat-square)
531
- ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-202-dc2626?style=flat-square)
542
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-203-dc2626?style=flat-square)
532
543
  ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
533
544
 
534
545
  ### YAML
@@ -654,23 +665,23 @@ What this project is judged against, as declared in its own `callidescope.config
654
665
  ### Markdown
655
666
 
656
667
  ![Markdown Files](https://img.shields.io/badge/Markdown_Files-2-083fa1?style=flat-square)
657
- ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-246-1f6feb?style=flat-square)
668
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-270-1f6feb?style=flat-square)
658
669
  ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
659
- ![H2](https://img.shields.io/badge/H2-17-8b5cf6?style=flat-square)
660
- ![H3](https://img.shields.io/badge/H3-23-a78bfa?style=flat-square)
670
+ ![H2](https://img.shields.io/badge/H2-19-8b5cf6?style=flat-square)
671
+ ![H3](https://img.shields.io/badge/H3-27-a78bfa?style=flat-square)
661
672
  ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
662
673
  ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
663
674
  ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
664
- ![Paragraphs](https://img.shields.io/badge/Paragraphs-43-64748b?style=flat-square)
665
- ![Lists](https://img.shields.io/badge/Lists-20-16a34a?style=flat-square)
666
- ![List Items](https://img.shields.io/badge/List_Items-32-22c55e?style=flat-square)
675
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-48-64748b?style=flat-square)
676
+ ![Lists](https://img.shields.io/badge/Lists-24-16a34a?style=flat-square)
677
+ ![List Items](https://img.shields.io/badge/List_Items-37-22c55e?style=flat-square)
667
678
  ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
668
679
  ![Tables](https://img.shields.io/badge/Tables-0-0284c7?style=flat-square)
669
680
  ![Table Rows](https://img.shields.io/badge/Table_Rows-0-0ea5e9?style=flat-square)
670
- ![Links](https://img.shields.io/badge/Links-17-059669?style=flat-square)
681
+ ![Links](https://img.shields.io/badge/Links-19-059669?style=flat-square)
671
682
  ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
672
683
  ![Code Blocks](https://img.shields.io/badge/Code_Blocks-4-dc2626?style=flat-square)
673
- ![Inline Code](https://img.shields.io/badge/Inline_Code-51-ef4444?style=flat-square)
684
+ ![Inline Code](https://img.shields.io/badge/Inline_Code-52-ef4444?style=flat-square)
674
685
  ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
675
686
  ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
676
687
  <!-- codometer:end -->
@@ -1,22 +1,23 @@
1
1
  import "reflect-metadata";
2
2
  import { NestFactory as e } from "@nestjs/core";
3
3
  import { Injectable as t, Module as n } from "@nestjs/common";
4
- import { existsSync as r, readFileSync as i } from "node:fs";
4
+ import { ConfigurationModule as r, ConfigurationService as i } from "@codependix/configuration";
5
5
  import a from "node:path";
6
6
  import { spawn as o } from "node:child_process";
7
7
  import { randomUUID as s } from "node:crypto";
8
- import { createRequire as c } from "node:module";
9
- import { pathToFileURL as l } from "node:url";
8
+ import { readFileSync as c } from "node:fs";
9
+ import { createRequire as l } from "node:module";
10
+ import { pathToFileURL as u } from "node:url";
10
11
  //#region \0rolldown/runtime.js
11
- var u = Object.defineProperty, __name = (e, t) => u(e, "name", {
12
+ var d = Object.defineProperty, __name = (e, t) => d(e, "name", {
12
13
  value: t,
13
14
  configurable: !0
14
- }), d = "**/{project.json,codependix.config.*}", f = "project.json", p = "{projectRoot}/codependix.config.*", m = "__codependixPluginContext", h = "@codependix/nx", g = "codependix-gate", _ = ["codependix.config.ts", "configuration/codependix.config.ts"], v = "@codependix/cli", y = "workspace:", b = [
15
+ }), f = "**/{project.json,codependix.config.*}", p = "project.json", m = "{projectRoot}/codependix.config.*", h = "__codependixPluginContext", g = "@codependix/nx", _ = "codependix-gate", v = "`configurationPath` option on the @codependix/nx plugin's entry in nx.json", y = "@codependix/cli", b = "workspace:", x = [
15
16
  "file:",
16
17
  "link:",
17
18
  "portal:",
18
- y
19
- ], x = ["package.json", "src/**/!(*.test.*|*.spec.*)"], S = "{workspaceRoot}/tsconfig.json", C = "tsconfig.json", w = {
19
+ b
20
+ ], S = ["package.json", "src/**/!(*.test.*|*.spec.*)"], C = "{workspaceRoot}/tsconfig.json", w = "tsconfig.json", T = {
20
21
  outside: "it lies outside the workspace",
21
22
  unresolved: "it resolves to no file"
22
23
  };
@@ -35,8 +36,11 @@ function __decorate(e, t, n, r) {
35
36
  }
36
37
  //#endregion
37
38
  //#region projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.service.ts
38
- var T = class PluginService {
39
- constructor() {}
39
+ var E = class PluginService {
40
+ configurationService;
41
+ constructor(e) {
42
+ this.configurationService = e;
43
+ }
40
44
  isUnknownArray(e) {
41
45
  return Array.isArray(e);
42
46
  }
@@ -45,23 +49,20 @@ var T = class PluginService {
45
49
  return typeof t == "string" && t !== "" ? t : void 0;
46
50
  }
47
51
  selectProjectRoots(e) {
48
- return e.filter((e) => a.basename(e) === f).map((e) => a.dirname(e)).filter((e) => e !== ".");
52
+ return e.filter((e) => a.basename(e) === p).map((e) => a.dirname(e)).filter((e) => e !== ".");
49
53
  }
50
54
  toRecord(e) {
51
55
  return typeof e == "object" && e ? { ...e } : {};
52
56
  }
53
57
  inferTargets(e) {
54
- let t = this.resolvePluginOptions({
55
- exists: (t) => r(a.join(e.workspaceRoot, t)),
56
- options: e.options
57
- }), n = { [t.gateTargetName]: {
58
+ let t = this.resolvePluginOptions({ options: e.options }), n = { [t.gateTargetName]: {
58
59
  cache: !0,
59
- executor: `${h}:gate`,
60
+ executor: `${g}:gate`,
60
61
  inputs: [
61
62
  "default",
62
63
  "^default",
63
64
  `{workspaceRoot}/${t.configurationPath}`,
64
- p,
65
+ m,
65
66
  ...e.toolInputs
66
67
  ],
67
68
  options: {}
@@ -77,10 +78,10 @@ var T = class PluginService {
77
78
  resolvePluginOptions(e) {
78
79
  let t = this.toRecord(e.options);
79
80
  return {
80
- configurationPath: this.readString({
81
+ configurationPath: this.configurationService.requireConfigurationPath(this.readString({
81
82
  key: "configurationPath",
82
83
  record: t
83
- }) ?? _.find((t) => e.exists(t)) ?? _[0],
84
+ }), v),
84
85
  gateTargetName: this.readString({
85
86
  key: "gateTargetName",
86
87
  record: t
@@ -88,22 +89,23 @@ var T = class PluginService {
88
89
  };
89
90
  }
90
91
  };
91
- T = __decorate([t(), __decorateMetadata("design:paramtypes", [])], T);
92
+ E = __decorate([t(), __decorateMetadata("design:paramtypes", [i === void 0 ? Object : i])], E);
92
93
  //#endregion
93
94
  //#region projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin.module.ts
94
- var E = class PluginModule {};
95
- E = __decorate([n({
95
+ var D = class PluginModule {};
96
+ D = __decorate([n({
96
97
  controllers: [],
97
- exports: [T],
98
- imports: [],
99
- providers: [T]
100
- })], E);
98
+ exports: [E],
99
+ imports: [r],
100
+ providers: [E]
101
+ })], D);
101
102
  //#endregion
102
103
  //#region projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.constants.ts
103
- var D = "@codependix/nx/loader", O = "@codependix/cli/main", k = "nx.json", A = class GateService {
104
+ var O = "@codependix/nx/loader", k = "@codependix/cli/main", A = "nx.json", j = "`configuration` executor option", M = class GateService {
105
+ configurationService;
104
106
  pluginService;
105
- constructor(e) {
106
- this.pluginService = e;
107
+ constructor(e, t) {
108
+ this.configurationService = e, this.pluginService = t;
107
109
  }
108
110
  judgesOwnProject(e) {
109
111
  let { project: t } = e.task.target, n = this.readTaskOptions(e), r = this.resolveSelection({
@@ -120,7 +122,7 @@ var D = "@codependix/nx/loader", O = "@codependix/cli/main", k = "nx.json", A =
120
122
  }
121
123
  readNxConfiguration(e) {
122
124
  try {
123
- return JSON.parse(i(a.join(e, k), "utf8"));
125
+ return JSON.parse(c(a.join(e, A), "utf8"));
124
126
  } catch {
125
127
  return;
126
128
  }
@@ -181,10 +183,7 @@ var D = "@codependix/nx/loader", O = "@codependix/cli/main", k = "nx.json", A =
181
183
  };
182
184
  }
183
185
  resolveConfigurationPath(e) {
184
- return e.configurationPath !== void 0 && e.configurationPath !== "" ? e.configurationPath : this.pluginService.resolvePluginOptions({
185
- exists: (t) => r(a.join(e.workspaceRoot, t)),
186
- options: this.pluginService.readRegisteredOptions(this.readNxConfiguration(e.workspaceRoot))
187
- }).configurationPath;
186
+ return e.configuration === void 0 ? this.pluginService.resolvePluginOptions({ options: this.pluginService.readRegisteredOptions(this.readNxConfiguration(e.workspaceRoot)) }).configurationPath : this.configurationService.requireConfigurationPath(e.configuration, j);
188
187
  }
189
188
  resolveSelection(e) {
190
189
  let t = this.readNameList(e.options.projects), n = this.readNameList(e.options.tags);
@@ -201,13 +200,13 @@ var D = "@codependix/nx/loader", O = "@codependix/cli/main", k = "nx.json", A =
201
200
  async run(e) {
202
201
  let t = this.buildCommandArguments({
203
202
  ...this.resolveSelection(e),
204
- cliEntryPath: c(import.meta.url).resolve(O),
203
+ cliEntryPath: l(import.meta.url).resolve(k),
205
204
  configurationPath: this.resolveConfigurationPath({
206
- configurationPath: e.options.configurationPath,
205
+ configuration: e.options.configuration,
207
206
  workspaceRoot: e.workspaceRoot
208
207
  }),
209
208
  dependencies: e.options.dependencies !== !1,
210
- loaderUrl: l(c(import.meta.url).resolve(D)).href,
209
+ loaderUrl: u(l(import.meta.url).resolve(O)).href,
211
210
  workspaceRoot: e.workspaceRoot
212
211
  });
213
212
  return await this.spawnCommandLine({
@@ -216,39 +215,39 @@ var D = "@codependix/nx/loader", O = "@codependix/cli/main", k = "nx.json", A =
216
215
  });
217
216
  }
218
217
  };
219
- A = __decorate([t(), __decorateMetadata("design:paramtypes", [T === void 0 ? Object : T])], A);
218
+ M = __decorate([t(), __decorateMetadata("design:paramtypes", [i === void 0 ? Object : i, E === void 0 ? Object : E])], M);
220
219
  //#endregion
221
220
  //#region projects/ic-suite/codependix/codependix-nx/src/modules/gate/gate.module.ts
222
- var j = class GateModule {};
223
- j = __decorate([n({
221
+ var N = class GateModule {};
222
+ N = __decorate([n({
224
223
  controllers: [],
225
- exports: [A],
226
- imports: [E],
227
- providers: [A]
228
- })], j);
224
+ exports: [M],
225
+ imports: [r, D],
226
+ providers: [M]
227
+ })], N);
229
228
  //#endregion
230
229
  //#region projects/ic-suite/codependix/codependix-nx/src/codependix-nx.module.ts
231
- var M = class MainModule {};
232
- M = __decorate([n({
230
+ var P = class MainModule {};
231
+ P = __decorate([n({
233
232
  controllers: [],
234
- exports: [j, E],
235
- imports: [j, E],
233
+ exports: [N, D],
234
+ imports: [N, D],
236
235
  providers: []
237
- })], M);
236
+ })], P);
238
237
  //#endregion
239
238
  //#region projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-context.utilities.ts
240
239
  async function resolveGateService() {
241
- return (await resolvePluginContext()).get(A);
240
+ return (await resolvePluginContext()).get(M);
242
241
  }
243
242
  async function resolvePluginService() {
244
- return (await resolvePluginContext()).get(T);
243
+ return (await resolvePluginContext()).get(E);
245
244
  }
246
245
  async function resolvePluginContext() {
247
246
  let t = globalThis;
248
- return t[m] ??= e.createApplicationContext(M, {
247
+ return t[h] ??= e.createApplicationContext(P, {
249
248
  abortOnError: !1,
250
249
  logger: !1
251
- }), await t[m];
250
+ }), await t[h];
252
251
  }
253
252
  //#endregion
254
- export { S as _, A as a, v as c, b as d, C as f, y as g, x as h, j as i, h as l, w as m, resolvePluginService as n, E as o, d as p, M as r, T as s, resolveGateService as t, g as u, __name as v };
253
+ export { C as _, M as a, y as c, x as d, w as f, b as g, S as h, N as i, g as l, T as m, resolvePluginService as n, D as o, f as p, P as r, E as s, resolveGateService as t, _ as u, __name as v };
@@ -24,7 +24,7 @@ declare type GateExecutorOptions = GateOptions;
24
24
  /** Options the gate executor accepts. */
25
25
  declare interface GateOptions {
26
26
  /** Workspace-relative configuration path; the registration's when omitted. */
27
- readonly configurationPath?: string | undefined;
27
+ readonly configuration?: string | undefined;
28
28
  /** Build over the named projects' dependency closure. Defaults to true. */
29
29
  readonly dependencies?: boolean | undefined;
30
30
  /** Nx project names to judge, replacing the target's own project. */
@@ -1,4 +1,4 @@
1
- import { t as e } from "../../../plugin-context.utilities-Co0pwFv0.js";
1
+ import { t as e } from "../../../plugin-context.utilities-oWfnrfib.js";
2
2
  //#region projects/ic-suite/codependix/codependix-nx/src/executors/gate/executor.ts
3
3
  async function gateExecutor(t, n) {
4
4
  return { success: await (await e()).run({
@@ -1,4 +1,4 @@
1
- import { t as e } from "../../../plugin-context.utilities-Co0pwFv0.js";
1
+ import { t as e } from "../../../plugin-context.utilities-oWfnrfib.js";
2
2
  //#region projects/ic-suite/codependix/codependix-nx/src/executors/gate/hasher.ts
3
3
  async function gateHasher(t, n) {
4
4
  return await (await e()).hashTask({
@@ -1,3 +1,4 @@
1
+ import { ConfigurationService } from '@codependix/configuration';
1
2
  import { CreateNodes } from '@nx/devkit';
2
3
  import { Hash } from '@nx/devkit';
3
4
  import { HasherContext } from '@nx/devkit';
@@ -25,7 +26,7 @@ export default codependixPlugin;
25
26
 
26
27
  /** Options accepted from this plugin's `nx.json` registration. */
27
28
  export declare interface CodependixPluginOptions {
28
- /** Where the codependix configuration lives, workspace-root relative. */
29
+ /** Where the codependix configuration lives, workspace-root relative. Required. */
29
30
  readonly configurationPath: string;
30
31
  /** Name of the inferred per-project gate target. */
31
32
  readonly gateTargetName: string;
@@ -56,7 +57,7 @@ export declare class GateModule {
56
57
  /** Options the gate executor accepts. */
57
58
  export declare interface GateOptions {
58
59
  /** Workspace-relative configuration path; the registration's when omitted. */
59
- readonly configurationPath?: string | undefined;
60
+ readonly configuration?: string | undefined;
60
61
  /** Build over the named projects' dependency closure. Defaults to true. */
61
62
  readonly dependencies?: boolean | undefined;
62
63
  /** Nx project names to judge, replacing the target's own project. */
@@ -81,8 +82,9 @@ export declare interface GateSelection {
81
82
  * plugin under no such loader, so only a fresh `node --import` can provide it.
82
83
  */
83
84
  export declare class GateService {
85
+ private readonly configurationService;
84
86
  private readonly pluginService;
85
- constructor(pluginService: PluginService);
87
+ constructor(configurationService: ConfigurationService, pluginService: PluginService);
86
88
  /**
87
89
  * Whether a gate task judges exactly the project it belongs to.
88
90
  *
@@ -151,13 +153,13 @@ export declare class GateService {
151
153
  /**
152
154
  * Resolves the configuration path one gate runs with.
153
155
  *
154
- * A path the target was given wins. Otherwise the one this plugin was
155
- * registered with is read back out of `nx.json`, and resolved exactly as
156
- * inference resolved it β€” so the file a gate reads is always the file its
157
- * cache inputs named.
156
+ * A `configuration` option the target was given wins, and is refused when
157
+ * blank. Otherwise the path this plugin was registered with is read back
158
+ * out of `nx.json`, so the file a gate reads is always the file its cache
159
+ * inputs named. A gate given neither throws: no default path is assumed.
158
160
  */
159
161
  resolveConfigurationPath(args: {
160
- configurationPath?: string | undefined;
162
+ configuration?: string | undefined;
161
163
  workspaceRoot: string;
162
164
  }): string;
163
165
  /**
@@ -243,7 +245,8 @@ export declare class PluginModule {
243
245
  * from being built.
244
246
  */
245
247
  export declare class PluginService {
246
- constructor();
248
+ private readonly configurationService;
249
+ constructor(configurationService: ConfigurationService);
247
250
  /** Narrows an untrusted value to an array without widening it to `any`. */
248
251
  private isUnknownArray;
249
252
  /** Reads a non-empty string field from an untrusted record. */
@@ -282,9 +285,9 @@ export declare class PluginService {
282
285
  /**
283
286
  * Resolves the effective plugin options from an untrusted value.
284
287
  *
285
- * A configuration path nobody named is searched for rather than assumed,
286
- * because it becomes a cache input: an input naming a file that does not
287
- * exist would leave every gate cached across an edit to the one that does.
288
+ * `configurationPath` is required and never searched for: it becomes a cache
289
+ * input, and a guessed path naming a file that does not exist would leave
290
+ * every gate cached across an edit to the one that does.
288
291
  */
289
292
  resolvePluginOptions(args: ResolvePluginOptionsArguments): CodependixPluginOptions;
290
293
  }
@@ -294,8 +297,6 @@ export declare function resolveGateService(): Promise<GateService>;
294
297
 
295
298
  /** Arguments for resolving the plugin options from an untrusted value. */
296
299
  declare interface ResolvePluginOptionsArguments {
297
- /** Whether a workspace-relative path exists, for the default search. */
298
- readonly exists: (candidatePath: string) => boolean;
299
300
  /** Whatever the `nx.json` registration holds, unvalidated. */
300
301
  readonly options: unknown;
301
302
  }
package/dist/src/index.js CHANGED
@@ -1,12 +1,12 @@
1
- import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g } from "../plugin-context.utilities-Co0pwFv0.js";
2
- import { existsSync as _, readFileSync as v, realpathSync as y, statSync as b } from "node:fs";
3
- import x from "node:path";
1
+ import { _ as e, a as t, c as n, d as r, f as i, g as a, h as o, i as s, l as c, m as l, n as u, o as d, p as f, r as p, s as m, t as h, u as g } from "../plugin-context.utilities-oWfnrfib.js";
2
+ import _ from "node:path";
3
+ import { existsSync as v, readFileSync as y, realpathSync as b, statSync as x } from "node:fs";
4
4
  import { createRequire as S } from "node:module";
5
5
  import { logger as C, readJsonFile as w } from "@nx/devkit";
6
6
  //#region projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-inputs.utilities.ts
7
7
  function isInsideWorkspace(e) {
8
- let t = x.relative(y(e.workspaceRoot), e.directory);
9
- return !(t.startsWith("..") || x.isAbsolute(t) || t.split(x.sep).includes("node_modules"));
8
+ let t = _.relative(b(e.workspaceRoot), e.directory);
9
+ return !(t.startsWith("..") || _.isAbsolute(t) || t.split(_.sep).includes("node_modules"));
10
10
  }
11
11
  function readDependencies(e) {
12
12
  let t = readManifest(e);
@@ -41,7 +41,7 @@ function collectWorkspacePackages(e) {
41
41
  let i = readDependencies(e).filter(([, e]) => String(e).startsWith(a)).map(([e]) => e);
42
42
  for (let a of i) {
43
43
  let i = locatePackage({
44
- fromFile: x.join(e, "package.json"),
44
+ fromFile: _.join(e, "package.json"),
45
45
  name: a
46
46
  });
47
47
  i === void 0 ? n.add(a) : t.has(i) || (t.add(i), r.push(i));
@@ -55,19 +55,19 @@ function collectWorkspacePackages(e) {
55
55
  function locatePackage(e) {
56
56
  let t;
57
57
  try {
58
- t = x.dirname(y(S(e.fromFile).resolve(e.name)));
58
+ t = _.dirname(b(S(e.fromFile).resolve(e.name)));
59
59
  } catch {
60
60
  return;
61
61
  }
62
- for (;; t = x.dirname(t)) {
62
+ for (;; t = _.dirname(t)) {
63
63
  if (readManifest(t).name === e.name) return t;
64
- if (x.dirname(t) === t) return;
64
+ if (_.dirname(t) === t) return;
65
65
  }
66
66
  }
67
67
  function readManifest(e) {
68
- let t = x.join(e, "package.json");
68
+ let t = _.join(e, "package.json");
69
69
  try {
70
- let e = _(t) ? JSON.parse(v(t, "utf8")) : void 0;
70
+ let e = v(t) ? JSON.parse(y(t, "utf8")) : void 0;
71
71
  return typeof e == "object" && e ? { ...e } : {};
72
72
  } catch {
73
73
  return {};
@@ -78,11 +78,11 @@ function resolveExternalInputs(e) {
78
78
  return [{ externalDependencies: [n, ...t].toSorted() }];
79
79
  }
80
80
  function resolveWorkspaceInputs(e) {
81
- let t = y(e.workspaceRoot), { directories: n, unresolved: r } = collectWorkspacePackages(e.cliDirectory);
81
+ let t = b(e.workspaceRoot), { directories: n, unresolved: r } = collectWorkspacePackages(e.cliDirectory);
82
82
  return r.length > 0 && warnUnresolved({
83
83
  logger: e.logger,
84
84
  names: r
85
- }), [...n].flatMap((e) => o.map((n) => `{workspaceRoot}/${x.relative(t, e)}/${n}`)).toSorted();
85
+ }), [...n].flatMap((e) => o.map((n) => `{workspaceRoot}/${_.relative(t, e)}/${n}`)).toSorted();
86
86
  }
87
87
  function toRecord(e) {
88
88
  return typeof e == "object" && e ? { ...e } : {};
@@ -94,10 +94,10 @@ function warnUnresolved(e) {
94
94
  //#region projects/ic-suite/codependix/codependix-nx/src/modules/plugin/plugin-tsconfig.utilities.ts
95
95
  function resolveTsconfigInputs(t) {
96
96
  try {
97
- let e = y(t.workspaceRoot), { files: n, packages: r } = followExtendsChain({
97
+ let e = b(t.workspaceRoot), { files: n, packages: r } = followExtendsChain({
98
98
  logger: t.logger,
99
99
  workspaceRoot: e
100
- }), i = [...n].map((t) => `{workspaceRoot}/${x.relative(e, t).split(x.sep).join("/")}`).toSorted();
100
+ }), i = [...n].map((t) => `{workspaceRoot}/${_.relative(e, t).split(_.sep).join("/")}`).toSorted();
101
101
  return r.size === 0 ? i : [...i, { externalDependencies: [...r].toSorted() }];
102
102
  } catch (n) {
103
103
  return t.logger.warn(`πŸ•ΈοΈ Skipped following the bases the root tsconfig.json extends, so a change to one will not invalidate a cached codependix gate: ${String(n)}`), [e];
@@ -107,7 +107,7 @@ function describeSkippedBase(e) {
107
107
  return e.kind === "undeclared" ? `the root package.json does not declare ${e.name} from a registry` : l[e.kind];
108
108
  }
109
109
  function followExtendsChain(e) {
110
- let t = x.join(e.workspaceRoot, "tsconfig.json"), n = readRegistryDependencies(e.workspaceRoot), r = /* @__PURE__ */ new Set([t]), i = /* @__PURE__ */ new Set(), a = _(t) ? [t] : [];
110
+ let t = _.join(e.workspaceRoot, "tsconfig.json"), n = readRegistryDependencies(e.workspaceRoot), r = /* @__PURE__ */ new Set([t]), i = /* @__PURE__ */ new Set(), a = v(t) ? [t] : [];
111
111
  for (let t = a.pop(); t !== void 0; t = a.pop()) for (let o of readExtends({
112
112
  ...e,
113
113
  file: t
@@ -134,18 +134,18 @@ function readExtends(e) {
134
134
  try {
135
135
  return [w(e.file, { expectComments: !0 }).extends].flat().filter((e) => typeof e == "string");
136
136
  } catch (t) {
137
- return e.logger.warn(`πŸ•ΈοΈ Skipped the bases ${x.relative(e.workspaceRoot, e.file)} extends, which could not be read, so a change to one will not invalidate a cached codependix gate: ${String(t)}`), [];
137
+ return e.logger.warn(`πŸ•ΈοΈ Skipped the bases ${_.relative(e.workspaceRoot, e.file)} extends, which could not be read, so a change to one will not invalidate a cached codependix gate: ${String(t)}`), [];
138
138
  }
139
139
  }
140
140
  function readInstalledPackageName(e) {
141
- let t = e.split(x.sep), n = t.lastIndexOf("node_modules") + 1, r = t[n];
141
+ let t = e.split(_.sep), n = t.lastIndexOf("node_modules") + 1, r = t[n];
142
142
  if (n !== 0 && r !== void 0) return t.slice(n, r.startsWith("@") ? n + 2 : n + 1).join("/");
143
143
  }
144
144
  function readRegistryDependencies(e) {
145
145
  return new Set(readDependencies(e).filter(([, e]) => !r.some((t) => String(e).startsWith(t))).map(([e]) => e));
146
146
  }
147
147
  function resolveExtendedBase(e) {
148
- let t = e.specifier.replaceAll("\\", "/"), n = x.isAbsolute(t) || t.startsWith("./") || t.startsWith("../") ? resolvePathBase({
148
+ let t = e.specifier.replaceAll("\\", "/"), n = _.isAbsolute(t) || t.startsWith("./") || t.startsWith("../") ? resolvePathBase({
149
149
  file: e.file,
150
150
  specifier: t
151
151
  }) : resolvePackageBase({
@@ -172,7 +172,7 @@ function resolveExtendedBase(e) {
172
172
  function resolvePackageBase(e) {
173
173
  let { specifier: t } = e, n = t.split("/").length > (t.startsWith("@") ? 2 : 1) ? [t, `${t}.json`] : [`${t}/${i}`, t], r = S(e.file), [a] = n.flatMap((e) => {
174
174
  try {
175
- let t = y(r.resolve(e));
175
+ let t = b(r.resolve(e));
176
176
  return t.endsWith(".json") ? [t] : [];
177
177
  } catch {
178
178
  return [];
@@ -181,11 +181,11 @@ function resolvePackageBase(e) {
181
181
  return a;
182
182
  }
183
183
  function resolvePathBase(e) {
184
- let t = x.resolve(x.dirname(e.file), e.specifier), n = b(t, { throwIfNoEntry: !1 })?.isFile() === !0 || t.endsWith(".json") ? t : `${t}.json`;
185
- return _(n) ? y(n) : n;
184
+ let t = _.resolve(_.dirname(e.file), e.specifier), n = x(t, { throwIfNoEntry: !1 })?.isFile() === !0 || t.endsWith(".json") ? t : `${t}.json`;
185
+ return v(n) ? b(n) : n;
186
186
  }
187
187
  function warnSkipped(e) {
188
- e.logger.warn(`πŸ•ΈοΈ Skipped the cache input of ${e.specifier}, which ${x.relative(e.workspaceRoot, e.file)} extends, because ${describeSkippedBase(e.base)}, so a change to it will not invalidate a cached codependix gate.`);
188
+ e.logger.warn(`πŸ•ΈοΈ Skipped the cache input of ${e.specifier}, which ${_.relative(e.workspaceRoot, e.file)} extends, because ${describeSkippedBase(e.base)}, so a change to it will not invalidate a cached codependix gate.`);
189
189
  }
190
190
  //#endregion
191
191
  //#region projects/ic-suite/codependix/codependix-nx/src/index.ts
@@ -204,7 +204,7 @@ var T = {
204
204
  workspaceRoot: n.workspaceRoot
205
205
  });
206
206
  return e.flatMap((e) => {
207
- let t = x.dirname(e), n = r.get(t);
207
+ let t = _.dirname(e), n = r.get(t);
208
208
  return n === void 0 ? [] : [[e, { projects: { [t]: { targets: n } } }]];
209
209
  });
210
210
  }],
package/package.json CHANGED
@@ -4,7 +4,8 @@
4
4
  "url": "https://github.com/organizzolini/codebase/issues"
5
5
  },
6
6
  "dependencies": {
7
- "@codependix/cli": "0.0.28",
7
+ "@codependix/cli": "0.0.30",
8
+ "@codependix/configuration": "0.0.30",
8
9
  "@nestjs/common": "^11.1.21 || ^12.0.1",
9
10
  "@nestjs/core": "^11.1.21 || ^12.0.1",
10
11
  "@nx/devkit": "^23.0.0",
@@ -76,5 +77,5 @@
76
77
  "strict": true
77
78
  },
78
79
  "types": "./dist/src/index.d.ts",
79
- "version": "0.0.13"
80
+ "version": "0.0.15"
80
81
  }
@@ -2,8 +2,8 @@
2
2
  "$schema": "http://json-schema.org/schema",
3
3
  "description": "Fail a project whose dependency graphs break a codependix boundary rule charged to it, built over the project and its Nx dependencies.",
4
4
  "properties": {
5
- "configurationPath": {
6
- "description": "Path to the codependix configuration file, relative to the workspace root. The path this plugin is registered with in nx.json when omitted.",
5
+ "configuration": {
6
+ "description": "Path to the codependix configuration file, relative to the workspace root. The path this plugin is registered with in nx.json when omitted; required one way or the other, with no default.",
7
7
  "type": "string"
8
8
  },
9
9
  "dependencies": {