@ionic/cli
Version:
A tool for creating and developing Ionic Framework mobile apps.
146 lines (145 loc) • 5.51 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.VueViteServeCLI = exports.VueServeRunner = void 0;
const cli_framework_1 = require("@ionic/cli-framework");
const cli_framework_output_1 = require("@ionic/cli-framework-output");
const utils_network_1 = require("@ionic/utils-network");
const color_1 = require("../../color");
const serve_1 = require("../../serve");
class VueServeRunner extends serve_1.ServeRunner {
constructor(e) {
super();
this.e = e;
}
async getCommandMetadata() {
return {};
}
modifyOpenUrl(url, _options) {
return url;
}
async serveProject(options) {
const [externalIP, availableInterfaces] = await this.selectExternalIP(options);
const port = (options.port = await (0, utils_network_1.findClosestOpenPort)(options.port));
const vueScripts = new VueViteServeCLI(this.e);
await vueScripts.serve(options);
return {
custom: vueScripts.resolvedProgram !== vueScripts.program,
protocol: options.https ? 'https' : 'http',
localAddress: 'localhost',
externalAddress: externalIP,
externalNetworkInterfaces: availableInterfaces,
port,
externallyAccessible: ![serve_1.BIND_ALL_ADDRESS, ...serve_1.LOCAL_ADDRESSES].includes(externalIP),
};
}
}
exports.VueServeRunner = VueServeRunner;
class VueViteServeCLI extends serve_1.ServeCLI {
constructor() {
super(...arguments);
this.name = 'Vite CLI Service';
this.pkg = 'vite';
this.program = 'vite';
this.prefix = 'vite';
this.script = serve_1.SERVE_SCRIPT;
this.chunks = 0;
}
async serve(options) {
this.on('compile', (chunks) => {
if (chunks > 0) {
this.e.log.info(`... and ${(0, color_1.strong)(chunks.toString())} additional chunks`);
}
});
return super.serve(options);
}
stdoutFilter(line) {
if (this.resolvedProgram !== this.program) {
return super.stdoutFilter(line);
}
const strippedLine = (0, cli_framework_output_1.stripAnsi)(line);
const compileMsgs = [
'Compiled successfully',
'Compiled with warnings',
'Failed to compile',
"ready in"
];
if (compileMsgs.some((msg) => strippedLine.includes(msg))) {
this.emit('ready');
return false;
}
if (strippedLine.match(/.*chunk\s{\d+}.+/)) {
this.chunks++;
return false;
}
if (strippedLine.includes('Compiled successfully')) {
this.emit('compile', this.chunks);
this.chunks = 0;
}
return true;
}
stderrFilter(line) {
if (this.resolvedProgram !== this.program) {
return super.stderrFilter(line);
}
const strippedLine = (0, cli_framework_output_1.stripAnsi)(line);
if (strippedLine.includes('webpack.Progress')) {
return false;
}
return true;
}
async buildArgs(options) {
const args = {
_: [],
host: options.host,
port: options.port ? options.port.toString() : undefined,
};
const { pkgManagerArgs } = await Promise.resolve().then(() => __importStar(require('../../utils/npm')));
const separatedArgs = options['--'];
if (this.resolvedProgram === this.program) {
return [...(0, cli_framework_1.unparseArgs)(args), ...separatedArgs];
}
else {
const [, ...pkgArgs] = await pkgManagerArgs(this.e.config.get('npmClient'), {
command: 'run',
script: this.script,
scriptArgs: [...(0, cli_framework_1.unparseArgs)(args), ...separatedArgs],
});
return pkgArgs;
}
}
async buildEnvVars(options) {
const env = {};
// // Vue CLI binds to `localhost` by default, but if specified it prints a
// // warning, so don't set `HOST` if the host is set to `localhost`.
if (options.host !== serve_1.DEFAULT_ADDRESS) {
env.HOST = options.host;
}
env.PORT = String(options.port);
env.HTTPS = options.https ? 'true' : 'false';
return { ...(await super.buildEnvVars(options)), ...env };
}
}
exports.VueViteServeCLI = VueViteServeCLI;
;