nativescript
Version:
Command-line interface for building NativeScript projects
88 lines • 4.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BuildArtifactsService = void 0;
const path = require("path");
const yok_1 = require("../common/yok");
const _ = require("lodash");
class BuildArtifactsService {
constructor($errors, $fs, $logger) {
this.$errors = $errors;
this.$fs = $fs;
this.$logger = $logger;
}
async getLatestAppPackagePath(platformData, buildOutputOptions) {
const outputPath = buildOutputOptions.outputPath ||
platformData.getBuildOutputPath(buildOutputOptions);
const applicationPackage = this.getLatestApplicationPackage(outputPath, platformData.getValidBuildOutputData(buildOutputOptions));
const packageFile = applicationPackage.packageName;
if (!packageFile || !this.$fs.exists(packageFile)) {
this.$errors.fail(`Unable to find built application. Try 'ns build ${platformData.platformNameLowerCase}'.`);
}
return packageFile;
}
getAllAppPackages(buildOutputPath, validBuildOutputData) {
const rootFiles = this.$fs
.readDirectory(buildOutputPath)
.map((filename) => path.join(buildOutputPath, filename));
let result = this.getApplicationPackagesCore(rootFiles, validBuildOutputData.packageNames);
if (result) {
return result;
}
const candidates = this.$fs.enumerateFilesInDirectorySync(buildOutputPath);
result = this.getApplicationPackagesCore(candidates, validBuildOutputData.packageNames);
if (result) {
return result;
}
if (validBuildOutputData.regexes && validBuildOutputData.regexes.length) {
const packages = candidates.filter((filepath) => _.some(validBuildOutputData.regexes, (regex) => regex.test(path.basename(filepath))));
return this.createApplicationPackages(packages);
}
return [];
}
copyLatestAppPackage(targetPath, platformData, buildOutputOptions) {
targetPath = path.resolve(targetPath);
const outputPath = buildOutputOptions.outputPath ||
platformData.getBuildOutputPath(buildOutputOptions);
const applicationPackage = this.getLatestApplicationPackage(outputPath, platformData.getValidBuildOutputData(buildOutputOptions));
const packageFile = applicationPackage.packageName;
this.$fs.ensureDirectoryExists(path.dirname(targetPath));
if (this.$fs.exists(targetPath) &&
this.$fs.getFsStats(targetPath).isDirectory()) {
const sourceFileName = path.basename(packageFile);
this.$logger.trace(`Specified target path: '${targetPath}' is directory. Same filename will be used: '${sourceFileName}'.`);
targetPath = path.join(targetPath, sourceFileName);
}
this.$fs.copyFile(packageFile, targetPath);
this.$logger.info(`Copied file '${packageFile}' to '${targetPath}'.`);
}
getLatestApplicationPackage(buildOutputPath, validBuildOutputData) {
let packages = this.getAllAppPackages(buildOutputPath, validBuildOutputData);
const packageExtName = path.extname(validBuildOutputData.packageNames[0]);
if (packages.length === 0) {
this.$errors.fail(`No ${packageExtName} found in ${buildOutputPath} directory.`);
}
if (packages.length > 1) {
this.$logger.warn(`More than one ${packageExtName} found in ${buildOutputPath} directory. Using the last one produced from build.`);
}
packages = _.sortBy(packages, (pkg) => pkg.time).reverse(); // We need to reverse because sortBy always sorts in ascending order
return packages[0];
}
getApplicationPackagesCore(candidates, validPackageNames) {
const packages = candidates.filter((filePath) => _.includes(validPackageNames, path.basename(filePath)));
if (packages.length > 0) {
return this.createApplicationPackages(packages);
}
return null;
}
createApplicationPackages(packages) {
return packages.map((packageName) => {
return {
packageName,
time: this.$fs.getFsStats(packageName).mtime,
};
});
}
}
exports.BuildArtifactsService = BuildArtifactsService;
yok_1.injector.register("buildArtifactsService", BuildArtifactsService);
//# sourceMappingURL=build-artifacts-service.js.map