@rsdk/depdoc.cli 6.0.0-next.44 → 6.0.0-next.46
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/DEPDOC_MODEL.md +42 -6
- package/__tests__/engine.test.ts +25 -0
- package/__tests__/peer-requirements.test.ts +180 -0
- package/dist/bin/depdoc.js +18 -8
- package/dist/bin/depdoc.js.map +1 -1
- package/dist/lib/peer-requirements.d.ts +42 -0
- package/dist/lib/peer-requirements.js +93 -0
- package/dist/lib/peer-requirements.js.map +1 -0
- package/dist/model/diagnostics.js +4 -1
- package/dist/model/diagnostics.js.map +1 -1
- package/package.json +2 -2
- package/src/bin/depdoc.ts +36 -8
- package/src/lib/peer-requirements.ts +127 -0
- package/src/model/diagnostics.ts +6 -1
package/DEPDOC_MODEL.md
CHANGED
|
@@ -6,6 +6,36 @@ This document defines the dependency ownership model for the monorepo. The goal
|
|
|
6
6
|
is to make dependency placement deterministic, checkable, and mostly
|
|
7
7
|
autofixable.
|
|
8
8
|
|
|
9
|
+
## Design Principle: Deterministic, Binary Output
|
|
10
|
+
|
|
11
|
+
`depdoc` exists so a developer does not have to judge severity by hand. In the
|
|
12
|
+
common case, a report must be actionable without reading source or reasoning
|
|
13
|
+
about whether a finding "really" matters.
|
|
14
|
+
|
|
15
|
+
- Every diagnostic is either a **violation** (blocks `check`/`fix`/`doctor`,
|
|
16
|
+
non-zero exit) or a **warning** (printed, does not block). There is no third,
|
|
17
|
+
ambiguous category that leaves the decision to the reader.
|
|
18
|
+
- A check may only become a violation if the engine can derive the expected
|
|
19
|
+
state from facts it already has and the fix is mechanical (apply a rule,
|
|
20
|
+
move a dependency, add a peer, run `fix`). If depdoc cannot compute what
|
|
21
|
+
correct looks like, it must not fail the build over it.
|
|
22
|
+
- Checks must respect ownership boundaries. A failure that cannot be resolved
|
|
23
|
+
by changing anything in this repository — for example, a peer mismatch
|
|
24
|
+
between two external packages with no repo-owned package on either side of
|
|
25
|
+
the edge — is not a dependency-model violation here, even if some
|
|
26
|
+
underlying tool (e.g. `yarn explain peer-requirements`) reports it as an
|
|
27
|
+
error. It gets surfaced (so it is not silently lost) but must not gate
|
|
28
|
+
`doctor`'s exit code.
|
|
29
|
+
- When an external check surfaces something ambiguous, classify it from facts
|
|
30
|
+
depdoc already has (workspace ownership, declared roles, declared entry
|
|
31
|
+
points) instead of asking the developer to decide manually, and instead of
|
|
32
|
+
hard-coding an allowlist of "known-safe" failures that needs upkeep.
|
|
33
|
+
- Prefer deriving a workspace's expectations from what its own manifest
|
|
34
|
+
already declares (`role`, `main`/`types`/`exports`) over introducing new
|
|
35
|
+
manual exception config. `depdoc.yml` overrides exist for cases the model
|
|
36
|
+
truly cannot derive (`V3`), not as a default escape hatch for cases a
|
|
37
|
+
smarter check could resolve on its own.
|
|
38
|
+
|
|
9
39
|
## Terms
|
|
10
40
|
|
|
11
41
|
| Term | Meaning |
|
|
@@ -147,9 +177,11 @@ guess something that an earlier phase can derive.
|
|
|
147
177
|
3. Classify each import as local or external.
|
|
148
178
|
4. Classify each import as runtime, type-only, test-only, or tooling-only.
|
|
149
179
|
5. Scan emitted `dist/**/*.d.ts` imports when `dist/` exists.
|
|
150
|
-
6. In `--with-dts` mode, require `dist/` for workspaces with `src/`;
|
|
151
|
-
`--with-dts`, missing `dist/` is allowed so local source-only
|
|
152
|
-
usable before build.
|
|
180
|
+
6. In `--with-dts` mode, require `dist/` for `library` workspaces with `src/`;
|
|
181
|
+
without `--with-dts`, missing `dist/` is allowed so local source-only
|
|
182
|
+
checks remain usable before build. `service` and `cli` workspaces are never
|
|
183
|
+
required to have `dist/`: they have no public type surface to protect (see
|
|
184
|
+
S2/S3), so there is nothing for the check to guard.
|
|
153
185
|
7. Mark all dependencies found in emitted `.d.ts` as public type surface.
|
|
154
186
|
8. Skip generated entry-point roots such as `dist/`, `build/`, `coverage/`, and
|
|
155
187
|
`node_modules/`.
|
|
@@ -250,7 +282,11 @@ Autofix should write manifests from the derived expected graph:
|
|
|
250
282
|
5. Run the manifest model checker again, because `.d.ts` leaks can change the
|
|
251
283
|
expected graph.
|
|
252
284
|
6. Run package install again if manifests changed.
|
|
253
|
-
7. Assert that package manager peer requirements have no failures
|
|
285
|
+
7. Assert that package manager peer requirements have no failures on any edge
|
|
286
|
+
touching a workspace of this repo. A failure between two external packages,
|
|
287
|
+
with no repo-owned package on either side, cannot be fixed by editing this
|
|
288
|
+
repository's manifests; it is reported as a warning with an example
|
|
289
|
+
`packageExtensions` fix instead of failing `doctor`.
|
|
254
290
|
8. Run the full dependency check task.
|
|
255
291
|
|
|
256
292
|
## Target Tooling Shape
|
|
@@ -442,7 +478,7 @@ focused, because they invoke real tools.
|
|
|
442
478
|
| Test | Proves |
|
|
443
479
|
|---|---|
|
|
444
480
|
| `yarn-install-clean` | After autofix, `yarn install` has no dependency placement warnings. |
|
|
445
|
-
| `yarn-peer-requirements-clean` | `yarn explain peer-requirements` has no failed peer requirements. |
|
|
481
|
+
| `yarn-peer-requirements-clean` | `yarn explain peer-requirements` has no failed peer requirements on any edge touching a workspace; vendor-only failures are warnings, not failures. |
|
|
446
482
|
| `tsc-library-build` | A library with peer + dev mirror compiles. |
|
|
447
483
|
| `tsc-dts-leak` | A public `.d.ts` leak is detected when `dist/` exists and changes expected manifests. |
|
|
448
484
|
| `eslint-extraneous-compatible` | ESLint import/dependency rules do not contradict the model. |
|
|
@@ -464,7 +500,7 @@ Repo smoke tests verify that the model works on the real repository:
|
|
|
464
500
|
3. Build packages.
|
|
465
501
|
4. Run `depdoc check --with-dts`.
|
|
466
502
|
5. Run `yarn install` again if manifests changed.
|
|
467
|
-
6. Assert no failed peer requirements.
|
|
503
|
+
6. Assert no failed peer requirements on any edge touching a workspace.
|
|
468
504
|
7. Run repo lint/typecheck/dependency task.
|
|
469
505
|
|
|
470
506
|
This is the final confidence layer. Most edge cases should still be covered by
|
package/__tests__/engine.test.ts
CHANGED
|
@@ -1143,6 +1143,31 @@ describe('deriveDependencyModel engine', () => {
|
|
|
1143
1143
|
expect(result.violations.some((v) => v.code === 'dist-missing')).toBe(true);
|
|
1144
1144
|
});
|
|
1145
1145
|
|
|
1146
|
+
it.each(['service', 'cli'] as const)(
|
|
1147
|
+
'does not report missing dist for %s workspaces even when withDts is enabled',
|
|
1148
|
+
(role) => {
|
|
1149
|
+
const root = makeRoot();
|
|
1150
|
+
const ws = makeWorkspace(
|
|
1151
|
+
'@test/app',
|
|
1152
|
+
'packages/app',
|
|
1153
|
+
role,
|
|
1154
|
+
{ name: '@test/app', role },
|
|
1155
|
+
new Map(),
|
|
1156
|
+
new Set(),
|
|
1157
|
+
true,
|
|
1158
|
+
false,
|
|
1159
|
+
);
|
|
1160
|
+
const facts = emptyFacts([root, ws]);
|
|
1161
|
+
|
|
1162
|
+
facts.withDts = true;
|
|
1163
|
+
const result = deriveDependencyModel(facts);
|
|
1164
|
+
|
|
1165
|
+
expect(
|
|
1166
|
+
result.violations.some((v) => v.code === 'dist-missing'),
|
|
1167
|
+
).toBe(false);
|
|
1168
|
+
},
|
|
1169
|
+
);
|
|
1170
|
+
|
|
1146
1171
|
it('promotes matching DefinitelyTyped provider for public dts imports', () => {
|
|
1147
1172
|
const root = makeRoot({
|
|
1148
1173
|
name: '@test/root',
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import {
|
|
2
|
+
classifyPeerFailures,
|
|
3
|
+
extractPackageIdent,
|
|
4
|
+
parsePeerFailureLine,
|
|
5
|
+
suggestPackageExtensionsFix,
|
|
6
|
+
} from '../src/lib/peer-requirements';
|
|
7
|
+
|
|
8
|
+
// Real `yarn explain peer-requirements` output (names/hashes as reported),
|
|
9
|
+
// captured from a monorepo using Docusaurus + Algolia search. None of these
|
|
10
|
+
// packages are workspaces of that repo.
|
|
11
|
+
const VENDOR_ONLY_LINES = [
|
|
12
|
+
"p88ede4 → ✘ @algolia/autocomplete-core@npm:1.17.7 doesn't provide @algolia/client-search to @algolia/autocomplete-shared@npm:1.17.7 [b5d26]",
|
|
13
|
+
"p475665 → ✘ @docsearch/react@npm:3.8.2 [cc094] doesn't provide @algolia/client-search to @algolia/autocomplete-preset-algolia@npm:1.17.7 [0023e] and 1 other dependency",
|
|
14
|
+
"pb248be → ✘ @docusaurus/bundler@npm:3.10.1 [58506] doesn't provide react to @docusaurus/types@npm:3.10.1 [933ef] and 1 other dependency",
|
|
15
|
+
"pf041ee → ✘ @docusaurus/plugin-css-cascade-layers@npm:3.10.1 doesn't provide @mdx-js/react to @docusaurus/core@npm:3.10.1 [21a63]",
|
|
16
|
+
"p2163f8 → ✘ @docusaurus/plugin-css-cascade-layers@npm:3.10.1 doesn't provide react to @docusaurus/core@npm:3.10.1 [21a63] and 8 other dependencies",
|
|
17
|
+
].join('\n');
|
|
18
|
+
|
|
19
|
+
describe('extractPackageIdent', () => {
|
|
20
|
+
it('strips version and locator hash', () => {
|
|
21
|
+
expect(
|
|
22
|
+
extractPackageIdent('@algolia/autocomplete-shared@npm:1.17.7 [b5d26]'),
|
|
23
|
+
).toBe('@algolia/autocomplete-shared');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('strips version with no locator hash', () => {
|
|
27
|
+
expect(
|
|
28
|
+
extractPackageIdent('@docusaurus/plugin-css-cascade-layers@npm:3.10.1'),
|
|
29
|
+
).toBe('@docusaurus/plugin-css-cascade-layers');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('strips a trailing "and N other dependency" suffix (singular)', () => {
|
|
33
|
+
expect(
|
|
34
|
+
extractPackageIdent(
|
|
35
|
+
'@docusaurus/types@npm:3.10.1 [933ef] and 1 other dependency',
|
|
36
|
+
),
|
|
37
|
+
).toBe('@docusaurus/types');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('strips a trailing "and N other dependencies" suffix (plural)', () => {
|
|
41
|
+
expect(
|
|
42
|
+
extractPackageIdent(
|
|
43
|
+
'@docusaurus/core@npm:3.10.1 [21a63] and 8 other dependencies',
|
|
44
|
+
),
|
|
45
|
+
).toBe('@docusaurus/core');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('parsePeerFailureLine', () => {
|
|
50
|
+
it('extracts provider, peer, and consumer from a failed line', () => {
|
|
51
|
+
const result = parsePeerFailureLine(
|
|
52
|
+
"p88ede4 → ✘ @algolia/autocomplete-core@npm:1.17.7 doesn't provide @algolia/client-search to @algolia/autocomplete-shared@npm:1.17.7 [b5d26]",
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
expect(result).toEqual({
|
|
56
|
+
raw: expect.stringContaining('autocomplete-core'),
|
|
57
|
+
provider: '@algolia/autocomplete-core',
|
|
58
|
+
peer: '@algolia/client-search',
|
|
59
|
+
consumer: '@algolia/autocomplete-shared',
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('handles a locator hash on the provider side', () => {
|
|
64
|
+
const result = parsePeerFailureLine(
|
|
65
|
+
"pb248be → ✘ @docusaurus/bundler@npm:3.10.1 [58506] doesn't provide react to @docusaurus/types@npm:3.10.1 [933ef] and 1 other dependency",
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
expect(result.provider).toBe('@docusaurus/bundler');
|
|
69
|
+
expect(result.peer).toBe('react');
|
|
70
|
+
expect(result.consumer).toBe('@docusaurus/types');
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('parses the "provides a mismatched version" shape, not just "doesn\'t provide"', () => {
|
|
74
|
+
const result = parsePeerFailureLine(
|
|
75
|
+
"pd75455 → ✘ @mcteam/eslint-config.frontend@workspace:packages/mcteam.eslint-config.frontend provides eslint@npm:10.5.0 [5c646] to @eslint/js@npm:10.0.1 [5c646] and 8 other dependencies",
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
expect(result.provider).toBe('@mcteam/eslint-config.frontend');
|
|
79
|
+
expect(result.peer).toBe('eslint');
|
|
80
|
+
expect(result.consumer).toBe('@eslint/js');
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('returns nulls for an unparseable line rather than guessing', () => {
|
|
84
|
+
const result = parsePeerFailureLine('✘ something unexpected happened');
|
|
85
|
+
|
|
86
|
+
expect(result.provider).toBeNull();
|
|
87
|
+
expect(result.consumer).toBeNull();
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
describe('classifyPeerFailures', () => {
|
|
92
|
+
it('treats failures as vendor-only when neither side is a workspace', () => {
|
|
93
|
+
const { vendorFailures, ownershipFailures } = classifyPeerFailures(
|
|
94
|
+
VENDOR_ONLY_LINES,
|
|
95
|
+
new Set(['@mcteam/auth.react', 'niisokb.artifactory.docusaurus']),
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
expect(vendorFailures).toHaveLength(5);
|
|
99
|
+
expect(ownershipFailures).toHaveLength(0);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('treats a failure as blocking when the consumer is a workspace', () => {
|
|
103
|
+
const line =
|
|
104
|
+
"p1 → ✘ some-vendor-pkg@npm:1.0.0 doesn't provide react to @mcteam/auth.react@workspace:packages/mcteam.auth.react";
|
|
105
|
+
const { vendorFailures, ownershipFailures } = classifyPeerFailures(
|
|
106
|
+
line,
|
|
107
|
+
new Set(['@mcteam/auth.react']),
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
expect(vendorFailures).toHaveLength(0);
|
|
111
|
+
expect(ownershipFailures).toHaveLength(1);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('treats a failure as blocking when the provider is a workspace', () => {
|
|
115
|
+
const line =
|
|
116
|
+
"p1 → ✘ @mcteam/auth.react@workspace:packages/mcteam.auth.react doesn't provide react to some-vendor-pkg@npm:1.0.0";
|
|
117
|
+
const { vendorFailures, ownershipFailures } = classifyPeerFailures(
|
|
118
|
+
line,
|
|
119
|
+
new Set(['@mcteam/auth.react']),
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
expect(vendorFailures).toHaveLength(0);
|
|
123
|
+
expect(ownershipFailures).toHaveLength(1);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('treats a workspace-provided version-mismatch as blocking, not vendor-only noise', () => {
|
|
127
|
+
const line =
|
|
128
|
+
"pd75455 → ✘ @mcteam/eslint-config.frontend@workspace:packages/mcteam.eslint-config.frontend provides eslint@npm:10.5.0 [5c646] to @eslint/js@npm:10.0.1 [5c646] and 8 other dependencies";
|
|
129
|
+
const { vendorFailures, ownershipFailures } = classifyPeerFailures(
|
|
130
|
+
line,
|
|
131
|
+
new Set(['@mcteam/eslint-config.frontend']),
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
expect(vendorFailures).toHaveLength(0);
|
|
135
|
+
expect(ownershipFailures).toHaveLength(1);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('treats an unparseable failure line as blocking', () => {
|
|
139
|
+
const { vendorFailures, ownershipFailures } = classifyPeerFailures(
|
|
140
|
+
'✘ garbled output',
|
|
141
|
+
new Set(['@mcteam/auth.react']),
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
expect(vendorFailures).toHaveLength(0);
|
|
145
|
+
expect(ownershipFailures).toHaveLength(1);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('returns no failures when there are no ✘ lines', () => {
|
|
149
|
+
const { vendorFailures, ownershipFailures } = classifyPeerFailures(
|
|
150
|
+
'p1 → ✓ everything is fine',
|
|
151
|
+
new Set(),
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
expect(vendorFailures).toHaveLength(0);
|
|
155
|
+
expect(ownershipFailures).toHaveLength(0);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
describe('suggestPackageExtensionsFix', () => {
|
|
160
|
+
it('groups missing peers by provider into a packageExtensions example', () => {
|
|
161
|
+
const { vendorFailures } = classifyPeerFailures(VENDOR_ONLY_LINES, new Set());
|
|
162
|
+
const suggestion = suggestPackageExtensionsFix(vendorFailures);
|
|
163
|
+
|
|
164
|
+
expect(suggestion).toContain('packageExtensions:');
|
|
165
|
+
expect(suggestion).toContain('"@algolia/autocomplete-core@*":');
|
|
166
|
+
expect(suggestion).toContain('"@algolia/client-search": "*"');
|
|
167
|
+
expect(suggestion).toContain('"@docusaurus/plugin-css-cascade-layers@*":');
|
|
168
|
+
expect(suggestion).toContain('"@mdx-js/react": "*"');
|
|
169
|
+
expect(suggestion).toContain('"react": "*"');
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it('deduplicates repeated peers for the same provider', () => {
|
|
173
|
+
const suggestion = suggestPackageExtensionsFix([
|
|
174
|
+
{ raw: '', provider: 'pkg-a', peer: 'peer-x', consumer: 'c' },
|
|
175
|
+
{ raw: '', provider: 'pkg-a', peer: 'peer-x', consumer: 'd' },
|
|
176
|
+
]);
|
|
177
|
+
|
|
178
|
+
expect(suggestion.match(/peer-x/g)).toHaveLength(1);
|
|
179
|
+
});
|
|
180
|
+
});
|
package/dist/bin/depdoc.js
CHANGED
|
@@ -16,6 +16,7 @@ const node_fs_1 = require("node:fs");
|
|
|
16
16
|
const node_path_1 = __importDefault(require("node:path"));
|
|
17
17
|
const ansi_1 = require("../ansi");
|
|
18
18
|
const dependency_model_1 = require("../dependency-model");
|
|
19
|
+
const peer_requirements_1 = require("../lib/peer-requirements");
|
|
19
20
|
function printUsage() {
|
|
20
21
|
console.error(`${ansi_1.ansi.bold('Usage:')}
|
|
21
22
|
${ansi_1.ansi.cyan('depdoc')} check [--with-dts]
|
|
@@ -28,7 +29,7 @@ function spawnStep(label, cmd, cwd) {
|
|
|
28
29
|
console.error(`${ansi_1.ansi.dim('$')} ${ansi_1.ansi.cyan(cmd)}`);
|
|
29
30
|
(0, node_child_process_1.execSync)(cmd, { cwd, stdio: 'inherit' });
|
|
30
31
|
}
|
|
31
|
-
function checkPeerRequirements(cwd) {
|
|
32
|
+
function checkPeerRequirements(cwd, workspaceNames) {
|
|
32
33
|
const cmd = 'yarn explain peer-requirements';
|
|
33
34
|
console.error(`\n${ansi_1.ansi.cyan('──')} ${ansi_1.ansi.bold('yarn peer requirements')}`);
|
|
34
35
|
console.error(`${ansi_1.ansi.dim('$')} ${ansi_1.ansi.cyan(cmd)}`);
|
|
@@ -38,6 +39,8 @@ function checkPeerRequirements(cwd) {
|
|
|
38
39
|
cwd,
|
|
39
40
|
encoding: 'utf8',
|
|
40
41
|
maxBuffer: 32 * 1024 * 1024,
|
|
42
|
+
// Force plain text: parsing must not depend on the caller's terminal.
|
|
43
|
+
env: { ...process.env, FORCE_COLOR: '0', NO_COLOR: '1' },
|
|
41
44
|
});
|
|
42
45
|
}
|
|
43
46
|
catch (error) {
|
|
@@ -48,15 +51,21 @@ function checkPeerRequirements(cwd) {
|
|
|
48
51
|
process.stderr.write(childError.stderr);
|
|
49
52
|
return false;
|
|
50
53
|
}
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
.filter((line) => line.includes('✘'));
|
|
54
|
-
if (failedRequirements.length === 0) {
|
|
54
|
+
const { vendorFailures, ownershipFailures } = (0, peer_requirements_1.classifyPeerFailures)(output, workspaceNames);
|
|
55
|
+
if (vendorFailures.length === 0 && ownershipFailures.length === 0) {
|
|
55
56
|
console.error(ansi_1.ansi.green('✓ peer requirements are satisfied'));
|
|
56
57
|
return true;
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
if (vendorFailures.length > 0) {
|
|
60
|
+
console.error(ansi_1.ansi.yellow(`${vendorFailures.length} peer requirement warning(s) between third-party packages only — not fixable by editing this repo's manifests:`));
|
|
61
|
+
console.error(vendorFailures.map((f) => f.raw).join('\n'));
|
|
62
|
+
console.error(`\n${ansi_1.ansi.dim('Example fix — add to .yarnrc.yml (adjust names/ranges as needed):')}`);
|
|
63
|
+
console.error(ansi_1.ansi.dim((0, peer_requirements_1.suggestPackageExtensionsFix)(vendorFailures)));
|
|
64
|
+
}
|
|
65
|
+
if (ownershipFailures.length === 0)
|
|
66
|
+
return true;
|
|
67
|
+
console.error(ansi_1.ansi.red(`\n${ownershipFailures.length} peer requirement(s) failed:`));
|
|
68
|
+
console.error(ownershipFailures.map((f) => f.raw).join('\n'));
|
|
60
69
|
console.error(ansi_1.ansi.dim('Run `yarn explain peer-requirements <hash>` for details.'));
|
|
61
70
|
return false;
|
|
62
71
|
}
|
|
@@ -139,7 +148,8 @@ function runDoctor() {
|
|
|
139
148
|
if (beforeDtsFixSnapshot !== afterDtsFixSnapshot) {
|
|
140
149
|
spawnStep('yarn install (post-dts-fix)', 'yarn install', rootDir);
|
|
141
150
|
}
|
|
142
|
-
|
|
151
|
+
const workspaceNames = new Set(afterDtsFix.contexts.map((ctx) => ctx.name));
|
|
152
|
+
if (!checkPeerRequirements(rootDir, workspaceNames))
|
|
143
153
|
process.exit(1);
|
|
144
154
|
if (config.doctor?.lintCmd) {
|
|
145
155
|
spawnStep('lint', config.doctor.lintCmd, rootDir);
|
package/dist/bin/depdoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depdoc.js","sourceRoot":"","sources":["../../src/bin/depdoc.ts"],"names":[],"mappings":";;;;;;AACA;;;;;;GAMG;AACH,2DAA8C;AAC9C,qCAAuC;AACvC,0DAA6B;AAE7B,kCAA+B;AAC/B,0DAI6B;
|
|
1
|
+
{"version":3,"file":"depdoc.js","sourceRoot":"","sources":["../../src/bin/depdoc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parsing and classification for `yarn explain peer-requirements` output.
|
|
3
|
+
*
|
|
4
|
+
* This lives outside `bin/depdoc.ts` so the parsing/classification logic is
|
|
5
|
+
* unit-testable without spawning Yarn.
|
|
6
|
+
*/
|
|
7
|
+
export interface PeerFailure {
|
|
8
|
+
raw: string;
|
|
9
|
+
provider: string | null;
|
|
10
|
+
peer: string;
|
|
11
|
+
consumer: string | null;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Strips a peer-requirement locator token down to a bare package name:
|
|
15
|
+
* `@scope/name@npm:1.2.3 [hash] and 1 other dependency` -> `@scope/name`.
|
|
16
|
+
* Local workspaces use a `@workspace:` reference instead of `@npm:`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function extractPackageIdent(token: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* `yarn explain peer-requirements` reports two distinct failure shapes:
|
|
21
|
+
* "X doesn't provide Y to Z" (peer missing entirely) and "X provides Y to Z"
|
|
22
|
+
* (peer present but its version does not satisfy all requests). Both count
|
|
23
|
+
* as a failed requirement; only the reason differs.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parsePeerFailureLine(line: string): PeerFailure;
|
|
26
|
+
/**
|
|
27
|
+
* A failure only qualifies as vendor-only when both sides were parsed and
|
|
28
|
+
* neither is a workspace of this repo. Unparseable lines default to
|
|
29
|
+
* ownership-related (blocking) rather than being silently downgraded.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isVendorOnly(failure: PeerFailure, workspaceNames: ReadonlySet<string>): boolean;
|
|
32
|
+
export interface ClassifiedPeerFailures {
|
|
33
|
+
vendorFailures: PeerFailure[];
|
|
34
|
+
ownershipFailures: PeerFailure[];
|
|
35
|
+
}
|
|
36
|
+
export declare function classifyPeerFailures(output: string, workspaceNames: ReadonlySet<string>): ClassifiedPeerFailures;
|
|
37
|
+
/**
|
|
38
|
+
* Renders an illustrative `packageExtensions` block for `.yarnrc.yml` showing
|
|
39
|
+
* the shape of the canonical fix (see P3): declare the missing peer as a
|
|
40
|
+
* `dependencies` override on the package that should have provided it.
|
|
41
|
+
*/
|
|
42
|
+
export declare function suggestPackageExtensionsFix(failures: readonly PeerFailure[]): string;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parsing and classification for `yarn explain peer-requirements` output.
|
|
4
|
+
*
|
|
5
|
+
* This lives outside `bin/depdoc.ts` so the parsing/classification logic is
|
|
6
|
+
* unit-testable without spawning Yarn.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.extractPackageIdent = extractPackageIdent;
|
|
10
|
+
exports.parsePeerFailureLine = parsePeerFailureLine;
|
|
11
|
+
exports.isVendorOnly = isVendorOnly;
|
|
12
|
+
exports.classifyPeerFailures = classifyPeerFailures;
|
|
13
|
+
exports.suggestPackageExtensionsFix = suggestPackageExtensionsFix;
|
|
14
|
+
/**
|
|
15
|
+
* Strips a peer-requirement locator token down to a bare package name:
|
|
16
|
+
* `@scope/name@npm:1.2.3 [hash] and 1 other dependency` -> `@scope/name`.
|
|
17
|
+
* Local workspaces use a `@workspace:` reference instead of `@npm:`.
|
|
18
|
+
*/
|
|
19
|
+
function extractPackageIdent(token) {
|
|
20
|
+
const withoutSuffix = token.replace(/\s+and\s+\d+\s+other\s+dependenc(?:y|ies)\s*$/, '');
|
|
21
|
+
const withoutHash = withoutSuffix.replace(/\s*\[[0-9a-f]+\]\s*$/, '');
|
|
22
|
+
const protocolMatch = withoutHash.match(/@(?:npm|workspace|patch|portal|link):/);
|
|
23
|
+
return (protocolMatch
|
|
24
|
+
? withoutHash.slice(0, protocolMatch.index)
|
|
25
|
+
: withoutHash).trim();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `yarn explain peer-requirements` reports two distinct failure shapes:
|
|
29
|
+
* "X doesn't provide Y to Z" (peer missing entirely) and "X provides Y to Z"
|
|
30
|
+
* (peer present but its version does not satisfy all requests). Both count
|
|
31
|
+
* as a failed requirement; only the reason differs.
|
|
32
|
+
*/
|
|
33
|
+
function parsePeerFailureLine(line) {
|
|
34
|
+
// The peer token may carry its own locator hash before " to " -
|
|
35
|
+
// e.g. "provides eslint@npm:10.5.0 [5c646] to ...".
|
|
36
|
+
const match = line.match(/✘\s+(.+?)\s+(?:doesn't provide|provides)\s+(\S+)(?:\s+\[[0-9a-f]+\])?\s+to\s+(.+)$/);
|
|
37
|
+
if (!match)
|
|
38
|
+
return { raw: line, provider: null, peer: '', consumer: null };
|
|
39
|
+
const [, providerToken, peerToken, consumerToken] = match;
|
|
40
|
+
return {
|
|
41
|
+
raw: line,
|
|
42
|
+
provider: extractPackageIdent(providerToken),
|
|
43
|
+
peer: extractPackageIdent(peerToken),
|
|
44
|
+
consumer: extractPackageIdent(consumerToken),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A failure only qualifies as vendor-only when both sides were parsed and
|
|
49
|
+
* neither is a workspace of this repo. Unparseable lines default to
|
|
50
|
+
* ownership-related (blocking) rather than being silently downgraded.
|
|
51
|
+
*/
|
|
52
|
+
function isVendorOnly(failure, workspaceNames) {
|
|
53
|
+
return (failure.provider !== null &&
|
|
54
|
+
failure.consumer !== null &&
|
|
55
|
+
!workspaceNames.has(failure.provider) &&
|
|
56
|
+
!workspaceNames.has(failure.consumer));
|
|
57
|
+
}
|
|
58
|
+
function classifyPeerFailures(output, workspaceNames) {
|
|
59
|
+
const failures = output
|
|
60
|
+
.split(/\r?\n/)
|
|
61
|
+
.filter((line) => line.includes('✘'))
|
|
62
|
+
.map(parsePeerFailureLine);
|
|
63
|
+
return {
|
|
64
|
+
vendorFailures: failures.filter((f) => isVendorOnly(f, workspaceNames)),
|
|
65
|
+
ownershipFailures: failures.filter((f) => !isVendorOnly(f, workspaceNames)),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Renders an illustrative `packageExtensions` block for `.yarnrc.yml` showing
|
|
70
|
+
* the shape of the canonical fix (see P3): declare the missing peer as a
|
|
71
|
+
* `dependencies` override on the package that should have provided it.
|
|
72
|
+
*/
|
|
73
|
+
function suggestPackageExtensionsFix(failures) {
|
|
74
|
+
const peersByProvider = new Map();
|
|
75
|
+
for (const failure of failures) {
|
|
76
|
+
if (!failure.provider || !failure.peer)
|
|
77
|
+
continue;
|
|
78
|
+
if (!peersByProvider.has(failure.provider)) {
|
|
79
|
+
peersByProvider.set(failure.provider, new Set());
|
|
80
|
+
}
|
|
81
|
+
peersByProvider.get(failure.provider).add(failure.peer);
|
|
82
|
+
}
|
|
83
|
+
const lines = ['packageExtensions:'];
|
|
84
|
+
for (const [provider, peers] of peersByProvider) {
|
|
85
|
+
lines.push(` "${provider}@*":`);
|
|
86
|
+
lines.push(' dependencies:');
|
|
87
|
+
for (const peer of peers) {
|
|
88
|
+
lines.push(` "${peer}": "*"`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return lines.join('\n');
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=peer-requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-requirements.js","sourceRoot":"","sources":["../../src/lib/peer-requirements.ts"],"names":[],"mappings":"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"}
|
|
@@ -191,7 +191,10 @@ function validateBasicShape(workspaces, expectedByLocation, rules, violations, w
|
|
|
191
191
|
message: `no package imports were collected from ${workspace.sourceFileCount} source file(s) despite declared dependencies; check source roots and entrypoints before trusting autofix`,
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
|
-
if (workspace.
|
|
194
|
+
if (workspace.role === 'library' &&
|
|
195
|
+
workspace.hasSrc &&
|
|
196
|
+
!workspace.hasDist &&
|
|
197
|
+
withDts) {
|
|
195
198
|
violations.push({
|
|
196
199
|
code: 'dist-missing',
|
|
197
200
|
workspace: getWorkspaceLabel(workspace),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/model/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/model/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/depdoc.cli",
|
|
3
3
|
"role": "cli",
|
|
4
|
-
"version": "6.0.0-next.
|
|
4
|
+
"version": "6.0.0-next.46",
|
|
5
5
|
"description": "CLI for monorepo dependency management",
|
|
6
6
|
"license": "Apache License 2.0",
|
|
7
7
|
"publishConfig": {
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
"typescript": "5.7.3",
|
|
19
19
|
"yaml": "^2.6.1"
|
|
20
20
|
},
|
|
21
|
-
"gitHead": "
|
|
21
|
+
"gitHead": "15565c93102217c4866939ea7b646016acdb73d6"
|
|
22
22
|
}
|
package/src/bin/depdoc.ts
CHANGED
|
@@ -16,6 +16,10 @@ import {
|
|
|
16
16
|
formatDependencyModelResult,
|
|
17
17
|
runDependencyModel,
|
|
18
18
|
} from '../dependency-model';
|
|
19
|
+
import {
|
|
20
|
+
classifyPeerFailures,
|
|
21
|
+
suggestPackageExtensionsFix,
|
|
22
|
+
} from '../lib/peer-requirements';
|
|
19
23
|
|
|
20
24
|
function printUsage(): void {
|
|
21
25
|
console.error(`${ansi.bold('Usage:')}
|
|
@@ -31,7 +35,10 @@ function spawnStep(label: string, cmd: string, cwd: string): void {
|
|
|
31
35
|
execSync(cmd, { cwd, stdio: 'inherit' });
|
|
32
36
|
}
|
|
33
37
|
|
|
34
|
-
function checkPeerRequirements(
|
|
38
|
+
function checkPeerRequirements(
|
|
39
|
+
cwd: string,
|
|
40
|
+
workspaceNames: ReadonlySet<string>,
|
|
41
|
+
): boolean {
|
|
35
42
|
const cmd = 'yarn explain peer-requirements';
|
|
36
43
|
|
|
37
44
|
console.error(`\n${ansi.cyan('──')} ${ansi.bold('yarn peer requirements')}`);
|
|
@@ -44,6 +51,8 @@ function checkPeerRequirements(cwd: string): boolean {
|
|
|
44
51
|
cwd,
|
|
45
52
|
encoding: 'utf8',
|
|
46
53
|
maxBuffer: 32 * 1024 * 1024,
|
|
54
|
+
// Force plain text: parsing must not depend on the caller's terminal.
|
|
55
|
+
env: { ...process.env, FORCE_COLOR: '0', NO_COLOR: '1' },
|
|
47
56
|
});
|
|
48
57
|
} catch (error) {
|
|
49
58
|
const childError = error as { stdout?: string; stderr?: string };
|
|
@@ -52,19 +61,35 @@ function checkPeerRequirements(cwd: string): boolean {
|
|
|
52
61
|
return false;
|
|
53
62
|
}
|
|
54
63
|
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
64
|
+
const { vendorFailures, ownershipFailures } = classifyPeerFailures(
|
|
65
|
+
output,
|
|
66
|
+
workspaceNames,
|
|
67
|
+
);
|
|
58
68
|
|
|
59
|
-
if (
|
|
69
|
+
if (vendorFailures.length === 0 && ownershipFailures.length === 0) {
|
|
60
70
|
console.error(ansi.green('✓ peer requirements are satisfied'));
|
|
61
71
|
return true;
|
|
62
72
|
}
|
|
63
73
|
|
|
64
|
-
|
|
74
|
+
if (vendorFailures.length > 0) {
|
|
75
|
+
console.error(
|
|
76
|
+
ansi.yellow(
|
|
77
|
+
`${vendorFailures.length} peer requirement warning(s) between third-party packages only — not fixable by editing this repo's manifests:`,
|
|
78
|
+
),
|
|
79
|
+
);
|
|
80
|
+
console.error(vendorFailures.map((f) => f.raw).join('\n'));
|
|
81
|
+
console.error(
|
|
82
|
+
`\n${ansi.dim('Example fix — add to .yarnrc.yml (adjust names/ranges as needed):')}`,
|
|
83
|
+
);
|
|
84
|
+
console.error(ansi.dim(suggestPackageExtensionsFix(vendorFailures)));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (ownershipFailures.length === 0) return true;
|
|
88
|
+
|
|
65
89
|
console.error(
|
|
66
|
-
ansi.red(
|
|
90
|
+
ansi.red(`\n${ownershipFailures.length} peer requirement(s) failed:`),
|
|
67
91
|
);
|
|
92
|
+
console.error(ownershipFailures.map((f) => f.raw).join('\n'));
|
|
68
93
|
console.error(
|
|
69
94
|
ansi.dim('Run `yarn explain peer-requirements <hash>` for details.'),
|
|
70
95
|
);
|
|
@@ -190,7 +215,10 @@ function runDoctor(): void {
|
|
|
190
215
|
spawnStep('yarn install (post-dts-fix)', 'yarn install', rootDir);
|
|
191
216
|
}
|
|
192
217
|
|
|
193
|
-
|
|
218
|
+
const workspaceNames = new Set(
|
|
219
|
+
afterDtsFix.contexts.map((ctx) => ctx.name),
|
|
220
|
+
);
|
|
221
|
+
if (!checkPeerRequirements(rootDir, workspaceNames)) process.exit(1);
|
|
194
222
|
|
|
195
223
|
if (config.doctor?.lintCmd) {
|
|
196
224
|
spawnStep('lint', config.doctor.lintCmd, rootDir);
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parsing and classification for `yarn explain peer-requirements` output.
|
|
3
|
+
*
|
|
4
|
+
* This lives outside `bin/depdoc.ts` so the parsing/classification logic is
|
|
5
|
+
* unit-testable without spawning Yarn.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export interface PeerFailure {
|
|
9
|
+
raw: string;
|
|
10
|
+
provider: string | null;
|
|
11
|
+
peer: string;
|
|
12
|
+
consumer: string | null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Strips a peer-requirement locator token down to a bare package name:
|
|
17
|
+
* `@scope/name@npm:1.2.3 [hash] and 1 other dependency` -> `@scope/name`.
|
|
18
|
+
* Local workspaces use a `@workspace:` reference instead of `@npm:`.
|
|
19
|
+
*/
|
|
20
|
+
export function extractPackageIdent(token: string): string {
|
|
21
|
+
const withoutSuffix = token.replace(
|
|
22
|
+
/\s+and\s+\d+\s+other\s+dependenc(?:y|ies)\s*$/,
|
|
23
|
+
'',
|
|
24
|
+
);
|
|
25
|
+
const withoutHash = withoutSuffix.replace(/\s*\[[0-9a-f]+\]\s*$/, '');
|
|
26
|
+
const protocolMatch = withoutHash.match(
|
|
27
|
+
/@(?:npm|workspace|patch|portal|link):/,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
protocolMatch
|
|
32
|
+
? withoutHash.slice(0, protocolMatch.index)
|
|
33
|
+
: withoutHash
|
|
34
|
+
).trim();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* `yarn explain peer-requirements` reports two distinct failure shapes:
|
|
39
|
+
* "X doesn't provide Y to Z" (peer missing entirely) and "X provides Y to Z"
|
|
40
|
+
* (peer present but its version does not satisfy all requests). Both count
|
|
41
|
+
* as a failed requirement; only the reason differs.
|
|
42
|
+
*/
|
|
43
|
+
export function parsePeerFailureLine(line: string): PeerFailure {
|
|
44
|
+
// The peer token may carry its own locator hash before " to " -
|
|
45
|
+
// e.g. "provides eslint@npm:10.5.0 [5c646] to ...".
|
|
46
|
+
const match = line.match(
|
|
47
|
+
/✘\s+(.+?)\s+(?:doesn't provide|provides)\s+(\S+)(?:\s+\[[0-9a-f]+\])?\s+to\s+(.+)$/,
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
if (!match) return { raw: line, provider: null, peer: '', consumer: null };
|
|
51
|
+
|
|
52
|
+
const [, providerToken, peerToken, consumerToken] = match;
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
raw: line,
|
|
56
|
+
provider: extractPackageIdent(providerToken!),
|
|
57
|
+
peer: extractPackageIdent(peerToken!),
|
|
58
|
+
consumer: extractPackageIdent(consumerToken!),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A failure only qualifies as vendor-only when both sides were parsed and
|
|
64
|
+
* neither is a workspace of this repo. Unparseable lines default to
|
|
65
|
+
* ownership-related (blocking) rather than being silently downgraded.
|
|
66
|
+
*/
|
|
67
|
+
export function isVendorOnly(
|
|
68
|
+
failure: PeerFailure,
|
|
69
|
+
workspaceNames: ReadonlySet<string>,
|
|
70
|
+
): boolean {
|
|
71
|
+
return (
|
|
72
|
+
failure.provider !== null &&
|
|
73
|
+
failure.consumer !== null &&
|
|
74
|
+
!workspaceNames.has(failure.provider) &&
|
|
75
|
+
!workspaceNames.has(failure.consumer)
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface ClassifiedPeerFailures {
|
|
80
|
+
vendorFailures: PeerFailure[];
|
|
81
|
+
ownershipFailures: PeerFailure[];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function classifyPeerFailures(
|
|
85
|
+
output: string,
|
|
86
|
+
workspaceNames: ReadonlySet<string>,
|
|
87
|
+
): ClassifiedPeerFailures {
|
|
88
|
+
const failures = output
|
|
89
|
+
.split(/\r?\n/)
|
|
90
|
+
.filter((line) => line.includes('✘'))
|
|
91
|
+
.map(parsePeerFailureLine);
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
vendorFailures: failures.filter((f) => isVendorOnly(f, workspaceNames)),
|
|
95
|
+
ownershipFailures: failures.filter((f) => !isVendorOnly(f, workspaceNames)),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Renders an illustrative `packageExtensions` block for `.yarnrc.yml` showing
|
|
101
|
+
* the shape of the canonical fix (see P3): declare the missing peer as a
|
|
102
|
+
* `dependencies` override on the package that should have provided it.
|
|
103
|
+
*/
|
|
104
|
+
export function suggestPackageExtensionsFix(
|
|
105
|
+
failures: readonly PeerFailure[],
|
|
106
|
+
): string {
|
|
107
|
+
const peersByProvider = new Map<string, Set<string>>();
|
|
108
|
+
|
|
109
|
+
for (const failure of failures) {
|
|
110
|
+
if (!failure.provider || !failure.peer) continue;
|
|
111
|
+
if (!peersByProvider.has(failure.provider)) {
|
|
112
|
+
peersByProvider.set(failure.provider, new Set());
|
|
113
|
+
}
|
|
114
|
+
peersByProvider.get(failure.provider)!.add(failure.peer);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const lines = ['packageExtensions:'];
|
|
118
|
+
|
|
119
|
+
for (const [provider, peers] of peersByProvider) {
|
|
120
|
+
lines.push(` "${provider}@*":`);
|
|
121
|
+
lines.push(' dependencies:');
|
|
122
|
+
for (const peer of peers) {
|
|
123
|
+
lines.push(` "${peer}": "*"`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return lines.join('\n');
|
|
127
|
+
}
|
package/src/model/diagnostics.ts
CHANGED
|
@@ -258,7 +258,12 @@ export function validateBasicShape(
|
|
|
258
258
|
});
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
-
if (
|
|
261
|
+
if (
|
|
262
|
+
workspace.role === 'library' &&
|
|
263
|
+
workspace.hasSrc &&
|
|
264
|
+
!workspace.hasDist &&
|
|
265
|
+
withDts
|
|
266
|
+
) {
|
|
262
267
|
violations.push({
|
|
263
268
|
code: 'dist-missing',
|
|
264
269
|
workspace: getWorkspaceLabel(workspace),
|