backend-manager 5.0.56 → 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 +18 -19
- package/src/cli/commands/install.js +98 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "backend-manager",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.58",
|
|
4
4
|
"description": "Quick tools for developing Firebase functions",
|
|
5
5
|
"main": "src/manager/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -45,24 +45,24 @@
|
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@firebase/rules-unit-testing": "^5.0.0",
|
|
47
47
|
"@google-cloud/pubsub": "^5.2.2",
|
|
48
|
-
"@google-cloud/storage": "^7.
|
|
48
|
+
"@google-cloud/storage": "^7.18.0",
|
|
49
49
|
"@octokit/rest": "^19.0.13",
|
|
50
50
|
"@sendgrid/mail": "^7.7.0",
|
|
51
51
|
"@sentry/node": "^6.19.7",
|
|
52
|
-
"body-parser": "^1.20.
|
|
52
|
+
"body-parser": "^1.20.4",
|
|
53
53
|
"busboy": "^1.6.0",
|
|
54
54
|
"chalk": "^4.1.2",
|
|
55
|
-
"cors": "^2.8.
|
|
55
|
+
"cors": "^2.8.6",
|
|
56
56
|
"dotenv": "^16.6.1",
|
|
57
|
-
"express": "^4.
|
|
57
|
+
"express": "^4.22.1",
|
|
58
58
|
"fs-jetpack": "^5.1.0",
|
|
59
|
-
"glob": "^11.0
|
|
60
|
-
"hcaptcha": "^0.
|
|
61
|
-
"inquirer": "^8.2.
|
|
59
|
+
"glob": "^11.1.0",
|
|
60
|
+
"hcaptcha": "^0.2.0",
|
|
61
|
+
"inquirer": "^8.2.7",
|
|
62
62
|
"itwcw-package-analytics": "^1.0.6",
|
|
63
63
|
"json5": "^2.2.3",
|
|
64
64
|
"jwt-decode": "^4.0.0",
|
|
65
|
-
"lodash": "^4.17.
|
|
65
|
+
"lodash": "^4.17.23",
|
|
66
66
|
"lowdb": "^1.0.0",
|
|
67
67
|
"mailchimp-api-v3": "^1.15.0",
|
|
68
68
|
"mime-types": "^2.1.35",
|
|
@@ -70,28 +70,27 @@
|
|
|
70
70
|
"moment": "^2.30.1",
|
|
71
71
|
"nanoid": "^3.3.11",
|
|
72
72
|
"node-fetch": "^2.7.0",
|
|
73
|
-
"node-powertools": "^2.3.
|
|
73
|
+
"node-powertools": "^2.3.2",
|
|
74
74
|
"npm-api": "^1.0.1",
|
|
75
75
|
"paypal-server-api": "^2.0.14",
|
|
76
76
|
"pushid": "^1.0.0",
|
|
77
|
-
"resolve-account": "^
|
|
77
|
+
"resolve-account": "^2.0.1",
|
|
78
78
|
"shortid": "^2.2.17",
|
|
79
79
|
"uid-generator": "^2.0.0",
|
|
80
|
-
"ultimate-jekyll-poster": "^1.0.2",
|
|
81
80
|
"uuid": "^9.0.1",
|
|
82
|
-
"wonderful-fetch": "^1.3.
|
|
81
|
+
"wonderful-fetch": "^1.3.4",
|
|
83
82
|
"wonderful-log": "^1.0.7",
|
|
84
83
|
"wonderful-version": "^1.3.2",
|
|
85
|
-
"yaml": "^2.8.
|
|
84
|
+
"yaml": "^2.8.2",
|
|
86
85
|
"yargs": "^17.7.2"
|
|
87
86
|
},
|
|
88
87
|
"devDependencies": {
|
|
89
|
-
"chai": "^5.
|
|
90
|
-
"prepare-package": "^1.
|
|
91
|
-
"sinon": "^21.0.
|
|
88
|
+
"chai": "^5.3.3",
|
|
89
|
+
"prepare-package": "^1.2.6",
|
|
90
|
+
"sinon": "^21.0.1"
|
|
92
91
|
},
|
|
93
92
|
"peerDependencies": {
|
|
94
|
-
"firebase-admin": "^13.
|
|
95
|
-
"firebase-functions": "^
|
|
93
|
+
"firebase-admin": "^13.6.0",
|
|
94
|
+
"firebase-functions": "^7.0.5"
|
|
96
95
|
}
|
|
97
96
|
}
|
|
@@ -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;
|