mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
209 lines
6.0 KiB
JavaScript
209 lines
6.0 KiB
JavaScript
import _ from 'underscore';
|
|
import main from './main.js';
|
|
import { Console } from '../console/console.js';
|
|
import catalog from '../packaging/catalog/catalog.js';
|
|
import buildmessage from '../utils/buildmessage.js';
|
|
import {
|
|
CORDOVA_PLATFORMS,
|
|
ensureDevBundleDependencies,
|
|
filterPlatforms,
|
|
} from '../cordova/index.js';
|
|
import {PlatformList} from "../project-context";
|
|
|
|
function createProjectContext(appDir) {
|
|
import { ProjectContext } from '../project-context.js';
|
|
|
|
const projectContext = new ProjectContext({
|
|
projectDir: appDir
|
|
});
|
|
main.captureAndExit('=> Errors while initializing project:', () => {
|
|
// We're just reading metadata here; we don't need to resolve constraints.
|
|
projectContext.readProjectMetadata();
|
|
});
|
|
return projectContext;
|
|
}
|
|
|
|
function doAddPlatform(options) {
|
|
import { CordovaProject } from '../cordova/project.js';
|
|
|
|
Console.setVerbose(!!options.verbose);
|
|
|
|
const projectContext = createProjectContext(options.appDir);
|
|
|
|
const platformsToAdd = options.args;
|
|
let installedPlatforms = projectContext.platformList.getPlatforms();
|
|
|
|
main.captureAndExit('', 'adding platforms', () => {
|
|
for (var platform of platformsToAdd) {
|
|
if (installedPlatforms.includes(platform)) {
|
|
buildmessage.error(`${platform}: platform is already added`);
|
|
} else if (!CORDOVA_PLATFORMS.includes(platform)) {
|
|
buildmessage.error(`${platform}: no such platform`);
|
|
}
|
|
}
|
|
|
|
if (buildmessage.jobHasMessages()) {
|
|
return;
|
|
}
|
|
|
|
const cordovaProject = new CordovaProject(projectContext);
|
|
if (buildmessage.jobHasMessages()) return;
|
|
|
|
installedPlatforms = installedPlatforms.concat(platformsToAdd);
|
|
const cordovaPlatforms = filterPlatforms(installedPlatforms);
|
|
cordovaProject.ensurePlatformsAreSynchronized(cordovaPlatforms);
|
|
|
|
if (buildmessage.jobHasMessages()) {
|
|
return;
|
|
}
|
|
|
|
// Only write the new platform list when we have successfully synchronized.
|
|
projectContext.platformList.write(installedPlatforms);
|
|
|
|
for (var platform of platformsToAdd) {
|
|
Console.info(`${platform}: added platform`);
|
|
if (cordovaPlatforms.includes(platform)) {
|
|
cordovaProject.checkPlatformRequirements(platform);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function doRemovePlatform(options) {
|
|
import { CordovaProject } from '../cordova/project.js';
|
|
import { PlatformList } from '../project-context.js';
|
|
|
|
const projectContext = createProjectContext(options.appDir);
|
|
|
|
const platformsToRemove = options.args;
|
|
let installedPlatforms = projectContext.platformList.getPlatforms();
|
|
|
|
main.captureAndExit('', 'removing platforms', () => {
|
|
for (platform of platformsToRemove) {
|
|
// Explain why we can't remove server or browser platforms
|
|
if (PlatformList.DEFAULT_PLATFORMS.includes(platform)) {
|
|
buildmessage.error(`${platform}: cannot remove platform in this \
|
|
version of Meteor`);
|
|
} else if (!installedPlatforms.includes(platform)) {
|
|
buildmessage.error(`${platform}: platform is not in this project`);
|
|
}
|
|
}
|
|
|
|
if (buildmessage.jobHasMessages()) {
|
|
return;
|
|
}
|
|
|
|
installedPlatforms = _.without(installedPlatforms, ...platformsToRemove);
|
|
projectContext.platformList.write(installedPlatforms);
|
|
|
|
for (platform of platformsToRemove) {
|
|
Console.info(`${platform}: removed platform`);
|
|
}
|
|
|
|
if (process.platform !== 'win32') {
|
|
const cordovaProject = new CordovaProject(projectContext);
|
|
if (buildmessage.jobHasMessages()) return;
|
|
const cordovaPlatforms = filterPlatforms(installedPlatforms);
|
|
cordovaProject.ensurePlatformsAreSynchronized(cordovaPlatforms);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Add one or more Cordova platforms
|
|
main.registerCommand({
|
|
name: 'add-platform',
|
|
options: {
|
|
verbose: { type: Boolean, short: "v" }
|
|
},
|
|
minArgs: 1,
|
|
maxArgs: Infinity,
|
|
requiresApp: true,
|
|
catalogRefresh: new catalog.Refresh.Never(),
|
|
notOnWindows: false
|
|
}, function (options) {
|
|
ensureDevBundleDependencies();
|
|
doAddPlatform(options);
|
|
});
|
|
|
|
// Remove one or more Cordova platforms
|
|
main.registerCommand({
|
|
name: 'remove-platform',
|
|
minArgs: 1,
|
|
maxArgs: Infinity,
|
|
requiresApp: true,
|
|
catalogRefresh: new catalog.Refresh.Never()
|
|
}, function (options) {
|
|
ensureDevBundleDependencies();
|
|
doRemovePlatform(options);
|
|
});
|
|
|
|
main.registerCommand({
|
|
name: 'list-platforms',
|
|
requiresApp: true,
|
|
catalogRefresh: new catalog.Refresh.Never()
|
|
}, function (options) {
|
|
const projectContext = createProjectContext(options.appDir);
|
|
|
|
const installedPlatforms = projectContext.platformList.getPlatforms();
|
|
|
|
Console.rawInfo(installedPlatforms.join('\n') + '\n');
|
|
});
|
|
|
|
main.registerCommand({
|
|
name: 'install-sdk',
|
|
options: {
|
|
verbose: { type: Boolean, short: "v" }
|
|
},
|
|
minArgs: 0,
|
|
maxArgs: Infinity,
|
|
catalogRefresh: new catalog.Refresh.Never(),
|
|
hidden: true,
|
|
notOnWindows: true
|
|
}, function (options) {
|
|
Console.setVerbose(!!options.verbose);
|
|
|
|
Console.info("Please follow the installation instructions in the mobile guide:");
|
|
Console.info(Console.url("http://guide.meteor.com/cordova.html#installing-prerequisites"));
|
|
|
|
return 0;
|
|
});
|
|
|
|
main.registerCommand({
|
|
name: 'configure-android',
|
|
options: {
|
|
verbose: { type: Boolean, short: "v" }
|
|
},
|
|
minArgs: 0,
|
|
maxArgs: Infinity,
|
|
catalogRefresh: new catalog.Refresh.Never(),
|
|
hidden: true,
|
|
notOnWindows: true
|
|
}, function (options) {
|
|
Console.setVerbose(!!options.verbose);
|
|
|
|
Console.info(`You can launch the Android SDK Manager from within Android \
|
|
Studio.
|
|
See`, Console.url("http://developer.android.com/tools/help/sdk-manager.html"), `
|
|
Alternatively, you can launch it by running the 'android' command.
|
|
(This requires that you have set ANDROID_HOME and added ANDROID_HOME/tools \
|
|
to your PATH.)`);
|
|
|
|
return 0;
|
|
});
|
|
|
|
main.registerCommand({
|
|
name: 'ensure-cordova-dependencies',
|
|
options: {
|
|
verbose: { type: Boolean, short: "v" }
|
|
},
|
|
minArgs: 0,
|
|
maxArgs: Infinity,
|
|
requiresApp: true,
|
|
catalogRefresh: new catalog.Refresh.Never(),
|
|
}, function (options) {
|
|
Console.setVerbose(!!options.verbose);
|
|
|
|
ensureDevBundleDependencies();
|
|
Console.info("Cordova dependencies are installed.");
|
|
});
|