backend-manager 5.0.57 → 5.0.58

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backend-manager",
3
- "version": "5.0.57",
3
+ "version": "5.0.58",
4
4
  "description": "Quick tools for developing Firebase functions",
5
5
  "main": "src/manager/index.js",
6
6
  "bin": {
@@ -2,6 +2,10 @@ const BaseCommand = require('./base-command');
2
2
  const chalk = require('chalk');
3
3
  const os = require('os');
4
4
  const powertools = require('node-powertools');
5
+ const Npm = require('npm-api');
6
+ const jetpack = require('fs-jetpack');
7
+ const wonderfulVersion = require('wonderful-version');
8
+ const inquirer = require('inquirer');
5
9
 
6
10
  class InstallCommand extends BaseCommand {
7
11
  async execute(type) {
@@ -18,10 +22,104 @@ class InstallCommand extends BaseCommand {
18
22
  }
19
23
 
20
24
  async installLive() {
25
+ // Check and update peer dependencies before installing
26
+ await this.updatePeerDependencies();
27
+
21
28
  await this.uninstallPkg('backend-manager');
22
29
  await this.installPkg('backend-manager');
23
30
  }
24
31
 
32
+ async updatePeerDependencies() {
33
+ // Fetch latest backend-manager package info from npm
34
+ const latestBem = await this.getPackageInfo('backend-manager');
35
+ if (!latestBem || !latestBem.peerDependencies) {
36
+ this.logWarning('Could not fetch backend-manager peer dependencies, proceeding anyway...');
37
+ return;
38
+ }
39
+
40
+ // Read project's package.json
41
+ const projectPkgPath = `${this.firebaseProjectPath}/functions/package.json`;
42
+ const projectPkg = jetpack.read(projectPkgPath, 'json');
43
+ if (!projectPkg || !projectPkg.dependencies) {
44
+ this.logWarning('Could not read project package.json, proceeding anyway...');
45
+ return;
46
+ }
47
+
48
+ // Check each peer dependency
49
+ const peerDeps = ['firebase-admin', 'firebase-functions'];
50
+ const outdatedDeps = [];
51
+
52
+ for (const dep of peerDeps) {
53
+ const required = latestBem.peerDependencies[dep];
54
+ const installed = projectPkg.dependencies[dep];
55
+
56
+ if (!required || !installed) {
57
+ continue;
58
+ }
59
+
60
+ // Check if installed version meets the requirement
61
+ const meetsRequirement = wonderfulVersion.is(installed, '>=', required);
62
+ const levelDifference = wonderfulVersion.levelDifference(required, installed);
63
+
64
+ if (!meetsRequirement) {
65
+ outdatedDeps.push({
66
+ name: dep,
67
+ installed,
68
+ required,
69
+ isMajor: levelDifference === 'major',
70
+ });
71
+ }
72
+ }
73
+
74
+ // If no outdated deps, we're good
75
+ if (outdatedDeps.length === 0) {
76
+ return;
77
+ }
78
+
79
+ // Log what needs updating
80
+ this.log(chalk.yellow('\nThe following peer dependencies need to be updated for backend-manager:'));
81
+ for (const dep of outdatedDeps) {
82
+ const majorWarning = dep.isMajor ? chalk.red(' (major update)') : '';
83
+ this.log(` ${chalk.bold(dep.name)}: ${dep.installed} → ${dep.required}${majorWarning}`);
84
+ }
85
+
86
+ // Prompt user
87
+ const { shouldUpdate } = await inquirer.prompt([{
88
+ type: 'confirm',
89
+ name: 'shouldUpdate',
90
+ message: 'Update these dependencies now?',
91
+ default: true,
92
+ }]);
93
+
94
+ if (!shouldUpdate) {
95
+ this.log(chalk.yellow('\nSkipping dependency updates. The install may fail due to peer dependency conflicts.'));
96
+ return;
97
+ }
98
+
99
+ // Update each dependency
100
+ for (const dep of outdatedDeps) {
101
+ this.log(chalk.cyan(`\nUpdating ${dep.name}...`));
102
+ await this.installPkg(dep.name, `@${dep.required}`);
103
+ }
104
+
105
+ this.log(chalk.green('\nPeer dependencies updated successfully!\n'));
106
+ }
107
+
108
+ async getPackageInfo(packageName) {
109
+ const npm = new Npm();
110
+
111
+ return new Promise((resolve) => {
112
+ npm.repo(packageName)
113
+ .package()
114
+ .then((pkg) => {
115
+ resolve(pkg);
116
+ })
117
+ .catch(() => {
118
+ resolve(null);
119
+ });
120
+ });
121
+ }
122
+
25
123
  async installPkg(name, version, type) {
26
124
  let v;
27
125
  let t;