npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@taistudio/driftwood-module-sdk

v26.1.8

Published

SDK pour créer des modules DriftWood avec autocomplétion TypeScript

Downloads

706

Readme

DriftWood Module SDK

SDK TypeScript pour créer des modules DriftWood avec autocomplétion et structure organisée.

Installation

npm install @taistudio/driftwood-module-sdk

Fonctionnalités

  • Autocomplétion TypeScript complète
  • Validation des types stricte
  • Gestion des permissions intégrée
  • Helpers pour composants, pages et thèmes
  • API fluide et intuitive
  • Support des hooks et routes API
  • Validation des modules intégrée

Démarrage Rapide

Créer un module simple

import { createModule, ComponentHelper, PageHelper } from '@driftwood/module-sdk';

const myModule = createModule({
  name: 'my-awesome-module',
  version: '1.0.0',
  description: 'Mon premier module DriftWood'
})
  .addComponent(
    ComponentHelper.createElement(
      'my-element',
      'Mon Élément',
      <div>Contenu de mon élément</div>,
      {
        category: 'custom',
        icon: 'star'
      }
    )
  )
  .addPage(
    PageHelper.createAdminPage(
      '/admin/my-module',
      'Mon Module',
      <div>Page d'administration</div>
    )
  )
  .build();

export default myModule;

Utilisation avec CMS Helper

import { CMSHelper, ModulePermission } from '@driftwood/module-sdk';

// Dans votre composant ou hook
const cmsHelper = new CMSHelper(context);

// Vérifier les permissions
if (cmsHelper.hasPermission(ModulePermission.READ_CONTENT)) {
  const content = await cmsHelper.getContent();
  console.log(content);
}

// Créer du contenu
const newContent = await cmsHelper.saveContent({
  type: 'article',
  title: 'Mon Article',
  content: 'Contenu de l\'article...'
});

API Reference

ModuleBuilder

Classe principale pour construire des modules DriftWood.

Méthodes

  • addComponent(component, config) - Ajoute un composant
  • addComponents(components) - Ajoute plusieurs composants
  • addPage(component, config) - Ajoute une page
  • addPages(pages) - Ajoute plusieurs pages
  • addTheme(theme) - Ajoute un thème
  • addThemes(themes) - Ajoute plusieurs thèmes
  • addHook(config) - Ajoute un hook
  • addAPIRoute(config) - Ajoute une route API
  • onInitialize(handler) - Définit l'initialisation
  • onDestroy(handler) - Définit la destruction
  • build() - Construit le module final

ComponentHelper

Helper pour créer des composants DriftWood.

// Créer un élément
ComponentHelper.createElement(
  'element-id',
  'Nom de l\'élément',
  <MonComposant />,
  {
    category: 'custom',
    icon: 'star',
    props: { /* props par défaut */ },
    styles: { /* styles par défaut */ }
  }
);

// Créer un layout
ComponentHelper.createLayout('layout-id', 'Nom', <MonLayout />, options);

// Créer une section
ComponentHelper.createSection('section-id', 'Nom', <MaSection />, options);

PageHelper

Helper pour créer des pages DriftWood.

// Page publique
PageHelper.createPublicPage(
  '/ma-page',
  'Titre de la page',
  <MonComposant />,
  {
    description: 'Description de la page',
    middleware: ['auth']
  }
);

// Page admin
PageHelper.createAdminPage(
  '/admin/ma-page',
  'Titre Admin',
  <MonComposantAdmin />,
  options
);

// Page de configuration automatique
PageHelper.createConfigPage('module-name', <ConfigComponent />);

ThemeHelper

Helper pour créer des thèmes DriftWood.

// Thème clair
ThemeHelper.createLightTheme('mon-theme-clair');

// Thème sombre
ThemeHelper.createDarkTheme('mon-theme-sombre');

// Thème personnalisé
ThemeHelper.createTheme(
  'mon-theme',
  {
    primary: '#3b82f6',
    secondary: '#64748b',
    // ... autres couleurs
  },
  {
    fonts: {
      sans: 'Inter, sans-serif'
    }
  }
);

// Variante de thème
const baseTheme = ThemeHelper.createLightTheme('base');
ThemeHelper.createThemeVariant(
  baseTheme,
  'variante-bleue',
  { primary: '#2563eb' }
);

CMSHelper

Helper pour interagir avec le CMS DriftWood.

const cms = new CMSHelper(context);

// Permissions
cms.hasPermission(ModulePermission.READ_CONTENT);
cms.hasAnyPermission([ModulePermission.READ_CONTENT, ModulePermission.WRITE_CONTENT]);
cms.isAdmin();

// Contenu
await cms.getContent('article', 10);
await cms.saveContent({ title: 'Nouveau', content: '...' });
await cms.deleteContent('content-id');

// Utilisateurs
await cms.getUsers();

// Thème
cms.getCurrentTheme();
await cms.updateTheme({ colors: { primary: '#ff0000' } });

// Informations
cms.getSiteInfo();
cms.getCurrentUser();

Permissions

Les modules peuvent demander les permissions suivantes :

  • READ_CONTENT - Lire le contenu
  • WRITE_CONTENT - Modifier le contenu
  • READ_USERS - Lire les utilisateurs
  • WRITE_USERS - Modifier les utilisateurs
  • READ_THEME - Lire le thème
  • WRITE_THEME - Modifier le thème
  • ACCESS_ADMIN - Accéder à l'administration
  • MODIFY_COMPONENTS - Modifier les composants
  • ACCESS_ANALYTICS - Accéder aux analytics

Types Principaux

DriftWoodModuleConfig

interface DriftWoodModuleConfig {
  name: string;
  version: string;
  description?: string;
  author?: string;
  permissions?: ModulePermission[];
}

ComponentConfig

interface ComponentConfig {
  id: string;
  type: 'element' | 'layout' | 'page' | 'section';
  name: string;
  category: string;
  icon?: string;
  props?: Record<string, any>;
  styles?: Record<string, any>;
  permissions?: ModulePermission[];
}

PageConfig

interface PageConfig {
  path: string;
  type: 'public' | 'admin';
  title: string;
  description?: string;
  permissions?: ModulePermission[];
  middleware?: string[];
}

Validation

Le SDK inclut un système de validation pour vérifier la conformité des modules :

import { validateModule } from '@driftwood/module-sdk';

const result = validateModule(myModule);

if (!result.isValid) {
  console.error('Erreurs:', result.errors);
  console.warn('Avertissements:', result.warnings);
}

Structure d'un Module

Un module DriftWood complet peut contenir :

  • Composants : Éléments, layouts, pages, sections
  • Pages : Pages publiques et d'administration
  • Thèmes : Thèmes et variantes
  • Hooks : Écouteurs d'événements
  • Routes API : Endpoints API personnalisés
  • Permissions : Droits d'accès requis
  • Cycle de vie : Initialisation et destruction

Exemples

Voir le dossier examples/ pour des exemples complets :

  • basic-module.tsx - Module simple avec composants et pages
  • advanced-module.tsx - Module avancé avec hooks et API

Développement

# Installer les dépendances
npm install

# Compiler le SDK
npm run build

# Mode développement
npm run dev

# Nettoyer
npm run clean

Contribuer

  1. Fork le projet
  2. Créer une branche (git checkout -b feature/amazing-feature)
  3. Commit les changements (git commit -m 'Add amazing feature')
  4. Push vers la branche (git push origin feature/amazing-feature)
  5. Ouvrir une Pull Request

Licence

MIT License - voir le fichier LICENSE pour les détails.

Support

Pour toute question ou problème, veuillez ouvrir une issue sur le repository GitHub.