Eklenti API Referansı

Tüm sözleşme türleri base/src/plugin.d.ts'da tanımlanmıştır.

Eklenti Tanımı

type PluginDefinition = {
  name: string;
  version: string;
  hooks: PluginHooks;
  load?: (ctx: PluginLoadContext) => void;
};

Kanca İsimleri

base/src/plugin.js'da dondurulmuş sabitler olarak tanımlanır:

SabitDeğer
plugin.hooks.DIST_CLEAN"dist:clean"
plugin.hooks.ASSETS_COPY"assets:copy"
plugin.hooks.CONTENT_LOAD"content:load"
plugin.hooks.CONTENT_READY"content:ready"
plugin.hooks.PAGE_META"page:meta"

Temel Bağlam (createBaseContext())

Her kanca işleyicisine sağlanır:

AlanTürAçıklama
configConfigApiget(key) erişimcisiyle site yapılandırması
logLogApiGünlük kaydı: info, warn, err, debug, step
file.read(path) => Promise<string>UTF-8 dosyasını okuyun
file.write(path, content) => Promise<void>UTF-8 dosyasını yaz
file.exists(path) => Promise<boolean>Dosyanın varlığını kontrol edin
directory.read(path) => Promise<string[]>Dizin içeriğini listele
directory.exists(path) => Promise<boolean>Dizin varlığını kontrol edin
directory.create(path) => Promise<void>Dizini yinelemeli olarak oluştur
path.combine(...paths) => stringYol bölümlerini birleştir
path.resolve(...paths) => stringResolve absolute path
path.name(path) => stringDizin adını al

Genişletilmiş Bağlam (PluginEngine'den)

AlanTürMevcut
pathsPluginPathsTüm kancalar
i18nI18nApiTüm kancalar
contentFilesContentFile[]content:load, content:ready
addContent(input) => voidcontent:load
pagesCollectionsByLangcontent:ready
footerPoliciesRecord<string, FooterPolicy[]>content:ready
contentIndexRecord<...>content:ready
frontMatterRecord<string, any>page:meta
derivedFrontMatterRecord<string, any>page:meta
langstringpage:meta
slugstringpage:meta
pageMetaRecord<string, any>page:meta
setPageMeta(meta) => voidpage:meta

Eklenti Yolları

AlanÖrnek
root./
src./src
dist./dist
tmp./tmp
content./src/content
layouts./src/layouts
components./src/components
templates./src/templates
assets./src/assets
siteConfig./src/site.json
i18nConfig./src/i18n.json

Şema Türleri (plugin.schema)

post, job-post, job-listing, not-found, page, home, contact, about, press, help, faq, collection, policy

Koleksiyon Türleri (plugin.collection)

tag, category, series

Minimal Eklenti İskeleti

import { plugin } from "@shevky/base";

const hooks = {
  [plugin.hooks.ASSETS_COPY]: async function (ctx) {
    ctx.log.info("My plugin running!");
    // plugin work here
  },
};

export default {
  name: "my-plugin",
  version: "0.0.1",
  hooks,
};

İlgili