serverless/lib/cli/render-version.js

89 lines
2.5 KiB
JavaScript

'use strict';
const path = require('path');
const os = require('os');
const { createRequire } = require('module');
const { version } = require('../../package');
const spawn = require('child-process-ext/spawn');
const { version: dashboardPluginVersion } = require('@serverless/dashboard-plugin/package');
const { platformClientVersion } = require('@serverless/dashboard-plugin');
const isStandaloneExecutable = require('../utils/is-standalone-executable');
const localServerlessPath = require('./local-serverless-path');
const { writeText } = require('@serverless/utils/log');
const serverlessPath = path.resolve(__dirname, '../..');
const resolveTencentCliNpmLocalVersion = () => {
try {
return `${
createRequire(path.resolve(process.cwd(), 'require-resolver'))('serverless-tencent/package')
.version
} (npm local)`;
} catch {
return null;
}
};
const resolveTencentCliNpmGlobalVersion = async () => {
const npmNodeModulesPath = await (async () => {
try {
return String((await spawn('npm', ['root', '-g'])).stdoutBuffer).trim();
} catch {
return null;
}
})();
if (!npmNodeModulesPath) return null;
try {
return `${require(`${npmNodeModulesPath}/serverless-tencent/package`).version} (npm global)`;
} catch {
return null;
}
};
const resolveTencentCliStandaloneVersion = async () => {
try {
return `${String(
(
await spawn(
path.resolve(
os.homedir(),
`.serverless-tencent/bin/serverless-tencent${
process.platform === 'win32' ? '.exe' : ''
}`
),
['--version', '--plain']
)
).stdoutBuffer
).trim()} (binary)`;
} catch (error) {
return null;
}
};
module.exports = async () => {
const installationModePostfix = (() => {
if (isStandaloneExecutable) return ' (standalone)';
if (serverlessPath === localServerlessPath) return ' (local)';
return '';
})();
const globalInstallationPostfix = (() => {
if (EvalError.$serverlessInitInstallationVersion) {
return ` ${EvalError.$serverlessInitInstallationVersion} (global)`;
}
return '';
})();
const tencentCliVersion =
resolveTencentCliNpmLocalVersion() ||
(await resolveTencentCliNpmGlobalVersion()) ||
(await resolveTencentCliStandaloneVersion());
writeText(
`Framework Core: ${version}${installationModePostfix}${globalInstallationPostfix}`,
`Plugin: ${dashboardPluginVersion}`,
`SDK: ${platformClientVersion}\n${tencentCliVersion ? `Tencent CLI: ${tencentCliVersion}` : ''}`
);
};