UNPKG

ask-cli-x

Version:

Alexa Skills Kit (ASK) Command Line Interfaces

125 lines (124 loc) 6.34 kB
"use strict"; 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();