MCPcopy
hub / github.com/jestjs/jest / constraints

Function constraints

yarn.config.cjs:20–108  ·  view source on GitHub ↗
({Yarn})

Source from the content-addressed store, hash-verified

18
19module.exports = defineConfig({
20 async constraints({Yarn}) {
21 const allNonPeerDeps = Yarn.dependencies().filter(
22 d => d.type !== 'peerDependencies',
23 );
24
25 // 1. Enforce same dependency version across workspaces (with exceptions)
26 for (const dependency of Yarn.dependencies()) {
27 const {ident, type} = dependency;
28 if (type === 'peerDependencies') continue;
29 if (EXCEPTIONS.has(ident)) continue;
30 const allDeps = allNonPeerDeps.filter(d => d.ident === ident);
31 const uniqueRanges = [...new Set(allDeps.map(d => d.range))];
32 if (uniqueRanges.length > 1) {
33 for (const d of allDeps) {
34 d.error(
35 `Dependency \`${ident}\` should have the same version across all workspaces (found: ${uniqueRanges.join(', ')})`,
36 );
37 }
38 }
39 }
40
41 // 2. Prevent dependency in both dependencies and devDependencies
42 for (const workspace of Yarn.workspaces()) {
43 const deps = workspace.manifest.dependencies;
44 const devDeps = workspace.manifest.devDependencies;
45 if (deps == null || devDeps == null) {
46 continue;
47 }
48 for (const devDep of Object.keys(devDeps)) {
49 if (deps[devDep]) {
50 workspace.error(
51 `Dependency \`${devDep}\` appears in both dependencies and devDependencies`,
52 );
53 }
54 }
55 }
56
57 // 3. Enforce license field for public workspaces, remove for private
58 for (const workspace of Yarn.workspaces()) {
59 if (workspace.manifest.private === true) {
60 workspace.unset('license');
61 } else {
62 workspace.set('license', 'MIT');
63 }
64 }
65
66 // 4. Enforce repository field for public workspaces, remove for private
67 for (const workspace of Yarn.workspaces()) {
68 if (workspace.manifest.private === true) {
69 workspace.unset('repository');
70 } else {
71 workspace.set(['repository', 'type'], 'git');
72 workspace.set(
73 ['repository', 'url'],
74 'https://github.com/jestjs/jest.git',
75 );
76 workspace.set(['repository', 'directory'], workspace.cwd);
77 }

Callers

nothing calls this directly

Calls 2

errorMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected