UNPKG

arvis-linker

Version:

Make Arvis extensions installable from npm

101 lines (100 loc) 5.55 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.unlinkArvisGlobalModule = exports.linkArvisGlobalModule = void 0; const sudo_block_1 = __importDefault(require("sudo-block")); const global_dirs_1 = __importDefault(require("global-dirs")); const path_1 = __importDefault(require("path")); const read_pkg_up_1 = __importDefault(require("read-pkg-up")); const env_paths_1 = __importDefault(require("env-paths")); const fs_extra_1 = __importDefault(require("fs-extra")); const arvis_extension_validator_1 = require("arvis-extension-validator"); const path_exists_1 = __importDefault(require("path-exists")); const is_admin_1 = __importDefault(require("is-admin")); const link_1 = __importDefault(require("./lib/link")); const readJson5_1 = require("./lib/readJson5"); const path_2 = require("./lib/path"); const findUnvalidSymlink_1 = __importDefault(require("./lib/findUnvalidSymlink")); const userConfig_1 = require("./lib/userConfig"); const extensionReload_1 = require("./lib/extensionReload"); const envPaths = env_paths_1.default('arvis'); // Prevent running as `sudo` sudo_block_1.default(); const linkArvisGlobalModule = () => __awaiter(void 0, void 0, void 0, function* () { if (process.platform === 'win32') { const hasAdminPermission = yield is_admin_1.default(); if (!hasAdminPermission) throw new Error('Run command by admin permission!'); } const pkgResult = yield read_pkg_up_1.default(); if (!pkgResult) throw new Error('Error: extension\'s package.json not found!'); const packageName = pkgResult.pkg.name; const src = path_1.default.resolve(global_dirs_1.default.npm.packages, packageName); if (!fs_extra_1.default.pathExistsSync(src)) { throw new Error(`Module not exists in global package, '${src}'`); } const workflowJsonPath = path_1.default.resolve(src, 'arvis-workflow.json'); const pluginJsonPath = path_1.default.resolve(src, 'arvis-plugin.json'); const isWorkflow = yield path_exists_1.default(workflowJsonPath); const isPlugin = yield path_exists_1.default(pluginJsonPath); if (!isWorkflow && !isPlugin) { throw new Error('This package seems to be not Arvis extension!'); } const config = yield readJson5_1.readJson5(isWorkflow ? workflowJsonPath : pluginJsonPath); const type = isWorkflow ? 'workflow' : 'plugin'; if (config.platform && !config.platform.includes(process.platform)) { throw new Error(`This extension does not supports '${process.platform}'!\nCheck the extension info on '${config.webAddress}'.`); } const { creator, name } = config; const bundleId = `${creator}.${name}`; const { errorMsg, valid: extensionValid } = arvis_extension_validator_1.validate(config, type, { strict: false }); if (!extensionValid) { throw new Error(`It seems arvis extension json format is invalid.\n\n${errorMsg}`); } const dest = path_1.default.resolve(envPaths.data, `${type}s`, bundleId); try { yield link_1.default(src, dest); } catch (err) { throw new Error(`Symlink Error:\n\n${err}`); } const migratedConfig = userConfig_1.applyUserConfigs((yield userConfig_1.getUserConfigs())[bundleId], config); yield fs_extra_1.default.writeJSON(path_1.default.resolve(dest, `arvis-${type}.json`), migratedConfig, { encoding: 'utf-8', spaces: 4 }); yield extensionReload_1.forceReload(bundleId, type); }); exports.linkArvisGlobalModule = linkArvisGlobalModule; const unlinkArvisGlobalModule = () => __awaiter(void 0, void 0, void 0, function* () { const workflowDest = path_1.default.resolve(envPaths.data, 'workflows'); const pluginDest = path_1.default.resolve(envPaths.data, 'plugins'); const unvalidWorkflowSymlinks = yield findUnvalidSymlink_1.default(workflowDest, 'workflow'); const unvalidPluginSymlinks = yield findUnvalidSymlink_1.default(pluginDest, 'plugin'); yield Promise.all([...unvalidWorkflowSymlinks, ...unvalidPluginSymlinks].map((invalidPath) => __awaiter(void 0, void 0, void 0, function* () { if (invalidPath) { yield fs_extra_1.default.remove(invalidPath); } }))); if (unvalidWorkflowSymlinks.length > 0) { console.log(`Following unvalidWorkflowSymlinks were removed.\n\n${unvalidWorkflowSymlinks.join('\n')}`); console.log('\n'); } if (unvalidPluginSymlinks.length > 0) { console.log(`Following unvalidPluginSymlinks were removed.\n\n${unvalidPluginSymlinks.join('\n')}`); console.log('\n'); } fs_extra_1.default.writeFileSync(path_2.arvisRenewExtensionFlagFilePath, ''); }); exports.unlinkArvisGlobalModule = unlinkArvisGlobalModule;