mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 20:37:21 +00:00
Introduce `Media.*` to modularize and customize file upload handling. Refactor media-related components to improve usability, add max item limits, overwrite support, and event callbacks.
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import { Const, type Static, Type, objectTransform } from "core/utils";
|
|
import { Adapters } from "media";
|
|
import { registries } from "modules/registries";
|
|
|
|
export const ADAPTERS = {
|
|
...Adapters
|
|
} as const;
|
|
|
|
export const registry = registries.media;
|
|
|
|
export function buildMediaSchema() {
|
|
const adapterSchemaObject = objectTransform(registry.all(), (adapter, name) => {
|
|
return Type.Object(
|
|
{
|
|
type: Const(name),
|
|
config: adapter.schema
|
|
},
|
|
{
|
|
title: name,
|
|
additionalProperties: false
|
|
}
|
|
);
|
|
});
|
|
const adapterSchema = Type.Union(Object.values(adapterSchemaObject));
|
|
|
|
return Type.Object(
|
|
{
|
|
enabled: Type.Boolean({ default: false }),
|
|
basepath: Type.String({ default: "/api/media" }),
|
|
entity_name: Type.String({ default: "media" }),
|
|
storage: Type.Object(
|
|
{
|
|
body_max_size: Type.Optional(
|
|
Type.Number({
|
|
description: "Max size of the body in bytes. Leave blank for unlimited."
|
|
})
|
|
)
|
|
},
|
|
{ default: {} }
|
|
),
|
|
adapter: Type.Optional(adapterSchema)
|
|
},
|
|
{
|
|
additionalProperties: false
|
|
}
|
|
);
|
|
}
|
|
|
|
export const mediaConfigSchema = buildMediaSchema();
|
|
export type TAppMediaConfig = Static<typeof mediaConfigSchema>;
|