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;
|