UNPKG

@credo-ts/core

Version:

<p align="center"> <br /> <img alt="Credo Logo" src="https://github.com/openwallet-foundation/credo-ts/blob/c7886cb8377ceb8ee4efe8d264211e561a75072d/images/credo-logo.png" height="250px" /> </p> <h1 align="center"><b>Credo - Core</b></h1

1 lines • 4.17 kB
{"version":3,"file":"W3cCredentialSubject.mjs","names":[],"sources":["../../../../../src/modules/vc/models/credential/W3cCredentialSubject.ts"],"sourcesContent":["import { Transform, TransformationType } from 'class-transformer'\nimport type { ValidationOptions } from 'class-validator'\nimport { buildMessage, IsOptional, isInstance, ValidateBy } from 'class-validator'\n\nimport { CredoError } from '../../../../error'\n\n/**\n * @see https://www.w3.org/TR/vc-data-model/#credential-subject\n */\n\nexport interface W3cCredentialSubjectOptions {\n id?: string\n // note claims must not contain an id field\n claims?: Record<string, unknown>\n}\n\nexport class W3cCredentialSubject {\n public constructor(options: W3cCredentialSubjectOptions) {\n if (options) {\n this.id = options.id\n\n const { id, ...claims } = options.claims ?? {}\n this.claims = Object.keys(claims).length > 0 ? claims : undefined\n }\n }\n\n @IsOptional()\n public id?: string\n\n @IsOptional()\n public claims?: Record<string, unknown>\n}\n\nexport function W3cCredentialSubjectTransformer() {\n return Transform(({ value, type }: { value: W3cCredentialSubjectOptions; type: TransformationType }) => {\n if (type === TransformationType.PLAIN_TO_CLASS) {\n const vToClass = (v: unknown) => {\n if (!v || typeof v !== 'object') throw new CredoError('Invalid credential subject')\n if (isInstance(v, W3cCredentialSubject)) return v\n const { id, ...claims } = v as Record<string, unknown>\n if (id !== undefined && typeof id !== 'string') throw new CredoError('Invalid credential subject id')\n return new W3cCredentialSubject({ id, claims })\n }\n\n if (Array.isArray(value) && value.length === 0) {\n throw new CredoError('At least one credential subject is required')\n }\n\n return Array.isArray(value) ? value.map(vToClass) : vToClass(value)\n }\n if (type === TransformationType.CLASS_TO_PLAIN) {\n const vToJson = (v: unknown) => {\n if (v instanceof W3cCredentialSubject) return v.id ? { ...v.claims, id: v.id } : { ...v.claims }\n return v\n }\n\n return Array.isArray(value) ? value.map(vToJson) : vToJson(value)\n }\n // PLAIN_TO_PLAIN\n return value\n })\n}\n\nexport function IsW3cCredentialSubject(validationOptions?: ValidationOptions): PropertyDecorator {\n return ValidateBy(\n {\n name: 'IsW3cCredentialSubject',\n validator: {\n validate: (value): boolean => {\n return isInstance(value, W3cCredentialSubject)\n },\n defaultMessage: buildMessage(\n (eachPrefix) =>\n `${eachPrefix}$property must be an object or an array of objects with an optional id property`,\n validationOptions\n ),\n },\n },\n validationOptions\n )\n}\n"],"mappings":";;;;;;;AAgBA,IAAa,uBAAb,MAAkC;CAChC,YAAmB,SAAsC;EACvD,IAAI,SAAS;GACX,KAAK,KAAK,QAAQ;GAElB,MAAM,EAAE,IAAI,GAAG,WAAW,QAAQ,UAAU,CAAC;GAC7C,KAAK,SAAS,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,IAAI,SAAS,KAAA;EAC1D;CACF;AAOF;AALG,WAAA,CAAA,WAAW,GAAA,mBAAA,eAAA,MAAA,CAAA,GAAA,qBAAA,WAAA,MAAA,KAAA,CAAA;AAGX,WAAA,CAAA,WAAW,GAAA,mBAAA,eAAA,OAAA,WAAA,cAAA,SAAA,MAAA,CAAA,GAAA,qBAAA,WAAA,UAAA,KAAA,CAAA;AAId,SAAgB,kCAAkC;CAChD,OAAO,WAAW,EAAE,OAAO,WAA6E;EACtG,IAAI,SAAS,mBAAmB,gBAAgB;GAC9C,MAAM,YAAY,MAAe;IAC/B,IAAI,CAAC,KAAK,OAAO,MAAM,UAAU,MAAM,IAAI,WAAW,4BAA4B;IAClF,IAAI,WAAW,GAAG,oBAAoB,GAAG,OAAO;IAChD,MAAM,EAAE,IAAI,GAAG,WAAW;IAC1B,IAAI,OAAO,KAAA,KAAa,OAAO,OAAO,UAAU,MAAM,IAAI,WAAW,+BAA+B;IACpG,OAAO,IAAI,qBAAqB;KAAE;KAAI;IAAO,CAAC;GAChD;GAEA,IAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAC3C,MAAM,IAAI,WAAW,6CAA6C;GAGpE,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,QAAQ,IAAI,SAAS,KAAK;EACpE;EACA,IAAI,SAAS,mBAAmB,gBAAgB;GAC9C,MAAM,WAAW,MAAe;IAC9B,IAAI,aAAa,sBAAsB,OAAO,EAAE,KAAK;KAAE,GAAG,EAAE;KAAQ,IAAI,EAAE;IAAG,IAAI,EAAE,GAAG,EAAE,OAAO;IAC/F,OAAO;GACT;GAEA,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,QAAQ,KAAK;EAClE;EAEA,OAAO;CACT,CAAC;AACH;AAEA,SAAgB,uBAAuB,mBAA0D;CAC/F,OAAO,WACL;EACE,MAAM;EACN,WAAW;GACT,WAAW,UAAmB;IAC5B,OAAO,WAAW,OAAO,oBAAoB;GAC/C;GACA,gBAAgB,cACb,eACC,GAAG,WAAW,kFAChB,iBACF;EACF;CACF,GACA,iBACF;AACF"}