Skip to content

Commit a2bfc62

Browse files
committed
create a more robust depcheck implementation
1 parent d541dad commit a2bfc62

File tree

10 files changed

+479
-429
lines changed

10 files changed

+479
-429
lines changed

lage.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ module.exports = {
66
inputs: ['*', 'src/**/*', 'assets/**/*'],
77
outputs: ['lib/**/*', 'lib-commonjs/**/*'],
88
},
9-
buildci: ['build', 'test', 'lint', 'depcheck'],
9+
buildci: ['build', 'test', 'lint', 'depcheck', 'check-publishing'],
1010
bundle: {
1111
inputs: ['**/*', '!node_modules/**/*', '!dist/**/*', '!lib/**/*', '!lib-commonjs/**/*'],
1212
outputs: ['dist/**/*'],

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
"change": "beachball change",
2020
"check-for-changed-files": "cd scripts && yarn fluentui-scripts check-changes",
2121
"checkchange": "beachball check --changehint \"Run 'yarn change' to generate a change file\"",
22+
"check-publishing": "node ./scripts/src/cli.mjs check-publishing",
2223
"align-deps": "rnx-align-deps --no-unmanaged --requirements [email protected]",
2324
"depcheck": "lage depcheck",
25+
"depcheck-fix": "lage depcheck --args=\"--fix-errors --dry-run\"",
2426
"lint": "lage lint",
2527
"preinstall": "node ./scripts/src/preinstall/use-yarn-please.js",
2628
"prettier": "lage prettier",

packages/framework-base/package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,15 @@
3434
"keywords": [],
3535
"author": "",
3636
"license": "MIT",
37+
"dependencies": {
38+
"react": "18.2.0"
39+
},
3740
"devDependencies": {
3841
"@fluentui-react-native/eslint-config-rules": "workspace:*",
3942
"@fluentui-react-native/scripts": "workspace:*",
4043
"@types/jest": "^29.0.0",
41-
"@types/node": "^22.0.0"
44+
"@types/node": "^22.0.0",
45+
"@types/react": "^18.2.0",
46+
"react-native": "^0.74.0"
4247
}
4348
}

scripts/dynamic.extensions.mjs

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,12 @@
22

33
import fs from 'node:fs';
44
import path from 'node:path';
5-
import { fileURLToPath } from 'url';
5+
import { getToolVersion } from './src/preinstall/tool-versions.js';
66

77
/**
88
* @typedef {() => boolean} ConditionalCheck
99
*/
1010

11-
/**
12-
* Get the package.json manifest for a given folder.
13-
* @param {string} folder
14-
* @returns {import('./src/utils/projectRoot.js').PackageManifest}
15-
*/
16-
function getPackageManifest(folder) {
17-
const manifestPath = path.join(folder, 'package.json');
18-
return JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
19-
}
20-
21-
// Get the versions once, so we don't query again on each package
22-
const scriptFolder = path.dirname(fileURLToPath(import.meta.url));
23-
const scriptManifest = getPackageManifest(scriptFolder);
24-
const rootManifest = getPackageManifest(path.dirname(scriptFolder));
25-
// all merged versions from the root and script manifests
26-
// have the root manifest take precedence over the script manifest, this allows the script folder to ingest newer
27-
// tooling without updating all projects in the repo
28-
const baseVersions = {
29-
...scriptManifest?.devDependencies,
30-
...scriptManifest?.dependencies,
31-
...rootManifest?.devDependencies,
32-
...rootManifest?.dependencies,
33-
};
34-
3511
/**
3612
* Conditionally add a dependency to the given dependencies object if it is not already present
3713
* @param {string[]} depsToAdd
@@ -45,12 +21,13 @@ function conditionallyAdd(depsToAdd, manifest, condition) {
4521
if (!condition || (typeof condition === 'function' ? condition() : condition)) {
4622
for (const dep of depsToAdd) {
4723
if (!manifest.dependencies?.[dep] && !manifest.devDependencies?.[dep]) {
48-
if (baseVersions[dep]) {
24+
const version = getToolVersion(dep);
25+
if (version) {
4926
// If the dependency is not already present, and the extra condition is met, add it
50-
newDeps[dep] = baseVersions[dep];
27+
newDeps[dep] = version;
5128
} else {
5229
// If the dependency is not found in the base versions, log a warning
53-
console.warn(`Dependency ${dep} not found in base versions. Skipping dynamic add.`);
30+
console.warn(`Dependency ${dep} version not found. Skipping dynamic add.`);
5431
}
5532
}
5633
}

scripts/package.json

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"scripts": {
1111
"build": "node ./src/cli.mjs build",
1212
"bundlesize": "bundlesize --debug",
13-
"depcheck": "node ./src/cli.mjs check-publishing",
13+
"depcheck": "node ./src/cli.mjs depcheck",
1414
"lint": "eslint",
1515
"prettier": "node ./src/cli.mjs prettier",
1616
"prettier-fix": "node ./src/cli.mjs prettier --fix true"
@@ -22,47 +22,27 @@
2222
},
2323
"devDependencies": {
2424
"@babel/core": "^7.22.5",
25-
"@babel/plugin-proposal-class-properties": "^7.18.6",
26-
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
27-
"@babel/plugin-transform-private-methods": "^7.27.1",
2825
"@eslint/js": "^9.0.0",
29-
"@microsoft/eslint-plugin-sdl": "^1.1.0",
30-
"@react-native-community/cli": "^13.6.4",
31-
"@react-native-community/cli-platform-android": "^13.6.4",
32-
"@react-native-community/cli-platform-ios": "^13.6.4",
33-
"@react-native/metro-babel-transformer": "^0.74.0",
34-
"@react-native/metro-config": "^0.74.0",
3526
"@rnx-kit/eslint-plugin": "^0.8.6",
3627
"@rnx-kit/jest-preset": "^0.2.1",
28+
"@rnx-kit/reporter": "^0.1.0",
3729
"@rnx-kit/tools-packages": "^0.1.1",
3830
"@rnx-kit/tools-typescript": "^0.1.1",
3931
"@rnx-kit/tsconfig": "^2.1.1",
40-
"@types/es6-collections": "^0.5.29",
41-
"@types/es6-promise": "0.0.32",
4232
"@types/jest": "^29.0.0",
33+
"@types/micromatch": "^4.0.9",
4334
"@types/node": "^22.0.0",
44-
"@types/react-test-renderer": "16.9.0",
45-
"@typescript-eslint/eslint-plugin": "^8.36.0",
46-
"@typescript-eslint/parser": "^8.36.0",
47-
"@uifabric/prettier-rules": "^7.0.3",
4835
"clipanion": "^4.0.0-rc.4",
4936
"depcheck": "^1.0.0",
5037
"eslint": "^9.0.0",
5138
"find-up": "^5.0.0",
52-
"fs-extra": "^7.0.1",
5339
"glob": "^10.0.0",
54-
"jest": "^29.2.1",
55-
"jest-diff": "^27.0.0",
56-
"jsdom": "^25.0.0",
57-
"metro-config": "^0.80.3",
5840
"metro-react-native-babel-transformer": "^0.76.5",
59-
"prettier": "^2.4.1",
41+
"micromatch": "^4.0.8",
6042
"react": "18.2.0",
6143
"react-native": "^0.74.0",
6244
"react-native-svg": "^15.4.0",
6345
"react-native-svg-transformer": "^1.0.0",
64-
"react-test-renderer": "18.2.0",
65-
"rimraf": "^5.0.1",
6646
"typescript": "^5.8.0",
6747
"workspace-tools": "^0.26.3"
6848
},
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/** @type {Record<string, string>} */
2+
export const devToolVersions = {
3+
'@babel/core': '^7.22.5',
4+
'@babel/plugin-proposal-class-properties': '^7.18.6',
5+
'@babel/plugin-proposal-private-property-in-object': '^7.21.11',
6+
'@babel/plugin-transform-private-methods': '^7.27.1',
7+
'@babel/preset-env': '^7.8.0',
8+
'@babel/preset-react': '^7.8.0',
9+
'@babel/preset-typescript': '^7.8.0',
10+
'@eslint/js': '^9.0.0',
11+
'@microsoft/eslint-plugin-sdl': '^1.1.0',
12+
'@react-native-community/cli': '^13.6.4',
13+
'@react-native-community/cli-platform-android': '^13.6.4',
14+
'@react-native-community/cli-platform-ios': '^13.6.4',
15+
'@react-native/babel-preset': '^0.74.0',
16+
'@react-native/metro-babel-transformer': '^0.74.0',
17+
'@react-native/metro-config': '^0.74.0',
18+
'@rnx-kit/eslint-plugin': '^0.8.6',
19+
'@rnx-kit/jest-preset': '^0.2.1',
20+
'@rnx-kit/tools-packages': '^0.1.1',
21+
'@rnx-kit/tools-typescript': '^0.1.1',
22+
'@rnx-kit/tsconfig': '^2.1.1',
23+
'@types/es6-collections': '^0.5.29',
24+
'@types/es6-promise': '0.0.32',
25+
'@types/jest': '^29.0.0',
26+
'@types/node': '^22.0.0',
27+
'@types/react-test-renderer': '16.9.0',
28+
'@typescript-eslint/eslint-plugin': '^8.36.0',
29+
'@typescript-eslint/parser': '^8.36.0',
30+
'@uifabric/prettier-rules': '^7.0.3',
31+
'babel-jest': '^29.7.0',
32+
clipanion: '^4.0.0-rc.4',
33+
depcheck: '^1.0.0',
34+
eslint: '^9.0.0',
35+
'eslint-plugin-import': '^2.27.5',
36+
'find-up': '^5.0.0',
37+
'fs-extra': '^7.0.1',
38+
glob: '^10.0.0',
39+
jest: '^29.2.1',
40+
'jest-diff': '^27.0.0',
41+
jsdom: '^25.0.0',
42+
'markdown-link-check': '^3.8.7',
43+
'metro-config': '^0.80.3',
44+
'metro-react-native-babel-transformer': '^0.76.5',
45+
prettier: '^2.4.1',
46+
'react-test-renderer': '18.2.0',
47+
rimraf: '^5.0.1',
48+
typescript: '^4.9.4',
49+
};
50+
51+
/**
52+
*
53+
* @param {string} packageName
54+
* @returns {string | null}
55+
*/
56+
export function getToolVersion(packageName) {
57+
return devToolVersions[packageName] || null;
58+
}

0 commit comments

Comments
 (0)