| 293 | } |
| 294 | |
| 295 | export async function updateDependency( |
| 296 | deps: string[], pkg: string, parsedPkg: any): Promise<string> { |
| 297 | console.log(chalk.magenta.bold(`~~~ Update dependency versions ~~~`)); |
| 298 | |
| 299 | if (deps != null) { |
| 300 | const depsLatestVersion: string[] = deps.map( |
| 301 | dep => $(`npm view ${ |
| 302 | dep.includes('@') ? dep : '@tensorflow/' + dep} dist-tags.latest`)); |
| 303 | |
| 304 | for (let j = 0; j < deps.length; j++) { |
| 305 | const dep = deps[j]; |
| 306 | |
| 307 | let version = ''; |
| 308 | const depNpmName = dep.includes('@') ? dep : `@tensorflow/${dep}`; |
| 309 | if (parsedPkg['dependencies'] != null && |
| 310 | parsedPkg['dependencies'][depNpmName] != null) { |
| 311 | version = parsedPkg['dependencies'][depNpmName]; |
| 312 | } else if ( |
| 313 | parsedPkg['peerDependencies'] != null && |
| 314 | parsedPkg['peerDependencies'][depNpmName] != null) { |
| 315 | version = parsedPkg['peerDependencies'][depNpmName]; |
| 316 | } else if ( |
| 317 | parsedPkg['devDependencies'] != null && |
| 318 | parsedPkg['devDependencies'][depNpmName] != null) { |
| 319 | version = parsedPkg['devDependencies'][depNpmName]; |
| 320 | } |
| 321 | if (version == null) { |
| 322 | throw new Error(`No dependency found for ${dep}.`); |
| 323 | } |
| 324 | |
| 325 | let relaxedVersionPrefix = ''; |
| 326 | if (version.startsWith('~') || version.startsWith('^')) { |
| 327 | relaxedVersionPrefix = version.slice(0, 1); |
| 328 | } |
| 329 | const depVersionLatest = relaxedVersionPrefix + depsLatestVersion[j]; |
| 330 | |
| 331 | let depVersion = await question( |
| 332 | `Updated version for ` + |
| 333 | `${dep} (current is ${version}, leave empty for latest ${ |
| 334 | depVersionLatest}): `); |
| 335 | if (depVersion === '') { |
| 336 | depVersion = depVersionLatest; |
| 337 | } |
| 338 | console.log(chalk.blue(`Using version ${depVersion}`)); |
| 339 | |
| 340 | pkg = `${pkg}`.replace( |
| 341 | new RegExp(`"${depNpmName}": "${version}"`, 'g'), |
| 342 | `"${depNpmName}": "${depVersion}"`); |
| 343 | } |
| 344 | } |
| 345 | |
| 346 | return pkg; |
| 347 | } |
| 348 | |
| 349 | // Update package.json dependencies of tfjs packages. This method is different |
| 350 | // than `updateDependency`, it does not rely on published versions, instead it |