@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 6.8 kB
Source Map (JSON)
{"version":3,"file":"custom-field.mjs","names":["constants"],"sources":["../../../../../../src/libs/collection/custom-fields/fields/link/custom-field.ts"],"sourcesContent":["import z from \"zod\";\nimport constants from \"../../../../../constants/constants.js\";\nimport type { LinkResValue, ServiceResponse } from \"../../../../../types.js\";\nimport { copy } from \"../../../../i18n/index.js\";\nimport CustomField from \"../../custom-field.js\";\nimport type {\n\tCFConfig,\n\tCFProps,\n\tCFResponse,\n\tCustomFieldErrorItem,\n\tGetSchemaDefinitionProps,\n\tSchemaDefinition,\n} from \"../../types.js\";\nimport keyToTitle from \"../../utils/key-to-title.js\";\nimport zodSafeParse from \"../../utils/zod-safe-parse.js\";\nimport { linkFieldConfig } from \"./config.js\";\n\nclass LinkCustomField extends CustomField<\"link\"> {\n\ttype = linkFieldConfig.type;\n\tconfig;\n\tkey;\n\tprops;\n\tconstructor(key: string, props?: CFProps<\"link\">) {\n\t\tsuper();\n\t\tthis.key = key;\n\t\tthis.props = props;\n\t\tthis.config = {\n\t\t\tkey: this.key,\n\t\t\ttype: this.type,\n\t\t\tdetails: {\n\t\t\t\tlabel:\n\t\t\t\t\tthis.props?.details?.label ??\n\t\t\t\t\tcopy(`admin:fields.${this.type}.${this.key}.label`, {\n\t\t\t\t\t\tdefaultMessage: keyToTitle(this.key),\n\t\t\t\t\t}),\n\t\t\t\tsummary: this.props?.details?.summary,\n\t\t\t\tplaceholder: this.props?.details?.placeholder,\n\t\t\t},\n\t\t\tlocalized: this.props?.localized ?? false,\n\t\t\tdefault: this.props?.default ?? {\n\t\t\t\turl: null,\n\t\t\t\tlabel: null,\n\t\t\t\ttarget: null,\n\t\t\t},\n\t\t\tindex: this.props?.index,\n\t\t\tui: {\n\t\t\t\thidden: this.props?.ui?.hidden,\n\t\t\t\tdisabled: this.props?.ui?.disabled,\n\t\t\t\tcondition: this.props?.ui?.condition,\n\t\t\t\twidth: this.props?.ui?.width,\n\t\t\t},\n\t\t\tvalidation: this.props?.validation,\n\t\t} satisfies CFConfig<\"link\">;\n\t}\n\tgetSchemaDefinition(\n\t\tprops: GetSchemaDefinitionProps,\n\t): Awaited<ServiceResponse<SchemaDefinition>> {\n\t\treturn {\n\t\t\tdata: {\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: this.key,\n\t\t\t\t\t\ttype: props.db.getDataType(\"json\"),\n\t\t\t\t\t\tnullable: true,\n\t\t\t\t\t\tdefault: this.config.default,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\terror: undefined,\n\t\t};\n\t}\n\tformatResponseValue(value?: LinkResValue | null) {\n\t\treturn {\n\t\t\turl: value?.url ?? this.config.default.url ?? null,\n\t\t\tlabel: value?.label ?? this.config.default.label ?? null,\n\t\t\ttarget: value?.target ?? this.config.default.target ?? null,\n\t\t} satisfies CFResponse<\"link\">[\"value\"];\n\t}\n\toverride normalizeInputValue(value: unknown) {\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value))\n\t\t\treturn value;\n\n\t\tconst obj = value as Record<string, unknown>;\n\n\t\treturn {\n\t\t\t...obj,\n\t\t\turl: typeof obj.url === \"string\" ? obj.url.trim() : obj.url,\n\t\t\tlabel: typeof obj.label === \"string\" ? obj.label.trim() : obj.label,\n\t\t\ttarget: typeof obj.target === \"string\" ? obj.target.trim() : obj.target,\n\t\t};\n\t}\n\toverride get errors(): {\n\t\tfieldType: CustomFieldErrorItem;\n\t\trequired: CustomFieldErrorItem;\n\t\tzod: CustomFieldErrorItem;\n\t} {\n\t\treturn {\n\t\t\t...super.errors,\n\t\t\trequired: {\n\t\t\t\tcondition: (value: unknown) => {\n\t\t\t\t\tif (value === undefined || value === null || value === \"\") {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst link = value as Partial<NonNullable<LinkResValue>>;\n\t\t\t\t\tconst isEmpty = (input: unknown) =>\n\t\t\t\t\t\tinput === undefined || input === null || input === \"\";\n\n\t\t\t\t\treturn isEmpty(link.url) && isEmpty(link.label);\n\t\t\t\t},\n\t\t\t\tmessage: copy(\"server:core.fields.validation.required\"),\n\t\t\t},\n\t\t};\n\t}\n\tuniqueValidation(value: unknown) {\n\t\tconst valueSchema = z.object({\n\t\t\turl: z.string().optional().nullable(),\n\t\t\ttarget: z.string().optional().nullable(),\n\t\t\tlabel: z.string().optional().nullable(),\n\t\t});\n\n\t\tconst valueValidate = zodSafeParse(value, valueSchema);\n\t\tif (!valueValidate.valid) return valueValidate;\n\n\t\tconst val = value as NonNullable<LinkResValue>;\n\n\t\tif (\n\t\t\tval.target &&\n\t\t\t!constants.customFields.link.targets.includes(val.target)\n\t\t) {\n\t\t\treturn {\n\t\t\t\tvalid: false,\n\t\t\t\tmessage: copy(\n\t\t\t\t\t\"server:core.fields.link.validation.target.error.message\",\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tvalid: constants.customFields.link.targets.join(\", \"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tvalid: true,\n\t\t};\n\t}\n}\n\nexport default LinkCustomField;\n"],"mappings":"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"}