"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runUpdateNotify = exports.runNotify = exports.runUpdateCheck = exports.getUpdateConfig = exports.writeUpdateConfig = exports.readUpdateConfig = void 0; const utils_fs_1 = require("@ionic/utils-fs"); const utils_terminal_1 = require("@ionic/utils-terminal"); const path = require("path"); const semver = require("semver"); const color_1 = require("./color"); const helper_1 = require("./helper"); const npm_1 = require("./utils/npm"); const UPDATE_CONFIG_FILE = 'update.json'; const UPDATE_CHECK_INTERVAL = 60 * 60 * 24 * 1000; // 1 day const UPDATE_NOTIFY_INTERVAL = 60 * 60 * 12 * 1000; // 12 hours const PACKAGES = ['@ionic/cli', 'native-run', 'cordova-res']; async function readUpdateConfig(dir) { return utils_fs_1.readJson(path.resolve(dir, UPDATE_CONFIG_FILE)); } exports.readUpdateConfig = readUpdateConfig; async function writeUpdateConfig(dir, config) { await utils_fs_1.writeJson(path.resolve(dir, UPDATE_CONFIG_FILE), config, { spaces: 2 }); } exports.writeUpdateConfig = writeUpdateConfig; async function getUpdateConfig({ config }) { const dir = path.dirname(config.p); try { return await readUpdateConfig(dir); } catch (e) { if (e.code !== 'ENOENT') { process.stderr.write(`${e.stack ? e.stack : e}\n`); } return { packages: [] }; } } exports.getUpdateConfig = getUpdateConfig; async function runUpdateCheck({ config }) { const dir = path.dirname(config.p); const pkgs = (await Promise.all(PACKAGES.map(pkg => npm_1.pkgFromRegistry(config.get('npmClient'), { pkg })))) .filter((pkg) => typeof pkg !== 'undefined'); const updateConfig = await getUpdateConfig({ config }); const newUpdateConfig = { ...updateConfig, lastUpdate: new Date().toISOString(), packages: pkgs.map(pkg => ({ name: pkg.name, version: pkg.version, })), }; await writeUpdateConfig(dir, newUpdateConfig); } exports.runUpdateCheck = runUpdateCheck; async function runNotify(env, pkg, latestVersion) { const dir = path.dirname(env.config.p); const args = await npm_1.pkgManagerArgs(env.config.get('npmClient'), { command: 'install', pkg: pkg.name, global: true }); const lines = [ `Ionic CLI update available: ${color_1.weak(pkg.version)} → ${color_1.success(latestVersion)}`, `Run ${color_1.input(args.join(' '))} to update`, ]; // TODO: Pull this into utils/format const padding = 3; const longestLineLength = Math.max(...lines.map(line => utils_terminal_1.stringWidth(line))); const horizontalRule = ` ${'─'.repeat(longestLineLength + padding * 2)}`; const output = (`\n${horizontalRule}\n\n` + `${lines.map(line => ` ${' '.repeat((longestLineLength - utils_terminal_1.stringWidth(line)) / 2 + padding)}${line}`).join('\n')}\n\n` + `${horizontalRule}\n\n`); process.stderr.write(output); const updateConfig = await getUpdateConfig(env); updateConfig.lastNotify = new Date().toISOString(); await writeUpdateConfig(dir, updateConfig); } exports.runNotify = runNotify; async function runUpdateNotify(env, pkg) { const { name, version } = pkg; const { lastUpdate, lastNotify, packages } = await getUpdateConfig(env); const latestPkg = packages.find(pkg => pkg.name === name); const latestVersion = latestPkg ? latestPkg.version : undefined; if ((!lastNotify || new Date(lastNotify).getTime() + UPDATE_NOTIFY_INTERVAL < new Date().getTime()) && latestVersion && semver.gt(latestVersion, version)) { await runNotify(env, pkg, latestVersion); } if (!lastUpdate || new Date(lastUpdate).getTime() + UPDATE_CHECK_INTERVAL < new Date().getTime()) { await helper_1.sendMessage(env, { type: 'update-check' }); } } exports.runUpdateNotify = runUpdateNotify;
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
doctor | Folder | 0755 |
|
|
integrations | Folder | 0755 |
|
|
oauth | Folder | 0755 |
|
|
project | Folder | 0755 |
|
|
utils | Folder | 0755 |
|
|
app.d.ts | File | 1.15 KB | 0644 |
|
app.js | File | 2.5 KB | 0644 |
|
build.d.ts | File | 3.43 KB | 0644 |
|
build.js | File | 8.51 KB | 0644 |
|
color.d.ts | File | 484 B | 0644 |
|
color.js | File | 768 B | 0644 |
|
command.d.ts | File | 924 B | 0644 |
|
command.js | File | 5.47 KB | 0644 |
|
config.d.ts | File | 843 B | 0644 |
|
config.js | File | 3.83 KB | 0644 |
|
cordova-res.d.ts | File | 1.07 KB | 0644 |
|
cordova-res.js | File | 2.62 KB | 0644 |
|
diff.d.ts | File | 100 B | 0644 |
|
diff.js | File | 709 B | 0644 |
|
environment.d.ts | File | 1004 B | 0644 |
|
environment.js | File | 516 B | 0644 |
|
errors.d.ts | File | 891 B | 0644 |
|
errors.js | File | 1.77 KB | 0644 |
|
events.d.ts | File | 240 B | 0644 |
|
events.js | File | 498 B | 0644 |
|
executor.d.ts | File | 1 KB | 0644 |
|
executor.js | File | 3.7 KB | 0644 |
|
generate.d.ts | File | 923 B | 0644 |
|
generate.js | File | 351 B | 0644 |
|
git.d.ts | File | 747 B | 0644 |
|
git.js | File | 1.66 KB | 0644 |
|
help.d.ts | File | 2.4 KB | 0644 |
|
help.js | File | 3.66 KB | 0644 |
|
helper.d.ts | File | 252 B | 0644 |
|
helper.js | File | 654 B | 0644 |
|
hooks.d.ts | File | 841 B | 0644 |
|
hooks.js | File | 4.72 KB | 0644 |
|
http.d.ts | File | 2.62 KB | 0644 |
|
http.js | File | 7.56 KB | 0644 |
|
index.d.ts | File | 226 B | 0644 |
|
index.js | File | 6.09 KB | 0644 |
|
ionitron.d.ts | File | 148 B | 0644 |
|
ionitron.js | File | 4.72 KB | 0644 |
|
namespace.d.ts | File | 854 B | 0644 |
|
namespace.js | File | 686 B | 0644 |
|
native-run.d.ts | File | 1.5 KB | 0644 |
|
native-run.js | File | 4.98 KB | 0644 |
|
open.d.ts | File | 164 B | 0644 |
|
open.js | File | 507 B | 0644 |
|
prompts.d.ts | File | 402 B | 0644 |
|
prompts.js | File | 716 B | 0644 |
|
security.d.ts | File | 511 B | 0644 |
|
security.js | File | 785 B | 0644 |
|
serve.d.ts | File | 5.79 KB | 0644 |
|
serve.js | File | 22.4 KB | 0644 |
|
session.d.ts | File | 921 B | 0644 |
|
session.js | File | 7.82 KB | 0644 |
|
shell.d.ts | File | 1.95 KB | 0644 |
|
shell.js | File | 8.41 KB | 0644 |
|
snapshot.d.ts | File | 765 B | 0644 |
|
snapshot.js | File | 1.13 KB | 0644 |
|
ssh-config.d.ts | File | 646 B | 0644 |
|
ssh-config.js | File | 3.04 KB | 0644 |
|
ssh.d.ts | File | 1.67 KB | 0644 |
|
ssh.js | File | 3.53 KB | 0644 |
|
start.d.ts | File | 1.34 KB | 0644 |
|
start.js | File | 12.1 KB | 0644 |
|
telemetry.d.ts | File | 972 B | 0644 |
|
telemetry.js | File | 3.59 KB | 0644 |
|
updates.d.ts | File | 1.01 KB | 0644 |
|
updates.js | File | 3.82 KB | 0644 |
|
user.d.ts | File | 865 B | 0644 |
|
user.js | File | 2.37 KB | 0644 |
|