@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 5.25 kB
Source Map (JSON)
{"version":3,"file":"media-share-links.mjs","names":["constants","formatter"],"sources":["../../../src/libs/formatters/media-share-links.ts"],"sourcesContent":["import constants from \"../../constants/constants.js\";\nimport type {\n\tMediaOrigin,\n\tMediaShareLink,\n\tMediaType,\n\tShareLinkAccess,\n} from \"../../types/response.js\";\nimport { createShareLinkUrl } from \"../../utils/media/index.js\";\nimport formatter from \"./index.js\";\nimport { formatFocalPoint } from \"./media.js\";\n\nexport interface MediaShareLinkPropsT {\n\tid: number;\n\tmedia_id: number;\n\ttoken: string;\n\tpassword: string | null;\n\texpires_at: Date | string | null;\n\tname: string | null;\n\tdescription: string | null;\n\tcreated_at: Date | string | null;\n\tupdated_at: Date | string | null;\n\tcreated_by: number | null;\n\tupdated_by: number | null;\n}\n\nexport interface ShareLinkAccessPropsT {\n\ttoken: string;\n\tname: string | null;\n\tdescription: string | null;\n\texpires_at: Date | string | null;\n\tmedia_key: string | null;\n\tmedia_source_type: \"original\" | \"crop\";\n\tmedia_origin?: MediaOrigin | null;\n\tmedia_type: string | null;\n\tmedia_mime_type: string | null;\n\tmedia_file_extension: string | null;\n\tmedia_file_size: number | null;\n\tmedia_width: number | null;\n\tmedia_height: number | null;\n\tmedia_focal_x: number | null;\n\tmedia_focal_y: number | null;\n\tmedia_poster_key: string | null;\n\tmedia_poster_type: string | null;\n}\n\nconst formatShareAccess = (props: {\n\tlink: ShareLinkAccessPropsT;\n\tshareUrl: string;\n\tposterShareUrl?: string;\n\tpasswordRequired: boolean;\n}): ShareLinkAccess => {\n\tconst link = props.link;\n\tconst mediaType = (link.media_type ?? \"unknown\") as MediaType;\n\tconst previewableTypes = constants.media.previewableTypes;\n\tconst previewable = previewableTypes.includes(\n\t\tmediaType as (typeof previewableTypes)[number],\n\t);\n\n\tif (props.passwordRequired) {\n\t\treturn {\n\t\t\ttoken: link.token,\n\t\t\tpasswordRequired: true,\n\t\t};\n\t}\n\n\treturn {\n\t\ttoken: link.token,\n\t\tname: link.name,\n\t\tdescription: link.description,\n\t\texpiresAt: formatter.formatDate(link.expires_at),\n\t\thasExpired: false,\n\t\tpasswordRequired: false,\n\t\tmedia: {\n\t\t\tkey: link.media_key ?? \"\",\n\t\t\tsourceType: link.media_source_type,\n\t\t\torigin: link.media_origin ?? \"human\",\n\t\t\ttype: mediaType,\n\t\t\tmimeType: link.media_mime_type ?? \"\",\n\t\t\textension: link.media_file_extension ?? \"\",\n\t\t\tfileSize: link.media_file_size ?? 0,\n\t\t\twidth: link.media_width ?? null,\n\t\t\theight: link.media_height ?? null,\n\t\t\tfocalPoint: formatFocalPoint(link.media_focal_x, link.media_focal_y),\n\t\t\tpreviewable,\n\t\t\tshareUrl: props.shareUrl,\n\t\t\tposter:\n\t\t\t\tprops.posterShareUrl && link.media_poster_type === \"image\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tshareUrl: props.posterShareUrl,\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t},\n\t};\n};\n\nconst formatMultiple = (props: {\n\tlinks: MediaShareLinkPropsT[];\n\thost: string;\n}): MediaShareLink[] => {\n\treturn props.links.map((l) => formatSingle({ link: l, host: props.host }));\n};\n\nconst formatSingle = (props: {\n\tlink: MediaShareLinkPropsT;\n\thost: string;\n}): MediaShareLink => {\n\tconst hasExpired = props.link.expires_at\n\t\t? new Date(props.link.expires_at).getTime() < Date.now()\n\t\t: false;\n\n\treturn {\n\t\tid: props.link.id,\n\t\ttoken: props.link.token,\n\t\turl: createShareLinkUrl({ token: props.link.token, host: props.host }),\n\t\tname: props.link.name,\n\t\tdescription: props.link.description,\n\t\texpiresAt: formatter.formatDate(props.link.expires_at),\n\t\thasExpired,\n\t\thasPassword: Boolean(props.link.password && props.link.password.length > 0),\n\t\tcreatedBy: props.link.created_by,\n\t\tupdatedBy: props.link.updated_by,\n\t\tcreatedAt: formatter.formatDate(props.link.created_at),\n\t\tupdatedAt: formatter.formatDate(props.link.updated_at),\n\t};\n};\n\nexport default {\n\tformatMultiple,\n\tformatSingle,\n\tformatShareAccess,\n};\n"],"mappings":"kLA6CA,MAAM,EAAqB,GAKJ,CACtB,IAAM,EAAO,EAAM,KACb,EAAa,EAAK,YAAc,UAEhC,EADmBA,EAAU,MAAM,iBACJ,SACpC,CACD,EASA,OAPI,EAAM,iBACF,CACN,MAAO,EAAK,MACZ,iBAAkB,EACnB,EAGM,CACN,MAAO,EAAK,MACZ,KAAM,EAAK,KACX,YAAa,EAAK,YAClB,UAAWC,EAAU,WAAW,EAAK,UAAU,EAC/C,WAAY,GACZ,iBAAkB,GAClB,MAAO,CACN,IAAK,EAAK,WAAa,GACvB,WAAY,EAAK,kBACjB,OAAQ,EAAK,cAAgB,QAC7B,KAAM,EACN,SAAU,EAAK,iBAAmB,GAClC,UAAW,EAAK,sBAAwB,GACxC,SAAU,EAAK,iBAAmB,EAClC,MAAO,EAAK,aAAe,KAC3B,OAAQ,EAAK,cAAgB,KAC7B,WAAY,EAAiB,EAAK,cAAe,EAAK,aAAa,EACnE,cACA,SAAU,EAAM,SAChB,OACC,EAAM,gBAAkB,EAAK,oBAAsB,QAChD,CACA,SAAU,EAAM,cACjB,EACC,IACL,CACD,CACD,EAEM,EAAkB,GAIhB,EAAM,MAAM,IAAK,GAAM,EAAa,CAAE,KAAM,EAAG,KAAM,EAAM,IAAK,CAAC,CAAC,EAGpE,EAAgB,GAGA,CACrB,IAAM,EAAa,EAAM,KAAK,WAC3B,IAAI,KAAK,EAAM,KAAK,UAAU,CAAC,CAAC,QAAQ,EAAI,KAAK,IAAI,EACrD,GAEH,MAAO,CACN,GAAI,EAAM,KAAK,GACf,MAAO,EAAM,KAAK,MAClB,IAAK,EAAmB,CAAE,MAAO,EAAM,KAAK,MAAO,KAAM,EAAM,IAAK,CAAC,EACrE,KAAM,EAAM,KAAK,KACjB,YAAa,EAAM,KAAK,YACxB,UAAWA,EAAU,WAAW,EAAM,KAAK,UAAU,EACrD,aACA,YAAa,GAAQ,EAAM,KAAK,UAAY,EAAM,KAAK,SAAS,OAAS,GACzE,UAAW,EAAM,KAAK,WACtB,UAAW,EAAM,KAAK,WACtB,UAAWA,EAAU,WAAW,EAAM,KAAK,UAAU,EACrD,UAAWA,EAAU,WAAW,EAAM,KAAK,UAAU,CACtD,CACD,EAEA,IAAA,EAAe,CACd,iBACA,eACA,mBACD"}