Skip to main content
Version: 1.x

Autoloading

Baeta provides an autoloading plugin that automatically discovers and loads your modules and resolvers, eliminating the need for manual registration.

Installation​

yarn add @baeta/plugin-autoload -D

Configuration​

Enable autoloading in your baeta.ts:

import { defineConfig } from "@baeta/cli";
import { autoloadPlugin } from "@baeta/plugin-autoload";

export default defineConfig({
// ... other config
plugins: [autoloadPlugin()],
});
warning

For the plugin to work correctly, it should be registered before plugins that generate GraphQL files, modules or resolvers.

Project Structure​

The autoloader expects a specific project structure:

src/
├── modules/
│ ├── user/
│ │ ├── user.gql
│ │ ├── resolvers.ts
│ │ └── typedef.ts
│ ├── post/
│ │ ├── post.gql
│ │ ├── post.resolvers.ts // The suffix is what matters
│ │ └── typedef.ts
│ ├── scalars/
│ │ ├── scalars.gql
│ │ ├──scalars.resolvers.ts
│ │ └── typedef.ts
│ └── autoload.ts // Generated by the plugin
└── baeta.ts

How It Works​

With autoloading enabled:

  1. No need to create index.ts files
  2. No need to manually import resolvers
  3. No need to export modules
  4. No need to register resolvers in your application setup

The plugin will:

  • Discover all .gql files in your modules directory
  • Load corresponding resolver files
  • Create autoload.ts with resolver registration and modules exports

Just import the autoload.ts file in your application setup:

import { modules } from "./modules/autoload.ts";

const baeta = createApplication({
modules,
});

Without Autoloading​

Without the plugin, you would need to manually:

// src/modules/user/index.ts
import "./resolvers";
import { getUserModule } from "./typedef";

export const userModule = getUserModule();

// src/app.ts
import { userModule } from "./modules/user";
import { postModule } from "./modules/post";
import { scalarsModule } from "./modules/scalars";

// Register each module manually
const baeta = createApplication({
modules: [userModule, postModule, scalarsModule],
});

Default Resolver Suffixes​

By default, the plugin looks for files with these suffixes:

const defaultSuffixes = [
"auth",
"authorization",
"authorizations",
"cache",
"caches",
"resolver",
"resolvers",
"query",
"queries",
"mutation",
"mutations",
"subscription",
"subscriptions",
"baeta",
];

This means files like user.resolver.ts, auth.ts, or queries.ts will be automatically loaded.

Configuration Options​

Resolver Options​

interface ResolverOptions {
// Custom suffixes to look for
suffix?: string | string[];

// Disable the default suffixes
disableDefaultSuffixes?: boolean;

// Custom matching function
match?: (filename: string) => boolean;
}

Module Options​

interface ModuleOptions {
// Custom matching function for module names
match?: (moduleName: string) => boolean;
}

Autoload Plugin Options​

interface AutoloadPluginOptions {
// Enable/disable resolver autoloading
resolvers?: boolean | ResolverOptions;

// Enable/disable module autoloading
modules?: boolean | ModuleOptions;

// Output path for generated files
output?: string;
}