@aws-amplify/cli
Version:
124 lines • 5.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Binary = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const child_process_1 = require("child_process");
const util_1 = __importDefault(require("util"));
const tar_stream_1 = __importDefault(require("tar-stream"));
const zlib_1 = require("zlib");
const stream_1 = __importDefault(require("stream"));
const os_1 = __importDefault(require("os"));
const axios_1 = __importDefault(require("axios"));
const rimraf_1 = __importDefault(require("rimraf"));
const package_json_1 = require("./package.json");
const BINARY_LOCATION = 'https://package.cli.amplify.aws';
const pipeline = util_1.default.promisify(stream_1.default.pipeline);
const error = (msg) => {
console.error(msg);
process.exit(1);
};
const supportedPlatforms = [
{
TYPE: 'Windows_NT',
ARCHITECTURE: 'x64',
COMPRESSED_BINARY_PATH: 'amplify-pkg-win-x64.tgz',
},
{
TYPE: 'Linux',
ARCHITECTURE: 'x64',
COMPRESSED_BINARY_PATH: 'amplify-pkg-linux-x64.tgz',
},
{
TYPE: 'Linux',
ARCHITECTURE: 'arm64',
COMPRESSED_BINARY_PATH: 'amplify-pkg-linux-arm64.tgz',
},
{
TYPE: 'Darwin',
ARCHITECTURE: 'x64',
COMPRESSED_BINARY_PATH: 'amplify-pkg-macos-x64.tgz',
},
{
TYPE: 'Darwin',
ARCHITECTURE: 'arm64',
COMPRESSED_BINARY_PATH: 'amplify-pkg-macos-x64.tgz',
},
];
const getPlatformCompressedBinaryName = () => {
const type = os_1.default.type();
const architecture = os_1.default.arch();
const platform = supportedPlatforms.find((platformInfo) => type === platformInfo.TYPE && architecture === platformInfo.ARCHITECTURE);
if (!platform) {
error(`Platform with type "${type}" and architecture "${architecture}" is not supported by ${package_json_1.name}.}`);
}
return platform.COMPRESSED_BINARY_PATH;
};
const getCompressedBinaryUrl = () => {
const compressedBinaryName = getPlatformCompressedBinaryName();
let url = `${BINARY_LOCATION}/${package_json_1.version}/${compressedBinaryName}`;
if (process.env.IS_AMPLIFY_CI && process.env.CODEBUILD_SRC_DIR) {
url = `https://${process.env.PKG_CLI_CLOUDFRONT_URL}/${package_json_1.version}/${compressedBinaryName}`;
}
return url;
};
class Binary {
constructor() {
this.installDirectory = path_1.default.join(os_1.default.homedir(), '.amplify', 'bin');
if (!fs_1.default.existsSync(this.installDirectory)) {
fs_1.default.mkdirSync(this.installDirectory, { recursive: true });
}
const amplifyExecutableName = os_1.default.type() === 'Windows_NT' ? 'amplify.exe' : 'amplify';
this.binaryPath = path_1.default.join(this.installDirectory, amplifyExecutableName);
}
async install() {
if (fs_1.default.existsSync(this.installDirectory)) {
rimraf_1.default.sync(this.installDirectory);
}
fs_1.default.mkdirSync(this.installDirectory, { recursive: true });
console.log(`Downloading release from ${getCompressedBinaryUrl()}`);
try {
const res = await (0, axios_1.default)({ url: getCompressedBinaryUrl(), responseType: 'stream' });
const extractPromiseCollector = [];
await pipeline(res.data, (0, zlib_1.createGunzip)(), this.extract(extractPromiseCollector));
await Promise.all(extractPromiseCollector);
console.log('amplify has been installed!');
(0, child_process_1.spawnSync)(this.binaryPath, ['version'], { cwd: process.cwd(), stdio: 'inherit' });
}
catch (e) {
error(`Error fetching release: ${e.message}`);
}
}
async run() {
if (!fs_1.default.existsSync(this.binaryPath)) {
await this.install();
}
const [, , ...args] = process.argv;
const result = (0, child_process_1.spawnSync)(this.binaryPath, args, { cwd: process.cwd(), stdio: 'inherit' });
if (args[0] === 'uninstall') {
(0, child_process_1.spawnSync)('npm', ['uninstall', '-g', '@aws-amplify/cli'], { cwd: process.cwd(), stdio: 'inherit' });
}
process.exit(result.status);
}
extract(extractPromiseCollector) {
const extract = tar_stream_1.default.extract();
extract.on('entry', (header, extractStream, next) => {
if (header.type === 'file') {
const fileWriteStream = fs_1.default.createWriteStream(this.binaryPath, {
mode: 0o755,
});
extractPromiseCollector.push(pipeline(extractStream, fileWriteStream));
}
extractStream.on('end', () => {
next();
});
extractStream.resume();
});
return extract;
}
}
exports.Binary = Binary;
//# sourceMappingURL=binary.js.map