Something went wrong. Try again.
Plugins for CMSs providing rich, customisable embeds for various developer sites and services. vale.rocks/portfolio/developer-embeds
Something went wrong. Try again.
3.2 kB · 91 lines
JavaScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192import { copyFile, cp, mkdir, readFile, rm, writeFile } from "node:fs/promises";import { createRequire } from "node:module";import { dirname, join } from "node:path";import { fileURLToPath } from "node:url";
import { loadComponentMetadata } from "../../scripts/component-metadata.mjs";
const require = createRequire(import.meta.url);const root = join(dirname(fileURLToPath(import.meta.url)), "..");const source = join(root, "src");const buildRoot = join(root, "build");const plugin = join(buildRoot, "developer-embeds");const assets = join(plugin, "assets");const componentsDirectory = join(assets, "components");const dataDirectory = join(plugin, "data");const licensesDirectory = join(plugin, "licenses");const blocksDirectory = join(plugin, "blocks");const components = ["npmx-embed", "pypi-embed", "repository-embed"];
const ui = JSON.parse(await readFile(join(root, "..", "component-ui.json"), "utf8"));const metadata = await loadComponentMetadata({ require, ui, components });
await rm(buildRoot, { recursive: true, force: true });await cp(source, plugin, { recursive: true });await mkdir(componentsDirectory, { recursive: true });await mkdir(dataDirectory, { recursive: true });await mkdir(licensesDirectory, { recursive: true });await mkdir(blocksDirectory, { recursive: true });
const blocks = [];
for (const component of metadata) { await copyFile(component.entry, join(componentsDirectory, component.file));
if (component.license) { await copyFile(component.license, join(licensesDirectory, `${component.package}.txt`)); }
const blockDirectory = join(blocksDirectory, component.tag);
await mkdir(blockDirectory, { recursive: true }); await writeFile( join(blockDirectory, "block.json"), `${JSON.stringify( { $schema: "https://schemas.wp.org/trunk/block.json", apiVersion: 3, name: `developer-embeds/${component.tag}`, title: component.title, description: component.description, category: "embed", icon: component.icon, keywords: component.keywords, textdomain: "developer-embeds", attributes: component.attributes, supports: { html: false }, editorScript: "developer-embeds-editor", editorStyle: "developer-embeds", }, null, "\t", )}\n`, );
blocks.push({ name: `developer-embeds/${component.tag}`, tag: component.tag, file: component.file, package: component.package, version: component.version, title: component.title, description: component.description, icon: component.icon, keywords: component.keywords, required: component.required, attributes: component.attributes, fields: component.fields, });
console.log( `${component.package}@${component.version} -> assets/components/${component.file} ` + `(${Object.keys(component.attributes).length} attributes, ` + `${component.details.available.length} details)`, );}
await writeFile(join(dataDirectory, "component-metadata.json"), `${JSON.stringify(blocks, null, "\t")}\n`);
console.log(`metadata -> build/developer-embeds/data/component-metadata.json`);console.log(`block metadata -> build/developer-embeds/blocks/`);console.log(`plugin -> build/developer-embeds/`);