@baseplate-dev/sync
Version:
Library for syncing Baseplate descriptions
61 lines • 1.98 kB
JavaScript
import { TemplateExtractorContext } from '../runner/template-extractor-context.js';
/**
* Mock API for testing plugin hook registration
*/
export function createMockPluginApi() {
const registeredHooks = new Map();
const api = {
registerHook(hook, callback) {
const callbacks = registeredHooks.get(hook) ?? [];
callbacks.push(callback);
registeredHooks.set(hook, callbacks);
},
};
return {
api,
getRegisteredHooks: () => registeredHooks,
executeHooks: async (hook) => {
const callbacks = registeredHooks.get(hook) ?? [];
for (const callback of callbacks) {
await callback();
}
},
};
}
/**
* Creates a plugin instance for testing
*/
export async function createPluginInstance(plugin, context, api) {
const mockApi = api ?? createMockPluginApi();
const pluginApi = 'api' in mockApi ? mockApi.api : mockApi;
const instance = await plugin.getInstance({
context,
api: pluginApi,
});
const executeHooks = 'executeHooks' in mockApi
? mockApi.executeHooks
: async () => {
// No-op for external APIs
};
return {
instance,
api: pluginApi,
executeHooks,
};
}
/**
* Helper to test plugin with dependencies
*/
export async function createPluginInstanceWithDependencies(plugin, context, dependencyInstances) {
// Add dependency instances to context
const mergedPlugins = new Map([...context.plugins, ...dependencyInstances]);
const contextWithDependencies = new TemplateExtractorContext({
configLookup: context.configLookup,
logger: context.logger,
outputDirectory: context.outputDirectory,
fileContainer: context.fileContainer,
plugins: mergedPlugins,
});
return createPluginInstance(plugin, contextWithDependencies);
}
//# sourceMappingURL=plugin-test-utils.js.map