🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
7.2 KiB
Migration Guide: v0.0.36 to v0.0.37
Overview
Version 0.0.37 introduces significant refactoring and cleanup changes focused on simplifying the plugin architecture and removing unused features. This version removes several deprecated components and consolidates trigger handling.
Breaking Changes
1. Removed Components and Files
The following components and modules have been completely removed:
Components
TriggerWorkflowButton- Manual workflow triggering componentWorkflowExecutionStatus- Workflow execution status display component
Plugin Modules
init-global-hooks.ts- Global hook initialization (functionality moved to main plugin)init-step-tasks.ts- Step task initialization (functionality integrated elsewhere)init-webhook.ts- Webhook initialization (functionality removed)init-workflow-hooks.ts- Workflow hook initialization (functionality moved to main plugin)
Triggers
webhook-trigger.ts- Webhook trigger support has been removedcron-trigger.ts- Cron/scheduled trigger support has been removedcron-scheduler.ts- Cron scheduling system has been removed
Tests
webhook-triggers.spec.ts- Webhook trigger integration tests
2. Cron/Scheduled Workflows Removal
Cron trigger functionality has been completely removed from the plugin. If you were using cron triggers in your workflows:
Migration Path:
- Use external scheduling services like GitHub Actions or Vercel Cron
- Trigger workflows via webhook endpoints from external schedulers
- Implement custom scheduling in your application using libraries like
node-cron
Example with GitHub Actions:
name: Trigger Workflow
on:
schedule:
- cron: '0 9 * * *' # Daily at 9 AM
jobs:
trigger:
runs-on: ubuntu-latest
steps:
- name: Trigger Workflow
run: |
curl -X POST https://your-app.com/api/workflows/trigger/your-workflow-id
3. Webhook Trigger Removal
Webhook triggers have been removed. If you were using webhook triggers:
Migration Path:
- Implement custom webhook endpoints in your PayloadCMS application
- Use collection or global hooks to trigger workflows based on document changes
- Create manual trigger endpoints using the workflow executor directly
4. Architecture Changes
ExecutorRegistry Removal
The executorRegistry singleton pattern has been removed. WorkflowExecutor instances are now created on-demand for each execution.
What this means:
- No shared state between workflow executions
- Each execution is completely independent
- Better memory management and isolation
Hook Registration Consolidation
Hook registration logic has been consolidated into the main plugin file:
- Collection hooks are now registered directly in
plugin/index.ts - Global hooks are handled through the new
plugin/global-hook.tsmodule - Simplified hook management with better TypeScript typing
Non-Breaking Changes
1. Trigger Module Refactoring
Triggers have been reorganized into a dedicated triggers/ directory with improved modularity:
triggers/collection-trigger.ts- Collection-based triggerstriggers/global-trigger.ts- Global document triggerstriggers/index.ts- Trigger exportstriggers/types.ts- Trigger type definitions
2. Field Helper Improvements
New triggerField helper function standardizes virtual field creation across all trigger modules:
// Before (manual virtual field creation)
{
name: '__builtin_collection',
type: 'text',
admin: { hidden: true },
virtual: true,
access: { read: () => false, update: () => false }
}
// After (using helper)
triggerField('collection', {
type: 'text',
// helper handles virtual field setup automatically
})
3. TypeScript Improvements
- Replaced 'any' types with proper TypeScript types
- Added
CollectionAfterChangeHookandPayloadRequesttype usage - Improved type safety throughout the codebase
4. Code Organization
New File Structure
src/
├── plugin/
│ ├── collection-hook.ts # Collection hook logic
│ ├── global-hook.ts # Global hook logic (new)
│ └── index.ts # Main plugin (consolidated)
├── triggers/ # Trigger modules (new directory)
├── fields/
│ └── parameter.ts # Moved from triggers/helpers.ts
ESLint Configuration
- Disabled
perfectionist/sort-object-typesandperfectionist/sort-objectsrules - Allows natural object property ordering without enforced alphabetical sorting
Migration Steps
1. Update Imports
If you were importing removed components or modules, remove these imports:
// Remove these imports - no longer available
import { TriggerWorkflowButton } from '@xtr-dev/payload-automation/client'
import { WorkflowExecutionStatus } from '@xtr-dev/payload-automation/client'
2. Update Workflow Configurations
If your workflows used cron or webhook triggers, you'll need to modify them:
Before:
{
trigger: {
type: 'cron',
schedule: '0 9 * * *'
}
}
After:
{
trigger: {
type: 'collection', // Use collection or global triggers instead
collection: 'your-collection',
operation: 'create'
}
}
3. Replace Webhook Functionality
If you were using webhook triggers, implement custom webhook handling:
// In your PayloadCMS config
export default buildConfig({
endpoints: [
{
path: '/trigger-workflow/:workflowId',
method: 'post',
handler: async (req) => {
const { workflowId } = req.params
// Implement your workflow triggering logic here
// Use the WorkflowExecutor directly if needed
}
}
]
})
4. Update Custom Components
If you built custom components using the removed ones as reference, update them to work with the new architecture.
Benefits of This Release
- Simplified Architecture: Consolidated plugin initialization reduces complexity
- Better Memory Management: On-demand executor creation eliminates shared state issues
- Improved Type Safety: Proper TypeScript typing throughout
- Reduced Bundle Size: Removal of unused code reduces package size
- Better Maintainability: Cleaner code organization and module structure
- More Reliable: External scheduling is more robust than in-process cron jobs
Testing Your Migration
After migrating:
- Test Existing Workflows: Ensure collection and global triggers still work as expected
- Verify External Triggers: Test any external webhook or scheduling implementations
- Check Custom Components: Validate any custom UI components that interact with workflows
- Run Integration Tests: Execute your test suite to catch any breaking changes
Support
If you encounter issues migrating from v0.0.36 to v0.0.37:
- Check that you're not using any of the removed components or features
- Verify your workflow trigger types are supported (collection, global, manual)
- Update any custom integrations that relied on removed modules
- Consider the external scheduling alternatives for cron functionality
For additional support, please refer to the plugin documentation or open an issue in the project repository.