const fs = require('node:fs')
const path = require('node:path')
const packagesDir = path.join(__dirname, 'packages')
const packageDirs = fs.readdirSync(packagesDir, { withFileTypes: true })
.filter(dirent => dirent.isDirectory())
.map(dirent => dirent.name)
const packages = packageDirs.map(dir => {
const packageJSONPath = path.join(packagesDir, dir, 'package.json')
if (fs.existsSync(packageJSONPath)) {
const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, 'utf8'))
return packageJSON
}
return null
}).filter(Boolean)
const packageMap = new Map(packages.map(packageJSON => [packageJSON.name, packageJSON]))
module.exports = {
hooks: {
readPackage(packageJSON) {
* only lock workspace package version in our monorepo examples/
*/
if (!packageJSON.name.startsWith('@example/')) {
return packageJSON
}
packageMap.forEach(({ version }, packageName) => {
if (packageJSON.dependencies?.[packageName]) {
packageJSON.dependencies[packageName] = `workspace:*`
}
if (packageJSON.devDependencies?.[packageName]) {
packageJSON.devDependencies[packageName] = `workspace:*`
}
if (packageJSON.peerDependencies?.[packageName]) {
packageJSON.devDependencies[packageName] = `workspace:*`
}
})
return packageJSON
},
},
}