mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
import { createZodDto } from 'nestjs-zod';
|
|
import { PluginAction, PluginFilter } from 'src/database';
|
|
import { PluginContextSchema, PluginTriggerTypeSchema } from 'src/enum';
|
|
import { JSONSchemaSchema } from 'src/types/plugin-schema.types';
|
|
import z from 'zod';
|
|
|
|
const PluginTriggerResponseSchema = z
|
|
.object({
|
|
type: PluginTriggerTypeSchema,
|
|
contextType: PluginContextSchema,
|
|
})
|
|
.meta({ id: 'PluginTriggerResponseDto' });
|
|
|
|
const PluginFilterResponseSchema = z
|
|
.object({
|
|
id: z.string().describe('Filter ID'),
|
|
pluginId: z.string().describe('Plugin ID'),
|
|
methodName: z.string().describe('Method name'),
|
|
title: z.string().describe('Filter title'),
|
|
description: z.string().describe('Filter description'),
|
|
supportedContexts: z.array(PluginContextSchema).describe('Supported contexts'),
|
|
schema: JSONSchemaSchema.nullable().describe('Filter schema'),
|
|
})
|
|
.meta({ id: 'PluginFilterResponseDto' });
|
|
|
|
const PluginActionResponseSchema = z
|
|
.object({
|
|
id: z.string().describe('Action ID'),
|
|
pluginId: z.string().describe('Plugin ID'),
|
|
methodName: z.string().describe('Method name'),
|
|
title: z.string().describe('Action title'),
|
|
description: z.string().describe('Action description'),
|
|
supportedContexts: z.array(PluginContextSchema).describe('Supported contexts'),
|
|
schema: JSONSchemaSchema.nullable().describe('Action schema'),
|
|
})
|
|
.meta({ id: 'PluginActionResponseDto' });
|
|
|
|
const PluginResponseSchema = z
|
|
.object({
|
|
id: z.string().describe('Plugin ID'),
|
|
name: z.string().describe('Plugin name'),
|
|
title: z.string().describe('Plugin title'),
|
|
description: z.string().describe('Plugin description'),
|
|
author: z.string().describe('Plugin author'),
|
|
version: z.string().describe('Plugin version'),
|
|
createdAt: z.string().describe('Creation date'),
|
|
updatedAt: z.string().describe('Last update date'),
|
|
filters: z.array(PluginFilterResponseSchema).describe('Plugin filters'),
|
|
actions: z.array(PluginActionResponseSchema).describe('Plugin actions'),
|
|
})
|
|
.meta({ id: 'PluginResponseDto' });
|
|
|
|
export class PluginTriggerResponseDto extends createZodDto(PluginTriggerResponseSchema) {}
|
|
export class PluginResponseDto extends createZodDto(PluginResponseSchema) {}
|
|
|
|
type MapPlugin = {
|
|
id: string;
|
|
name: string;
|
|
title: string;
|
|
description: string;
|
|
author: string;
|
|
version: string;
|
|
wasmPath: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
filters: PluginFilter[];
|
|
actions: PluginAction[];
|
|
};
|
|
|
|
export function mapPlugin(plugin: MapPlugin): PluginResponseDto {
|
|
return {
|
|
id: plugin.id,
|
|
name: plugin.name,
|
|
title: plugin.title,
|
|
description: plugin.description,
|
|
author: plugin.author,
|
|
version: plugin.version,
|
|
createdAt: plugin.createdAt.toISOString(),
|
|
updatedAt: plugin.updatedAt.toISOString(),
|
|
filters: plugin.filters,
|
|
actions: plugin.actions,
|
|
};
|
|
}
|