@azure/static-web-apps-cli
Version:
Azure Static Web Apps CLI
88 lines (80 loc) • 5.96 kB
JavaScript
import chalk from "chalk";
import { DEFAULT_CONFIG } from "../../../config.js";
import { configureOptions, isUserOption } from "../../../core/utils/options.js";
import { isHttpUrl, parsePort } from "../../../core/utils/net.js";
import { matchLoadedConfigName } from "../../../core/utils/cli-config.js";
import { logger } from "../../../core/utils/logger.js";
import { parseServerTimeout } from "../../../core/utils/cli.js";
import { start } from "./start.js";
export default function registerCommand(program) {
program
.command("start [configName|outputLocation|appDevserverUrl]")
.usage("[configName|outputLocation|appDevserverUrl] [options]")
.description("start the emulator from a directory or bind to a dev server")
.option("-a, --app-location <path>", "the folder containing the source code of the front-end application", DEFAULT_CONFIG.appLocation)
.option("-i, --api-location <path>", "the folder containing the source code of the API application", DEFAULT_CONFIG.apiLocation)
.option("-db, --data-api-location <path>", "the path to the data-api config file", DEFAULT_CONFIG.dataApiLocation)
.option("-O, --output-location <path>", "the folder containing the built source of the front-end application", DEFAULT_CONFIG.outputLocation)
.option("-D, --app-devserver-url <url>", "connect to the app dev server at this URL instead of using output location", DEFAULT_CONFIG.appDevserverUrl)
.option("-is, --api-devserver-url <url>", "connect to the api server at this URL instead of using api location", DEFAULT_CONFIG.apiDevserverUrl)
.option("-ds, --data-api-devserver-url <url>", "connect to the data-api server at this URL", DEFAULT_CONFIG.dataApiDevserverUrl)
.option("-j, --api-port <apiPort>", "the API server port passed to `func start`", parsePort, DEFAULT_CONFIG.apiPort)
.option("-q, --host <host>", "the host address to use for the CLI dev server", DEFAULT_CONFIG.host)
.option("-p, --port <port>", "the port value to use for the CLI dev server", parsePort, DEFAULT_CONFIG.port)
.option("-s, --ssl", "serve the front-end application and API over HTTPS", DEFAULT_CONFIG.ssl)
.option("-e, --ssl-cert <sslCertLocation>", "the SSL certificate (.crt) to use when enabling HTTPS", DEFAULT_CONFIG.sslCert)
.option("-k, --ssl-key <sslKeyLocation>", "the SSL key (.key) to use when enabling HTTPS", DEFAULT_CONFIG.sslKey)
.option("-r, --run <startupScript>", "run a custom shell command or script file at startup", DEFAULT_CONFIG.run)
.option("-t, --devserver-timeout <time>", "the time to wait (in seconds) when connecting to a front-end application's dev server or api server", parseServerTimeout, DEFAULT_CONFIG.devserverTimeout)
.option("-w, --swa-config-location <swaConfigLocation>", "the directory where the staticwebapp.config.json file is located", DEFAULT_CONFIG.swaConfigLocation)
.option("-o, --open", "open the browser to the dev server", DEFAULT_CONFIG.open)
.option("-f, --func-args <funcArgs>", "pass additional arguments to the func start command")
.action(async (positionalArg, _options, command) => {
positionalArg = positionalArg?.trim();
const options = await configureOptions(positionalArg, command.optsWithGlobals(), command, "start");
if (positionalArg && !matchLoadedConfigName(positionalArg)) {
// If it's not the config name, it's either output location or dev server url
const isUrl = isHttpUrl(positionalArg);
if (isUrl) {
if (isUserOption("appDevserverUrl")) {
logger.error(`swa deploy <appDevserverUrl> cannot be used when --app-devserver-url option is also set.`);
logger.error(`You either have to use the positional argument or option, not both at the same time.`, true);
}
options.appDevserverUrl = positionalArg;
}
else {
if (isUserOption("outputLocation")) {
logger.error(`swa deploy <outputLocation> cannot be used when --output-location option is also set.`);
logger.error(`You either have to use the positional argument or option, not both at the same time.`, true);
}
options.outputLocation = positionalArg;
}
}
console.warn(chalk.yellow("***********************************************************************"));
console.warn(chalk.yellow("* WARNING: This emulator may not match the cloud environment exactly. *"));
console.warn(chalk.yellow("* Always deploy and test your app in Azure. *"));
console.warn(chalk.yellow("***********************************************************************"));
console.warn();
await start(options);
})
.addHelpText("after", `
Examples:
Serve static content from a specific folder
swa start ./output-folder
Connect to an already running framework development server
swa start http://localhost:3000
Use staticwebapp.config.json file from a specific location
swa start http://localhost:3000 --swa-config-location ./app-source
Serve static content from a folder and run an API from another folder
swa start ./output-folder --api-location ./api
Use a custom command to run framework development server at startup
swa start http://localhost:3000 --run-build "npm start"
Serve static content from a folder and start data-api-server from another folder
swa start ./output-folder --data-api-location ./swa-db-connections
Connect front-end to the data-api-dev-server running
swa start ./output-folder --data-api-devserver-url http://localhost:5000
Connect both front-end and the API to running development server
swa start http://localhost:3000 --api-devserver-url http://localhost:7071
`);
}
//# sourceMappingURL=register.js.map