sanity-plugin-s3-files
Version:
Store Sanity media files in AWS S3
70 lines (69 loc) • 3.29 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.s3Files = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const sanity_1 = require("sanity");
const sanity_plugin_external_files_1 = require("sanity-plugin-external-files");
const deleteFile_1 = __importDefault(require("./deleteFile"));
const schema_config_1 = require("./schema.config");
const uploadFile_1 = __importDefault(require("./uploadFile"));
const VENDOR_ID = 's3-files';
exports.s3Files = (0, sanity_1.definePlugin)((userConfig) => {
const config = buildConfig(userConfig);
return {
name: config.schemaPrefix,
schema: {
types: [
// s3-files.custom-data
(0, sanity_plugin_external_files_1.getCustomDataSchema)(config, schema_config_1.schemaConfig),
// s3-files.dimensions
(0, sanity_plugin_external_files_1.getDimensionsSchema)(config),
// s3-files.storedFile
(0, sanity_plugin_external_files_1.getStoredFileSchema)(config, schema_config_1.schemaConfig),
{
name: `${config.schemaPrefix}.media`,
title: 'S3 media',
type: 'object',
components: {
input: (0, sanity_plugin_external_files_1.createInput)(config),
},
fields: [
{
name: 'asset',
title: 'Asset',
type: 'reference',
to: [{ type: `${config.schemaPrefix}.storedFile` }],
},
],
},
],
},
tools: [
{
name: config.schemaPrefix,
title: config.toolTitle,
component: () => (0, jsx_runtime_1.jsx)(sanity_plugin_external_files_1.StudioTool, Object.assign({}, config)),
icon: sanity_plugin_external_files_1.ToolIcon,
},
],
};
});
function buildConfig(userConfig = {}) {
var _a;
const userCredentials = (userConfig === null || userConfig === void 0 ? void 0 : userConfig.credentials) || {};
return {
id: VENDOR_ID,
customDataFieldName: 's3',
defaultAccept: userConfig.defaultAccept,
schemaPrefix: userConfig.schemaPrefix || VENDOR_ID,
toolTitle: (_a = userConfig.toolTitle) !== null && _a !== void 0 ? _a : 'Media Library (S3)',
credentialsFields: schema_config_1.credentialsFields.filter(
// Credentials already provided by the
(field) => !userCredentials[field.name] && !(field.name in userCredentials)),
deleteFile: (props) => (0, deleteFile_1.default)(Object.assign(Object.assign({}, props), { credentials: Object.assign(Object.assign({}, userCredentials), (props.credentials || {})) })),
uploadFile: (props) => (0, uploadFile_1.default)(Object.assign(Object.assign({}, props), { credentials: Object.assign(Object.assign({}, userCredentials), (props.credentials || {})) })),
};
}
;