@coinagerie/nx 0.0.0-stage → 0.0.2

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 ADDED
@@ -0,0 +1,17 @@
1
+ ## 0.0.2 (2026-11-04)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated coinagerie-configuration to 0.0.2
6
+
7
+ ## 0.0.1 (2026-11-04)
8
+
9
+ ### 🚀 Features
10
+
11
+ - **coinagerie:** 📦️ publish coinagerie to npm ([#2088](https://github.com/organizzolini/codebase/pull/2088), [#1793](https://github.com/organizzolini/codebase/issues/1793))
12
+ - **configuration,coinagerie:** ✨ adopt coinagerie with a root glossary ([#1888](https://github.com/organizzolini/codebase/pull/1888), [#1785](https://github.com/organizzolini/codebase/issues/1785))
13
+ - **coinagerie:** ✨ infer coinagerie check targets in nx ([#1879](https://github.com/organizzolini/codebase/pull/1879), [#1775](https://github.com/organizzolini/codebase/issues/1775))
14
+
15
+ ### 🧱 Updated Dependencies
16
+
17
+ - Updated coinagerie-configuration to 0.0.1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jimmy Paolini
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,447 @@
1
- # Temporary Holding Version
1
+ # @coinagerie/nx
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![npm](https://img.shields.io/npm/v/@coinagerie/nx?logo=npm&label=npm)](https://www.npmjs.com/package/@coinagerie/nx)
4
+
5
+ An Nx plugin that infers a coinagerie check target for every project that holds a `coinagerie.config.ts`.
6
+
7
+ ```bash
8
+ npm install --save-dev @coinagerie/nx @coinagerie/cli
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ An Nx plugin that gives every project holding a coinagerie configuration its
14
+ own check target, so `nx affected` runs the check only where something it reads
15
+ has changed. The `coinagerie` command works without it.
16
+
17
+ Register it in `nx.json`:
18
+
19
+ ```json
20
+ {
21
+ "plugins": [
22
+ {
23
+ "plugin": "@coinagerie/nx",
24
+ "options": {
25
+ "inputs": ["{workspaceRoot}/GLOSSARY.md"]
26
+ }
27
+ }
28
+ ]
29
+ }
30
+ ```
31
+
32
+ A project gets the target when its folder holds a `coinagerie.config.ts` (or
33
+ any other file name the loader reads) beside a `project.json` or `package.json`.
34
+ The target runs `coinagerie --check` from the project folder and is cached.
35
+
36
+ | Option | Default | Meaning |
37
+ | ----------------- | ------------------ | ----------------------------------------------------------- |
38
+ | `checkTargetName` | `coinagerie-check` | Name of the inferred target |
39
+ | `command` | `coinagerie` | What runs; `--check` is appended |
40
+ | `inputs` | none | Extra cache inputs added to every inferred target (below) |
41
+
42
+ The configuration file and every file in the project are cache inputs. A file
43
+ the project does not hold but its configuration reads, such as a parent
44
+ glossary behind `exclude.words`, goes in `inputs`: editing it re-runs the check,
45
+ and a path under `{workspaceRoot}` also makes `nx affected` select every project
46
+ that declares it. One project can add its own in `project.json` with the
47
+ spread entry, `"inputs": ["...", "{workspaceRoot}/other.json"]`.
48
+
49
+ The target runs the installed `coinagerie` binary, so `@coinagerie/cli` must be
50
+ installed, or `command` must name another way to run it. Its verdict also
51
+ depends on the tool itself: to re-run every check when the tool changes,
52
+ declare it as an input, for example `{ "externalDependencies": ["@coinagerie/cli"] }`.
53
+ An input may be a string or any other Nx input object.
54
+
55
+ ## Test
56
+
57
+ ```bash
58
+ nx run coinagerie-nx:vitest
59
+ ```
60
+
61
+ ## 👔 Conformetry
62
+
63
+ This project was generated from the [nestjs-service-project](../../configuration/conformetry-templates/nestjs-service-project) conformetry template.
64
+
65
+ <!-- coinagerie:start -->
66
+
67
+ ## 🪙 Coinagerie
68
+
69
+ The words this package uses that the root glossary does not define, regenerated with `nx run coinagerie-nx:coinagerie-check:write`.
70
+
71
+ - **abort**:
72
+ - **beta**:
73
+ - **breadth**:
74
+ - **gamma**:
75
+ - **mj**:
76
+ - **posix**:
77
+ - **sample**:
78
+
79
+ <!-- coinagerie:end -->
80
+
81
+ <!-- callidescope:start -->
82
+
83
+ ## 🔭 Callidescope
84
+
85
+ Call stacks traced through `projects/ic-suite/coinagerie/coinagerie-nx`, deepest first. Each frame shows what it takes, what it returns, and what its documentation says.
86
+
87
+ | Measure | Value |
88
+ | --- | --- |
89
+ | Callables | 17 |
90
+ | Files | 18 |
91
+ | Calls traced | 15 |
92
+ | Call stacks | 1 |
93
+ | Deepest stack | 6 |
94
+ | Stacks through recursion | 0 |
95
+ | Unfollowable calls | 0 |
96
+
97
+ ### Limits
98
+
99
+ What this project is judged against, as declared in its own `callidescope.config.ts`.
100
+
101
+ | Limit | Value |
102
+ | --- | --- |
103
+ | `maximumDepth` | 6 |
104
+ | `maximumBreadth` | 4 |
105
+
106
+ ### Call stacks (depth)
107
+
108
+ **1. `anonymous`** — depth 6 · orphan-root
109
+
110
+ ```text
111
+ 🚀 anonymous(…): Promise<CreateNodesResultArray> [projects/ic-suite/coinagerie/coinagerie-nx/src/index.ts:40]
112
+ └─> PluginService.inferTargets(args: InferTargetsArguments): Map<string, InferredTargets> [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin.service.ts:115]
113
+ ↳ Infers a check target onto every project that holds a configuration.
114
+ └─> OptionsService.resolvePluginOptions(options: unknown): CoinageriePluginOptions [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:82]
115
+ ↳ Resolves the effective plugin options from an untrusted value.
116
+ └─> OptionsService.readInputs(options: Record<string, unknown>): PluginInput[] [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:49]
117
+ ↳ Reads the declared inputs from an untrusted record.
118
+ └─> OptionsService.flatMap(…)(this: undefined, entry: unknown): PluginInput[] [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:56]
119
+ └─> OptionsService.isInputObject(value: unknown): value is Exclude<PluginInput, string> [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:31]
120
+ ↳ Narrows an untrusted value to an Nx input object, such as `{ env }`.
121
+ ```
122
+
123
+ ### Breadth
124
+
125
+ | Callable | Breadth | Calls directly | Location |
126
+ | --- | --- | --- | --- |
127
+ | `PluginService.inferTargets` | 3 | `OptionsService.resolvePluginOptions`, `PluginService.isProject`, `PluginService.buildCheckTarget` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin.service.ts:115` |
128
+ | `anonymous` | 3 | `resolvePluginService`, `PluginService.inferTargets`, `flatMap(…)` | `projects/ic-suite/coinagerie/coinagerie-nx/src/index.ts:40` |
129
+ | `OptionsService.readInputs` | 2 | `OptionsService.isUnknownArray`, `OptionsService.flatMap(…)` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:49` |
130
+
131
+ <details>
132
+ <summary>5 more callables</summary>
133
+
134
+ | Callable | Breadth | Calls directly | Location |
135
+ | --- | --- | --- | --- |
136
+ | `OptionsService.resolvePluginOptions` | 2 | `OptionsService.readString`, `OptionsService.readInputs` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:82` |
137
+ | `OptionsService.flatMap(…)` | 1 | `OptionsService.isInputObject` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:56` |
138
+ | `PluginService.buildCheckTarget` | 1 | `PluginService.map(…)` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin.service.ts:49` |
139
+ | `PluginService.isProject` | 1 | `PluginService.isNamedPackage` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin.service.ts:93` |
140
+ | `resolvePluginService` | 1 | `resolvePluginContext` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin-context.utilities.ts:15` |
141
+
142
+ </details>
143
+ <!-- callidescope:end -->
144
+
145
+ ## 🕸️ Codependix
146
+
147
+ 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`.
148
+
149
+ ### Nx Neighborhood
150
+
151
+ <!-- codependix:start name="codependix-nx-projects" -->
152
+ ```mermaid
153
+ graph LR
154
+ coinagerie_configuration["coinagerie-configuration"]
155
+ coinagerie_nx["coinagerie-nx"]
156
+ coinagerie_nx --> coinagerie_configuration
157
+ classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
158
+ class coinagerie_nx subject
159
+ ```
160
+ <!-- codependix:end name="codependix-nx-projects" -->
161
+
162
+ ### NestJS Module Graph
163
+
164
+ <!-- codependix:start name="codependix-nestjs-modules" -->
165
+ ```mermaid
166
+ flowchart LR
167
+ MainModule
168
+ OptionsModule
169
+ PluginModule
170
+ MainModule --> PluginModule
171
+ PluginModule --> OptionsModule
172
+ ```
173
+ <!-- codependix:end name="codependix-nestjs-modules" -->
174
+
175
+ ### File Imports
176
+
177
+ <!-- codependix:start name="codependix-file-imports" -->
178
+ ```mermaid
179
+ graph LR
180
+ file_callidescope_config_ts["callidescope.config.ts"]
181
+ file_codependix_config_ts["codependix.config.ts"]
182
+ file_codometer_config_ts["codometer.config.ts"]
183
+ file_coinagerie_config_ts["coinagerie.config.ts"]
184
+ file_eslint_config_ts["eslint.config.ts"]
185
+ file_src_coinagerie_nx_module_ts["src/coinagerie-nx.module.ts"]
186
+ file_src_coinagerie_nx_module_unit_test_ts["src/coinagerie-nx.module.unit.test.ts"]
187
+ file_src_index_ts["src/index.ts"]
188
+ file_src_index_unit_test_ts["src/index.unit.test.ts"]
189
+ file_src_modules_options_options_constants_ts["src/modules/options/options.constants.ts"]
190
+ file_src_modules_options_options_module_ts["src/modules/options/options.module.ts"]
191
+ file_src_modules_options_options_service_ts["src/modules/options/options.service.ts"]
192
+ file_src_modules_options_options_service_unit_test_ts["src/modules/options/options.service.unit.test.ts"]
193
+ file_src_modules_options_options_types_ts["src/modules/options/options.types.ts"]
194
+ file_src_modules_plugin_plugin_context_utilities_ts["src/modules/plugin/plugin-context.utilities.ts"]
195
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts["src/modules/plugin/plugin-context.utilities.unit.test.ts"]
196
+ file_src_modules_plugin_plugin_constants_ts["src/modules/plugin/plugin.constants.ts"]
197
+ file_src_modules_plugin_plugin_module_ts["src/modules/plugin/plugin.module.ts"]
198
+ file_src_modules_plugin_plugin_service_ts["src/modules/plugin/plugin.service.ts"]
199
+ file_src_modules_plugin_plugin_service_unit_test_ts["src/modules/plugin/plugin.service.unit.test.ts"]
200
+ file_src_modules_plugin_plugin_types_ts["src/modules/plugin/plugin.types.ts"]
201
+ file_testing_fake_workspace_ts["testing/fake-workspace.ts"]
202
+ file_testing_mocks_ts["testing/mocks.ts"]
203
+ file_testing_setup_ts["testing/setup.ts"]
204
+ file_vite_config_ts["vite.config.ts"]
205
+ file_vitest_config_ts["vitest.config.ts"]
206
+ file_src_coinagerie_nx_module_ts --> file_src_modules_plugin_plugin_module_ts
207
+ file_src_coinagerie_nx_module_unit_test_ts --> file_src_coinagerie_nx_module_ts
208
+ file_src_index_ts --> file_src_modules_options_options_constants_ts
209
+ file_src_index_ts --> file_src_modules_plugin_plugin_context_utilities_ts
210
+ file_src_index_ts --> file_src_modules_plugin_plugin_constants_ts
211
+ file_src_index_unit_test_ts --> file_src_index_ts
212
+ file_src_index_unit_test_ts --> file_testing_fake_workspace_ts
213
+ file_src_modules_options_options_module_ts --> file_src_modules_options_options_service_ts
214
+ file_src_modules_options_options_service_ts --> file_src_modules_options_options_constants_ts
215
+ file_src_modules_options_options_service_ts --> file_src_modules_options_options_types_ts
216
+ file_src_modules_options_options_service_unit_test_ts --> file_src_modules_options_options_service_ts
217
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_coinagerie_nx_module_ts
218
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_constants_ts
219
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_service_ts
220
+ file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_types_ts
221
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
222
+ file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
223
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_options_options_module_ts
224
+ file_src_modules_plugin_plugin_module_ts --> file_src_modules_plugin_plugin_service_ts
225
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_service_ts
226
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_types_ts
227
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_constants_ts
228
+ file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_types_ts
229
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_options_options_service_ts
230
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
231
+ file_src_modules_plugin_plugin_service_unit_test_ts --> file_testing_fake_workspace_ts
232
+ file_src_modules_plugin_plugin_types_ts --> file_src_modules_options_options_types_ts
233
+ file_src_modules_plugin_plugin_types_ts --> file_src_modules_plugin_plugin_constants_ts
234
+ ```
235
+ <!-- codependix:end name="codependix-file-imports" -->
236
+
237
+ <!-- codometer:start -->
238
+
239
+ ## ⏲️ Codometer
240
+
241
+ ### Project
242
+
243
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-1268-22c55e?style=flat-square)
244
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-51.03_kB-6b7280?style=flat-square)
245
+ ![Folders](https://img.shields.io/badge/Folders-5-4a4a4a?style=flat-square)
246
+ ![Source Files](https://img.shields.io/badge/Source_Files-26-3178c6?style=flat-square)
247
+
248
+ ### TypeScript
249
+
250
+ ![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-26-3178c6?style=flat-square)
251
+ ![Interfaces](https://img.shields.io/badge/Interfaces-4-0ea5e9?style=flat-square)
252
+ ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
253
+ ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
254
+ ![Decorators](https://img.shields.io/badge/Decorators-5-db2777?style=flat-square)
255
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-39-6366f1?style=flat-square)
256
+ ![Static Methods](https://img.shields.io/badge/Static_Methods-0-166534?style=flat-square)
257
+
258
+ ### JavaScript
259
+
260
+ ![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-0-f7df1e?style=flat-square)
261
+ ![Test Files](https://img.shields.io/badge/Test_Files-5-10b981?style=flat-square)
262
+ ![External Packages](https://img.shields.io/badge/External_Packages-11-8b5cf6?style=flat-square)
263
+ ![Classes](https://img.shields.io/badge/Classes-5-7c3aed?style=flat-square)
264
+ ![Functions](https://img.shields.io/badge/Functions-53-16a34a?style=flat-square)
265
+ ![Methods](https://img.shields.io/badge/Methods-11-15803d?style=flat-square)
266
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-51-4ade80?style=flat-square)
267
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-13-059669?style=flat-square)
268
+ ![Constants](https://img.shields.io/badge/Constants-53-dc2626?style=flat-square)
269
+ ![Imports](https://img.shields.io/badge/Imports-72-0284c7?style=flat-square)
270
+ ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-24-ea580c?style=flat-square)
271
+ ![Comments](https://img.shields.io/badge/Comments-62-64748b?style=flat-square)
272
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-166-475569?style=flat-square)
273
+ ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
274
+
275
+ ### Python
276
+
277
+ ![Python Files](https://img.shields.io/badge/Python_Files-0-3776ab?style=flat-square)
278
+ ![Python Lines](https://img.shields.io/badge/Python_Lines-0-4b8bbe?style=flat-square)
279
+ ![Python Classes](https://img.shields.io/badge/Python_Classes-0-7c3aed?style=flat-square)
280
+ ![Python Functions](https://img.shields.io/badge/Python_Functions-0-16a34a?style=flat-square)
281
+ ![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)
282
+ ![Python Constants](https://img.shields.io/badge/Python_Constants-0-dc2626?style=flat-square)
283
+ ![Python Imports](https://img.shields.io/badge/Python_Imports-0-0284c7?style=flat-square)
284
+ ![Python Decorators](https://img.shields.io/badge/Python_Decorators-0-db2777?style=flat-square)
285
+ ![Docstrings](https://img.shields.io/badge/Docstrings-0-6366f1?style=flat-square)
286
+ ![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-0-818cf8?style=flat-square)
287
+ ![Python Comments](https://img.shields.io/badge/Python_Comments-0-64748b?style=flat-square)
288
+ ![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-0-475569?style=flat-square)
289
+
290
+ ### JSON
291
+
292
+ ![JSON Files](https://img.shields.io/badge/JSON_Files-4-a16207?style=flat-square)
293
+ ![JSON Lines](https://img.shields.io/badge/JSON_Lines-157-ca8a04?style=flat-square)
294
+ ![JSON Objects](https://img.shields.io/badge/JSON_Objects-37-7c3aed?style=flat-square)
295
+ ![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-12-8b5cf6?style=flat-square)
296
+ ![JSON Properties](https://img.shields.io/badge/JSON_Properties-95-0284c7?style=flat-square)
297
+ ![JSON Strings](https://img.shields.io/badge/JSON_Strings-86-16a34a?style=flat-square)
298
+ ![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1-059669?style=flat-square)
299
+ ![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-6-0ea5e9?style=flat-square)
300
+ ![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
301
+ ![JSON Items](https://img.shields.io/badge/JSON_Items-43-475569?style=flat-square)
302
+ ![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-142-dc2626?style=flat-square)
303
+ ![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-5-ea580c?style=flat-square)
304
+
305
+ ### YAML
306
+
307
+ ![YAML Files](https://img.shields.io/badge/YAML_Files-0-cb171e?style=flat-square)
308
+ ![YAML Lines](https://img.shields.io/badge/YAML_Lines-0-e34c26?style=flat-square)
309
+ ![YAML Documents](https://img.shields.io/badge/YAML_Documents-0-f97316?style=flat-square)
310
+ ![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-0-7c3aed?style=flat-square)
311
+ ![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-0-8b5cf6?style=flat-square)
312
+ ![YAML Keys](https://img.shields.io/badge/YAML_Keys-0-0284c7?style=flat-square)
313
+ ![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-0-16a34a?style=flat-square)
314
+ ![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)
315
+ ![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)
316
+ ![YAML Comments](https://img.shields.io/badge/YAML_Comments-0-64748b?style=flat-square)
317
+ ![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-0-ea580c?style=flat-square)
318
+
319
+ ### TOML
320
+
321
+ ![TOML Files](https://img.shields.io/badge/TOML_Files-0-9c4221?style=flat-square)
322
+ ![TOML Lines](https://img.shields.io/badge/TOML_Lines-0-b45309?style=flat-square)
323
+ ![TOML Tables](https://img.shields.io/badge/TOML_Tables-0-7c3aed?style=flat-square)
324
+ ![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-0-8b5cf6?style=flat-square)
325
+ ![TOML Keys](https://img.shields.io/badge/TOML_Keys-0-0284c7?style=flat-square)
326
+ ![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-0-16a34a?style=flat-square)
327
+ ![TOML Comments](https://img.shields.io/badge/TOML_Comments-0-64748b?style=flat-square)
328
+
329
+ ### Shell
330
+
331
+ ![Shell Files](https://img.shields.io/badge/Shell_Files-0-89e051?style=flat-square)
332
+ ![Shell Lines](https://img.shields.io/badge/Shell_Lines-0-4eaa25?style=flat-square)
333
+ ![Shell Functions](https://img.shields.io/badge/Shell_Functions-0-16a34a?style=flat-square)
334
+ ![Shell Variables](https://img.shields.io/badge/Shell_Variables-0-0284c7?style=flat-square)
335
+ ![Shell Exports](https://img.shields.io/badge/Shell_Exports-0-ea580c?style=flat-square)
336
+ ![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-0-7c3aed?style=flat-square)
337
+ ![Shell Loops](https://img.shields.io/badge/Shell_Loops-0-8b5cf6?style=flat-square)
338
+ ![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-0-059669?style=flat-square)
339
+ ![Shebangs](https://img.shields.io/badge/Shebangs-0-6b7280?style=flat-square)
340
+ ![Shell Comments](https://img.shields.io/badge/Shell_Comments-0-64748b?style=flat-square)
341
+ ![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-0-475569?style=flat-square)
342
+
343
+ ### SQL
344
+
345
+ ![SQL Files](https://img.shields.io/badge/SQL_Files-0-e38c00?style=flat-square)
346
+ ![SQL Lines](https://img.shields.io/badge/SQL_Lines-0-f29111?style=flat-square)
347
+ ![SQL Statements](https://img.shields.io/badge/SQL_Statements-0-7c3aed?style=flat-square)
348
+ ![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)
349
+ ![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-0-22c55e?style=flat-square)
350
+ ![SQL Updates](https://img.shields.io/badge/SQL_Updates-0-0ea5e9?style=flat-square)
351
+ ![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-0-dc2626?style=flat-square)
352
+ ![SQL Creates](https://img.shields.io/badge/SQL_Creates-0-0284c7?style=flat-square)
353
+ ![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)
354
+ ![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-0-059669?style=flat-square)
355
+ ![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)
356
+
357
+ ### HCL
358
+
359
+ ![HCL Files](https://img.shields.io/badge/HCL_Files-0-844fba?style=flat-square)
360
+ ![HCL Lines](https://img.shields.io/badge/HCL_Lines-0-a78bfa?style=flat-square)
361
+ ![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-0-7c3aed?style=flat-square)
362
+ ![HCL Resources](https://img.shields.io/badge/HCL_Resources-0-0284c7?style=flat-square)
363
+ ![HCL Variables](https://img.shields.io/badge/HCL_Variables-0-16a34a?style=flat-square)
364
+ ![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-0-059669?style=flat-square)
365
+ ![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-0-0ea5e9?style=flat-square)
366
+ ![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)
367
+ ![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)
368
+
369
+ ### CSS
370
+
371
+ ![CSS Files](https://img.shields.io/badge/CSS_Files-0-264de4?style=flat-square)
372
+ ![CSS Lines](https://img.shields.io/badge/CSS_Lines-0-2965f1?style=flat-square)
373
+ ![CSS Rules](https://img.shields.io/badge/CSS_Rules-0-7c3aed?style=flat-square)
374
+ ![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-0-8b5cf6?style=flat-square)
375
+ ![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-0-0284c7?style=flat-square)
376
+ ![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-0-f97316?style=flat-square)
377
+ ![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)
378
+ ![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-0-16a34a?style=flat-square)
379
+ ![CSS Comments](https://img.shields.io/badge/CSS_Comments-0-64748b?style=flat-square)
380
+
381
+ ### Conventions
382
+
383
+ ![Module Files](https://img.shields.io/badge/Module_Files-3-7c3aed?style=flat-square)
384
+ ![Service Files](https://img.shields.io/badge/Service_Files-2-0284c7?style=flat-square)
385
+ ![Command Files](https://img.shields.io/badge/Command_Files-0-16a34a?style=flat-square)
386
+ ![Constants Files](https://img.shields.io/badge/Constants_Files-2-ea580c?style=flat-square)
387
+ ![Types Files](https://img.shields.io/badge/Types_Files-2-db2777?style=flat-square)
388
+ ![Utilities Files](https://img.shields.io/badge/Utilities_Files-1-0ea5e9?style=flat-square)
389
+ ![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-0-059669?style=flat-square)
390
+ ![Unit Tests](https://img.shields.io/badge/Unit_Tests-5-ca8a04?style=flat-square)
391
+ ![Integration Tests](https://img.shields.io/badge/Integration_Tests-0-7c3aed?style=flat-square)
392
+ ![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-0-0284c7?style=flat-square)
393
+ ![CSS Comment Budget](https://img.shields.io/badge/CSS_Comment_Budget-0-16a34a?style=flat-square)
394
+ ![HCL Comment Budget](https://img.shields.io/badge/HCL_Comment_Budget-0-ea580c?style=flat-square)
395
+ ![Python Comment Budget](https://img.shields.io/badge/Python_Comment_Budget-0-db2777?style=flat-square)
396
+ ![SQL Comment Budget](https://img.shields.io/badge/SQL_Comment_Budget-0-0ea5e9?style=flat-square)
397
+ ![TOML Comment Budget](https://img.shields.io/badge/TOML_Comment_Budget-0-059669?style=flat-square)
398
+ ![TypeScript Comment Budget](https://img.shields.io/badge/TypeScript_Comment_Budget-0-ca8a04?style=flat-square)
399
+ ![YAML Comment Budget](https://img.shields.io/badge/YAML_Comment_Budget-0-7c3aed?style=flat-square)
400
+ ![Shell Comment Budget](https://img.shields.io/badge/Shell_Comment_Budget-0-0284c7?style=flat-square)
401
+
402
+ ### Jupyter
403
+
404
+ ![Notebooks](https://img.shields.io/badge/Notebooks-0-f37626?style=flat-square)
405
+ ![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-0-e8a33d?style=flat-square)
406
+ ![Code Cells](https://img.shields.io/badge/Code_Cells-0-3776ab?style=flat-square)
407
+ ![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-0-083fa1?style=flat-square)
408
+ ![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)
409
+ ![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)
410
+ ![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)
411
+ ![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-0-4b8bbe?style=flat-square)
412
+ ![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-0-7c3aed?style=flat-square)
413
+ ![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-0-22c55e?style=flat-square)
414
+ ![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-0-0284c7?style=flat-square)
415
+ ![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-0-db2777?style=flat-square)
416
+ ![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-0-1f6feb?style=flat-square)
417
+ ![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-0-a78bfa?style=flat-square)
418
+ ![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)
419
+ ![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)
420
+ ![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)
421
+ ![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-0-ca8a04?style=flat-square)
422
+ ![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-0-a16207?style=flat-square)
423
+ ![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-0-ea580c?style=flat-square)
424
+
425
+ ### Markdown
426
+
427
+ ![Markdown Files](https://img.shields.io/badge/Markdown_Files-2-083fa1?style=flat-square)
428
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-239-1f6feb?style=flat-square)
429
+ ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
430
+ ![H2](https://img.shields.io/badge/H2-9-8b5cf6?style=flat-square)
431
+ ![H3](https://img.shields.io/badge/H3-15-a78bfa?style=flat-square)
432
+ ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
433
+ ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
434
+ ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
435
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-50-64748b?style=flat-square)
436
+ ![Lists](https://img.shields.io/badge/Lists-9-16a34a?style=flat-square)
437
+ ![List Items](https://img.shields.io/badge/List_Items-30-22c55e?style=flat-square)
438
+ ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
439
+ ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
440
+ ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
441
+ ![Links](https://img.shields.io/badge/Links-15-059669?style=flat-square)
442
+ ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
443
+ ![Code Blocks](https://img.shields.io/badge/Code_Blocks-11-dc2626?style=flat-square)
444
+ ![Inline Code](https://img.shields.io/badge/Inline_Code-72-ef4444?style=flat-square)
445
+ ![Block Quotes](https://img.shields.io/badge/Block_Quotes-0-ca8a04?style=flat-square)
446
+ ![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-0-a16207?style=flat-square)
447
+ <!-- codometer:end -->
@@ -0,0 +1,163 @@
1
+ import { CreateNodes } from '@nx/devkit';
2
+ import { TargetConfiguration } from '@nx/devkit';
3
+
4
+ /** Name this plugin is registered under in a workspace's `nx.json`. */
5
+ export declare const COINAGERIE_NX_PLUGIN_NAME = "@coinagerie/nx";
6
+
7
+ declare const coinageriePlugin: {
8
+ createNodes: CreateNodes;
9
+ name: string;
10
+ };
11
+ export default coinageriePlugin;
12
+
13
+ /** Options accepted from this plugin's `nx.json` registration. */
14
+ export declare interface CoinageriePluginOptions {
15
+ /** Name of the inferred per-project check target. */
16
+ readonly checkTargetName: string;
17
+ /** The command a check runs, to which `--check` is appended. */
18
+ readonly command: string;
19
+ /**
20
+ * Extra cache inputs added to every inferred target, in Nx's own input
21
+ * syntax — for example the glossary a configuration's `exclude.words` reads.
22
+ */
23
+ readonly inputs: readonly PluginInput[];
24
+ }
25
+
26
+ /**
27
+ * Name of the inferred per-project check target, when the registration names
28
+ * none.
29
+ *
30
+ * Prefixed, like every other ic-suite toolchain's inferred target, so that it
31
+ * stays grouped and recognizable in Nx task lists and cannot collide with a
32
+ * generic name in a workspace carrying several toolchains.
33
+ */
34
+ export declare const DEFAULT_CHECK_TARGET_NAME = "coinagerie-check";
35
+
36
+ /**
37
+ * The command a check runs, when the registration names none.
38
+ *
39
+ * The published binary, resolved from the workspace's `node_modules/.bin` the
40
+ * way any package script's would be. A workspace that runs coinagerie from
41
+ * source names its own command.
42
+ */
43
+ export declare const DEFAULT_COMMAND = "coinagerie";
44
+
45
+ /** A target this plugin infers onto a project. */
46
+ export declare interface InferredTarget {
47
+ readonly cache: boolean;
48
+ readonly executor: string;
49
+ /** Files whose change must invalidate the cached result. */
50
+ readonly inputs: PluginInput[];
51
+ readonly options: Record<string, unknown>;
52
+ }
53
+
54
+ /** One project's inferred targets, keyed by target name. */
55
+ export declare type InferredTargets = Record<string, InferredTarget>;
56
+
57
+ /** Arguments for inferring targets from every configuration Nx matched. */
58
+ declare interface InferTargetsArguments {
59
+ /** Every coinagerie configuration Nx matched, workspace-root relative. */
60
+ readonly configurationFiles: readonly string[];
61
+ readonly options: unknown;
62
+ readonly workspaceRoot: string;
63
+ }
64
+
65
+ /**
66
+ * Root module of the plugin's application context.
67
+ *
68
+ * Built once per process and cached — the Nx daemon is long-lived, so paying
69
+ * for a NestJS context on every inference would make this plugin the slowest
70
+ * thing in the graph.
71
+ */
72
+ export declare class MainModule {
73
+ }
74
+
75
+ /** Provides the reader for this plugin's `nx.json` registration. */
76
+ export declare class OptionsModule {
77
+ }
78
+
79
+ /**
80
+ * Narrows the untyped options object Nx hands a plugin.
81
+ *
82
+ * Nx passes whatever the consumer wrote in `nx.json` with no validation, so
83
+ * every field is checked before use rather than cast. A bad value falls back
84
+ * to its default: a typo in a target name should not stop the project graph
85
+ * from being built.
86
+ */
87
+ export declare class OptionsService {
88
+ constructor();
89
+ /** Narrows an untrusted value to an Nx input object, such as `{ env }`. */
90
+ private isInputObject;
91
+ /** Narrows an untrusted value to an array without widening it to `any`. */
92
+ private isUnknownArray;
93
+ /**
94
+ * Reads the declared inputs from an untrusted record.
95
+ *
96
+ * Nx input strings are trimmed and the blanks dropped; Nx input objects such
97
+ * as `{ externalDependencies: [...] }` pass through untouched, because
98
+ * dropping one would let a cached verdict outlive what it was meant to track.
99
+ * Anything else is dropped rather than trusted, so one bad entry cannot
100
+ * discard the good ones beside it.
101
+ */
102
+ private readInputs;
103
+ /** Reads a non-blank string field from an untrusted record. */
104
+ private readString;
105
+ /** Resolves the effective plugin options from an untrusted value. */
106
+ resolvePluginOptions(options: unknown): CoinageriePluginOptions;
107
+ }
108
+
109
+ /** One cache input in Nx's own syntax: a string, or an object such as `{ env }`. */
110
+ declare type PluginInput = NonNullable<TargetConfiguration["inputs"]>[number];
111
+
112
+ /** Provides target inference. */
113
+ export declare class PluginModule {
114
+ }
115
+
116
+ /**
117
+ * Everything this plugin does, behind one injectable.
118
+ *
119
+ * Nx calls plugins from module-level functions with no injection of their own,
120
+ * so the bare entry point in `index.ts` builds nothing itself — it resolves
121
+ * this service and hands it the arguments.
122
+ */
123
+ export declare class PluginService {
124
+ private readonly optionsService;
125
+ constructor(optionsService: OptionsService);
126
+ /**
127
+ * Builds the check target of one project.
128
+ *
129
+ * The check passes or fails on the project's configuration and the files
130
+ * that configuration includes, so both are inputs: a cached verdict taken
131
+ * across an edit to either would report the old answer. Whatever the
132
+ * registration declared joins them — the shared configuration a project
133
+ * spreads, or the glossary its `exclude.words` reads, live outside the
134
+ * project and are invisible to it otherwise. Declaring a path under
135
+ * `{workspaceRoot}` is also what makes Nx count an edit to it as touching
136
+ * this project, so `nx affected` selects the check without a dependency edge.
137
+ */
138
+ private buildCheckTarget;
139
+ /** Whether a `package.json` names a package, which is what makes it a project. */
140
+ private isNamedPackage;
141
+ /**
142
+ * Whether a folder is an Nx project, which is what a target can run on.
143
+ *
144
+ * A `package.json` counts only when it names a package, because that is
145
+ * the only kind Nx makes a project of; a node returned for a folder it does
146
+ * not would carry no name and stop the whole project graph.
147
+ */
148
+ private isProject;
149
+ /**
150
+ * Infers a check target onto every project that holds a configuration.
151
+ *
152
+ * A project with no configuration is never matched, so it has no target — a
153
+ * check there would find nothing to read its settings from. The options are
154
+ * read once for the whole workspace rather than once per project, because Nx
155
+ * hands this every matched file at once.
156
+ */
157
+ inferTargets(args: InferTargetsArguments): Map<string, InferredTargets>;
158
+ }
159
+
160
+ /** Resolves the service backing target inference. */
161
+ export declare function resolvePluginService(): Promise<PluginService>;
162
+
163
+ export { }
@@ -0,0 +1,153 @@
1
+ import e from "node:path";
2
+ import "reflect-metadata";
3
+ import { NestFactory as t } from "@nestjs/core";
4
+ import { Injectable as n, Module as r } from "@nestjs/common";
5
+ import { existsSync as i, readFileSync as a } from "node:fs";
6
+ import { CONFIGURATION_FILE_NAMES as o } from "@coinagerie/configuration";
7
+ // \0rolldown/runtime.js
8
+ var s = "@coinagerie/nx", c = "coinagerie-check", l = "coinagerie";
9
+ // \0@oxc-project+runtime@0.155.0/helpers/esm/decorateMetadata.js
10
+ function __decorateMetadata(e, t) {
11
+ if (typeof Reflect == "object" && typeof Reflect.metadata == "function") return Reflect.metadata(e, t);
12
+ }
13
+ // \0@oxc-project+runtime@0.155.0/helpers/esm/decorate.js
14
+ function __decorate(e, t, n, r) {
15
+ var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
16
+ if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
17
+ else for (var s = e.length - 1; s >= 0; s--) (o = e[s]) && (a = (i < 3 ? o(a) : i > 3 ? o(t, n, a) : o(t, n)) || a);
18
+ return i > 3 && a && Object.defineProperty(t, n, a), a;
19
+ }
20
+ // src/modules/options/options.service.ts
21
+ var u = class OptionsService {
22
+ constructor() {}
23
+ isInputObject(e) {
24
+ return typeof e == "object" && !!e && !Array.isArray(e);
25
+ }
26
+ isUnknownArray(e) {
27
+ return Array.isArray(e);
28
+ }
29
+ readInputs(e) {
30
+ let t = e.inputs;
31
+ return this.isUnknownArray(t) ? t.flatMap((e) => {
32
+ if (this.isInputObject(e)) return [e];
33
+ let t = typeof e == "string" ? e.trim() : "";
34
+ return t === "" ? [] : [t];
35
+ }) : [];
36
+ }
37
+ readString(e) {
38
+ let t = e.options[e.key];
39
+ return typeof t == "string" && t.trim() !== "" ? t.trim() : void 0;
40
+ }
41
+ resolvePluginOptions(e) {
42
+ let t = typeof e == "object" && e ? { ...e } : {};
43
+ return {
44
+ checkTargetName: this.readString({
45
+ key: "checkTargetName",
46
+ options: t
47
+ }) ?? "coinagerie-check",
48
+ command: this.readString({
49
+ key: "command",
50
+ options: t
51
+ }) ?? "coinagerie",
52
+ inputs: this.readInputs(t)
53
+ };
54
+ }
55
+ };
56
+ u = __decorate([n(), __decorateMetadata("design:paramtypes", [])], u);
57
+ // src/modules/options/options.module.ts
58
+ var d = class OptionsModule {};
59
+ d = __decorate([r({
60
+ controllers: [],
61
+ exports: [u],
62
+ imports: [],
63
+ providers: [u]
64
+ })], d);
65
+ // src/modules/plugin/plugin.constants.ts
66
+ var f = `**/{${o.join(",")}}`, p = "{projectRoot}/**/*", m = "__coinageriePluginContext", h = class PluginService {
67
+ optionsService;
68
+ constructor(e) {
69
+ this.optionsService = e;
70
+ }
71
+ buildCheckTarget(e) {
72
+ return { [e.checkTargetName]: {
73
+ cache: !0,
74
+ executor: "nx:run-commands",
75
+ inputs: [
76
+ ...o.map((e) => `{projectRoot}/${e}`),
77
+ p,
78
+ ...e.inputs
79
+ ],
80
+ options: {
81
+ command: `${e.command} --check`,
82
+ cwd: "{projectRoot}"
83
+ }
84
+ } };
85
+ }
86
+ isNamedPackage(e) {
87
+ try {
88
+ let t = JSON.parse(a(e, "utf8"));
89
+ return typeof t == "object" && !!t && "name" in t && typeof t.name == "string" && t.name !== "";
90
+ } catch {
91
+ return !1;
92
+ }
93
+ }
94
+ isProject(t) {
95
+ let n = e.join(t.workspaceRoot, t.projectRoot);
96
+ return i(e.join(n, "project.json")) || this.isNamedPackage(e.join(n, "package.json"));
97
+ }
98
+ inferTargets(t) {
99
+ let n = this.optionsService.resolvePluginOptions(t.options), r = /* @__PURE__ */ new Map();
100
+ for (let i of t.configurationFiles) {
101
+ let a = e.posix.dirname(i);
102
+ !r.has(a) && this.isProject({
103
+ projectRoot: a,
104
+ workspaceRoot: t.workspaceRoot
105
+ }) && r.set(a, this.buildCheckTarget(n));
106
+ }
107
+ return r;
108
+ }
109
+ };
110
+ h = __decorate([n(), __decorateMetadata("design:paramtypes", [u === void 0 ? Object : u])], h);
111
+ // src/modules/plugin/plugin.module.ts
112
+ var g = class PluginModule {};
113
+ g = __decorate([r({
114
+ controllers: [],
115
+ exports: [h],
116
+ imports: [d],
117
+ providers: [h]
118
+ })], g);
119
+ // src/coinagerie-nx.module.ts
120
+ var _ = class MainModule {};
121
+ _ = __decorate([r({
122
+ controllers: [],
123
+ exports: [g],
124
+ imports: [g],
125
+ providers: []
126
+ })], _);
127
+ // src/modules/plugin/plugin-context.utilities.ts
128
+ async function resolvePluginService() {
129
+ return (await resolvePluginContext()).get(h);
130
+ }
131
+ async function resolvePluginContext() {
132
+ let e = globalThis;
133
+ return e[m] ??= t.createApplicationContext(_, {
134
+ abortOnError: !1,
135
+ logger: !1
136
+ }), await e[m];
137
+ }
138
+ // src/index.ts
139
+ var v = {
140
+ createNodes: [f, async (t, n, r) => {
141
+ let i = (await resolvePluginService()).inferTargets({
142
+ configurationFiles: t,
143
+ options: n,
144
+ workspaceRoot: r.workspaceRoot
145
+ }), a = /* @__PURE__ */ new Set();
146
+ return t.flatMap((t) => {
147
+ let n = e.posix.dirname(t), r = i.get(n);
148
+ return r === void 0 || a.has(n) ? [] : (a.add(n), [[t, { projects: { [n]: { targets: r } } }]]);
149
+ });
150
+ }],
151
+ name: s
152
+ };
153
+ export { s as COINAGERIE_NX_PLUGIN_NAME, c as DEFAULT_CHECK_TARGET_NAME, l as DEFAULT_COMMAND, _ as MainModule, d as OptionsModule, u as OptionsService, g as PluginModule, h as PluginService, v as default, resolvePluginService };
package/package.json CHANGED
@@ -1,6 +1,63 @@
1
1
  {
2
+ "author": "Jimmy Paolini",
3
+ "bugs": {
4
+ "url": "https://github.com/organizzolini/codebase/issues"
5
+ },
6
+ "dependencies": {
7
+ "@coinagerie/configuration": "0.0.2",
8
+ "@nestjs/common": "^11.1.21 || ^12.0.1",
9
+ "@nestjs/core": "^11.1.21 || ^12.0.1",
10
+ "@nx/devkit": "^24.0.0",
11
+ "reflect-metadata": "^0.2.2"
12
+ },
13
+ "description": "Nx plugin that infers a coinagerie check target for every project with a coinagerie configuration",
14
+ "devDependencies": {
15
+ "@golevelup/ts-vitest": "^4.0.0",
16
+ "@nestjs/testing": "^12.0.1",
17
+ "@nx/eslint-plugin": "^24.0.0",
18
+ "@swc/helpers": "^0.5.21",
19
+ "@types/node": "^26.5.1",
20
+ "@vitest/coverage-v8": "^5.0.0",
21
+ "vitest": "^5.0.0"
22
+ },
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/src/index.d.ts",
26
+ "default": "./dist/src/index.js"
27
+ },
28
+ "./package.json": "./package.json"
29
+ },
30
+ "files": [
31
+ "CHANGELOG.md",
32
+ "dist",
33
+ "LICENSE",
34
+ "README.md"
35
+ ],
36
+ "homepage": "https://github.com/organizzolini/codebase/tree/main/projects/ic-suite/coinagerie/coinagerie-nx#readme",
37
+ "keywords": [
38
+ "coinagerie",
39
+ "glossary",
40
+ "nx",
41
+ "nx-plugin",
42
+ "vocabulary"
43
+ ],
44
+ "license": "MIT",
45
+ "main": "./dist/src/index.js",
2
46
  "name": "@coinagerie/nx",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
47
+ "publishConfig": {
48
+ "access": "public",
49
+ "registry": "https://registry.npmjs.org"
50
+ },
51
+ "repository": {
52
+ "directory": "projects/ic-suite/coinagerie/coinagerie-nx",
53
+ "type": "git",
54
+ "url": "git+https://github.com/organizzolini/codebase.git"
55
+ },
56
+ "type": "module",
57
+ "typeCoverage": {
58
+ "atLeast": 100,
59
+ "strict": true
60
+ },
61
+ "types": "./dist/src/index.d.ts",
62
+ "version": "0.0.2"
6
63
  }