Configuration
@xond/api can be customized through configuration files. This allows you to control code generation behavior, skip certain models, and customize field mappings.
Configuration File Location
Create a configuration file at:
src/config/customConfig.ts
This file should export a customConfig object that merges with the default configuration.
Default Configuration
The default configuration includes:
export const defaultConfig = {
skipTables: [],
defaultDisplayFields: ["name", "code", "title"],
defaultDisplayField: "name",
prismaTsTypeMap: {
String: "string",
Int: "number",
Float: "number",
Decimal: "number",
Boolean: "boolean",
DateTime: "Date",
Json: "any",
},
// ... more defaults
};
Custom Configuration Example
// src/config/customConfig.ts
export const customConfig = {
// Skip these models from frontend generation
skipTables: ["_Migration", "AuditLog", "SystemConfig"],
// Default fields to display in lists
defaultDisplayFields: ["name", "code", "description"],
// Primary display field
defaultDisplayField: "name",
// Code field (for lookup fields)
defaultCodeField: "code",
// Name field (for display)
defaultNameField: "name",
// Description field
defaultDescriptionField: "description",
// Default page size for pagination
defaultPageSize: 20,
// Fields to skip in forms
skipFields: ["id", "createdAt", "updatedAt", "deletedAt"],
};
Configuration Options
skipTables
Array of model variable names to skip during frontend model generation.
skipTables: ["_Migration", "AuditLog"]
These models will still generate backend services, but not frontend models.
defaultDisplayFields
Fields that should be displayed by default in list views.
defaultDisplayFields: ["name", "code", "title"]
defaultDisplayField
The primary field to use for display purposes.
defaultDisplayField: "name"
defaultCodeField
The field that contains a unique code identifier.
defaultCodeField: "code"
defaultNameField
The field that contains a human-readable name.
defaultNameField: "name"
defaultDescriptionField
The field that contains a description.
defaultDescriptionField: "description"
defaultPageSize
Default number of items per page in paginated results.
defaultPageSize: 20
skipFields
Fields to exclude from form generation.
skipFields: ["id", "createdAt", "updatedAt", "deletedAt"]
Model Overrides
You can customize how models are parsed by providing an override function:
// src/config/customConfig.ts
import { Model } from "@xond/api/core/parseSchema";
export const overrideModel = (models: Model[]): Model[] => {
return models.map((model) => {
// Customize specific models
if (model.name === "User") {
// Add custom fields
model.fields.push({
name: "fullName",
type: "String",
isRequired: false,
// ... more field properties
});
}
// Modify all models
model.fields = model.fields.filter(
(field) => !field.name.startsWith("_")
);
return model;
});
};
Environment Variables
Configuration can also be influenced by environment variables:
DATABASE_URL
Required. Database connection string.
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
NODE_ENV
Should be set to development or dev for local development.
NODE_ENV=development
DEFAULT_SYSTEM_USER_ID
Optional. UUID for system user in audit logs.
DEFAULT_SYSTEM_USER_ID=00000000-0000-0000-0000-000000000000
File Paths
The generator looks for files in these locations:
- Structure SQL:
prisma/structure.sql - Update Scripts:
prisma/update-struct-*.sql - Dummy Data:
prisma/dummy.xlsx - Prisma Schema:
prisma/schema.prisma - Custom Config:
src/config/customConfig.ts
UI Path Configuration
If you have a separate UI application in your monorepo, configure the relative path:
The generator automatically detects UI apps by looking for:
apps/*-ui/directories- Or you can configure it in
customConfig.ts
Validation
The configuration is validated when you run xond-api generate. Invalid configurations will show errors:
❌ Error loading config: [error message]
Best Practices
- Version Control Config – Commit
customConfig.tsto version control - Document Customizations – Add comments explaining why you skip certain models
- Test After Changes – Regenerate code after changing configuration
- Use TypeScript – Leverage TypeScript for type safety in your config
Example: Complete Configuration
// src/config/customConfig.ts
import { Model } from "@xond/api/core/parseSchema";
export const customConfig = {
skipTables: ["_Migration", "AuditLog"],
defaultDisplayFields: ["name", "code"],
defaultDisplayField: "name",
defaultCodeField: "code",
defaultNameField: "name",
defaultDescriptionField: "description",
defaultPageSize: 25,
skipFields: ["id", "createdAt", "updatedAt"],
};
export const overrideModel = (models: Model[]): Model[] => {
// Customize models before generation
return models;
};