182 lines
		
	
	
	
		
			7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
	
		
			7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.getAllElements = exports.getFilePath = exports.getAssets = exports.getJSModules = exports.getPluginType = exports.getPlatformElement = exports.getPluginPlatform = exports.printPlugins = exports.fixName = exports.getDependencies = exports.resolvePlugin = exports.getPlugins = exports.getIncludedPluginPackages = void 0;
 | |
| const tslib_1 = require("tslib");
 | |
| const fs_extra_1 = require("fs-extra");
 | |
| const path_1 = require("path");
 | |
| const colors_1 = tslib_1.__importDefault(require("./colors"));
 | |
| const errors_1 = require("./errors");
 | |
| const log_1 = require("./log");
 | |
| const node_1 = require("./util/node");
 | |
| const xml_1 = require("./util/xml");
 | |
| function getIncludedPluginPackages(config, platform) {
 | |
|     var _a, _b, _c, _d;
 | |
|     const { extConfig } = config.app;
 | |
|     switch (platform) {
 | |
|         case 'android':
 | |
|             return (_b = (_a = extConfig.android) === null || _a === void 0 ? void 0 : _a.includePlugins) !== null && _b !== void 0 ? _b : extConfig.includePlugins;
 | |
|         case 'ios':
 | |
|             return (_d = (_c = extConfig.ios) === null || _c === void 0 ? void 0 : _c.includePlugins) !== null && _d !== void 0 ? _d : extConfig.includePlugins;
 | |
|     }
 | |
| }
 | |
| exports.getIncludedPluginPackages = getIncludedPluginPackages;
 | |
| async function getPlugins(config, platform) {
 | |
|     var _a;
 | |
|     const possiblePlugins = (_a = getIncludedPluginPackages(config, platform)) !== null && _a !== void 0 ? _a : getDependencies(config);
 | |
|     const resolvedPlugins = await Promise.all(possiblePlugins.map(async (p) => resolvePlugin(config, p)));
 | |
|     return resolvedPlugins.filter((p) => !!p);
 | |
| }
 | |
| exports.getPlugins = getPlugins;
 | |
| async function resolvePlugin(config, name) {
 | |
|     try {
 | |
|         const packagePath = (0, node_1.resolveNode)(config.app.rootDir, name, 'package.json');
 | |
|         if (!packagePath) {
 | |
|             (0, errors_1.fatal)(`Unable to find ${colors_1.default.strong(`node_modules/${name}`)}.\n` + `Are you sure ${colors_1.default.strong(name)} is installed?`);
 | |
|         }
 | |
|         const rootPath = (0, path_1.dirname)(packagePath);
 | |
|         const meta = await (0, fs_extra_1.readJSON)(packagePath);
 | |
|         if (!meta) {
 | |
|             return null;
 | |
|         }
 | |
|         if (meta.capacitor) {
 | |
|             return {
 | |
|                 id: name,
 | |
|                 name: fixName(name),
 | |
|                 version: meta.version,
 | |
|                 rootPath,
 | |
|                 repository: meta.repository,
 | |
|                 manifest: meta.capacitor,
 | |
|             };
 | |
|         }
 | |
|         const pluginXMLPath = (0, path_1.join)(rootPath, 'plugin.xml');
 | |
|         const xmlMeta = await (0, xml_1.readXML)(pluginXMLPath);
 | |
|         return {
 | |
|             id: name,
 | |
|             name: fixName(name),
 | |
|             version: meta.version,
 | |
|             rootPath: rootPath,
 | |
|             repository: meta.repository,
 | |
|             xml: xmlMeta.plugin,
 | |
|         };
 | |
|     }
 | |
|     catch (e) {
 | |
|         // ignore
 | |
|     }
 | |
|     return null;
 | |
| }
 | |
| exports.resolvePlugin = resolvePlugin;
 | |
| function getDependencies(config) {
 | |
|     var _a, _b;
 | |
|     return [
 | |
|         ...Object.keys((_a = config.app.package.dependencies) !== null && _a !== void 0 ? _a : {}),
 | |
|         ...Object.keys((_b = config.app.package.devDependencies) !== null && _b !== void 0 ? _b : {}),
 | |
|     ];
 | |
| }
 | |
| exports.getDependencies = getDependencies;
 | |
| function fixName(name) {
 | |
|     name = name
 | |
|         .replace(/\//g, '_')
 | |
|         .replace(/-/g, '_')
 | |
|         .replace(/@/g, '')
 | |
|         .replace(/_\w/g, (m) => m[1].toUpperCase());
 | |
|     return name.charAt(0).toUpperCase() + name.slice(1);
 | |
| }
 | |
| exports.fixName = fixName;
 | |
| function printPlugins(plugins, platform, type = 'capacitor') {
 | |
|     if (plugins.length === 0) {
 | |
|         return;
 | |
|     }
 | |
|     let msg;
 | |
|     const plural = plugins.length === 1 ? '' : 's';
 | |
|     switch (type) {
 | |
|         case 'cordova':
 | |
|             msg = `Found ${plugins.length} Cordova plugin${plural} for ${colors_1.default.strong(platform)}:\n`;
 | |
|             break;
 | |
|         case 'incompatible':
 | |
|             msg = `Found ${plugins.length} incompatible Cordova plugin${plural} for ${colors_1.default.strong(platform)}, skipped install:\n`;
 | |
|             break;
 | |
|         case 'capacitor':
 | |
|             msg = `Found ${plugins.length} Capacitor plugin${plural} for ${colors_1.default.strong(platform)}:\n`;
 | |
|             break;
 | |
|     }
 | |
|     msg += plugins.map((p) => `${p.id}${colors_1.default.weak(`@${p.version}`)}`).join('\n');
 | |
|     log_1.logger.info(msg);
 | |
| }
 | |
| exports.printPlugins = printPlugins;
 | |
| function getPluginPlatform(p, platform) {
 | |
|     const platforms = p.xml.platform;
 | |
|     if (platforms) {
 | |
|         const platforms = p.xml.platform.filter(function (item) {
 | |
|             return item.$.name === platform;
 | |
|         });
 | |
|         return platforms[0];
 | |
|     }
 | |
|     return [];
 | |
| }
 | |
| exports.getPluginPlatform = getPluginPlatform;
 | |
| function getPlatformElement(p, platform, elementName) {
 | |
|     const platformTag = getPluginPlatform(p, platform);
 | |
|     if (platformTag) {
 | |
|         const element = platformTag[elementName];
 | |
|         if (element) {
 | |
|             return element;
 | |
|         }
 | |
|     }
 | |
|     return [];
 | |
| }
 | |
| exports.getPlatformElement = getPlatformElement;
 | |
| function getPluginType(p, platform) {
 | |
|     var _a, _b, _c, _d;
 | |
|     switch (platform) {
 | |
|         case 'ios':
 | |
|             return (_b = (_a = p.ios) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : 0 /* PluginType.Core */;
 | |
|         case 'android':
 | |
|             return (_d = (_c = p.android) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : 0 /* PluginType.Core */;
 | |
|     }
 | |
|     return 0 /* PluginType.Core */;
 | |
| }
 | |
| exports.getPluginType = getPluginType;
 | |
| /**
 | |
|  * Get each JavaScript Module for the given plugin
 | |
|  */
 | |
| function getJSModules(p, platform) {
 | |
|     return getAllElements(p, platform, 'js-module');
 | |
| }
 | |
| exports.getJSModules = getJSModules;
 | |
| /**
 | |
|  * Get each asset tag for the given plugin
 | |
|  */
 | |
| function getAssets(p, platform) {
 | |
|     return getAllElements(p, platform, 'asset');
 | |
| }
 | |
| exports.getAssets = getAssets;
 | |
| function getFilePath(config, plugin, path) {
 | |
|     if (path.startsWith('node_modules')) {
 | |
|         let pathSegments = path.split('/').slice(1);
 | |
|         if (pathSegments[0].startsWith('@')) {
 | |
|             pathSegments = [pathSegments[0] + '/' + pathSegments[1], ...pathSegments.slice(2)];
 | |
|         }
 | |
|         const filePath = (0, node_1.resolveNode)(config.app.rootDir, ...pathSegments);
 | |
|         if (!filePath) {
 | |
|             throw new Error(`Can't resolve module ${pathSegments[0]}`);
 | |
|         }
 | |
|         return filePath;
 | |
|     }
 | |
|     return (0, path_1.join)(plugin.rootPath, path);
 | |
| }
 | |
| exports.getFilePath = getFilePath;
 | |
| /**
 | |
|  * For a given plugin, return all the plugin.xml elements with elementName, checking root and specified platform
 | |
|  */
 | |
| function getAllElements(p, platform, elementName) {
 | |
|     let modules = [];
 | |
|     if (p.xml[elementName]) {
 | |
|         modules = modules.concat(p.xml[elementName]);
 | |
|     }
 | |
|     const platformModules = getPluginPlatform(p, platform);
 | |
|     if (platformModules === null || platformModules === void 0 ? void 0 : platformModules[elementName]) {
 | |
|         modules = modules.concat(platformModules[elementName]);
 | |
|     }
 | |
|     return modules;
 | |
| }
 | |
| exports.getAllElements = getAllElements;
 |