ask-cli-x
Version:
Alexa Skills Kit (ASK) Command Line Interfaces
125 lines (124 loc) • 6.34 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCommand = void 0;
const abstract_command_1 = require("../abstract-command");
const option_model_json_1 = __importDefault(require("../option-model.json"));
const hosted_skill_controller_1 = __importDefault(require("../../controllers/hosted-skill-controller"));
const manifest_1 = __importDefault(require("../../model/manifest"));
const resources_config_1 = __importDefault(require("../../model/resources-config"));
const constants_1 = __importDefault(require("../../utils/constants"));
const profile_helper_1 = __importDefault(require("../../utils/profile-helper"));
const messenger_1 = __importDefault(require("../../view/messenger"));
const helper_1 = __importDefault(require("./helper"));
const hosted_skill_helper_1 = __importDefault(require("./hosted-skill-helper"));
const wizard_helper_1 = __importDefault(require("./wizard-helper"));
const GIT_USAGE_HOSTED_SKILL_DOCUMENTATION = "https://developer.amazon.com/en-US/docs/alexa/" + "hosted-skills/build-a-skill-end-to-end-using-an-alexa-hosted-skill.html#askcli";
class NewCommand extends abstract_command_1.AbstractCommand {
name() {
return "new";
}
description() {
return "create a new skill project from Alexa skill templates";
}
requiredOptions() {
return [];
}
optionalOptions() {
return ["templateUrl", "templateBranch", "profile", "debug"];
}
async handle(cmd) {
let profile, vendorId;
try {
profile = profile_helper_1.default.runtimeProfile(cmd.profile);
vendorId = profile_helper_1.default.resolveVendorId(profile);
}
catch (err) {
messenger_1.default.getInstance().error(err);
throw err;
}
// 0. collect user input and then create a skill(hosted skill or non hosted skill)
messenger_1.default.getInstance().info("Please follow the wizard to start your Alexa skill project ->");
return new Promise((resolve, reject) => {
wizard_helper_1.default.collectUserCreationProjectInfo(cmd, (initErr, userInput) => {
if (initErr) {
messenger_1.default.getInstance().error(initErr);
return reject(initErr);
}
if (!userInput) {
return resolve();
}
if (userInput.deploymentType === constants_1.default.DEPLOYER_TYPE.HOSTED.NAME) {
createHostedSkill(cmd, profile, vendorId, userInput)
.then(resolve)
.catch((hostedErr) => {
messenger_1.default.getInstance().error(hostedErr);
return reject(hostedErr);
});
}
else {
createNonHostedSkill(cmd, profile, cmd.debug, userInput)
.then(resolve)
.catch((nonHostedErr) => {
messenger_1.default.getInstance().error(nonHostedErr);
return reject(nonHostedErr);
});
}
});
});
}
}
exports.default = NewCommand;
function createHostedSkill(cmd, profile, vendorId, userInput) {
return new Promise((resolve, reject) => {
const hostedSkillController = new hosted_skill_controller_1.default({ profile, doDebug: cmd.debug });
hosted_skill_helper_1.default.validateUserQualification(vendorId, hostedSkillController, (validateErr) => {
if (validateErr) {
return reject(validateErr);
}
hosted_skill_helper_1.default.createHostedSkill(hostedSkillController, userInput, vendorId, (createErr, skillId) => {
if (createErr) {
return reject(createErr);
}
messenger_1.default.getInstance().info(`Hosted skill provisioning finished. Skill-Id: ${skillId}`);
messenger_1.default.getInstance().info(`Please follow the instructions at ${GIT_USAGE_HOSTED_SKILL_DOCUMENTATION}` +
' to learn more about the usage of "git" for Hosted skill.');
resources_config_1.default.getInstance().write();
resolve();
});
});
});
}
function createNonHostedSkill(cmd, profile, doDebug, userInput) {
return new Promise((resolve, reject) => {
// 1.download skill project templates
helper_1.default.downloadTemplateFromGit(userInput, doDebug, (projectErr, projectFolderPath) => {
if (projectErr) {
return reject(projectErr);
}
messenger_1.default.getInstance().info(`Project for skill "${userInput.skillName}" is successfully created at ${projectFolderPath}\n`);
try {
// 2.load involving M(Model) component (ResourcesConfig & Manifest) from the downloaded skill project with 'default' profile
helper_1.default.loadSkillProjectModel(projectFolderPath, "default");
// 3.remove git record and update skill name
helper_1.default.updateSkillProjectWithUserSettings(userInput.skillName, projectFolderPath, profile);
}
catch (projErr) {
return reject(projErr);
}
// 4.bootstrap the skill project with deploy delegate if needed
helper_1.default.initializeDeployDelegate(userInput.deploymentType, projectFolderPath, profile, cmd.debug, (deployDelegateErr, deployerType) => {
if (deployDelegateErr) {
return reject(deployDelegateErr);
}
messenger_1.default.getInstance().info(deployerType ? `Project initialized with deploy delegate "${deployerType}" successfully.` : "Project initialized successfully.");
resources_config_1.default.getInstance().write();
manifest_1.default.getInstance().write();
resolve();
});
});
});
}
exports.createCommand = new NewCommand(option_model_json_1.default).createCommand();