UNPKG

directus-extension-seo

Version:

Directus SEO Extension enhance Directus with powerful SEO scoring and validator and AI SEO from ChatGPT

89 lines (80 loc) 2.87 kB
import { ExtensionManifest } from '@directus/constants'; import fs from 'fs-extra'; import path from 'path'; import { log } from '../node_modules/@directus/extensions-sdk/dist/cli/utils/logger.js'; let directusPath = process.env.DIRECTUS_APP_ABSOLUTED_PATH || 'directus' const extensionPath = process.cwd(); if( directusPath === 'directus' ) { directusPath = path.resolve(extensionPath, 'directus/') } const AppExtensions = [ 'display', 'interface', 'layout', 'module', 'operation', 'panel' ] export default async function link() { const absoluteExtensionsPath = path.resolve(process.cwd(), 'src'); // if (!fs.existsSync(absoluteExtensionsPath)) { // log(`Extensions folder does not exist at ${absoluteExtensionsPath}`, 'error'); // return; // } const packagePath = path.resolve('package.json'); if (!(await fs.pathExists(packagePath))) { log(`Current directory is not a valid package.`, 'error'); return; } let manifestFile; try { manifestFile = await fs.readJSON(packagePath); } catch (err) { log(`Current directory is not a valid Directus extension.`, 'error'); return; } const extensionManifest = ExtensionManifest.parse(manifestFile); const extensionName = extensionManifest.name; if (!extensionName) { log(`Extension name not found in package.json`, 'error'); return; } const type = extensionManifest['directus:extension']?.type; if (!type) { log(`Extension type not found in package.json`, 'error'); return; } if( type === 'bundle' ) { log(`Start link extension type bundle`); extensionManifest['directus:extension']?.entries?.map((entry) => { if( ! AppExtensions.includes(entry.type) ) { return } const entryAbsolutePath = path.join(absoluteExtensionsPath, entry.name) const entryTarget = path.join(directusPath, '/src/', `${entry.type}s`, entry.name); try { fs.ensureSymlinkSync(entryAbsolutePath, entryTarget); } catch (error) { log(error.message, 'error'); log(`Try running this command with administrator privileges`, 'info'); return; } log(`Linked ${entry.type} "${entry.name}" to ${entryTarget}`, 'info'); }) return; } const extensionTarget = path.join(absoluteExtensionsPath, extensionName); try { fs.ensureSymlinkSync(extensionPath, extensionTarget); } catch (error) { log(error.message, 'error'); log(`Try running this command with administrator privileges`, 'info'); return; } log(`Linked ${extensionName} to ${extensionTarget}`); return; } (async() => await link())()