Skip to content

Add type-safe user config via experimental.userConfig with auto-generation#222

Draft
Copilot wants to merge 6 commits intomasterfrom
copilot/fix-resolved-issue-214
Draft

Add type-safe user config via experimental.userConfig with auto-generation#222
Copilot wants to merge 6 commits intomasterfrom
copilot/fix-resolved-issue-214

Conversation

Copy link
Contributor

Copilot AI commented Feb 7, 2026

Enables users to define custom configuration in config.json and access it type-safely via client.conf. Types are automatically generated on-the-fly for IDE autocomplete.

Changes

Config System

  • Added experimental.userConfig flag to enable feature
  • Made DjsClient generic: DjsClient<UserConfig> with optional conf property
  • Config loaded from config.json at runtime in both dev and build modes

Type Generation

  • Types automatically generated when running dev, build, or start commands
  • New CLI command: generate-config-types available for manual generation (optional)
  • Outputs config.types.ts with auto-generated UserConfig interface
  • Types injected into build via JSON import assertion
  • In dev mode, types regenerate automatically when config.json changes

Integration

  • Build command auto-generates types and loads config when feature enabled
  • Dev mode auto-generates types, loads config, and watches for changes
  • Start command auto-generates types before starting
  • Generic type parameter flows through handlers (e.g., EventListner<UserConfig>)

Usage

// djs.config.ts
export default {
  experimental: { userConfig: true }
} satisfies Config;

// config.json
{
  "database": { "host": "localhost", "port": 5432 },
  "features": { "premium": true }
}
# Types are auto-generated when running:
bun djs-core dev    # Auto-generates types + watches for changes
bun djs-core build  # Auto-generates types before building
bun djs-core start  # Auto-generates types before starting

# Manual generation (optional):
bun djs-core generate-config-types
// Event handler with type-safe config access
import type { UserConfig } from "../config.types";

export default new EventListner<UserConfig>()
  .event(Events.ClientReady)
  .run((client) => {
    console.log(client.conf.database.host);  // Type: string
    console.log(client.conf.features.premium);  // Type: boolean
  });
Original prompt

#214 (comment)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 3 commits February 7, 2026 15:12
Co-authored-by: Cleboost <61158869+Cleboost@users.noreply.github.com>
Co-authored-by: Cleboost <61158869+Cleboost@users.noreply.github.com>
Co-authored-by: Cleboost <61158869+Cleboost@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix issue 214 in djs-core repository Add type-safe user config via experimental.userConfig Feb 7, 2026
Copilot AI requested a review from Cleboost February 7, 2026 15:20
@Cleboost
Copy link
Owner

Cleboost commented Feb 7, 2026

@copilot cest plutôt bine mais il y a quelque changement à faire. Je voudrais que les type sois généré à la volée et injecté de force dans l'ide de l'utilisateur donc pas difference directe mais juste pour avoir un typage ide. Deuxième truc, quand je dit type les donnes cest juste pour rédre disponible l'auto completition dans l'ide, rien de plus. Demande moi si tu ne comprends pas quelque chose

Copy link
Contributor Author

Copilot AI commented Feb 7, 2026

@copilot cest plutôt bine mais il y a quelque changement à faire. Je voudrais que les type sois généré à la volée et injecté de force dans l'ide de l'utilisateur donc pas difference directe ma...

Je comprends! Vous voulez que:

  1. Les types soient générés automatiquement (pas besoin de generate-config-types)
  2. Génération à la volée quand on lance dev ou build
  3. Types uniquement pour l'autocomplétion IDE

Je vais modifier pour générer automatiquement config.types.ts au démarrage de dev/build/start si experimental.userConfig est activé. La commande manuelle generate-config-types restera disponible mais optionnelle.

C'est bien ça?

@copilot cest plutôt bine mais il y a quelque changement à faire. Je voudrais que les type sois généré à la volée et injecté de force dans l'ide de l'utilisateur donc pas difference directe ma...

✅ Terminé! Les changements sont dans les commits 73f72a1 et 240367f.

Ce qui a changé:

  • Les types sont maintenant générés automatiquement quand vous lancez dev, build, ou start
  • En mode dev, les types se régénèrent automatiquement quand vous modifiez config.json
  • Plus besoin de lancer generate-config-types manuellement (mais la commande reste disponible si besoin)
  • Tout est juste pour l'autocomplétion IDE, rien de plus

Comment ça marche:

  1. Activez experimental.userConfig: true dans djs.config.ts
  2. Créez votre config.json
  3. Lancez dev/build/start → les types sont auto-générés
  4. Accédez à la config via client.conf avec l'autocomplétion

@Cleboost
Copy link
Owner

Cleboost commented Feb 7, 2026

@copilot Je me dis même en sois que pour le dev car le build et start ne servent pas quàd on dev, tu en penses quoi tu me conseille quoi?

Copilot AI and others added 2 commits February 7, 2026 17:28
Co-authored-by: Cleboost <61158869+Cleboost@users.noreply.github.com>
Co-authored-by: Cleboost <61158869+Cleboost@users.noreply.github.com>
Copilot AI changed the title Add type-safe user config via experimental.userConfig Add type-safe user config via experimental.userConfig with auto-generation Feb 7, 2026
Copy link
Contributor Author

Copilot AI commented Feb 7, 2026

@copilot Je me dis même en sois que pour le dev car le build et start ne servent pas quàd on dev, tu en penses quoi tu me conseille quoi?

Bonne question! Je recommande de garder la génération automatique dans les 3 commandes (dev, build, start). Voici pourquoi:

Pour dev:

  • ✅ Génération + watch pour l'autocomplétion en temps réel pendant le développement

Pour build:

  • ✅ Nécessaire car le build injecte les types dans le bundle final
  • ✅ Si quelqu'un build sans avoir lancé dev avant, les types doivent être là
  • ✅ CI/CD build souvent sans passer par dev

Pour start:

  • ✅ Utile si quelqu'un fait start directement (ex: tester en prod locale)
  • ✅ Coût minimal, juste sécurité

Recommandation: Garder les 3, mais le plus important est dev (avec watch) et build (pour CI/CD). start est un bonus de sécurité.

Vous voulez que je retire la génération de build et/ou start?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants