mirror of
https://github.com/Kong/insomnia
synced 2024-11-08 23:00:30 +00:00
8131041701
* Refactor extension format and load plugins from directory * Added some UI around plugins * Refactor PromptModal usage
70 lines
1.9 KiB
JavaScript
70 lines
1.9 KiB
JavaScript
import mkdirp from 'mkdirp';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import {PLUGIN_PATHS} from '../common/constants';
|
|
import {render} from '../templating';
|
|
import skeletonPackageJson from './skeleton/package.json.js';
|
|
import skeletonPluginJs from './skeleton/plugin.js.js';
|
|
|
|
let plugins = null;
|
|
|
|
export async function init () {
|
|
// Force plugins to load.
|
|
getPlugins(true);
|
|
}
|
|
|
|
export function getPlugins (force = false) {
|
|
if (!plugins || force) {
|
|
// Make sure the directories exist
|
|
for (const p of PLUGIN_PATHS) {
|
|
mkdirp.sync(p);
|
|
}
|
|
|
|
plugins = [];
|
|
for (const p of PLUGIN_PATHS) {
|
|
for (const dir of fs.readdirSync(p)) {
|
|
if (dir.indexOf('.') === 0) {
|
|
continue;
|
|
}
|
|
|
|
const moduleDirectory = path.join(p, dir);
|
|
|
|
// Use global.require() instead of require() because Webpack wraps require()
|
|
const pluginJson = global.require(path.join(moduleDirectory, 'package.json'));
|
|
const module = global.require(moduleDirectory);
|
|
|
|
plugins.push({
|
|
name: pluginJson.name,
|
|
version: pluginJson.version || '0.0.0',
|
|
directory: moduleDirectory,
|
|
module
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
return plugins;
|
|
}
|
|
|
|
export async function createPlugin (displayName) {
|
|
// Create root plugin dir
|
|
const name = displayName.replace(/\s/g, '-').toLowerCase();
|
|
const dir = path.join(PLUGIN_PATHS[0], name);
|
|
mkdirp.sync(dir);
|
|
|
|
fs.writeFileSync(path.join(dir, 'plugin.js'), skeletonPluginJs);
|
|
|
|
const renderedPackageJson = await render(skeletonPackageJson, {context: {name, displayName}});
|
|
fs.writeFileSync(path.join(dir, 'package.json'), renderedPackageJson);
|
|
}
|
|
|
|
export function getTemplateTags () {
|
|
let extensions = [];
|
|
for (const plugin of getPlugins()) {
|
|
const templateTags = plugin.module.templateTags || [];
|
|
extensions = [...extensions, ...templateTags];
|
|
}
|
|
|
|
return extensions;
|
|
}
|