@coinagerie/nx 0.0.0-stage → 0.0.1
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 +11 -0
- package/LICENSE +21 -0
- package/README.md +505 -2
- package/dist/src/index.d.ts +163 -0
- package/dist/src/index.js +153 -0
- package/package.json +60 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## 0.0.1 (2026-11-04)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **coinagerie:** 📦️ publish coinagerie to npm ([#2088](https://github.com/organizzolini/codebase/pull/2088), [#1793](https://github.com/organizzolini/codebase/issues/1793))
|
|
6
|
+
- **configuration,coinagerie:** ✨ adopt coinagerie with a root glossary ([#1888](https://github.com/organizzolini/codebase/pull/1888), [#1785](https://github.com/organizzolini/codebase/issues/1785))
|
|
7
|
+
- **coinagerie:** ✨ infer coinagerie check targets in nx ([#1879](https://github.com/organizzolini/codebase/pull/1879), [#1775](https://github.com/organizzolini/codebase/issues/1775))
|
|
8
|
+
|
|
9
|
+
### 🧱 Updated Dependencies
|
|
10
|
+
|
|
11
|
+
- 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,506 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @coinagerie/nx
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](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
|
+
- **absolute**:
|
|
73
|
+
- **after**:
|
|
74
|
+
- **alpha**:
|
|
75
|
+
- **array**:
|
|
76
|
+
- **assertion**:
|
|
77
|
+
- **beta**:
|
|
78
|
+
- **breadth**:
|
|
79
|
+
- **bug**:
|
|
80
|
+
- **callback**:
|
|
81
|
+
- **clear**:
|
|
82
|
+
- **close**:
|
|
83
|
+
- **compile**:
|
|
84
|
+
- **compiler**:
|
|
85
|
+
- **console**:
|
|
86
|
+
- **constant**:
|
|
87
|
+
- **controller**:
|
|
88
|
+
- **decorator**:
|
|
89
|
+
- **define**:
|
|
90
|
+
- **describe**:
|
|
91
|
+
- **each**:
|
|
92
|
+
- **entry**:
|
|
93
|
+
- **equal**:
|
|
94
|
+
- **experimental**:
|
|
95
|
+
- **factory**:
|
|
96
|
+
- **fake**:
|
|
97
|
+
- **filename**:
|
|
98
|
+
- **fixture**:
|
|
99
|
+
- **flat**:
|
|
100
|
+
- **force**:
|
|
101
|
+
- **gamma**:
|
|
102
|
+
- **gitkeep**:
|
|
103
|
+
- **homepage**:
|
|
104
|
+
- **implementation**:
|
|
105
|
+
- **injectable**:
|
|
106
|
+
- **instance**:
|
|
107
|
+
- **least**:
|
|
108
|
+
- **length**:
|
|
109
|
+
- **logger**:
|
|
110
|
+
- **manifest**:
|
|
111
|
+
- **maximum**:
|
|
112
|
+
- **meta**:
|
|
113
|
+
- **mj**:
|
|
114
|
+
- **mkdtemp**:
|
|
115
|
+
- **mock**:
|
|
116
|
+
- **non**:
|
|
117
|
+
- **nullable**:
|
|
118
|
+
- **posix**:
|
|
119
|
+
- **promise**:
|
|
120
|
+
- **publish**:
|
|
121
|
+
- **real**:
|
|
122
|
+
- **recursive**:
|
|
123
|
+
- **relative**:
|
|
124
|
+
- **remove**:
|
|
125
|
+
- **resolution**:
|
|
126
|
+
- **sample**:
|
|
127
|
+
- **second**:
|
|
128
|
+
- **slice**:
|
|
129
|
+
- **sort**:
|
|
130
|
+
- **spy**:
|
|
131
|
+
- **strict**:
|
|
132
|
+
- **synthetic**:
|
|
133
|
+
- **temporary**:
|
|
134
|
+
- **timer**:
|
|
135
|
+
- **trim**:
|
|
136
|
+
- **vi**:
|
|
137
|
+
|
|
138
|
+
<!-- coinagerie:end -->
|
|
139
|
+
|
|
140
|
+
<!-- callidescope:start -->
|
|
141
|
+
|
|
142
|
+
## 🔭 Callidescope
|
|
143
|
+
|
|
144
|
+
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.
|
|
145
|
+
|
|
146
|
+
| Measure | Value |
|
|
147
|
+
| --- | --- |
|
|
148
|
+
| Callables | 17 |
|
|
149
|
+
| Files | 18 |
|
|
150
|
+
| Calls traced | 15 |
|
|
151
|
+
| Call stacks | 1 |
|
|
152
|
+
| Deepest stack | 6 |
|
|
153
|
+
| Stacks through recursion | 0 |
|
|
154
|
+
| Unfollowable calls | 0 |
|
|
155
|
+
|
|
156
|
+
### Limits
|
|
157
|
+
|
|
158
|
+
What this project is judged against, as declared in its own `callidescope.config.ts`.
|
|
159
|
+
|
|
160
|
+
| Limit | Value |
|
|
161
|
+
| --- | --- |
|
|
162
|
+
| `maximumDepth` | 6 |
|
|
163
|
+
| `maximumBreadth` | 4 |
|
|
164
|
+
|
|
165
|
+
### Call stacks (depth)
|
|
166
|
+
|
|
167
|
+
**1. `anonymous`** — depth 6 · orphan-root
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
🚀 anonymous(…): Promise<CreateNodesResultArray> [projects/ic-suite/coinagerie/coinagerie-nx/src/index.ts:40]
|
|
171
|
+
└─> PluginService.inferTargets(args: InferTargetsArguments): Map<string, InferredTargets> [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin.service.ts:115]
|
|
172
|
+
↳ Infers a check target onto every project that holds a configuration.
|
|
173
|
+
└─> OptionsService.resolvePluginOptions(options: unknown): CoinageriePluginOptions [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:82]
|
|
174
|
+
↳ Resolves the effective plugin options from an untrusted value.
|
|
175
|
+
└─> OptionsService.readInputs(options: Record<string, unknown>): PluginInput[] [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:49]
|
|
176
|
+
↳ Reads the declared inputs from an untrusted record.
|
|
177
|
+
└─> OptionsService.flatMap(…)(this: undefined, entry: unknown): PluginInput[] [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:56]
|
|
178
|
+
└─> OptionsService.isInputObject(value: unknown): value is Exclude<PluginInput, string> [projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:31]
|
|
179
|
+
↳ Narrows an untrusted value to an Nx input object, such as `{ env }`.
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Breadth
|
|
183
|
+
|
|
184
|
+
| Callable | Breadth | Calls directly | Location |
|
|
185
|
+
| --- | --- | --- | --- |
|
|
186
|
+
| `PluginService.inferTargets` | 3 | `OptionsService.resolvePluginOptions`, `PluginService.isProject`, `PluginService.buildCheckTarget` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin.service.ts:115` |
|
|
187
|
+
| `anonymous` | 3 | `resolvePluginService`, `PluginService.inferTargets`, `flatMap(…)` | `projects/ic-suite/coinagerie/coinagerie-nx/src/index.ts:40` |
|
|
188
|
+
| `OptionsService.readInputs` | 2 | `OptionsService.isUnknownArray`, `OptionsService.flatMap(…)` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:49` |
|
|
189
|
+
|
|
190
|
+
<details>
|
|
191
|
+
<summary>5 more callables</summary>
|
|
192
|
+
|
|
193
|
+
| Callable | Breadth | Calls directly | Location |
|
|
194
|
+
| --- | --- | --- | --- |
|
|
195
|
+
| `OptionsService.resolvePluginOptions` | 2 | `OptionsService.readString`, `OptionsService.readInputs` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:82` |
|
|
196
|
+
| `OptionsService.flatMap(…)` | 1 | `OptionsService.isInputObject` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/options/options.service.ts:56` |
|
|
197
|
+
| `PluginService.buildCheckTarget` | 1 | `PluginService.map(…)` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin.service.ts:49` |
|
|
198
|
+
| `PluginService.isProject` | 1 | `PluginService.isNamedPackage` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin.service.ts:93` |
|
|
199
|
+
| `resolvePluginService` | 1 | `resolvePluginContext` | `projects/ic-suite/coinagerie/coinagerie-nx/src/modules/plugin/plugin-context.utilities.ts:15` |
|
|
200
|
+
|
|
201
|
+
</details>
|
|
202
|
+
<!-- callidescope:end -->
|
|
203
|
+
|
|
204
|
+
## 🕸️ Codependix
|
|
205
|
+
|
|
206
|
+
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`.
|
|
207
|
+
|
|
208
|
+
### Nx Neighborhood
|
|
209
|
+
|
|
210
|
+
<!-- codependix:start name="codependix-nx-projects" -->
|
|
211
|
+
```mermaid
|
|
212
|
+
graph LR
|
|
213
|
+
coinagerie_configuration["coinagerie-configuration"]
|
|
214
|
+
coinagerie_nx["coinagerie-nx"]
|
|
215
|
+
coinagerie_nx --> coinagerie_configuration
|
|
216
|
+
classDef subject fill:#7c3aed,color:#fff,stroke:#4c1d95,stroke-width:2px
|
|
217
|
+
class coinagerie_nx subject
|
|
218
|
+
```
|
|
219
|
+
<!-- codependix:end name="codependix-nx-projects" -->
|
|
220
|
+
|
|
221
|
+
### NestJS Module Graph
|
|
222
|
+
|
|
223
|
+
<!-- codependix:start name="codependix-nestjs-modules" -->
|
|
224
|
+
```mermaid
|
|
225
|
+
flowchart LR
|
|
226
|
+
MainModule
|
|
227
|
+
OptionsModule
|
|
228
|
+
PluginModule
|
|
229
|
+
MainModule --> PluginModule
|
|
230
|
+
PluginModule --> OptionsModule
|
|
231
|
+
```
|
|
232
|
+
<!-- codependix:end name="codependix-nestjs-modules" -->
|
|
233
|
+
|
|
234
|
+
### File Imports
|
|
235
|
+
|
|
236
|
+
<!-- codependix:start name="codependix-file-imports" -->
|
|
237
|
+
```mermaid
|
|
238
|
+
graph LR
|
|
239
|
+
file_callidescope_config_ts["callidescope.config.ts"]
|
|
240
|
+
file_codependix_config_ts["codependix.config.ts"]
|
|
241
|
+
file_codometer_config_ts["codometer.config.ts"]
|
|
242
|
+
file_coinagerie_config_ts["coinagerie.config.ts"]
|
|
243
|
+
file_eslint_config_ts["eslint.config.ts"]
|
|
244
|
+
file_src_coinagerie_nx_module_ts["src/coinagerie-nx.module.ts"]
|
|
245
|
+
file_src_coinagerie_nx_module_unit_test_ts["src/coinagerie-nx.module.unit.test.ts"]
|
|
246
|
+
file_src_index_ts["src/index.ts"]
|
|
247
|
+
file_src_index_unit_test_ts["src/index.unit.test.ts"]
|
|
248
|
+
file_src_modules_options_options_constants_ts["src/modules/options/options.constants.ts"]
|
|
249
|
+
file_src_modules_options_options_module_ts["src/modules/options/options.module.ts"]
|
|
250
|
+
file_src_modules_options_options_service_ts["src/modules/options/options.service.ts"]
|
|
251
|
+
file_src_modules_options_options_service_unit_test_ts["src/modules/options/options.service.unit.test.ts"]
|
|
252
|
+
file_src_modules_options_options_types_ts["src/modules/options/options.types.ts"]
|
|
253
|
+
file_src_modules_plugin_plugin_context_utilities_ts["src/modules/plugin/plugin-context.utilities.ts"]
|
|
254
|
+
file_src_modules_plugin_plugin_context_utilities_unit_test_ts["src/modules/plugin/plugin-context.utilities.unit.test.ts"]
|
|
255
|
+
file_src_modules_plugin_plugin_constants_ts["src/modules/plugin/plugin.constants.ts"]
|
|
256
|
+
file_src_modules_plugin_plugin_module_ts["src/modules/plugin/plugin.module.ts"]
|
|
257
|
+
file_src_modules_plugin_plugin_service_ts["src/modules/plugin/plugin.service.ts"]
|
|
258
|
+
file_src_modules_plugin_plugin_service_unit_test_ts["src/modules/plugin/plugin.service.unit.test.ts"]
|
|
259
|
+
file_src_modules_plugin_plugin_types_ts["src/modules/plugin/plugin.types.ts"]
|
|
260
|
+
file_testing_fake_workspace_ts["testing/fake-workspace.ts"]
|
|
261
|
+
file_testing_mocks_ts["testing/mocks.ts"]
|
|
262
|
+
file_testing_setup_ts["testing/setup.ts"]
|
|
263
|
+
file_vite_config_ts["vite.config.ts"]
|
|
264
|
+
file_vitest_config_ts["vitest.config.ts"]
|
|
265
|
+
file_src_coinagerie_nx_module_ts --> file_src_modules_plugin_plugin_module_ts
|
|
266
|
+
file_src_coinagerie_nx_module_unit_test_ts --> file_src_coinagerie_nx_module_ts
|
|
267
|
+
file_src_index_ts --> file_src_modules_options_options_constants_ts
|
|
268
|
+
file_src_index_ts --> file_src_modules_plugin_plugin_context_utilities_ts
|
|
269
|
+
file_src_index_ts --> file_src_modules_plugin_plugin_constants_ts
|
|
270
|
+
file_src_index_unit_test_ts --> file_src_index_ts
|
|
271
|
+
file_src_index_unit_test_ts --> file_testing_fake_workspace_ts
|
|
272
|
+
file_src_modules_options_options_module_ts --> file_src_modules_options_options_service_ts
|
|
273
|
+
file_src_modules_options_options_service_ts --> file_src_modules_options_options_constants_ts
|
|
274
|
+
file_src_modules_options_options_service_ts --> file_src_modules_options_options_types_ts
|
|
275
|
+
file_src_modules_options_options_service_unit_test_ts --> file_src_modules_options_options_service_ts
|
|
276
|
+
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_coinagerie_nx_module_ts
|
|
277
|
+
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_constants_ts
|
|
278
|
+
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_service_ts
|
|
279
|
+
file_src_modules_plugin_plugin_context_utilities_ts --> file_src_modules_plugin_plugin_types_ts
|
|
280
|
+
file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_context_utilities_ts
|
|
281
|
+
file_src_modules_plugin_plugin_context_utilities_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
|
|
282
|
+
file_src_modules_plugin_plugin_module_ts --> file_src_modules_options_options_module_ts
|
|
283
|
+
file_src_modules_plugin_plugin_module_ts --> file_src_modules_plugin_plugin_service_ts
|
|
284
|
+
file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_service_ts
|
|
285
|
+
file_src_modules_plugin_plugin_service_ts --> file_src_modules_options_options_types_ts
|
|
286
|
+
file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_constants_ts
|
|
287
|
+
file_src_modules_plugin_plugin_service_ts --> file_src_modules_plugin_plugin_types_ts
|
|
288
|
+
file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_options_options_service_ts
|
|
289
|
+
file_src_modules_plugin_plugin_service_unit_test_ts --> file_src_modules_plugin_plugin_service_ts
|
|
290
|
+
file_src_modules_plugin_plugin_service_unit_test_ts --> file_testing_fake_workspace_ts
|
|
291
|
+
file_src_modules_plugin_plugin_types_ts --> file_src_modules_options_options_types_ts
|
|
292
|
+
file_src_modules_plugin_plugin_types_ts --> file_src_modules_plugin_plugin_constants_ts
|
|
293
|
+
```
|
|
294
|
+
<!-- codependix:end name="codependix-file-imports" -->
|
|
295
|
+
|
|
296
|
+
<!-- codometer:start -->
|
|
297
|
+
|
|
298
|
+
## ⏲️ Codometer
|
|
299
|
+
|
|
300
|
+
### Project
|
|
301
|
+
|
|
302
|
+

|
|
303
|
+

|
|
304
|
+

|
|
305
|
+

|
|
306
|
+
|
|
307
|
+
### TypeScript
|
|
308
|
+
|
|
309
|
+

|
|
310
|
+

|
|
311
|
+

|
|
312
|
+

|
|
313
|
+

|
|
314
|
+

|
|
315
|
+

|
|
316
|
+
|
|
317
|
+
### JavaScript
|
|
318
|
+
|
|
319
|
+

|
|
320
|
+

|
|
321
|
+

|
|
322
|
+

|
|
323
|
+

|
|
324
|
+

|
|
325
|
+

|
|
326
|
+

|
|
327
|
+

|
|
328
|
+

|
|
329
|
+

|
|
330
|
+

|
|
331
|
+

|
|
332
|
+

|
|
333
|
+
|
|
334
|
+
### Python
|
|
335
|
+
|
|
336
|
+

|
|
337
|
+

|
|
338
|
+

|
|
339
|
+

|
|
340
|
+

|
|
341
|
+

|
|
342
|
+

|
|
343
|
+

|
|
344
|
+

|
|
345
|
+

|
|
346
|
+

|
|
347
|
+

|
|
348
|
+
|
|
349
|
+
### JSON
|
|
350
|
+
|
|
351
|
+

|
|
352
|
+

|
|
353
|
+

|
|
354
|
+

|
|
355
|
+

|
|
356
|
+

|
|
357
|
+

|
|
358
|
+

|
|
359
|
+

|
|
360
|
+

|
|
361
|
+

|
|
362
|
+

|
|
363
|
+
|
|
364
|
+
### YAML
|
|
365
|
+
|
|
366
|
+

|
|
367
|
+

|
|
368
|
+

|
|
369
|
+

|
|
370
|
+

|
|
371
|
+

|
|
372
|
+

|
|
373
|
+

|
|
374
|
+

|
|
375
|
+

|
|
376
|
+

|
|
377
|
+
|
|
378
|
+
### TOML
|
|
379
|
+
|
|
380
|
+

|
|
381
|
+

|
|
382
|
+

|
|
383
|
+

|
|
384
|
+

|
|
385
|
+

|
|
386
|
+

|
|
387
|
+
|
|
388
|
+
### Shell
|
|
389
|
+
|
|
390
|
+

|
|
391
|
+

|
|
392
|
+

|
|
393
|
+

|
|
394
|
+

|
|
395
|
+

|
|
396
|
+

|
|
397
|
+

|
|
398
|
+

|
|
399
|
+

|
|
400
|
+

|
|
401
|
+
|
|
402
|
+
### SQL
|
|
403
|
+
|
|
404
|
+

|
|
405
|
+

|
|
406
|
+

|
|
407
|
+

|
|
408
|
+

|
|
409
|
+

|
|
410
|
+

|
|
411
|
+

|
|
412
|
+

|
|
413
|
+

|
|
414
|
+

|
|
415
|
+
|
|
416
|
+
### HCL
|
|
417
|
+
|
|
418
|
+

|
|
419
|
+

|
|
420
|
+

|
|
421
|
+

|
|
422
|
+

|
|
423
|
+

|
|
424
|
+

|
|
425
|
+

|
|
426
|
+

|
|
427
|
+
|
|
428
|
+
### CSS
|
|
429
|
+
|
|
430
|
+

|
|
431
|
+

|
|
432
|
+

|
|
433
|
+

|
|
434
|
+

|
|
435
|
+

|
|
436
|
+

|
|
437
|
+

|
|
438
|
+

|
|
439
|
+
|
|
440
|
+
### Conventions
|
|
441
|
+
|
|
442
|
+

|
|
443
|
+

|
|
444
|
+

|
|
445
|
+

|
|
446
|
+

|
|
447
|
+

|
|
448
|
+

|
|
449
|
+

|
|
450
|
+

|
|
451
|
+

|
|
452
|
+

|
|
453
|
+

|
|
454
|
+

|
|
455
|
+

|
|
456
|
+

|
|
457
|
+

|
|
458
|
+

|
|
459
|
+

|
|
460
|
+
|
|
461
|
+
### Jupyter
|
|
462
|
+
|
|
463
|
+

|
|
464
|
+

|
|
465
|
+

|
|
466
|
+

|
|
467
|
+

|
|
468
|
+

|
|
469
|
+

|
|
470
|
+

|
|
471
|
+

|
|
472
|
+

|
|
473
|
+

|
|
474
|
+

|
|
475
|
+

|
|
476
|
+

|
|
477
|
+

|
|
478
|
+

|
|
479
|
+

|
|
480
|
+

|
|
481
|
+

|
|
482
|
+

|
|
483
|
+
|
|
484
|
+
### Markdown
|
|
485
|
+
|
|
486
|
+

|
|
487
|
+

|
|
488
|
+

|
|
489
|
+

|
|
490
|
+

|
|
491
|
+

|
|
492
|
+

|
|
493
|
+

|
|
494
|
+

|
|
495
|
+

|
|
496
|
+

|
|
497
|
+

|
|
498
|
+

|
|
499
|
+

|
|
500
|
+

|
|
501
|
+

|
|
502
|
+

|
|
503
|
+

|
|
504
|
+

|
|
505
|
+

|
|
506
|
+
<!-- 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.1",
|
|
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
|
-
"
|
|
4
|
-
|
|
5
|
-
|
|
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.1"
|
|
6
63
|
}
|