Skip to content

@gwenjs/kit

pnpm add @gwenjs/kit

Système de plugins et de modules pour étendre GWEN. Fournit des utilitaires pour créer des modules réutilisables, des auto-imports et des intégrations au moment du build.

Définition de plugins

definePlugin(factory)

Signature:

ts
function definePlugin<T = any>(
  factory: (opts?: T) => PluginDef | ((opts?: T) => PluginDef)
): PluginFactory<T>

Description. Définit un plugin qui peut être chargé dans une app GWEN. La fabrique peut retourner un PluginDef directement ou une fonction qui retourne un PluginDef.

Paramètres:

ParamètreTypeDescription
factoryfunctionFonction de fabrique de plugin ou définition

Retourne: PluginFactory<T> — une fabrique de plugin prête à enregistrer.

Exemple:

ts
export const MyPlugin = definePlugin((opts = {}) => ({
  name: 'my-plugin',
  version: '1.0.0',
  async setup(engine) {
    console.log('MyPlugin loaded');
  }
}));

// Dans votre configuration d'app:
defineConfig({
  plugins: [MyPlugin()],
  // ...
});

Définition de modules

defineGwenModule(definition)

Signature:

ts
function defineGwenModule<Options extends object = Record<string, unknown>>(
  definition: {
    meta: { name: string; configKey: string }
    defaults?: Partial<Options>
    setup(options: Options, gwen: GwenKit): void
  }
): GwenModule<Options>

Description. Définit un module GWEN — un plugin de build qui ajoute des auto-imports, des plugins runtime, des plugins Vite, et des augmentations de types.

Paramètres:

ParamètreTypeDescription
definition.meta.namestringIdentifiant du module (ex. '@my-scope/module')
definition.meta.configKeystringClé dans gwen.config.ts pour les options
definition.defaultsPartial<Options>Valeurs par défaut des options (optionnel)
definition.setupfunctionAppelé avec les options résolues et l'API GwenKit

Retourne: GwenModule<Options> — à exporter comme export par défaut du fichier module.

Exemple:

ts
import { defineGwenModule } from '@gwenjs/kit/module'

export default defineGwenModule<{ volume?: number }>({
  meta: { name: '@my-org/audio', configKey: 'audio' },
  defaults: { volume: 1 },
  setup(options, gwen) {
    gwen.addPlugin(AudioPlugin({ volume: options.volume }))
    gwen.addAutoImports([{ name: 'useAudio', from: '@my-org/audio' }])
  },
})

Types

GwenModule

Signature:

ts
interface GwenModule {
  name: string;
  exports: Record<string, string>;
  hooks?: Record<string, any>;
}

Description. Représente un module GWEN enregistré avec des exports et des hooks.

GwenModuleDefinition

Signature:

ts
interface GwenModuleDefinition {
  exports: Record<string, string>;
  hooks?: GwenBuildHooks;
  auto?: AutoImport[];
}

Description. Définition d'un module GWEN pour les auto-imports et l'intégration du système de build.

PropriétéTypeDescription
exportsobjectCarte des noms d'exports aux chemins de fichiers
hooksGwenBuildHooksHooks de build à enregistrer
autoAutoImport[]Règles d'auto-import (optionnel)

GwenKit

Signature:

ts
interface GwenKit {
  modules: Map<string, GwenModule>;
  plugins: Map<string, PluginDef>;
  registerModule(module: GwenModule): void;
  registerPlugin(plugin: PluginDef): void;
}

Description. Registre du kit gérant tous les modules et plugins.

GwenBuildHooks

Signature:

ts
interface GwenBuildHooks {
  'app:config': Hook<(config: ResolvedGwenConfig) => void | Promise<void>>;
  'app:resolved': Hook<(config: ResolvedGwenConfig) => void | Promise<void>>;
  'module:register': Hook<(module: GwenModule) => void | Promise<void>>;
  'plugin:setup': Hook<(plugin: PluginDef) => void | Promise<void>>;
}

Description. Hooks de build disponibles pour les plugins et modules.

AutoImport

Signature:

ts
interface AutoImport {
  name: string;
  from: string;
  imports?: string[];
}

Description. Règle d'auto-import pour les fonctionnalités d'auto-import du système de build.

PropriétéTypeDescription
namestringNom d'export
fromstringChemin du module à importer depuis
importsstring[]Imports spécifiques à inclure (optionnel)

Exemple:

ts
const autoImports: AutoImport[] = [
  { name: 'useQuery', from: '@gwenjs/core' },
  { name: 'defineSystem', from: '@gwenjs/core' }
];

GwenTypeTemplate

Signature:

ts
interface GwenTypeTemplate {
  name: string;
  path: string;
  description?: string;
}

Description. Modèle pour les définitions de type qui peuvent être générées automatiquement lors du build.