UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

144 lines (143 loc) • 18.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _deepmerge = /*#__PURE__*/ _interop_require_default(require("deepmerge")); const _isplainobject = require("is-plain-object"); const _accountLock = /*#__PURE__*/ _interop_require_default(require("../../auth/baseFields/accountLock")); const _apiKey = /*#__PURE__*/ _interop_require_default(require("../../auth/baseFields/apiKey")); const _auth = /*#__PURE__*/ _interop_require_default(require("../../auth/baseFields/auth")); const _verification = /*#__PURE__*/ _interop_require_default(require("../../auth/baseFields/verification")); const _TimestampsRequired = /*#__PURE__*/ _interop_require_default(require("../../errors/TimestampsRequired")); const _sanitize = require("../../fields/config/sanitize"); const _types = require("../../fields/config/types"); const _mergeBaseFields = /*#__PURE__*/ _interop_require_default(require("../../fields/mergeBaseFields")); const _extractTranslations = require("../../translations/extractTranslations"); const _getBaseFields = /*#__PURE__*/ _interop_require_default(require("../../uploads/getBaseFields")); const _formatLabels = require("../../utilities/formatLabels"); const _baseFields = /*#__PURE__*/ _interop_require_default(require("../../versions/baseFields")); const _defaults = require("./defaults"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const translations = (0, _extractTranslations.extractTranslations)([ 'general:createdAt', 'general:updatedAt' ]); const sanitizeCollection = (config, collection)=>{ // ///////////////////////////////// // Make copy of collection config // ///////////////////////////////// const sanitized = (0, _deepmerge.default)(_defaults.defaults, collection, { isMergeableObject: _isplainobject.isPlainObject }); if (sanitized.timestamps !== false) { // add default timestamps fields only as needed let hasUpdatedAt = null; let hasCreatedAt = null; sanitized.fields.some((field)=>{ if ((0, _types.fieldAffectsData)(field)) { if (field.name === 'updatedAt') hasUpdatedAt = true; if (field.name === 'createdAt') hasCreatedAt = true; } return hasCreatedAt && hasUpdatedAt; }); if (!hasUpdatedAt) { sanitized.fields.push({ name: 'updatedAt', admin: { disableBulkEdit: true, hidden: true }, label: translations['general:updatedAt'], type: 'date' }); } if (!hasCreatedAt) { sanitized.fields.push({ name: 'createdAt', admin: { disableBulkEdit: true, hidden: true }, // The default sort for list view is createdAt. Thus, enabling indexing by default, is a major performance improvement, especially for large or a large amount of collections. index: true, label: translations['general:createdAt'], type: 'date' }); } } sanitized.labels = sanitized.labels || (0, _formatLabels.formatLabels)(sanitized.slug); if (sanitized.versions) { if (sanitized.versions === true) sanitized.versions = { drafts: false }; if (sanitized.timestamps === false) { throw new _TimestampsRequired.default(collection); } if (sanitized.versions.drafts) { if (sanitized.versions.drafts === true) { sanitized.versions.drafts = { autosave: false }; } if (sanitized.versions.drafts.autosave === true) { sanitized.versions.drafts.autosave = { interval: 2000 }; } sanitized.fields = (0, _mergeBaseFields.default)(sanitized.fields, _baseFields.default); } } if (sanitized.upload) { if (sanitized.upload === true) sanitized.upload = {}; sanitized.upload.staticDir = sanitized.upload.staticDir || sanitized.slug; sanitized.upload.staticURL = sanitized.upload.staticURL || `/${sanitized.slug}`; sanitized.admin.useAsTitle = sanitized.admin.useAsTitle && sanitized.admin.useAsTitle !== 'id' ? sanitized.admin.useAsTitle : 'filename'; const uploadFields = (0, _getBaseFields.default)({ collection: sanitized, config }); sanitized.fields = (0, _mergeBaseFields.default)(sanitized.fields, uploadFields); } if (sanitized.auth) { sanitized.auth = (0, _deepmerge.default)(_defaults.authDefaults, typeof sanitized.auth === 'object' ? sanitized.auth : {}, { isMergeableObject: _isplainobject.isPlainObject }); let authFields = []; if (sanitized.auth.useAPIKey) { authFields = authFields.concat(_apiKey.default); } if (!sanitized.auth.disableLocalStrategy) { authFields = authFields.concat(_auth.default); if (sanitized.auth.verify) { if (sanitized.auth.verify === true) sanitized.auth.verify = {}; authFields = authFields.concat(_verification.default); } if (sanitized.auth.maxLoginAttempts > 0) { authFields = authFields.concat(_accountLock.default); } } sanitized.fields = (0, _mergeBaseFields.default)(sanitized.fields, authFields); } // ///////////////////////////////// // Sanitize fields // ///////////////////////////////// const validRelationships = config.collections.map((c)=>c.slug) || []; sanitized.fields = (0, _sanitize.sanitizeFields)({ config, fields: sanitized.fields, validRelationships }); return sanitized; }; const _default = sanitizeCollection; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9jb25maWcvc2FuaXRpemUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lcmdlIGZyb20gJ2RlZXBtZXJnZSdcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tICdpcy1wbGFpbi1vYmplY3QnXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQ29uZmlnLCBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IGJhc2VBY2NvdW50TG9ja0ZpZWxkcyBmcm9tICcuLi8uLi9hdXRoL2Jhc2VGaWVsZHMvYWNjb3VudExvY2snXG5pbXBvcnQgYmFzZUFQSUtleUZpZWxkcyBmcm9tICcuLi8uLi9hdXRoL2Jhc2VGaWVsZHMvYXBpS2V5J1xuaW1wb3J0IGJhc2VBdXRoRmllbGRzIGZyb20gJy4uLy4uL2F1dGgvYmFzZUZpZWxkcy9hdXRoJ1xuaW1wb3J0IGJhc2VWZXJpZmljYXRpb25GaWVsZHMgZnJvbSAnLi4vLi4vYXV0aC9iYXNlRmllbGRzL3ZlcmlmaWNhdGlvbidcbmltcG9ydCBUaW1lc3RhbXBzUmVxdWlyZWQgZnJvbSAnLi4vLi4vZXJyb3JzL1RpbWVzdGFtcHNSZXF1aXJlZCdcbmltcG9ydCB7IHNhbml0aXplRmllbGRzIH0gZnJvbSAnLi4vLi4vZmllbGRzL2NvbmZpZy9zYW5pdGl6ZSdcbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEgfSBmcm9tICcuLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IG1lcmdlQmFzZUZpZWxkcyBmcm9tICcuLi8uLi9maWVsZHMvbWVyZ2VCYXNlRmllbGRzJ1xuaW1wb3J0IHsgZXh0cmFjdFRyYW5zbGF0aW9ucyB9IGZyb20gJy4uLy4uL3RyYW5zbGF0aW9ucy9leHRyYWN0VHJhbnNsYXRpb25zJ1xuaW1wb3J0IGdldEJhc2VVcGxvYWRGaWVsZHMgZnJvbSAnLi4vLi4vdXBsb2Fkcy9nZXRCYXNlRmllbGRzJ1xuaW1wb3J0IHsgZm9ybWF0TGFiZWxzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2Zvcm1hdExhYmVscydcbmltcG9ydCBiYXNlVmVyc2lvbkZpZWxkcyBmcm9tICcuLi8uLi92ZXJzaW9ucy9iYXNlRmllbGRzJ1xuaW1wb3J0IHsgYXV0aERlZmF1bHRzLCBkZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMnXG5cbmNvbnN0IHRyYW5zbGF0aW9ucyA9IGV4dHJhY3RUcmFuc2xhdGlvbnMoWydnZW5lcmFsOmNyZWF0ZWRBdCcsICdnZW5lcmFsOnVwZGF0ZWRBdCddKVxuXG5jb25zdCBzYW5pdGl6ZUNvbGxlY3Rpb24gPSAoXG4gIGNvbmZpZzogQ29uZmlnLFxuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uQ29uZmlnLFxuKTogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyA9PiB7XG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBNYWtlIGNvcHkgb2YgY29sbGVjdGlvbiBjb25maWdcbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgY29uc3Qgc2FuaXRpemVkOiBDb2xsZWN0aW9uQ29uZmlnID0gbWVyZ2UoZGVmYXVsdHMsIGNvbGxlY3Rpb24sIHtcbiAgICBpc01lcmdlYWJsZU9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgfSlcblxuICBpZiAoc2FuaXRpemVkLnRpbWVzdGFtcHMgIT09IGZhbHNlKSB7XG4gICAgLy8gYWRkIGRlZmF1bHQgdGltZXN0YW1wcyBmaWVsZHMgb25seSBhcyBuZWVkZWRcbiAgICBsZXQgaGFzVXBkYXRlZEF0ID0gbnVsbFxuICAgIGxldCBoYXNDcmVhdGVkQXQgPSBudWxsXG4gICAgc2FuaXRpemVkLmZpZWxkcy5zb21lKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpKSB7XG4gICAgICAgIGlmIChmaWVsZC5uYW1lID09PSAndXBkYXRlZEF0JykgaGFzVXBkYXRlZEF0ID0gdHJ1ZVxuICAgICAgICBpZiAoZmllbGQubmFtZSA9PT0gJ2NyZWF0ZWRBdCcpIGhhc0NyZWF0ZWRBdCA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNDcmVhdGVkQXQgJiYgaGFzVXBkYXRlZEF0XG4gICAgfSlcbiAgICBpZiAoIWhhc1VwZGF0ZWRBdCkge1xuICAgICAgc2FuaXRpemVkLmZpZWxkcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ3VwZGF0ZWRBdCcsXG4gICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgZGlzYWJsZUJ1bGtFZGl0OiB0cnVlLFxuICAgICAgICAgIGhpZGRlbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1snZ2VuZXJhbDp1cGRhdGVkQXQnXSxcbiAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKCFoYXNDcmVhdGVkQXQpIHtcbiAgICAgIHNhbml0aXplZC5maWVsZHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdjcmVhdGVkQXQnLFxuICAgICAgICBhZG1pbjoge1xuICAgICAgICAgIGRpc2FibGVCdWxrRWRpdDogdHJ1ZSxcbiAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRoZSBkZWZhdWx0IHNvcnQgZm9yIGxpc3QgdmlldyBpcyBjcmVhdGVkQXQuIFRodXMsIGVuYWJsaW5nIGluZGV4aW5nIGJ5IGRlZmF1bHQsIGlzIGEgbWFqb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIGVzcGVjaWFsbHkgZm9yIGxhcmdlIG9yIGEgbGFyZ2UgYW1vdW50IG9mIGNvbGxlY3Rpb25zLlxuICAgICAgICBpbmRleDogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1snZ2VuZXJhbDpjcmVhdGVkQXQnXSxcbiAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBzYW5pdGl6ZWQubGFiZWxzID0gc2FuaXRpemVkLmxhYmVscyB8fCBmb3JtYXRMYWJlbHMoc2FuaXRpemVkLnNsdWcpXG5cbiAgaWYgKHNhbml0aXplZC52ZXJzaW9ucykge1xuICAgIGlmIChzYW5pdGl6ZWQudmVyc2lvbnMgPT09IHRydWUpIHNhbml0aXplZC52ZXJzaW9ucyA9IHsgZHJhZnRzOiBmYWxzZSB9XG5cbiAgICBpZiAoc2FuaXRpemVkLnRpbWVzdGFtcHMgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgVGltZXN0YW1wc1JlcXVpcmVkKGNvbGxlY3Rpb24pXG4gICAgfVxuXG4gICAgaWYgKHNhbml0aXplZC52ZXJzaW9ucy5kcmFmdHMpIHtcbiAgICAgIGlmIChzYW5pdGl6ZWQudmVyc2lvbnMuZHJhZnRzID09PSB0cnVlKSB7XG4gICAgICAgIHNhbml0aXplZC52ZXJzaW9ucy5kcmFmdHMgPSB7XG4gICAgICAgICAgYXV0b3NhdmU6IGZhbHNlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzYW5pdGl6ZWQudmVyc2lvbnMuZHJhZnRzLmF1dG9zYXZlID09PSB0cnVlKSB7XG4gICAgICAgIHNhbml0aXplZC52ZXJzaW9ucy5kcmFmdHMuYXV0b3NhdmUgPSB7XG4gICAgICAgICAgaW50ZXJ2YWw6IDIwMDAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2FuaXRpemVkLmZpZWxkcyA9IG1lcmdlQmFzZUZpZWxkcyhzYW5pdGl6ZWQuZmllbGRzLCBiYXNlVmVyc2lvbkZpZWxkcylcbiAgICB9XG4gIH1cblxuICBpZiAoc2FuaXRpemVkLnVwbG9hZCkge1xuICAgIGlmIChzYW5pdGl6ZWQudXBsb2FkID09PSB0cnVlKSBzYW5pdGl6ZWQudXBsb2FkID0ge31cblxuICAgIHNhbml0aXplZC51cGxvYWQuc3RhdGljRGlyID0gc2FuaXRpemVkLnVwbG9hZC5zdGF0aWNEaXIgfHwgc2FuaXRpemVkLnNsdWdcbiAgICBzYW5pdGl6ZWQudXBsb2FkLnN0YXRpY1VSTCA9IHNhbml0aXplZC51cGxvYWQuc3RhdGljVVJMIHx8IGAvJHtzYW5pdGl6ZWQuc2x1Z31gXG4gICAgc2FuaXRpemVkLmFkbWluLnVzZUFzVGl0bGUgPVxuICAgICAgc2FuaXRpemVkLmFkbWluLnVzZUFzVGl0bGUgJiYgc2FuaXRpemVkLmFkbWluLnVzZUFzVGl0bGUgIT09ICdpZCdcbiAgICAgICAgPyBzYW5pdGl6ZWQuYWRtaW4udXNlQXNUaXRsZVxuICAgICAgICA6ICdmaWxlbmFtZSdcblxuICAgIGNvbnN0IHVwbG9hZEZpZWxkcyA9IGdldEJhc2VVcGxvYWRGaWVsZHMoe1xuICAgICAgY29sbGVjdGlvbjogc2FuaXRpemVkLFxuICAgICAgY29uZmlnLFxuICAgIH0pXG5cbiAgICBzYW5pdGl6ZWQuZmllbGRzID0gbWVyZ2VCYXNlRmllbGRzKHNhbml0aXplZC5maWVsZHMsIHVwbG9hZEZpZWxkcylcbiAgfVxuXG4gIGlmIChzYW5pdGl6ZWQuYXV0aCkge1xuICAgIHNhbml0aXplZC5hdXRoID0gbWVyZ2UoYXV0aERlZmF1bHRzLCB0eXBlb2Ygc2FuaXRpemVkLmF1dGggPT09ICdvYmplY3QnID8gc2FuaXRpemVkLmF1dGggOiB7fSwge1xuICAgICAgaXNNZXJnZWFibGVPYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gICAgfSlcblxuICAgIGxldCBhdXRoRmllbGRzID0gW11cblxuICAgIGlmIChzYW5pdGl6ZWQuYXV0aC51c2VBUElLZXkpIHtcbiAgICAgIGF1dGhGaWVsZHMgPSBhdXRoRmllbGRzLmNvbmNhdChiYXNlQVBJS2V5RmllbGRzKVxuICAgIH1cblxuICAgIGlmICghc2FuaXRpemVkLmF1dGguZGlzYWJsZUxvY2FsU3RyYXRlZ3kpIHtcbiAgICAgIGF1dGhGaWVsZHMgPSBhdXRoRmllbGRzLmNvbmNhdChiYXNlQXV0aEZpZWxkcylcblxuICAgICAgaWYgKHNhbml0aXplZC5hdXRoLnZlcmlmeSkge1xuICAgICAgICBpZiAoc2FuaXRpemVkLmF1dGgudmVyaWZ5ID09PSB0cnVlKSBzYW5pdGl6ZWQuYXV0aC52ZXJpZnkgPSB7fVxuICAgICAgICBhdXRoRmllbGRzID0gYXV0aEZpZWxkcy5jb25jYXQoYmFzZVZlcmlmaWNhdGlvbkZpZWxkcylcbiAgICAgIH1cblxuICAgICAgaWYgKHNhbml0aXplZC5hdXRoLm1heExvZ2luQXR0ZW1wdHMgPiAwKSB7XG4gICAgICAgIGF1dGhGaWVsZHMgPSBhdXRoRmllbGRzLmNvbmNhdChiYXNlQWNjb3VudExvY2tGaWVsZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2FuaXRpemVkLmZpZWxkcyA9IG1lcmdlQmFzZUZpZWxkcyhzYW5pdGl6ZWQuZmllbGRzLCBhdXRoRmllbGRzKVxuICB9XG5cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFNhbml0aXplIGZpZWxkc1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBjb25zdCB2YWxpZFJlbGF0aW9uc2hpcHMgPSBjb25maWcuY29sbGVjdGlvbnMubWFwKChjKSA9PiBjLnNsdWcpIHx8IFtdXG4gIHNhbml0aXplZC5maWVsZHMgPSBzYW5pdGl6ZUZpZWxkcyh7XG4gICAgY29uZmlnLFxuICAgIGZpZWxkczogc2FuaXRpemVkLmZpZWxkcyxcbiAgICB2YWxpZFJlbGF0aW9uc2hpcHMsXG4gIH0pXG5cbiAgcmV0dXJuIHNhbml0aXplZCBhcyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHNhbml0aXplQ29sbGVjdGlvblxuIl0sIm5hbWVzIjpbInRyYW5zbGF0aW9ucyIsImV4dHJhY3RUcmFuc2xhdGlvbnMiLCJzYW5pdGl6ZUNvbGxlY3Rpb24iLCJjb25maWciLCJjb2xsZWN0aW9uIiwic2FuaXRpemVkIiwibWVyZ2UiLCJkZWZhdWx0cyIsImlzTWVyZ2VhYmxlT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsInRpbWVzdGFtcHMiLCJoYXNVcGRhdGVkQXQiLCJoYXNDcmVhdGVkQXQiLCJmaWVsZHMiLCJzb21lIiwiZmllbGQiLCJmaWVsZEFmZmVjdHNEYXRhIiwibmFtZSIsInB1c2giLCJhZG1pbiIsImRpc2FibGVCdWxrRWRpdCIsImhpZGRlbiIsImxhYmVsIiwidHlwZSIsImluZGV4IiwibGFiZWxzIiwiZm9ybWF0TGFiZWxzIiwic2x1ZyIsInZlcnNpb25zIiwiZHJhZnRzIiwiVGltZXN0YW1wc1JlcXVpcmVkIiwiYXV0b3NhdmUiLCJpbnRlcnZhbCIsIm1lcmdlQmFzZUZpZWxkcyIsImJhc2VWZXJzaW9uRmllbGRzIiwidXBsb2FkIiwic3RhdGljRGlyIiwic3RhdGljVVJMIiwidXNlQXNUaXRsZSIsInVwbG9hZEZpZWxkcyIsImdldEJhc2VVcGxvYWRGaWVsZHMiLCJhdXRoIiwiYXV0aERlZmF1bHRzIiwiYXV0aEZpZWxkcyIsInVzZUFQSUtleSIsImNvbmNhdCIsImJhc2VBUElLZXlGaWVsZHMiLCJkaXNhYmxlTG9jYWxTdHJhdGVneSIsImJhc2VBdXRoRmllbGRzIiwidmVyaWZ5IiwiYmFzZVZlcmlmaWNhdGlvbkZpZWxkcyIsIm1heExvZ2luQXR0ZW1wdHMiLCJiYXNlQWNjb3VudExvY2tGaWVsZHMiLCJ2YWxpZFJlbGF0aW9uc2hpcHMiLCJjb2xsZWN0aW9ucyIsIm1hcCIsImMiLCJzYW5pdGl6ZUZpZWxkcyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE0SkE7OztlQUFBOzs7a0VBNUprQjsrQkFDWTtvRUFLSTsrREFDTDs2REFDRjtxRUFDUTsyRUFDSjswQkFDQTt1QkFDRTt3RUFDTDtxQ0FDUTtzRUFDSjs4QkFDSDttRUFDQzswQkFDUzs7Ozs7O0FBRXZDLE1BQU1BLGVBQWVDLElBQUFBLHdDQUFtQixFQUFDO0lBQUM7SUFBcUI7Q0FBb0I7QUFFbkYsTUFBTUMscUJBQXFCLENBQ3pCQyxRQUNBQztJQUVBLG9DQUFvQztJQUNwQyxpQ0FBaUM7SUFDakMsb0NBQW9DO0lBRXBDLE1BQU1DLFlBQThCQyxJQUFBQSxrQkFBSyxFQUFDQyxrQkFBUSxF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