@rsdk/yarn.constraints 6.0.0-next.39 → 6.0.0-next.40
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/DEPENDENCY_MODEL.md +452 -0
- package/README.MD +24 -0
- package/__tests__/compatibility.test.ts +321 -0
- package/__tests__/engine.test.ts +1002 -0
- package/__tests__/fixtures/imports/bin.js +4 -0
- package/__tests__/fixtures/imports/export-entry.mjs +1 -0
- package/__tests__/fixtures/imports/root-entry.js +3 -0
- package/__tests__/fixtures/imports/src/common.cjs +3 -0
- package/__tests__/fixtures/imports/src/common.cts +3 -0
- package/__tests__/fixtures/imports/src/component.tsx +4 -0
- package/__tests__/fixtures/imports/src/index.ts +13 -0
- package/__tests__/fixtures/imports/src/module.mjs +3 -0
- package/__tests__/fixtures/imports/src/module.mts +3 -0
- package/__tests__/fixtures/imports/src/plain.js +3 -0
- package/__tests__/fixtures/imports/src/test-only-usage.ts +1 -0
- package/__tests__/imports.test.ts +206 -0
- package/__tests__/manifest-writer.test.ts +157 -0
- package/dist/ansi.d.ts +9 -0
- package/dist/ansi.js +24 -0
- package/dist/ansi.js.map +1 -0
- package/dist/bin/depdoc.d.ts +2 -0
- package/dist/bin/depdoc.js +157 -0
- package/dist/bin/depdoc.js.map +1 -0
- package/dist/collectors/config.d.ts +2 -0
- package/dist/collectors/config.js +25 -0
- package/dist/collectors/config.js.map +1 -0
- package/dist/collectors/external-metadata.d.ts +5 -0
- package/dist/collectors/external-metadata.js +110 -0
- package/dist/collectors/external-metadata.js.map +1 -0
- package/dist/collectors/package-extensions.d.ts +3 -0
- package/dist/collectors/package-extensions.js +43 -0
- package/dist/collectors/package-extensions.js.map +1 -0
- package/dist/collectors/type-providers.d.ts +3 -0
- package/dist/collectors/type-providers.js +46 -0
- package/dist/collectors/type-providers.js.map +1 -0
- package/dist/collectors/workspaces.d.ts +2 -0
- package/dist/collectors/workspaces.js +88 -0
- package/dist/collectors/workspaces.js.map +1 -0
- package/dist/dependency-model.d.ts +11 -0
- package/dist/dependency-model.js +18 -0
- package/dist/dependency-model.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.js +13 -33
- package/dist/index.js.map +1 -1
- package/dist/lib/imports.d.ts +9 -0
- package/dist/lib/imports.js +249 -0
- package/dist/lib/imports.js.map +1 -0
- package/dist/lib/package-json.d.ts +21 -0
- package/dist/lib/package-json.js +32 -0
- package/dist/lib/package-json.js.map +1 -0
- package/dist/model/diagnostics.d.ts +4 -0
- package/dist/model/diagnostics.js +273 -0
- package/dist/model/diagnostics.js.map +1 -0
- package/dist/model/engine.d.ts +5 -0
- package/dist/model/engine.js +52 -0
- package/dist/model/engine.js.map +1 -0
- package/dist/model/expected.d.ts +20 -0
- package/dist/model/expected.js +89 -0
- package/dist/model/expected.js.map +1 -0
- package/dist/model/peer-propagation.d.ts +2 -0
- package/dist/model/peer-propagation.js +124 -0
- package/dist/model/peer-propagation.js.map +1 -0
- package/dist/model/placement.d.ts +9 -0
- package/dist/model/placement.js +205 -0
- package/dist/model/placement.js.map +1 -0
- package/dist/model/rules.d.ts +14 -0
- package/dist/model/rules.js +46 -0
- package/dist/model/rules.js.map +1 -0
- package/dist/model/types.d.ts +117 -0
- package/dist/model/types.js +9 -0
- package/dist/model/types.js.map +1 -0
- package/dist/model/versions.d.ts +3 -0
- package/dist/model/versions.js +73 -0
- package/dist/model/versions.js.map +1 -0
- package/dist/reporting.d.ts +3 -0
- package/dist/reporting.js +80 -0
- package/dist/reporting.js.map +1 -0
- package/dist/runner.d.ts +2 -0
- package/dist/runner.js +70 -0
- package/dist/runner.js.map +1 -0
- package/dist/writer/manifest-writer.d.ts +2 -0
- package/dist/writer/manifest-writer.js +72 -0
- package/dist/writer/manifest-writer.js.map +1 -0
- package/eslint.config.cjs +3 -0
- package/jest.config.js +1 -0
- package/package.json +7 -3
- package/src/ansi.ts +23 -0
- package/src/bin/depdoc.ts +213 -0
- package/src/collectors/config.ts +26 -0
- package/src/collectors/external-metadata.ts +148 -0
- package/src/collectors/package-extensions.ts +52 -0
- package/src/collectors/type-providers.ts +51 -0
- package/src/collectors/workspaces.ts +99 -0
- package/src/dependency-model.ts +26 -0
- package/src/index.ts +28 -45
- package/src/lib/imports.ts +293 -0
- package/src/lib/package-json.ts +46 -0
- package/src/model/diagnostics.ts +328 -0
- package/src/model/engine.ts +120 -0
- package/src/model/expected.ts +141 -0
- package/src/model/peer-propagation.ts +199 -0
- package/src/model/placement.ts +372 -0
- package/src/model/rules.ts +73 -0
- package/src/model/types.ts +164 -0
- package/src/model/versions.ts +109 -0
- package/src/reporting.ts +117 -0
- package/src/runner.ts +102 -0
- package/src/writer/manifest-writer.ts +111 -0
- package/tsconfig.build.json +1 -0
- package/tsconfig.json +6 -1
- package/dist/constraint-schema.d.ts +0 -1
- package/dist/constraint-schema.js +0 -17
- package/dist/constraint-schema.js.map +0 -1
- package/dist/dependency-checker.d.ts +0 -8
- package/dist/dependency-checker.js +0 -40
- package/dist/dependency-checker.js.map +0 -1
- package/src/constraint-schema.ts +0 -20
- package/src/dependency-checker.ts +0 -41
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { exported } from 'exports-entry-dep';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { foo } from 'lodash';
|
|
2
|
+
import type { Bar } from 'some-types';
|
|
3
|
+
import { value, type MixedType } from 'mixed-dep';
|
|
4
|
+
import { type OnlyType } from 'only-type-dep';
|
|
5
|
+
import { baz } from '@scope/pkg/subpath';
|
|
6
|
+
import { qux } from './local';
|
|
7
|
+
import { built } from 'node:fs';
|
|
8
|
+
export { reexported } from 'reexport-dep';
|
|
9
|
+
export type { ReexportedType } from 'reexport-type-dep';
|
|
10
|
+
const ignoredComment = "import ignored from 'string-dep'";
|
|
11
|
+
// import ignored from 'comment-dep';
|
|
12
|
+
const x = require('require-dep');
|
|
13
|
+
const y = await import('dynamic-dep');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { runtime } from 'test-only-dep';
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
collectDtsImports,
|
|
5
|
+
collectSourceImports,
|
|
6
|
+
getPackageName,
|
|
7
|
+
} from '../src/lib/imports';
|
|
8
|
+
|
|
9
|
+
const FIXTURES = path.join(__dirname, 'fixtures/imports');
|
|
10
|
+
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// getPackageName
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
describe('getPackageName', () => {
|
|
16
|
+
it('returns null for relative specifiers', () => {
|
|
17
|
+
expect(getPackageName('./local')).toBeNull();
|
|
18
|
+
expect(getPackageName('../parent')).toBeNull();
|
|
19
|
+
expect(getPackageName('/absolute')).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('returns null for node: builtins', () => {
|
|
23
|
+
expect(getPackageName('node:fs')).toBeNull();
|
|
24
|
+
expect(getPackageName('node:path')).toBeNull();
|
|
25
|
+
expect(getPackageName('fs')).toBeNull();
|
|
26
|
+
expect(getPackageName('path')).toBeNull();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('returns package name for bare specifiers', () => {
|
|
30
|
+
expect(getPackageName('lodash')).toBe('lodash');
|
|
31
|
+
expect(getPackageName('express')).toBe('express');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('strips subpath from unscoped packages', () => {
|
|
35
|
+
expect(getPackageName('lodash/fp')).toBe('lodash');
|
|
36
|
+
expect(getPackageName('some-pkg/nested/deep')).toBe('some-pkg');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('returns scoped package name', () => {
|
|
40
|
+
expect(getPackageName('@scope/pkg')).toBe('@scope/pkg');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('strips subpath from scoped packages', () => {
|
|
44
|
+
expect(getPackageName('@scope/pkg/subpath')).toBe('@scope/pkg');
|
|
45
|
+
expect(getPackageName('@scope/pkg/deep/nested')).toBe('@scope/pkg');
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('returns null for malformed scoped specifier without package name', () => {
|
|
49
|
+
expect(getPackageName('@scope')).toBeNull();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// collectSourceImports
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
|
|
57
|
+
describe('collectSourceImports', () => {
|
|
58
|
+
const srcDir = path.join(FIXTURES, 'src');
|
|
59
|
+
let entries: ReturnType<typeof collectSourceImports>;
|
|
60
|
+
|
|
61
|
+
beforeAll(() => {
|
|
62
|
+
entries = collectSourceImports(srcDir);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
function names(): Set<string> {
|
|
66
|
+
return new Set(entries.map((e) => e.packageName));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
it('collects runtime imports', () => {
|
|
70
|
+
const pkgs = names();
|
|
71
|
+
expect(pkgs.has('lodash')).toBe(true);
|
|
72
|
+
expect(pkgs.has('@scope/pkg')).toBe(true);
|
|
73
|
+
expect(pkgs.has('mixed-dep')).toBe(true);
|
|
74
|
+
expect(pkgs.has('require-dep')).toBe(true);
|
|
75
|
+
expect(pkgs.has('dynamic-dep')).toBe(true);
|
|
76
|
+
expect(pkgs.has('reexport-dep')).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('marks import type entries as isTypeOnly', () => {
|
|
80
|
+
const typeOnlyEntry = entries.find((e) => e.packageName === 'some-types');
|
|
81
|
+
expect(typeOnlyEntry).toBeDefined();
|
|
82
|
+
expect(typeOnlyEntry!.isTypeOnly).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('marks export type entries as isTypeOnly', () => {
|
|
86
|
+
const entry = entries.find((e) => e.packageName === 'reexport-type-dep');
|
|
87
|
+
expect(entry).toBeDefined();
|
|
88
|
+
expect(entry!.isTypeOnly).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('marks import specifiers with only type bindings as isTypeOnly', () => {
|
|
92
|
+
const entry = entries.find((e) => e.packageName === 'only-type-dep');
|
|
93
|
+
expect(entry).toBeDefined();
|
|
94
|
+
expect(entry!.isTypeOnly).toBe(true);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('treats mixed value and type specifiers as runtime imports', () => {
|
|
98
|
+
const entry = entries.find((e) => e.packageName === 'mixed-dep');
|
|
99
|
+
expect(entry).toBeDefined();
|
|
100
|
+
expect(entry!.isTypeOnly).toBe(false);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('marks runtime imports as not isTypeOnly', () => {
|
|
104
|
+
const entry = entries.find((e) => e.packageName === 'lodash');
|
|
105
|
+
expect(entry).toBeDefined();
|
|
106
|
+
expect(entry!.isTypeOnly).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('does not include relative imports', () => {
|
|
110
|
+
expect(names().has('./local')).toBe(false);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('does not include node: builtins', () => {
|
|
114
|
+
expect(names().has('node:fs')).toBe(false);
|
|
115
|
+
expect(names().has('fs')).toBe(false);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('ignores import-like text inside comments and strings', () => {
|
|
119
|
+
expect(names().has('comment-dep')).toBe(false);
|
|
120
|
+
expect(names().has('string-dep')).toBe(false);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('includes the file path in each entry', () => {
|
|
124
|
+
const entry = entries.find((e) => e.packageName === 'lodash');
|
|
125
|
+
expect(entry!.file).toContain('index.ts');
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('collects imports from test files as well', () => {
|
|
129
|
+
expect(names().has('test-only-dep')).toBe(true);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('collects supported source extensions', () => {
|
|
133
|
+
const pkgs = names();
|
|
134
|
+
expect(pkgs.has('tsx-runtime-dep')).toBe(true);
|
|
135
|
+
expect(pkgs.has('tsx-type-dep')).toBe(true);
|
|
136
|
+
expect(pkgs.has('mts-dep')).toBe(true);
|
|
137
|
+
expect(pkgs.has('cts-dep')).toBe(true);
|
|
138
|
+
expect(pkgs.has('js-dep')).toBe(true);
|
|
139
|
+
expect(pkgs.has('mjs-dep')).toBe(true);
|
|
140
|
+
expect(pkgs.has('cjs-dep')).toBe(true);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('collects package main, bin, and exports entrypoints inside the workspace', () => {
|
|
144
|
+
const workspaceEntries = collectSourceImports(FIXTURES, {
|
|
145
|
+
name: '@test/imports',
|
|
146
|
+
main: 'root-entry.js',
|
|
147
|
+
bin: {
|
|
148
|
+
imports: 'bin.js',
|
|
149
|
+
},
|
|
150
|
+
exports: {
|
|
151
|
+
'.': './export-entry.mjs',
|
|
152
|
+
'./dist': './dist/index.js',
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
const pkgs = new Set(workspaceEntries.map((e) => e.packageName));
|
|
156
|
+
|
|
157
|
+
expect(pkgs.has('root-entry-dep')).toBe(true);
|
|
158
|
+
expect(pkgs.has('bin-entry-dep')).toBe(true);
|
|
159
|
+
expect(pkgs.has('exports-entry-dep')).toBe(true);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('does not collect .d.ts files (only .ts source files)', () => {
|
|
163
|
+
// dist/ is a sibling of src/, not inside it — so even if we somehow
|
|
164
|
+
// end up scanning it, .d.ts files are explicitly excluded.
|
|
165
|
+
const dtsEntry = entries.find((e) => e.file.endsWith('.d.ts'));
|
|
166
|
+
expect(dtsEntry).toBeUndefined();
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
// collectDtsImports
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
|
|
174
|
+
describe('collectDtsImports', () => {
|
|
175
|
+
const distDir = path.join(FIXTURES, 'dist');
|
|
176
|
+
let result: Set<string>;
|
|
177
|
+
|
|
178
|
+
beforeAll(() => {
|
|
179
|
+
result = collectDtsImports(distDir);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it('collects packages from import type in dts', () => {
|
|
183
|
+
expect(result.has('some-types')).toBe(true);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it('collects packages from inline import() expressions in dts', () => {
|
|
187
|
+
expect(result.has('public-type-dep')).toBe(true);
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it('collects packages from export declarations in dts', () => {
|
|
191
|
+
expect(result.has('dts-export-type-dep')).toBe(true);
|
|
192
|
+
expect(result.has('dts-export-runtime-dep')).toBe(true);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('collects packages from triple-slash types in dts', () => {
|
|
196
|
+
expect(result.has('ambient-types')).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('collects packages from ambient module declarations in dts', () => {
|
|
200
|
+
expect(result.has('ambient-module-dep')).toBe(true);
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it('returns a set (no duplicates)', () => {
|
|
204
|
+
expect(result).toBeInstanceOf(Set);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import {
|
|
2
|
+
mkdirSync,
|
|
3
|
+
mkdtempSync,
|
|
4
|
+
readFileSync,
|
|
5
|
+
rmSync,
|
|
6
|
+
writeFileSync,
|
|
7
|
+
} from 'node:fs';
|
|
8
|
+
import { tmpdir } from 'node:os';
|
|
9
|
+
import { resolve } from 'node:path';
|
|
10
|
+
|
|
11
|
+
import { writeFixes } from '../src/writer/manifest-writer';
|
|
12
|
+
import type {
|
|
13
|
+
ExpectedWorkspace,
|
|
14
|
+
WorkspaceFacts,
|
|
15
|
+
} from '../src/dependency-model';
|
|
16
|
+
|
|
17
|
+
function makeWorkspace(
|
|
18
|
+
location: string,
|
|
19
|
+
pkg: WorkspaceFacts['pkg'],
|
|
20
|
+
): WorkspaceFacts {
|
|
21
|
+
return {
|
|
22
|
+
name: pkg.name,
|
|
23
|
+
location,
|
|
24
|
+
pkg,
|
|
25
|
+
role: pkg.role,
|
|
26
|
+
isRoot: false,
|
|
27
|
+
sourceUsage: new Map(),
|
|
28
|
+
dtsImports: new Set(),
|
|
29
|
+
hasSrc: false,
|
|
30
|
+
hasDist: false,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function makeExpected(
|
|
35
|
+
location: string,
|
|
36
|
+
pkg: WorkspaceFacts['pkg'],
|
|
37
|
+
sections: ExpectedWorkspace['sections'],
|
|
38
|
+
): ExpectedWorkspace {
|
|
39
|
+
return {
|
|
40
|
+
workspace: makeWorkspace(location, pkg),
|
|
41
|
+
sections,
|
|
42
|
+
reasons: new Map(),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function makeSections(
|
|
47
|
+
sections: Partial<
|
|
48
|
+
Record<keyof ExpectedWorkspace['sections'], [string, string][]>
|
|
49
|
+
>,
|
|
50
|
+
): ExpectedWorkspace['sections'] {
|
|
51
|
+
return {
|
|
52
|
+
dependencies: new Map(sections.dependencies ?? []),
|
|
53
|
+
peerDependencies: new Map(sections.peerDependencies ?? []),
|
|
54
|
+
devDependencies: new Map(sections.devDependencies ?? []),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function createPackageJson(
|
|
59
|
+
rootDir: string,
|
|
60
|
+
location: string,
|
|
61
|
+
pkg: WorkspaceFacts['pkg'],
|
|
62
|
+
): void {
|
|
63
|
+
const dir = resolve(rootDir, location);
|
|
64
|
+
mkdirSync(dir, { recursive: true });
|
|
65
|
+
writeFileSync(
|
|
66
|
+
resolve(dir, 'package.json'),
|
|
67
|
+
JSON.stringify(pkg, null, 2) + '\n',
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function readPackageJson(
|
|
72
|
+
rootDir: string,
|
|
73
|
+
location: string,
|
|
74
|
+
): WorkspaceFacts['pkg'] {
|
|
75
|
+
return JSON.parse(
|
|
76
|
+
readFileSync(resolve(rootDir, location, 'package.json'), 'utf8'),
|
|
77
|
+
) as WorkspaceFacts['pkg'];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
describe('manifest writer', () => {
|
|
81
|
+
let rootDir: string;
|
|
82
|
+
|
|
83
|
+
beforeEach(() => {
|
|
84
|
+
rootDir = mkdtempSync(resolve(tmpdir(), 'rsdk-manifest-writer-'));
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
afterEach(() => {
|
|
88
|
+
rmSync(rootDir, { recursive: true, force: true });
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('removes peerDependenciesMeta when no expected peers remain', () => {
|
|
92
|
+
const location = 'packages/lib';
|
|
93
|
+
const pkg: WorkspaceFacts['pkg'] = {
|
|
94
|
+
name: '@test/lib',
|
|
95
|
+
role: 'library',
|
|
96
|
+
dependencies: { 'some-lib': '1.0.0' },
|
|
97
|
+
peerDependenciesMeta: { 'some-lib': { optional: true } },
|
|
98
|
+
};
|
|
99
|
+
createPackageJson(rootDir, location, pkg);
|
|
100
|
+
|
|
101
|
+
writeFixes(
|
|
102
|
+
rootDir,
|
|
103
|
+
new Map([
|
|
104
|
+
[
|
|
105
|
+
location,
|
|
106
|
+
makeExpected(
|
|
107
|
+
location,
|
|
108
|
+
pkg,
|
|
109
|
+
makeSections({
|
|
110
|
+
dependencies: [['some-lib', '1.0.0']],
|
|
111
|
+
}),
|
|
112
|
+
),
|
|
113
|
+
],
|
|
114
|
+
]),
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
expect(
|
|
118
|
+
readPackageJson(rootDir, location).peerDependenciesMeta,
|
|
119
|
+
).toBeUndefined();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('keeps peerDependenciesMeta only for expected peers', () => {
|
|
123
|
+
const location = 'packages/lib';
|
|
124
|
+
const pkg: WorkspaceFacts['pkg'] = {
|
|
125
|
+
name: '@test/lib',
|
|
126
|
+
role: 'library',
|
|
127
|
+
peerDependencies: { react: '^18.0.0' },
|
|
128
|
+
peerDependenciesMeta: {
|
|
129
|
+
react: { optional: true },
|
|
130
|
+
'old-peer': { optional: true },
|
|
131
|
+
},
|
|
132
|
+
devDependencies: { react: '^18.0.0' },
|
|
133
|
+
};
|
|
134
|
+
createPackageJson(rootDir, location, pkg);
|
|
135
|
+
|
|
136
|
+
writeFixes(
|
|
137
|
+
rootDir,
|
|
138
|
+
new Map([
|
|
139
|
+
[
|
|
140
|
+
location,
|
|
141
|
+
makeExpected(
|
|
142
|
+
location,
|
|
143
|
+
pkg,
|
|
144
|
+
makeSections({
|
|
145
|
+
peerDependencies: [['react', '^18.0.0']],
|
|
146
|
+
devDependencies: [['react', '^18.0.0']],
|
|
147
|
+
}),
|
|
148
|
+
),
|
|
149
|
+
],
|
|
150
|
+
]),
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
expect(readPackageJson(rootDir, location).peerDependenciesMeta).toEqual({
|
|
154
|
+
react: { optional: true },
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
package/dist/ansi.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const ansi: {
|
|
2
|
+
bold: (value: string) => string;
|
|
3
|
+
dim: (value: string) => string;
|
|
4
|
+
red: (value: string) => string;
|
|
5
|
+
green: (value: string) => string;
|
|
6
|
+
yellow: (value: string) => string;
|
|
7
|
+
cyan: (value: string) => string;
|
|
8
|
+
magenta: (value: string) => string;
|
|
9
|
+
};
|
package/dist/ansi.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ansi = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Shared ANSI styling helpers for CLI output.
|
|
6
|
+
*
|
|
7
|
+
* Keep terminal escape codes centralized here so command/reporting modules can
|
|
8
|
+
* add restrained color without duplicating formatting details or hard-coding
|
|
9
|
+
* ANSI sequences throughout the codebase.
|
|
10
|
+
*/
|
|
11
|
+
const enabled = process.env.NO_COLOR === undefined && process.env.FORCE_COLOR !== '0';
|
|
12
|
+
function wrap(open, close, value) {
|
|
13
|
+
return enabled ? `${open}${value}${close}` : value;
|
|
14
|
+
}
|
|
15
|
+
exports.ansi = {
|
|
16
|
+
bold: (value) => wrap('\u001B[1m', '\u001B[22m', value),
|
|
17
|
+
dim: (value) => wrap('\u001B[2m', '\u001B[22m', value),
|
|
18
|
+
red: (value) => wrap('\u001B[31m', '\u001B[39m', value),
|
|
19
|
+
green: (value) => wrap('\u001B[32m', '\u001B[39m', value),
|
|
20
|
+
yellow: (value) => wrap('\u001B[33m', '\u001B[39m', value),
|
|
21
|
+
cyan: (value) => wrap('\u001B[36m', '\u001B[39m', value),
|
|
22
|
+
magenta: (value) => wrap('\u001B[35m', '\u001B[39m', value),
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=ansi.js.map
|
package/dist/ansi.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../src/ansi.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC;AAExE,SAAS,IAAI,CAAC,IAAY,EAAE,KAAa,EAAE,KAAa;IACtD,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACrD,CAAC;AAEY,QAAA,IAAI,GAAG;IAClB,IAAI,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC;IACvE,GAAG,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC;IACtE,GAAG,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;IACvE,KAAK,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;IACzE,MAAM,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;IAC1E,IAAI,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;IACxE,OAAO,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC;CAC5E,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
/**
|
|
8
|
+
* `depdoc` command-line entrypoint.
|
|
9
|
+
*
|
|
10
|
+
* The CLI only parses commands and orchestrates high-level steps. Dependency
|
|
11
|
+
* placement decisions live in the model engine, while filesystem collection and
|
|
12
|
+
* manifest writes go through the runner.
|
|
13
|
+
*/
|
|
14
|
+
const node_child_process_1 = require("node:child_process");
|
|
15
|
+
const node_fs_1 = require("node:fs");
|
|
16
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
17
|
+
const ansi_1 = require("../ansi");
|
|
18
|
+
const dependency_model_1 = require("../dependency-model");
|
|
19
|
+
function printUsage() {
|
|
20
|
+
console.error(`${ansi_1.ansi.bold('Usage:')}
|
|
21
|
+
${ansi_1.ansi.cyan('depdoc')} check [--with-dts]
|
|
22
|
+
${ansi_1.ansi.cyan('depdoc')} fix [--with-dts]
|
|
23
|
+
${ansi_1.ansi.cyan('depdoc')} explain <workspace> <dependency>
|
|
24
|
+
${ansi_1.ansi.cyan('depdoc')} doctor`);
|
|
25
|
+
}
|
|
26
|
+
function spawnStep(label, cmd, cwd) {
|
|
27
|
+
console.error(`\n${ansi_1.ansi.cyan('──')} ${ansi_1.ansi.bold(label)}`);
|
|
28
|
+
console.error(`${ansi_1.ansi.dim('$')} ${ansi_1.ansi.cyan(cmd)}`);
|
|
29
|
+
(0, node_child_process_1.execSync)(cmd, { cwd, stdio: 'inherit' });
|
|
30
|
+
}
|
|
31
|
+
function checkPeerRequirements(cwd) {
|
|
32
|
+
const cmd = 'yarn explain peer-requirements';
|
|
33
|
+
console.error(`\n${ansi_1.ansi.cyan('──')} ${ansi_1.ansi.bold('yarn peer requirements')}`);
|
|
34
|
+
console.error(`${ansi_1.ansi.dim('$')} ${ansi_1.ansi.cyan(cmd)}`);
|
|
35
|
+
let output;
|
|
36
|
+
try {
|
|
37
|
+
output = (0, node_child_process_1.execSync)(cmd, {
|
|
38
|
+
cwd,
|
|
39
|
+
encoding: 'utf8',
|
|
40
|
+
maxBuffer: 32 * 1024 * 1024,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const childError = error;
|
|
45
|
+
if (childError.stdout)
|
|
46
|
+
process.stderr.write(childError.stdout);
|
|
47
|
+
if (childError.stderr)
|
|
48
|
+
process.stderr.write(childError.stderr);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const failedRequirements = output
|
|
52
|
+
.split(/\r?\n/)
|
|
53
|
+
.filter((line) => line.includes('✘'));
|
|
54
|
+
if (failedRequirements.length === 0) {
|
|
55
|
+
console.error(ansi_1.ansi.green('✓ peer requirements are satisfied'));
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
console.error(failedRequirements.join('\n'));
|
|
59
|
+
console.error(ansi_1.ansi.red(`${failedRequirements.length} peer requirement(s) failed`));
|
|
60
|
+
console.error(ansi_1.ansi.dim('Run `yarn explain peer-requirements <hash>` for details.'));
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
function snapshotPackageJsons(result) {
|
|
64
|
+
return [...result.expected.keys()]
|
|
65
|
+
.sort()
|
|
66
|
+
.map((location) => (0, node_fs_1.readFileSync)(node_path_1.default.join(result.rootDir, location, 'package.json'), 'utf8'))
|
|
67
|
+
.join('\0');
|
|
68
|
+
}
|
|
69
|
+
function main() {
|
|
70
|
+
const rawArgs = process.argv.slice(2);
|
|
71
|
+
if (rawArgs.includes('--help') || rawArgs.includes('-h')) {
|
|
72
|
+
printUsage();
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
75
|
+
const positional = rawArgs.filter((a) => !a.startsWith('--'));
|
|
76
|
+
const [command, firstArg, secondArg] = positional;
|
|
77
|
+
const withDts = rawArgs.includes('--with-dts');
|
|
78
|
+
if (!command) {
|
|
79
|
+
printUsage();
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
if (command === 'check') {
|
|
83
|
+
const result = (0, dependency_model_1.runDependencyModel)({ withDts });
|
|
84
|
+
console.error((0, dependency_model_1.formatDependencyModelResult)(result));
|
|
85
|
+
process.exit(result.violations.length === 0 ? 0 : 1);
|
|
86
|
+
}
|
|
87
|
+
if (command === 'fix') {
|
|
88
|
+
const before = (0, dependency_model_1.runDependencyModel)({ fix: true, withDts });
|
|
89
|
+
const after = (0, dependency_model_1.runDependencyModel)({ withDts });
|
|
90
|
+
const fixed = Math.max(0, before.violations.length - after.violations.length);
|
|
91
|
+
console.error((0, dependency_model_1.formatDependencyModelResult)(after));
|
|
92
|
+
if (fixed > 0) {
|
|
93
|
+
console.error(ansi_1.ansi.green(`fixed ${fixed} dependency model violation(s)`));
|
|
94
|
+
}
|
|
95
|
+
process.exit(after.violations.length === 0 ? 0 : 1);
|
|
96
|
+
}
|
|
97
|
+
if (command === 'explain') {
|
|
98
|
+
if (!firstArg || !secondArg) {
|
|
99
|
+
printUsage();
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
const result = (0, dependency_model_1.runDependencyModel)();
|
|
103
|
+
console.log((0, dependency_model_1.explainDependency)(result, firstArg, secondArg));
|
|
104
|
+
process.exit(0);
|
|
105
|
+
}
|
|
106
|
+
if (command === 'doctor') {
|
|
107
|
+
runDoctor();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
printUsage();
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
function runDoctor() {
|
|
114
|
+
console.error(`\n${ansi_1.ansi.cyan('──')} ${ansi_1.ansi.bold('depdoc fix')}`);
|
|
115
|
+
const fixResult = (0, dependency_model_1.runDependencyModel)({ fix: true });
|
|
116
|
+
const afterFix = (0, dependency_model_1.runDependencyModel)();
|
|
117
|
+
const fixed = Math.max(0, fixResult.violations.length - afterFix.violations.length);
|
|
118
|
+
console.error((0, dependency_model_1.formatDependencyModelResult)(afterFix));
|
|
119
|
+
if (fixed > 0)
|
|
120
|
+
console.error(ansi_1.ansi.green(`fixed ${fixed} violation(s)`));
|
|
121
|
+
const { rootDir, config } = afterFix;
|
|
122
|
+
spawnStep('yarn install', 'yarn install', rootDir);
|
|
123
|
+
if (config.doctor?.buildCmd) {
|
|
124
|
+
spawnStep('build', config.doctor.buildCmd, rootDir);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
console.error(`\n${ansi_1.ansi.cyan('──')} ${ansi_1.ansi.yellow('build skipped')} ${ansi_1.ansi.dim('(doctor.buildCmd not configured in .constraints.yml)')}`);
|
|
128
|
+
}
|
|
129
|
+
const beforeDtsFixSnapshot = snapshotPackageJsons(afterFix);
|
|
130
|
+
console.error(`\n${ansi_1.ansi.cyan('──')} ${ansi_1.ansi.bold('depdoc fix --with-dts')}`);
|
|
131
|
+
const dtsFix = (0, dependency_model_1.runDependencyModel)({ fix: true, withDts: true });
|
|
132
|
+
const afterDtsFix = (0, dependency_model_1.runDependencyModel)({ withDts: true });
|
|
133
|
+
const afterDtsFixSnapshot = snapshotPackageJsons(afterDtsFix);
|
|
134
|
+
const dtsFixed = Math.max(0, dtsFix.violations.length - afterDtsFix.violations.length);
|
|
135
|
+
console.error((0, dependency_model_1.formatDependencyModelResult)(afterDtsFix));
|
|
136
|
+
if (dtsFixed > 0) {
|
|
137
|
+
console.error(ansi_1.ansi.green(`fixed ${dtsFixed} additional violation(s) from .d.ts surface`));
|
|
138
|
+
}
|
|
139
|
+
if (beforeDtsFixSnapshot !== afterDtsFixSnapshot) {
|
|
140
|
+
spawnStep('yarn install (post-dts-fix)', 'yarn install', rootDir);
|
|
141
|
+
}
|
|
142
|
+
if (!checkPeerRequirements(rootDir))
|
|
143
|
+
process.exit(1);
|
|
144
|
+
if (config.doctor?.lintCmd) {
|
|
145
|
+
spawnStep('lint', config.doctor.lintCmd, rootDir);
|
|
146
|
+
}
|
|
147
|
+
if (config.doctor?.typecheckCmd) {
|
|
148
|
+
spawnStep('typecheck', config.doctor.typecheckCmd, rootDir);
|
|
149
|
+
}
|
|
150
|
+
const finalViolations = afterDtsFix.violations.length;
|
|
151
|
+
console.error(finalViolations === 0
|
|
152
|
+
? `\n${ansi_1.ansi.green('✓')} ${ansi_1.ansi.bold('doctor: all checks passed')}`
|
|
153
|
+
: `\n${ansi_1.ansi.red('✖')} ${ansi_1.ansi.bold(`doctor: ${finalViolations} violation(s) remain`)}`);
|
|
154
|
+
process.exit(finalViolations === 0 ? 0 : 1);
|
|
155
|
+
}
|
|
156
|
+
main();
|
|
157
|
+
//# sourceMappingURL=depdoc.js.map
|
|
@@ -0,0 +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;AAE7B,SAAS,UAAU;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,WAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC,WAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACnB,WAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACnB,WAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACnB,WAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACxD,OAAO,CAAC,KAAK,CAAC,KAAK,WAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,KAAK,CAAC,GAAG,WAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpD,IAAA,6BAAQ,EAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,GAAG,GAAG,gCAAgC,CAAC;IAE7C,OAAO,CAAC,KAAK,CAAC,KAAK,WAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,GAAG,WAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEpD,IAAI,MAAc,CAAC;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,6BAAQ,EAAC,GAAG,EAAE;YACrB,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,KAA6C,CAAC;QACjE,IAAI,UAAU,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,UAAU,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM;SAC9B,KAAK,CAAC,OAAO,CAAC;SACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAExC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,WAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CACX,WAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,MAAM,6BAA6B,CAAC,CACpE,CAAC;IACF,OAAO,CAAC,KAAK,CACX,WAAI,CAAC,GAAG,CAAC,0DAA0D,CAAC,CACrE,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAA6C;IAE7C,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC/B,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAChB,IAAA,sBAAY,EAAC,mBAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAC1E;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,IAAI;IACX,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAA,qCAAkB,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAE/C,OAAO,CAAC,KAAK,CAAC,IAAA,8CAA2B,EAAC,MAAM,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAA,qCAAkB,EAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAA,qCAAkB,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CACnD,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,IAAA,8CAA2B,EAAC,KAAK,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CACX,WAAI,CAAC,KAAK,CAAC,SAAS,KAAK,gCAAgC,CAAC,CAC3D,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,qCAAkB,GAAE,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,IAAA,oCAAiB,EAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,KAAK,CAAC,KAAK,WAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAA,qCAAkB,EAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAA,qCAAkB,GAAE,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CACzD,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,IAAA,8CAA2B,EAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,WAAI,CAAC,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,CAAC,CAAC;IAExE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAErC,SAAS,CAAC,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC5B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CACX,KAAK,WAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,WAAI,CAAC,GAAG,CAAC,sDAAsD,CAAC,EAAE,CAC3H,CAAC;IACJ,CAAC;IAED,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE5D,OAAO,CAAC,KAAK,CAAC,KAAK,WAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAA,qCAAkB,EAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,IAAA,qCAAkB,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CACzD,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,IAAA,8CAA2B,EAAC,WAAW,CAAC,CAAC,CAAC;IACxD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CACX,WAAI,CAAC,KAAK,CACR,SAAS,QAAQ,6CAA6C,CAC/D,CACF,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,KAAK,mBAAmB,EAAE,CAAC;QACjD,SAAS,CAAC,6BAA6B,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;QAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;IAEtD,OAAO,CAAC,KAAK,CACX,eAAe,KAAK,CAAC;QACnB,CAAC,CAAC,KAAK,WAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,EAAE;QAClE,CAAC,CAAC,KAAK,WAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAI,CAAC,IAAI,CAAC,WAAW,eAAe,sBAAsB,CAAC,EAAE,CACxF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadConfig = loadConfig;
|
|
7
|
+
/**
|
|
8
|
+
* Constraints configuration collector.
|
|
9
|
+
*
|
|
10
|
+
* This module is the only place that resolves and parses `.constraints.yml`.
|
|
11
|
+
* It returns raw model configuration; rule semantics are handled later by the
|
|
12
|
+
* pure model layer.
|
|
13
|
+
*/
|
|
14
|
+
const node_fs_1 = require("node:fs");
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
17
|
+
function loadConfig(rootDir, constraintsPath) {
|
|
18
|
+
const filepath = constraintsPath ??
|
|
19
|
+
process.env.RSDK_YARN_CONSTRAINTS_CFG ??
|
|
20
|
+
node_path_1.default.join(rootDir, '.rsdk/.constraints.yml');
|
|
21
|
+
if (!(0, node_fs_1.existsSync)(filepath))
|
|
22
|
+
return { rules: [] };
|
|
23
|
+
return yaml_1.default.parse((0, node_fs_1.readFileSync)(filepath, 'utf8'));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=config.js.map
|