@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 2.52 kB
Source Map (JSON)
{"version":3,"file":"normalize-relation-values.mjs","names":[],"sources":["../../../../../src/libs/collection/custom-fields/utils/normalize-relation-values.ts"],"sourcesContent":["/**\n * Returns true when the submitted relation input uses the array shape required by\n * relation-table fields.\n */\nexport const isRelationValueArray = (value: unknown): value is unknown[] => {\n\treturn Array.isArray(value);\n};\n\n/**\n * Clamps relation input values to the configured cardinality without coercing the\n * input type. Validation can then reject invalid scalar or non-number values.\n */\nexport const clampRelationInputValue = (\n\tvalue: unknown,\n\tmultiple?: boolean,\n): unknown => {\n\tif (!isRelationValueArray(value)) return value;\n\tif (multiple === true) return value;\n\n\treturn value.slice(0, 1);\n};\n\n/**\n * Extracts a finite numeric relation identifier from a raw array item.\n */\nconst toNumber = (value: unknown): number | null => {\n\tif (typeof value === \"number\" && Number.isFinite(value)) {\n\t\treturn value;\n\t}\n\n\treturn null;\n};\n\n/**\n * Normalizes stored relation values into a numeric array for inserts and response\n * formatting. Non-array input is treated as invalid and discarded.\n */\nexport const normalizeRelationValues = (value: unknown): number[] => {\n\tif (!isRelationValueArray(value)) return [];\n\n\treturn value.reduce<number[]>((acc, item) => {\n\t\tconst parsedValue = toNumber(item);\n\t\tif (parsedValue !== null) acc.push(parsedValue);\n\t\treturn acc;\n\t}, []);\n};\n\n/**\n * Enforces single or multi relation cardinality on an already-normalized value.\n */\nexport const limitRelationValues = (\n\tvalues: number[],\n\tmultiple?: boolean,\n): number[] => {\n\tif (multiple === true) return values;\n\treturn values.slice(0, 1);\n};\n\n/**\n * Produces a safe stored representation for relation-table fields.\n */\nexport const normalizeStoredRelationValues = (\n\tvalue: unknown,\n\tmultiple?: boolean,\n): number[] => {\n\treturn limitRelationValues(normalizeRelationValues(value), multiple);\n};\n"],"mappings":"AAIA,MAAa,EAAwB,GAC7B,MAAM,QAAQ,CAAK,EAOd,GACZ,EACA,IAEI,CAAC,EAAqB,CAAK,GAC3B,IAAa,GAAa,EAEvB,EAAM,MAAM,EAAG,CAAC,EAMlB,EAAY,GACb,OAAO,GAAU,UAAY,OAAO,SAAS,CAAK,EAC9C,EAGD,KAOK,EAA2B,GAClC,EAAqB,CAAK,EAExB,EAAM,QAAkB,EAAK,IAAS,CAC5C,IAAM,EAAc,EAAS,CAAI,EAEjC,OADI,IAAgB,MAAM,EAAI,KAAK,CAAW,EACvC,CACR,EAAG,CAAC,CAAC,EANoC,CAAC,EAY9B,GACZ,EACA,IAEI,IAAa,GAAa,EACvB,EAAO,MAAM,EAAG,CAAC,EAMZ,GACZ,EACA,IAEO,EAAoB,EAAwB,CAAK,EAAG,CAAQ"}