wordpress-shortcode-webpack-plugin
Version:
Create Wordpress plugins from React apps built using Webpack
147 lines (146 loc) • 6.43 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLoaderUtils = exports.createShortcodeRegistration = exports.createShortcodeDefinitions = exports.createAddAction = exports.createAssetManifest = exports.createPluginHeader = exports.generatePluginFile = void 0;
var utils_1 = require("./utils");
var path_1 = require("path");
function generatePluginFile(wpPluginName, manifest, options, compiler) {
// Read in our template file
var pluginFileContent = utils_1.readFile(compiler.inputFileSystem, options.pluginTemplate);
var templatedFile = pluginFileContent
.replace('{{plugin_header}}', createPluginHeader(__assign(__assign({}, options.headerFields), { pluginName: wpPluginName })))
.replace('{{asset_manifest}}', createAssetManifest(manifest))
.replace('{{shortcode_definitions}}', createShortcodeDefinitions(manifest, options.entryToRootId))
.replace('{{shortcode_registration}}', createShortcodeRegistration(options.shortcodePrefix, wpPluginName, manifest))
.replace('{{loading_script_utils}}', createLoaderUtils(wpPluginName, compiler.inputFileSystem))
.replace('{{add_action}}', createAddAction(wpPluginName));
return templatedFile;
}
exports.generatePluginFile = generatePluginFile;
// Creates the Wordpress format plugin header so that
// Wordpress knows the plugin metadata.
function createPluginHeader(opts) {
var header = " /**\n * Plugin Name: " + utils_1.kebabToTitle(opts.pluginName);
if (opts.pluginUri) {
header += "\n * Plugin URI: " + opts.pluginUri;
}
if (opts.description) {
header += "\n * Description: " + opts.description;
}
if (opts.version) {
header += "\n * Version: " + opts.version;
}
if (opts.requiredWordpressVersion) {
header += "\n * Requires at least: " + opts.requiredWordpressVersion;
}
if (opts.requiredWordpressVersion) {
header += "\n * Requires PHP: " + opts.requiredPHPVersion;
}
if (opts.author) {
header += "\n * Author: " + opts.author;
}
if (opts.authorUri) {
header += "\n * Author URI: " + opts.authorUri;
}
if (opts.license) {
header += "\n * License: " + opts.license;
}
if (opts.licenseUri) {
header += "\n * License URI: " + opts.licenseUri;
}
if (opts.textDomain) {
header += "\n * Text Domain: " + opts.textDomain;
}
if (opts.domainPath) {
header += "\n * Domain Path: " + opts.domainPath;
}
if (opts.isNetworkWide) {
header += "\n * Network: " + opts.isNetworkWide;
}
header += "\n */";
return header;
}
exports.createPluginHeader = createPluginHeader;
// Creates an asset manifest associative array as a PHP string
function createAssetManifest(manifest) {
return " $manifest = " + utils_1.jsObjectToPhpArray(manifest.entries, 1, true);
}
exports.createAssetManifest = createAssetManifest;
function createAddAction(pluginName) {
return " add_action('init', 'register_" + utils_1.kebabToSnake(pluginName) + "_entries');";
}
exports.createAddAction = createAddAction;
function createShortcodeDefinitions(manifest, entryToRootId) {
var e_1, _a;
if (entryToRootId === void 0) { entryToRootId = {}; }
var functions = [];
try {
for (var _b = __values(Object.keys(manifest.entries)), _c = _b.next(); !_c.done; _c = _b.next()) {
var entryName = _c.value;
var rootId = entryToRootId[entryName] || 'root';
// Write a function that creates the root element and enqueues the
// assets for that entrypoint.
var newFunc = " function create_" + entryName + "_app() {\n enqueue_assets('" + entryName + "');\n\n return '<div id=\"" + rootId + "\"></div>';\n }";
functions.push(newFunc);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
return functions.join('\n');
}
exports.createShortcodeDefinitions = createShortcodeDefinitions;
function createShortcodeRegistration(shortcodePrefix, pluginName, manifest) {
var e_2, _a;
var addShortcodes = [];
var registerAssets = [];
try {
for (var _b = __values(Object.keys(manifest.entries)), _c = _b.next(); !_c.done; _c = _b.next()) {
var entryName = _c.value;
addShortcodes.push("add_shortcode('" + shortcodePrefix + "-" + entryName + "', 'create_" + entryName + "_app');");
registerAssets.push("register_assets('" + entryName + "');");
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
// Write a function that creates the root element and enqueues the
// assets for that entrypoint.
return " function register_" + utils_1.kebabToSnake(pluginName) + "_entries() {\n" + utils_1.indentText(addShortcodes.join('\n'), 2) + "\n" + utils_1.indentText(registerAssets.join('\n'), 2) + "\n }";
}
exports.createShortcodeRegistration = createShortcodeRegistration;
function createLoaderUtils(pluginName, fs) {
var utilsPath = path_1.resolve(__dirname, 'load-assets.php');
var loadAssetsUtils = utils_1.readFile(fs, utilsPath);
return loadAssetsUtils.replace(/{{pluginName}}/g, pluginName);
}
exports.createLoaderUtils = createLoaderUtils;