{"version":3,"file":"nakedobjects-restful-objects.mjs","sources":["../../../restful-objects/src/models.ts","../../../restful-objects/src/nakedobjects-restful-objects.ts"],"sourcesContent":["import { Dictionary } from 'lodash';\nimport assign from 'lodash-es/assign';\nimport clone from 'lodash-es/clone';\nimport concat from 'lodash-es/concat';\nimport each from 'lodash-es/each';\nimport find from 'lodash-es/find';\nimport forEach from 'lodash-es/forEach';\nimport forOwn from 'lodash-es/forOwn';\nimport fromPairs from 'lodash-es/fromPairs';\nimport keys from 'lodash-es/keys';\nimport last from 'lodash-es/last';\nimport map from 'lodash-es/map';\nimport mapValues from 'lodash-es/mapValues';\nimport merge from 'lodash-es/merge';\nimport pickBy from 'lodash-es/pickBy';\nimport reduce from 'lodash-es/reduce';\nimport some from 'lodash-es/some';\nimport * as Ro from './ro-interfaces';\nimport * as RoCustom from './ro-interfaces-custom';\n\n// Restful Objects constants\n const roDomainType = 'x-ro-domain-type';\n const roInvalidReason = 'x-ro-invalidReason';\n const roSearchTerm = 'x-ro-searchTerm';\n const roPage = 'x-ro-page';\n const roPageSize = 'x-ro-pageSize';\n const roInlinePropertyDetails = 'x-ro-inline-property-details';\n const roValidateOnly = 'x-ro-validate-only';\n const roInlineCollectionItems = 'x-ro-inline-collection-items';\n\n// Custom\n\n const roNofChoices = 'x-ro-nof-choices';\n const roNofMenuPath = 'x-ro-nof-menuPath';\n const roNofMask = 'x-ro-nof-mask';\n const roNofTableViewTitle = 'x-ro-nof-tableViewTitle';\n const roNofTableViewColumns = 'x-ro-nof-tableViewColumns';\n const roNofMultipleLines = 'x-ro-nof-multipleLines';\n const roNofWarnings = 'x-ro-nof-warnings';\n const roNofMessages = 'x-ro-nof-messages';\n const roNofInteractionMode = 'x-ro-nof-interactionMode';\n const roNofDataType = 'x-ro-nof-dataType';\n const roNofRange = 'x-ro-nof-range';\n const roNofNotNavigable = 'x-ro-nof-notNavigable';\n const roNofRenderEagerly = 'x-ro-nof-renderEagerly';\n const roNofPresentationHint = 'x-ro-nof-presentationHint';\n const roNofMembers = 'x-ro-nof-members';\n const roNofEditProperties = 'x-ro-nof-editProperties';\n const roNofCreateNewProperties = 'x-ro-nof-createNew';\n const roNofUrlLink = 'x-ro-nof-urlLink';\n\n// do not couple this back to angular by imports\n\n// log directly to avoid coupling back to angular\nfunction error(message: string, ): never {\n    console.error(message);\n    throw new Error(message);\n}\n\nexport class Extensions {\n\n    constructor(private wrapped: RoCustom.ICustomExtensions) { }\n\n    // Standard RO:\n    friendlyName = () => this.wrapped?.friendlyName || '';\n    description = () => this.wrapped?.description || '';\n    returnType = () => this.wrapped?.returnType || null;\n    optional = () => this.wrapped?.optional || false;\n    hasParams = () => this.wrapped?.hasParams || false;\n    elementType = () => this.wrapped?.elementType || null;\n    domainType = () => this.wrapped?.domainType || null;\n    pluralName = () => this.wrapped?.pluralName || '';\n    format = () => this.wrapped?.format;\n    memberOrder = () => this.wrapped?.memberOrder;\n    isService = () => this.wrapped?.isService || false;\n    minLength = () => this.wrapped?.minLength;\n    maxLength = () => this.wrapped?.maxLength;\n    pattern = () => this.wrapped?.pattern;\n\n    // Nof custom:\n    choices = () => this.wrapped[roNofChoices] as Record<string, Ro.ValueType[]>;\n    menuPath = () => this.wrapped[roNofMenuPath] as string;\n    mask = () => this.wrapped[roNofMask] as string;\n    tableViewTitle = () => this.wrapped[roNofTableViewTitle] as boolean;\n    tableViewColumns = () => this.wrapped[roNofTableViewColumns] as string[];\n    multipleLines = () => this.wrapped[roNofMultipleLines] as number;\n    warnings = () => this.wrapped[roNofWarnings] as string[];\n    messages = () => this.wrapped[roNofMessages] as string[];\n    interactionMode = () => this.wrapped[roNofInteractionMode] as string;\n    dataType = () => this.wrapped[roNofDataType] as string;\n    range = () => this.wrapped[roNofRange] as RoCustom.IRange;\n    notNavigable = () => this.wrapped[roNofNotNavigable] as boolean;\n    renderEagerly = () => this.wrapped[roNofRenderEagerly] as boolean;\n    presentationHint = () => this.wrapped[roNofPresentationHint] as string;\n    editProperties = () => this.wrapped[roNofEditProperties] as string;\n    createNewProperties = () => this.wrapped[roNofCreateNewProperties] as string;\n    urlLink = () => this.wrapped[roNofUrlLink] as string;\n}\n\nexport interface IHasExtensions {\n    extensions(): Extensions;\n}\n\nexport interface IHasActions extends IHasExtensions {\n    etagDigest?: string;\n    actionMembers(): Dictionary<ActionMember>;\n    actionMember(id: string): ActionMember;\n    hasActionMember(id: string): boolean;\n}\n\nexport interface IHasLinksAsValue {\n    value(): Link[] | undefined;\n}\n\n// coerce undefined to null\nexport function withNull<T>(v: T | undefined | null): T | null {\n    return v === undefined ? null : v;\n}\n\nexport function withUndefined<T>(v: T | undefined | null): T | undefined {\n    return v === null ? undefined : v;\n}\n\nexport function throwIfNotExists<T>(v: T | undefined | null): T {\n    if (v == null){\n        throw new Error('Unexpected null/undefined value');\n    }\n    return v;\n}\n\n\nfunction validateExists<T>(obj: T | null | undefined, name: string) {\n    if (obj) { \n        return obj; \n    }\n    return error(`validateExists - Expected ${name} does not exist`);\n}\n\nfunction getMember<T>(members: Dictionary<T>, id: string, owner: string) {\n    const member = members[id];\n    if (member) { return member; }\n    return error(`getMember - no member ${id} on ${owner}`);\n}\n\nexport function checkNotNull<T>(v: T | undefined | null) {\n    if (v != null) { \n        return v;\n     }\n    return error('checkNotNull - Unexpected null');\n}\n\nexport function toDateString(dt: Date) {\n\n    const year = dt.getUTCFullYear().toString();\n    let month = (dt.getUTCMonth() + 1).toString();\n    let day = dt.getUTCDate().toString();\n\n    month = month.length === 1 ? `0${month}` : month;\n    day = day.length === 1 ? `0${day}` : day;\n\n    return `${year}-${month}-${day}`;\n}\n\nexport function toDateTimeString(dt: Date) {\n    return `${toDateString(dt)} ${toTimeString(dt)}`;\n}\n\nexport function toTimeString(dt: Date) {\n\n    let hours = dt.getUTCHours().toString();\n    let minutes = dt.getUTCMinutes().toString();\n    let seconds = dt.getUTCSeconds().toString();\n\n    hours = hours.length === 1 ? `0${hours}` : hours;\n    minutes = minutes.length === 1 ? `0${minutes}` : minutes;\n    seconds = seconds.length === 1 ? `0${seconds}` : seconds;\n\n    return `${hours}:${minutes}:${seconds}`;\n}\n\nexport function getTime(rawTime: string): Date | null {\n    if (!rawTime || rawTime.length === 0) {\n        return null;\n    }\n\n    const hours = parseInt(rawTime.substring(0, 2), 10);\n    const mins = parseInt(rawTime.substring(3, 5), 10);\n    const secs = parseInt(rawTime.substring(6, 8), 10);\n\n    return new Date(Date.UTC(1970, 0, 1, hours, mins, secs));\n}\n\nexport function isDate(rep: IHasExtensions) {\n    const returnType = rep.extensions().returnType();\n    const format = rep.extensions().format();\n\n    return (returnType === 'string' && format === 'date');\n}\n\nexport function isDateTime(rep: IHasExtensions) {\n    const returnType = rep.extensions().returnType();\n    const format = rep.extensions().format();\n\n    return (returnType === 'string' && format === 'date-time');\n}\n\nexport function isDateOrDateTime(rep: IHasExtensions) {\n    return isDate(rep) || isDateTime(rep);\n}\n\nexport function isTime(rep: IHasExtensions) {\n    const returnType = rep.extensions().returnType();\n    const format = rep.extensions().format();\n\n    return returnType === 'string' && format === 'time';\n}\n\nexport function toTime(value: Value) {\n    const rawValue = value ? value.toString() : '';\n    const dateValue = getTime(rawValue);\n    return dateValue ? dateValue : null;\n}\n\nexport function toUtcDate(value: Value) {\n    const rawValue = value ? value.toString() : '';\n    const dateValue = getUtcDate(rawValue);\n    return dateValue ? dateValue : null;\n}\n\nexport function getUtcDate(rawDate: string): Date | null {\n    if (!rawDate || rawDate.length === 0) {\n        return null;\n    }\n\n    const year = parseInt(rawDate.substring(0, 4), 10);\n    const month = parseInt(rawDate.substring(5, 7), 10) - 1;\n    const day = parseInt(rawDate.substring(8, 10), 10);\n\n    if (rawDate.length === 10) {\n        return new Date(Date.UTC(year, month, day, 0, 0, 0));\n    }\n\n    if (rawDate.length >= 20) {\n        const hours = parseInt(rawDate.substring(11, 13), 10);\n        const mins = parseInt(rawDate.substring(14, 16), 10);\n        const secs = parseInt(rawDate.substring(17, 19), 10);\n\n        return new Date(Date.UTC(year, month, day, hours, mins, secs));\n    }\n\n    return null;\n}\n\nexport function compress(toCompress: string, shortCutMarker: string, urlShortCuts: string[]) {\n    if (toCompress) {\n        forEach(urlShortCuts, (sc, i) => toCompress = toCompress.replace(sc, `${shortCutMarker}${i}`));\n    }\n    return toCompress;\n}\n\nexport function decompress(toDecompress: string, shortCutMarker: string, urlShortCuts: string[]) {\n    if (toDecompress) {\n        forEach(urlShortCuts, (sc, i) => toDecompress = toDecompress.replace(`${shortCutMarker}${i}`, sc));\n    }\n    return toDecompress;\n}\n\nexport function getClassName(obj: { constructor : { toString() : string} }) {\n    const funcNameRegex = /function (.{1,})\\(/;\n    const results = (funcNameRegex).exec(obj.constructor.toString());\n    return (results && results.length > 1) ? results[1] : '';\n}\n\nexport function typeFromUrl(url: string) {\n    const typeRegex = /(objects|services)\\/([\\w|.]+)/;\n    const results = (typeRegex).exec(url);\n    return (results && results.length > 2) ? results[2] : '';\n}\n\nexport function idFromUrl(href: string) {\n    const urlRegex = /(objects|services)\\/(.*?)\\/([^/]*)/;\n    const results = (urlRegex).exec(href);\n    return (results && results.length > 3) ? results[3] : '';\n}\n\nexport function propertyIdFromUrl(href: string) {\n    const urlRegex = /(objects)\\/(.*)\\/(.*)\\/(properties)\\/(.*)/;\n    const results = (urlRegex).exec(href);\n    return (results && results.length > 5) ? results[5] : '';\n}\n\nexport function friendlyTypeName(fullName: string) {\n    // TODO Fix \"!\"\n    const shortName = last(fullName.split('.')) || fullName;\n    const result = shortName.replace(/([A-Z])/g, ' $1').trim();\n    return result.charAt(0).toUpperCase() + result.slice(1);\n}\n\nexport function friendlyNameForParam(action: ActionRepresentation | InvokableActionMember, parmId: string) {\n    const param = find(action.parameters(), (p) => p.id() === parmId);\n    return param ? param.extensions().friendlyName() : '';\n}\n\nexport function friendlyNameForProperty(obj: DomainObjectRepresentation, propId: string) {\n    const prop = obj.propertyMember(propId);\n    return prop ? prop.extensions().friendlyName() : propId;\n}\n\nexport function typePlusTitle(obj: DomainObjectRepresentation) {\n    const type = obj.extensions().friendlyName();\n    const title = obj.title();\n    return type + ': ' + title;\n}\n\nexport function getPagingParms(page?: number, pageSize?: number): Dictionary<number> {\n    return (page && pageSize) ? { [roPage]: page, [roPageSize]: pageSize } : {};\n}\n\nexport function inlineCollectionItems(flag: boolean, parms?: Dictionary<unknown>): Dictionary<unknown> {\n    parms = parms || {};\n    parms[roInlineCollectionItems] = flag;\n    return parms;\n}\n\nexport function inlinePropertyDetails(flag: boolean, parms?: Dictionary<unknown>): Dictionary<unknown> {\n    parms = parms || {};\n    parms[roInlinePropertyDetails] = flag;\n    return parms;\n}\n\nexport function urlWithInlinePropertyDetailsFalse(obj: DomainObjectRepresentation): string {\n    return `${obj.selfLink()?.href()}?${roInlinePropertyDetails}=false`;\n}\n\n// helper functions\n\nfunction isAutoComplete(args: Ro.IValue | Ro.IValueMap | Ro.IObjectOfType | Ro.IPromptMap | null) {\n    return args && Object.prototype.hasOwnProperty.call(args, roSearchTerm);\n}\n\nfunction isScalarType(typeName: string | null) {\n    return typeName === 'string' || typeName === 'number' || typeName === 'boolean' || typeName === 'integer';\n}\n\nfunction isListType(typeName: string | null) {\n    return typeName === 'list';\n}\n\nfunction emptyResource(): Ro.IResourceRepresentation {\n    return { links: [] as Ro.ILink[], extensions: {} };\n}\n\nfunction isILink(object: unknown): object is Ro.ILink {\n    return !!object && object instanceof Object && 'href' in object;\n}\n\nfunction isIObjectOfType(object: unknown): object is Ro.IObjectOfType {\n    return !!object && object instanceof Object && 'members' in object;\n}\n\nfunction isIValue(object: unknown): object is Ro.IValue {\n    return !!object && object instanceof Object && 'value' in object;\n}\n\nexport function isResourceRepresentation(object: unknown): object is Ro.IResourceRepresentation {\n    return !!object && object instanceof Object && 'links' in object && 'extensions' in object;\n}\n\nexport function isErrorRepresentation(object: unknown): object is Ro.IErrorRepresentation {\n    return isResourceRepresentation(object) && 'message' in object;\n}\n\nexport function isIDomainObjectRepresentation(object: unknown): object is Ro.IDomainObjectRepresentation {\n    return isResourceRepresentation(object) && 'domainType' in object && 'instanceId' in object && 'members' in object;\n}\n\nfunction getId(prop: PropertyRepresentation | PropertyMember) {\n    if (prop instanceof PropertyRepresentation) {\n        return prop.instanceId();\n    } else {\n        return (prop as PropertyMember).id();\n    }\n}\n\nfunction wrapLinks(links: Ro.ILink[]) {\n    return map(links, l => new Link(l));\n}\n\nfunction getLinkByRel(links: Link[], rel: Rel) {\n    return find(links, i => i.rel()?.uniqueValue === rel.uniqueValue);\n}\n\nfunction linkByRel(links: Link[], rel: string) {\n    return getLinkByRel(links, new Rel(rel));\n}\n\nfunction linkByNamespacedRel(links: Link[], rel: string) {\n    return getLinkByRel(links, new Rel(`urn:org.restfulobjects:rels/${rel}`));\n}\n\n// interfaces\n\nexport interface IHateoasModel {\n    keySeparator: string;\n    etagDigest?: string;\n    hateoasUrl: string;\n    method: Ro.HttpMethodsType;\n    populate(wrapped: Ro.IRepresentation): void;\n    getBody(): Ro.IRepresentation;\n    getUrl(): string;\n}\n\n// abstract classes\n\nfunction toOid(id: string[], keySeparator: string) {\n    return reduce(id, (a, v) => `${a}${keySeparator}${v}`) as string;\n}\n\nexport class ObjectIdWrapper {\n\n    static safeSplit(id: string, keySeparator: string): string[] {\n        return id ? id.split(keySeparator) : [];\n    }\n\n    static fromObject(object: DomainObjectRepresentation) {\n        const domainType = object.domainType() || '';\n        const instanceId = object.instanceId() || '';\n        const splitInstanceId = this.safeSplit(instanceId, object.keySeparator);\n        const isService = !instanceId;\n        return new ObjectIdWrapper(object.keySeparator, domainType, instanceId, splitInstanceId, isService);\n    }\n\n    static fromLink(link: Link, keySeparator: string) {\n        const href = link.href();\n        return this.fromHref(href, keySeparator);\n    }\n\n    static fromHref(href: string, keySeparator: string) {\n        const domainType = typeFromUrl(href);\n        const instanceId = idFromUrl(href);\n        const splitInstanceId = this.safeSplit(instanceId, keySeparator);\n        const isService = !instanceId;\n        return new ObjectIdWrapper(keySeparator, domainType, instanceId, splitInstanceId, isService);\n    }\n\n    static fromObjectId(objectId: string, keySeparator: string) {\n        const [dt, ...id] = objectId.split(keySeparator);\n        const domainType = dt;\n        const splitInstanceId = id;\n        const instanceId = toOid(id, keySeparator);\n        const isService = !instanceId;\n        return new ObjectIdWrapper(keySeparator, domainType, instanceId, splitInstanceId, isService);\n    }\n\n    static fromRaw(dt: string, id: string, keySeparator: string) {\n        const domainType = dt;\n        const instanceId = id;\n        const splitInstanceId = this.safeSplit(instanceId, keySeparator);\n        const isService = !instanceId;\n        return new ObjectIdWrapper(keySeparator, domainType, instanceId, splitInstanceId, isService);\n    }\n\n    static fromSplitRaw(dt: string, id: string[], keySeparator: string) {\n        const domainType = dt;\n        const splitInstanceId = id;\n        const instanceId = toOid(id, keySeparator);\n        const isService = !instanceId;\n        return new ObjectIdWrapper(keySeparator, domainType, instanceId, splitInstanceId, isService);\n    }\n\n    constructor(private readonly keySeparator: string,\n                public readonly domainType : string,\n                public readonly instanceId : string,\n                public readonly splitInstanceId : string[],\n                public readonly isService : boolean) {\n        if (keySeparator == null) {\n            error('ObjectIdWrapper must have a keySeparator');\n        }\n    }\n\n    getKey() {\n        return this.domainType + this.keySeparator + this.instanceId;\n    }\n\n    isSame(other: ObjectIdWrapper) {\n        return other && other.domainType === this.domainType && other.instanceId === this.instanceId;\n    }\n}\n\nexport abstract class HateosModel implements IHateoasModel {\n\n    etagDigest?: string;\n    hateoasUrl = '';\n    method: Ro.HttpMethodsType = 'GET';\n    protected urlParms: Dictionary<unknown> = {};\n    keySeparator = '--';\n\n    protected constructor(protected model?: Ro.IRepresentation) {\n    }\n\n    populate(model: Ro.IRepresentation) {\n        this.model = model;\n    }\n\n    getBody(): Ro.IRepresentation {\n        if (this.method === 'POST' || this.method === 'PUT') {\n            const m = clone(this.model);\n            const up = clone(this.urlParms);\n            return merge(m, up);\n        }\n\n        return {};\n    }\n\n    getUrl(): string {\n        const url = this.hateoasUrl;\n        const attrAsJson = clone(this.model);\n\n        if (this.method === 'GET' || this.method === 'DELETE') {\n\n            if (keys(attrAsJson).length > 0) {\n                // there are model parms so encode everything into json\n\n                const urlParmsAsJson = clone(this.urlParms);\n                const asJson = merge(attrAsJson, urlParmsAsJson);\n                if (keys(asJson).length > 0) {\n                    const jsonMap = JSON.stringify(asJson);\n                    const parmString = encodeURI(jsonMap);\n                    return url + '?' + parmString;\n                }\n                return url;\n            }\n            if (keys(this.urlParms).length > 0) {\n                // there are only url reserved parms so they can just be appended to url\n                const urlParmString = reduce(this.urlParms, (result, n, key) => (result === '' ? '' : result + '&') + key + '=' + n, '');\n\n                return url + '?' + urlParmString;\n            }\n        }\n\n        return url;\n    }\n\n    setUrlParameter(name: string, value: unknown) {\n        this.urlParms[name] = value;\n    }\n}\n\nexport abstract class ArgumentMap extends HateosModel {\n\n    protected constructor(public valueMap: Ro.IValueMap, public id: string) {\n        super(valueMap);\n    }\n\n    override populate(wrapped: Ro.IValueMap) {\n        super.populate(wrapped);\n    }\n}\n\nexport abstract class NestedRepresentation<T extends Ro.IResourceRepresentation> {\n\n    private lazyLinks: Link[] | null = null;\n    private lazyExtensions: Extensions | null = null;\n\n    protected resource = () => this.model as T;\n\n    protected constructor(private model: T) { }\n\n    links(): Link[] {\n        this.lazyLinks = this.lazyLinks || wrapLinks(this.resource().links);\n        return this.lazyLinks as Link[];\n    }\n\n    protected update(newResource: T) {\n        this.model = newResource;\n        this.lazyLinks = null;\n    }\n\n    extensions(): Extensions {\n        this.lazyExtensions = this.lazyExtensions || new Extensions(this.model.extensions);\n        return this.lazyExtensions;\n    }\n}\n\n// classes\n\nexport class RelParm {\n\n    name: string | undefined;\n    value: string | undefined;\n\n    constructor(public asString: string) {\n        this.decomposeParm();\n    }\n\n    private decomposeParm() {\n        const regex = /(\\w+)\\W+([\\w.]+)\\W+/;\n        const result = regex.exec(this.asString) || [];\n        [, this.name, this.value] = result;\n    }\n}\n\nexport class Rel {\n\n    ns = '';\n    uniqueValue!: string;\n    parms: RelParm[] = [];\n\n    constructor(public asString: string) {\n        this.decomposeRel();\n    }\n\n    private decomposeRel() {\n\n        let postFix: string;\n\n        if (this.asString.substring(0, 3) === 'urn') {\n            // namespaced\n            this.ns = this.asString.substring(0, this.asString.indexOf('/') + 1);\n            postFix = this.asString.substring(this.asString.indexOf('/') + 1);\n        } else {\n            postFix = this.asString;\n        }\n        const splitPostFix = postFix.split(';');\n        this.uniqueValue = splitPostFix[0];\n\n        if (splitPostFix.length > 1) {\n            this.parms = map(splitPostFix.slice(1), s => new RelParm(s));\n        }\n    }\n}\n\nexport class MediaType {\n\n    applicationType: string | undefined;\n    profile: string | undefined;\n    xRoDomainType: string | undefined;\n    representationType: string | undefined;\n    domainType: string | undefined;\n\n    constructor(public asString: string) {\n        this.decomposeMediaType();\n    }\n\n    private decomposeMediaType() {\n        const parms = this.asString.split(';');\n        if (parms.length > 0) {\n            this.applicationType = parms[0];\n        }\n\n        for (let i = 1; i < parms.length; i++) {\n            if (parms[i].trim().substring(0, 7) === 'profile') {\n                this.profile = parms[i].trim();\n                const profileValue = (this.profile.split('=')[1].replace(/\"/g, '')).trim();\n                this.representationType = (profileValue.split('/')[1]).trim();\n            }\n            if (parms[i].trim().substring(0, 16) === roDomainType) {\n                this.xRoDomainType = (parms[i]).trim();\n                this.domainType = (this.xRoDomainType.split('=')[1].replace(/\"/g, '')).trim();\n            }\n        }\n    }\n}\n\nexport class Value {\n\n    // note this is different from constructor parm as we wrap ILink\n    private wrapped: Link | Value[] | Ro.ScalarValueType | Blob;\n\n    constructor(raw: Link | (Link | Ro.ValueType | Value)[] | Ro.ValueType | Blob | Value) {\n        // can only be Link, number, boolean, string or null\n\n        if (raw instanceof Array) {\n            this.wrapped = map(raw as (Link | Ro.ValueType | Value)[], i => new Value(i));\n        } else if (raw instanceof Link) {\n            this.wrapped = raw;\n        } else if (isILink(raw)) {\n            this.wrapped = new Link(raw);\n        } else if (raw instanceof Value) {\n            this.wrapped = raw.wrapped;\n        } else {\n            this.wrapped = raw;\n        }\n    }\n\n    static fromJsonString(jsonString: string, shortCutMarker: string, urlShortCuts: string[]): Value {\n        const value = new Value(JSON.parse(jsonString));\n        return value.decompress(shortCutMarker, urlShortCuts);\n    }\n\n    isBlob(): boolean {\n        return this.wrapped instanceof Blob;\n    }\n\n    isScalar(): boolean {\n        return !this.isReference() && !this.isList();\n    }\n\n    isReference(): boolean {\n        return this.wrapped instanceof Link;\n    }\n\n    isFileReference(): boolean {\n        const href = this.getHref();\n        return href ? href.indexOf('data') === 0 : false;\n    }\n\n    isList(): boolean {\n        return this.wrapped instanceof Array;\n    }\n\n    isNull(): boolean {\n        return this.wrapped == null;\n    }\n\n    blob(): Blob | null {\n        return this.isBlob() ? this.wrapped as Blob : null;\n    }\n\n    link(): Link | null {\n        return this.isReference() ? this.wrapped as Link : null;\n    }\n\n    getHref(): string | null {\n        const link = this.link();\n        return link ? link.href() : null;\n    }\n\n    scalar(): Ro.ScalarValueType {\n        return this.isScalar() ? this.wrapped as Ro.ScalarValueType : null;\n    }\n\n    list(): Value[] | null {\n        return this.isList() ? this.wrapped as Value[] : null;\n    }\n\n    toString(): string {\n        if (this.isReference()) {\n            return this.link()?.title() || ''; // know true\n        }\n\n        if (this.isList()) {\n             \n            const list = this.list()!; // know true\n            const ss = map(list, v => v.toString());\n            return ss.length === 0 ? '' : reduce(ss, (m, s) => m + '-' + s, '');\n        }\n\n        return (this.wrapped == null) ? '' : this.wrapped.toString();\n    }\n\n    private compress(shortCutMarker: string, urlShortCuts: string[]): Value {\n        if (this.isReference()) {\n             \n            const link = this.link()!.compress(shortCutMarker, urlShortCuts); // know true\n            return new Value(link);\n        }\n        if (this.isList()) {\n             \n            const list = map(this.list()!, i => i.compress(shortCutMarker, urlShortCuts));\n            return new Value(list);\n        }\n\n        if (this.scalar() && this.wrapped instanceof String) {\n            const scalar = compress(this.wrapped as string, shortCutMarker, urlShortCuts);\n            return new Value(scalar);\n        }\n\n        return this;\n    }\n\n    private decompress(shortCutMarker: string, urlShortCuts: string[]): Value {\n        if (this.isReference()) {\n             \n            const link = this.link()!.decompress(shortCutMarker, urlShortCuts); // know true\n            return new Value(link);\n        }\n        if (this.isList()) {\n             \n            const list = map(this.list()!, i => i.decompress(shortCutMarker, urlShortCuts));\n            return new Value(list);\n        }\n\n        if (this.scalar() && this.wrapped instanceof String) {\n            const scalar = decompress(this.wrapped as string, shortCutMarker, urlShortCuts);\n            return new Value(scalar);\n        }\n\n        return this;\n    }\n\n    toValueString(): string {\n        if (this.isReference()) {\n             \n            return this.link()!.href(); // know true\n        }\n        return (this.wrapped == null) ? '' : this.wrapped.toString();\n    }\n\n    toJsonString(shortCutMarker: string, urlShortCuts: string[]): string {\n\n        const cloneThis = this.compress(shortCutMarker, urlShortCuts);\n        const value = cloneThis.wrapped;\n        const raw = (value instanceof Link) ? value.wrapped : value;\n        return JSON.stringify(raw);\n    }\n\n    setValue(target: Ro.IValue) {\n        if (this.isFileReference()) {\n             \n            target.value = this.link()!.wrapped; // know true\n        } else if (this.isReference()) {\n\n            target.value = { 'href': (this.link() as Link).href() }; // know true\n        } else if (this.isList()) {\n            const list = this.list() as Value[]; // know true\n             \n            target.value = map(list, v => v.isReference() ? { 'href': v.link()!.href() } as Ro.ILink : v.scalar()) as Ro.ValueType[];\n        } else if (this.isBlob()) {\n            target.value = this.blob();\n        } else {\n            target.value = this.scalar();\n        }\n    }\n\n    set(target: Dictionary<Ro.IValue | string | boolean>, name: string) {\n        const t = target[name] = { value: null } as Ro.IValue;\n        this.setValue(t);\n    }\n}\n\nexport class ErrorValue {\n    constructor(public value: Value, public invalidReason: string | null) { }\n}\n\nexport class Result {\n    constructor(\n        public readonly wrapped: Ro.IDomainObjectRepresentation | RoCustom.ICustomListRepresentation | Ro.IScalarValueRepresentation | null,\n        private readonly resultType: Ro.ResultTypeType\n    ) { }\n\n    object(): DomainObjectRepresentation | null {\n        if (!this.isNull() && this.resultType === 'object') {\n            return new DomainObjectRepresentation(this.wrapped as Ro.IDomainObjectRepresentation);\n        }\n        return null;\n    }\n\n    list(): ListRepresentation | null {\n        if (!this.isNull() && this.resultType === 'list') {\n            return new ListRepresentation(this.wrapped as RoCustom.ICustomListRepresentation);\n        }\n        return null;\n    }\n\n    scalar(): ScalarValueRepresentation | null {\n        if (!this.isNull() && this.resultType === 'scalar') {\n            return new ScalarValueRepresentation(this.wrapped as Ro.IScalarValueRepresentation);\n        }\n        return null;\n    }\n\n    isNull(): boolean {\n        return this.wrapped == null;\n    }\n\n    isVoid(): boolean {\n        return (this.resultType === 'void');\n    }\n}\n\nexport class ErrorMap {\n\n    wrapped = () => {\n        const temp = this.valueMap;\n        if (isIObjectOfType(temp)) {\n            return temp.members;\n        } else {\n            return temp;\n        }\n    };\n\n    constructor(private readonly valueMap: Ro.IValueMap | Ro.IObjectOfType, public statusCode: number, public warningMessage: string) {\n\n    }\n\n    valuesMap(): Dictionary<ErrorValue> {\n\n        const values = pickBy(this.wrapped(), i => isIValue(i)) as Dictionary<Ro.IValue>;\n        return mapValues(values, v => new ErrorValue(new Value(v.value), withNull(v.invalidReason)));\n    }\n\n    invalidReason(): string {\n\n        const temp = this.valueMap;\n        if (isIObjectOfType(temp)) {\n            return temp[roInvalidReason] as string;\n        }\n\n        return this.wrapped()[roInvalidReason] as string;\n    }\n\n    containsError() {\n        return !!this.invalidReason() || !!this.warningMessage || some(this.valuesMap(), ev => !!ev.invalidReason);\n    }\n\n}\n\nexport class UpdateMap extends ArgumentMap implements IHateoasModel {\n    constructor(domainObject: DomainObjectRepresentation, valueMap: Ro.IValueMap) {\n        super(valueMap, checkNotNull(domainObject.instanceId()));\n        const link = domainObject.updateLink();\n\n        if (link) {\n            link.copyToHateoasModel(this);\n        } else {\n            error('UpdateMap - attempting to create update map for object without update link');\n        }\n\n        each(this.properties(), (value: Value, key: string) => {\n            this.setProperty(key, value);\n        });\n    }\n\n    properties(): Dictionary<Value> {\n        const props = pickBy(this.valueMap, v => isIValue(v)) as Dictionary<Ro.IValue>;\n        return mapValues(props, v => new Value(v.value));\n    }\n\n    setProperty(name: string, value: Value) {\n        value.set(this.valueMap, name);\n    }\n\n    setValidateOnly() {\n        this.valueMap[roValidateOnly] = true;\n    }\n}\n\nexport class AddToRemoveFromMap extends ArgumentMap implements IHateoasModel {\n    constructor(private readonly collectionResource: CollectionRepresentation, valueMap: Ro.IValueMap, add: boolean) {\n        super(valueMap, collectionResource.collectionId());\n        const link = add ? collectionResource.addToLink() : collectionResource.removeFromLink();\n        if (link) {\n            link.copyToHateoasModel(this);\n        } else {\n            const type = add ? 'add' : 'remove';\n            error(`AddToRemoveFromMap attempting to create ${type} map for object without ${type} link`);\n        }\n    }\n}\n\nexport class ModifyMap extends ArgumentMap implements IHateoasModel {\n    constructor(private readonly propertyResource: PropertyRepresentation | PropertyMember, valueMap: Ro.IValueMap) {\n        super(valueMap, getId(propertyResource));\n        const link = propertyResource.modifyLink();\n\n        if (link) {\n            link.copyToHateoasModel(this);\n        } else {\n            error('ModifyMap attempting to create modify map for object without modify link');\n        }\n        propertyResource.value().set(this.valueMap, this.id);\n    }\n}\n\nexport class ClearMap extends ArgumentMap implements IHateoasModel {\n    constructor(propertyResource: PropertyRepresentation | PropertyMember) {\n        super({}, getId(propertyResource));\n        const link = propertyResource.clearLink();\n\n        if (link) {\n            link.copyToHateoasModel(this);\n        } else {\n            error('ClearMap attempting to create clear map for object without clear link');\n        }\n    }\n}\n\n// REPRESENTATIONS\n\nexport abstract class ResourceRepresentation<T extends Ro.IResourceRepresentation> extends HateosModel {\n\n    private lazyExtensions?: Extensions;\n    private lazyLinks?: Link[];\n    protected resource = () => this.model as T;\n\n    links(): Link[] {\n        this.lazyLinks = this.lazyLinks || wrapLinks(this.resource().links);\n        return this.lazyLinks as Link[];\n    }\n\n    override populate(wrapped: T) {\n        super.populate(wrapped);\n    }\n\n    extensions(): Extensions {\n        this.lazyExtensions = this.lazyExtensions || new Extensions(this.resource().extensions);\n        return this.lazyExtensions;\n    }\n}\n\n// matches a action invoke resource 19.0 representation\n\nexport class InvokeMap extends ArgumentMap implements IHateoasModel {\n    constructor(private readonly link: Link) {\n        super(link.arguments() as Ro.IValueMap, '');\n        link.copyToHateoasModel(this);\n    }\n\n    setParameter(name: string, value: Value) {\n        value.set(this.valueMap, name);\n    }\n\n    inlinePropertyDetails(flag: boolean) {\n        this.setUrlParameter(roInlinePropertyDetails, flag);\n    }\n\n    inlineCollectionItems(flag: boolean) {\n        this.setUrlParameter(roInlineCollectionItems, flag);\n    }\n}\n\nexport class ActionResultRepresentation extends ResourceRepresentation<Ro.IActionInvokeRepresentation> {\n\n    wrapped = () => this.resource() as Ro.IActionInvokeRepresentation;\n\n    constructor() {\n        super();\n    }\n\n    // links\n    selfLink(): Link | null {\n        return linkByRel(this.links(), 'self') || null;\n    }\n\n    // link representations\n    getSelf(): ActionResultRepresentation | null {\n        const self = this.selfLink();\n        return self ? self.getTargetAs<ActionResultRepresentation>() : null;\n    }\n\n    // properties\n    resultType(): Ro.ResultTypeType {\n        return this.wrapped().resultType;\n    }\n\n    result(): Result {\n        return new Result(withNull(this.wrapped().result), this.resultType());\n    }\n\n    warningsOrMessages(): string | undefined {\n\n        const has = (arr: string[]) => arr && arr.length > 0;\n        const wOrM = has(this.extensions().warnings()) ? this.extensions().warnings() : this.extensions().messages();\n\n        if (has(wOrM)) {\n            return reduce(wOrM, (s, t) => s + ' ' + t, '');\n        }\n\n        return undefined;\n    }\n\n    shouldExpectResult(): boolean {\n        return this.result().isNull() && this.resultType() !== 'void';\n    }\n\n}\n\n// matches an action representation 18.0\n\nexport interface IField extends IHasExtensions {\n    id(): string;\n    choices(): Dictionary<Value> | null;\n    isScalar(): boolean;\n    isCollectionContributed(): boolean;\n\n    entryType(): EntryType;\n    getPromptMap(): PromptMap | null;\n    promptLink(): Link | null;\n}\n\n// matches 18.2.1\nexport class Parameter\n    extends NestedRepresentation<Ro.IParameterRepresentation>\n    implements IField {\n\n    wrapped = () => this.resource() as Ro.IParameterRepresentation;\n\n    // fix parent type\n    constructor(wrapped: Ro.IParameterRepresentation, public parent: ActionMember | ActionRepresentation, private readonly paramId: string) {\n        super(wrapped);\n    }\n\n    id() {\n        return this.paramId;\n    }\n\n    // properties\n    choices(): Dictionary<Value> | null {\n        const customExtensions = this.extensions();\n        // use custom choices extension by preference\n        if (customExtensions.choices()) {\n            return mapValues(customExtensions.choices(), v => new Value(v));\n        }\n\n        const choices = this.wrapped().choices;\n        if (choices) {\n            const values = map(choices, item => new Value(item));\n            return fromPairs(map(values, v => [v.toString(), v])) as Dictionary<Value>;\n        }\n        return null;\n    }\n\n    promptLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'prompt') || null;\n    }\n\n    getPromptMap(): PromptMap | null {\n        const promptLink = this.promptLink();\n        if (promptLink) {\n            const pr = promptLink.getTargetAs<PromptRepresentation>();\n            return new PromptMap(promptLink, pr.instanceId());\n        }\n        return null;\n    }\n\n    default(): Value {\n        const dflt = this.wrapped().default == null ? (isScalarType(this.extensions().returnType()) ? '' : null) : this.wrapped().default;\n        return new Value(withNull(dflt));\n    }\n\n    disabledReason(): string {\n        return this.wrapped().disabledReason || '';\n    }\n\n    // helper\n    isScalar(): boolean {\n        return isScalarType(this.extensions().returnType()) ||\n            (isListType(this.extensions().returnType()) && isScalarType(this.extensions().elementType()));\n    }\n\n    isList(): boolean {\n        return isListType(this.extensions().returnType());\n    }\n\n    private hasPrompt(): boolean {\n        return !!this.promptLink();\n    }\n\n    isCollectionContributed(): boolean {\n        const myparent = this.parent;\n        const isOnList = (myparent instanceof ActionMember || myparent instanceof ActionRepresentation) &&\n            (myparent.parent instanceof ListRepresentation || myparent.parent instanceof CollectionRepresentation || myparent.parent instanceof CollectionMember);\n        const isList = this.isList();\n        return isList && isOnList;\n    }\n\n    private hasChoices(): boolean { return some(this.choices() || {}); }\n\n    entryType(): EntryType {\n\n        const promptLink = this.promptLink() as Link;\n        if (promptLink) {\n            // ConditionalChoices, ConditionalMultipleChoices, AutoComplete\n\n            if (isAutoComplete(promptLink.arguments())) {\n\n                // autocomplete\n                return EntryType.AutoComplete;\n            }\n\n            if (isListType(this.extensions().returnType())) {\n                return EntryType.MultipleConditionalChoices;\n            }\n            return EntryType.ConditionalChoices;\n        }\n\n        if (this.choices()) {\n            if (isListType(this.extensions().returnType())) {\n                return EntryType.MultipleChoices;\n            }\n            return EntryType.Choices;\n        }\n\n        if (this.extensions().format() === 'blob') {\n            return EntryType.File;\n        }\n\n        return EntryType.FreeForm;\n    }\n}\n\nexport class ActionRepresentation extends ResourceRepresentation<Ro.IActionRepresentation> {\n\n    private parameterMap?: Dictionary<Parameter>;\n    parent?: IHasActions;\n    wrapped = () => this.resource() as Ro.IActionRepresentation;\n\n    // links\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link; // known to exist\n    }\n\n    upLink(): Link {\n        return linkByRel(this.links(), 'up') as Link; // known to exist\n    }\n\n    invokeLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'invoke') || null; // may not exist if disabled\n    }\n\n    // linked representations\n    getSelf(): ActionRepresentation {\n        return this.selfLink().getTargetAs<ActionRepresentation>();\n    }\n\n    getUp(): DomainObjectRepresentation {\n        return this.upLink().getTargetAs<DomainObjectRepresentation>();\n    }\n\n    getInvokeMap(): InvokeMap | null {\n        const link = this.invokeLink();\n        return link ? new InvokeMap(link) : null;\n    }\n\n    // properties\n\n    actionId(): string {\n        return this.wrapped().id;\n    }\n\n    private initParameterMap(): void {\n\n        if (!this.parameterMap) {\n            const parameters = this.wrapped().parameters;\n            this.parameterMap = mapValues(parameters, (p, id) => new Parameter(p, this, id));\n        }\n    }\n\n    parameters(): Dictionary<Parameter> {\n        this.initParameterMap();\n        return this.parameterMap!;\n    }\n\n    disabledReason(): string {\n        return this.wrapped().disabledReason || '';\n    }\n\n    isQueryOnly(): boolean {\n        const invokeLink = this.invokeLink();\n        return !!invokeLink && invokeLink.method() === 'GET';\n    }\n\n    isNotQueryOnly(): boolean {\n        const invokeLink = this.invokeLink();\n        return !!invokeLink && invokeLink.method() !== 'GET';\n    }\n\n    isPotent(): boolean {\n        const invokeLink = this.invokeLink();\n        return !!invokeLink && invokeLink.method() === 'POST';\n    }\n\n    returnsScalar(): boolean {\n        return isScalarType(this.extensions().returnType());\n    }\n}\n\n// new in 1.1 15.0 in spec\n\nexport class PromptMap extends ArgumentMap implements IHateoasModel {\n    constructor(private readonly link: Link, private readonly promptId: string) {\n        super(link.arguments() as Ro.IValueMap, promptId);\n        link.copyToHateoasModel(this);\n    }\n\n    private promptMap() {\n        return this.valueMap as Ro.IPromptMap;\n    }\n\n    setSearchTerm(term: string) {\n        this.setArgument(roSearchTerm, new Value(term));\n    }\n\n    setArgument(name: string, val: Value) {\n        val.set(this.valueMap, name);\n    }\n\n    setArguments(args: Dictionary<Value>) {\n        each(args, (arg, key) => this.setArgument(key, arg));\n    }\n\n    setMember(name: string, value: Value) {\n        value.set(this.promptMap()[roNofMembers] as Ro.IValueMap, name);\n    }\n\n    setMembers(objectValues: () => Dictionary<Value>) {\n        if (this.valueMap[roNofMembers]) {\n            forEach(objectValues(), (v, k) => this.setMember(k, v));\n        }\n    }\n}\n\nexport class PromptRepresentation extends ResourceRepresentation<Ro.IPromptRepresentation> {\n\n    wrapped = () => this.resource() as Ro.IPromptRepresentation;\n\n    constructor() {\n        super(emptyResource());\n    }\n\n    // links\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link; // known to exist\n    }\n\n    upLink(): Link {\n        return linkByRel(this.links(), 'up') as Link; // known to exist\n    }\n\n    // linked representations\n    getSelf(): PromptRepresentation {\n        return this.selfLink().getTargetAs<PromptRepresentation>();\n    }\n\n    getUp(): DomainObjectRepresentation {\n        return this.upLink().getTargetAs<DomainObjectRepresentation>();\n    }\n\n    // properties\n\n    instanceId(): string {\n        return this.wrapped().id;\n    }\n\n    choices(addEmpty: boolean): Dictionary<Value> | null {\n        const ch = this.wrapped().choices;\n        if (ch) {\n            let values = map(ch, item => new Value(item));\n\n            if (addEmpty) {\n                const emptyValue = new Value('');\n                values = concat<Value>([emptyValue], values);\n            }\n\n            return fromPairs(map(values, v => [v.toString(), v])) as Dictionary<Value>;\n        }\n        return null;\n    }\n}\n\n// matches a collection representation 17.0\nexport class CollectionRepresentation extends ResourceRepresentation<RoCustom.ICustomCollectionRepresentation> implements IHasActions {\n    private actionMemberMap?: Dictionary<ActionMember>;\n    private lazyValue?: Link[];\n    wrapped = () => this.resource() as RoCustom.ICustomCollectionRepresentation;\n\n    // links\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link; // known to exist\n    }\n\n    upLink(): Link {\n        return linkByRel(this.links(), 'up') as Link; // known to exist\n    }\n\n    addToLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'add-to') || null;\n    }\n\n    removeFromLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'remove-from') || null;\n    }\n\n    // linked representations\n    getSelf(): CollectionRepresentation {\n        return this.selfLink().getTargetAs<CollectionRepresentation>();\n    }\n\n    getUp(): DomainObjectRepresentation {\n        return this.upLink().getTargetAs<DomainObjectRepresentation>();\n    }\n\n    setFromMap(addToRemoveFromMap: AddToRemoveFromMap) {\n        // this.set(map.attributes);\n        assign(this.resource(), addToRemoveFromMap.valueMap);\n    }\n\n    private addToMap() {\n        const link = this.addToLink();\n        return link ? link.arguments() as Ro.IValueMap : null;\n    }\n\n    getAddToMap(): AddToRemoveFromMap | null {\n        const addToMap = this.addToMap();\n        return addToMap ? new AddToRemoveFromMap(this, addToMap, true) : null;\n    }\n\n    private removeFromMap() {\n        const link = this.addToLink();\n        return link ? link.arguments() as Ro.IValueMap : null;\n    }\n\n    getRemoveFromMap(): AddToRemoveFromMap | null {\n        const removeFromMap = this.removeFromMap();\n        return removeFromMap ? new AddToRemoveFromMap(this, removeFromMap, false) : null;\n    }\n\n    // properties\n\n    collectionId(): string {\n        return this.wrapped().id;\n    }\n\n    size(): number {\n        return this.value()?.length || 0;\n    }\n\n    value(): Link[] | undefined {\n        this.lazyValue = this.lazyValue || this.wrapped().value ? wrapLinks(this.wrapped().value!) : undefined;\n        return this.lazyValue;\n    }\n\n    disabledReason(): string {\n        return this.wrapped().disabledReason || '';\n    }\n\n    hasTableData = () => {\n        const valueLinks = this.value();\n        return valueLinks && some(valueLinks, (i: Link) => i.members());\n    };\n\n    actionMembers() : Dictionary<ActionMember> {\n        this.actionMemberMap = this.actionMemberMap || mapValues(this.wrapped().members, (m, id) => Member.wrapMember(m, this, id)) as Dictionary<ActionMember>;\n        return this.actionMemberMap;\n    }\n\n    actionMember(id: string): ActionMember {\n        return getMember(this.actionMembers(), id, this.collectionId());\n    }\n\n    hasActionMember(id: string): boolean {\n        return !!this.actionMembers()[id];\n    }\n\n    inlineItems(flag: boolean): void {\n        this.setUrlParameter(roInlineCollectionItems, flag);\n    }\n}\n\n// matches a property representation 16.0\nexport class PropertyRepresentation extends ResourceRepresentation<Ro.IPropertyRepresentation> {\n\n    wrapped = () => this.resource() as Ro.IPropertyRepresentation;\n\n    // links\n    modifyLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'modify') || null;\n    }\n\n    clearLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'clear') || null;\n    }\n\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link; // known to exist\n    }\n\n    upLink(): Link {\n        return linkByRel(this.links(), 'up') as Link; // known to exist\n    }\n\n    promptLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'prompt') || null;\n    }\n\n    private modifyMap() {\n        const link = this.modifyLink();\n        return link ? link.arguments() as Ro.IValueMap : null;\n    }\n\n    // linked representations\n    getSelf(): PropertyRepresentation {\n        return this.selfLink().getTargetAs<PropertyRepresentation>();\n    }\n\n    getUp(): DomainObjectRepresentation {\n        return this.upLink().getTargetAs<DomainObjectRepresentation>();\n    }\n\n    setFromModifyMap(modifymap: ModifyMap) {\n        // this.set(map.attributes);\n        assign(this.resource(), modifymap.valueMap);\n    }\n\n    getModifyMap(): ModifyMap | null {\n        const modifymap = this.modifyMap();\n        return modifymap ? new ModifyMap(this, modifymap) : null;\n    }\n\n    getClearMap(): ClearMap | null {\n        if (this.clearLink()) {\n            return new ClearMap(this);\n        }\n        return null;\n    }\n\n    // properties\n\n    instanceId(): string {\n        return this.wrapped().id;\n    }\n\n    value(): Value {\n        return new Value(withNull(this.wrapped().value));\n    }\n\n    choices(): Dictionary<Value> | null {\n\n        // use custom choices extension by preference\n\n        const choices = this.extensions().choices();\n        if (choices) {\n            return mapValues(choices, v => new Value(v));\n        }\n        const ch = this.wrapped().choices;\n        if (ch) {\n            const values = map(ch, item => new Value(item));\n            return fromPairs(map(values, v => [v.toString(), v])) as Dictionary<Value>;\n        }\n        return null;\n    }\n\n    disabledReason(): string {\n        return this.wrapped().disabledReason || '';\n    }\n\n    // helper\n    isScalar(): boolean {\n        return isScalarType(this.extensions().returnType());\n    }\n\n    hasPrompt(): boolean {\n        return !!this.promptLink();\n    }\n}\n\n// matches a domain object representation 14.0\n\n// base class for 14.4.1/2/3\nexport class Member<T extends Ro.IMember> extends NestedRepresentation<Ro.IMember> {\n\n    constructor(wrapped: T) {\n        super(wrapped);\n    }\n\n    static wrapLinkMember(toWrap: Ro.IPropertyMember | Ro.ICollectionMember, parent: Link, id: string): PropertyMember | CollectionMember {\n\n        if (toWrap.memberType === 'property') {\n            return new PropertyMember(toWrap as Ro.IPropertyMember, parent, id);\n        }\n\n        if (toWrap.memberType === 'collection') {\n            return new CollectionMember(toWrap as Ro.ICollectionMember, parent, id);\n        }\n\n        return error('Unexpected member: ${id}');\n    }\n\n    static wrapMember(toWrap: Ro.IPropertyMember | Ro.ICollectionMember | Ro.IActionMember, parent: DomainObjectRepresentation | IHasActions, id: string): Member<Ro.IMember> {\n\n        if (toWrap.memberType === 'property' && parent instanceof DomainObjectRepresentation) {\n            return new PropertyMember(toWrap as Ro.IPropertyMember, parent, id);\n        }\n\n        if (toWrap.memberType === 'collection' && parent instanceof DomainObjectRepresentation) {\n            return new CollectionMember(toWrap as Ro.ICollectionMember, parent, id);\n        }\n\n        if (toWrap.memberType === 'action') {\n            const member = new ActionMember(toWrap as Ro.IActionMember, parent, id);\n\n            if (member.invokeLink()) {\n                return new InvokableActionMember(toWrap as Ro.IActionMember, parent, id);\n            }\n\n            return member;\n        }\n\n        return error('Unexpected member: ${id}');\n    }\n\n    wrapped = () => this.resource() as Ro.IMember;\n\n    override update(newValue: Ro.IMember) {\n        super.update(newValue);\n    }\n\n    memberType(): Ro.MemberTypeType {\n        return this.wrapped().memberType;\n    }\n\n    detailsLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'details') || null;\n    }\n\n    disabledReason(): string {\n        return this.wrapped().disabledReason || '';\n    }\n\n    isScalar(): boolean {\n        return isScalarType(this.extensions().returnType());\n    }\n}\n\n// matches 14.4.1\nexport class PropertyMember extends Member<Ro.IPropertyMember> implements IField {\n\n    override wrapped = () => this.resource() as Ro.IPropertyMember;\n\n    constructor(wrapped: Ro.IPropertyMember, public parent: DomainObjectRepresentation | Link, private readonly propId: string) {\n        super(wrapped);\n    }\n\n    // inlined\n\n    id(): string {\n        return this.propId;\n    }\n\n    modifyLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'modify') || null;\n    }\n\n    clearLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'clear') || null;\n    }\n\n    private modifyMap() {\n        const link = this.modifyLink();\n        return link ? link.arguments() as Ro.IValueMap : null;\n    }\n\n    setFromModifyMap(modifyMap: ModifyMap) {\n        forOwn(modifyMap.valueMap, (v, k) => {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            (this.wrapped as any)[k] = v;\n        });\n    }\n\n    getModifyMap(): ModifyMap | null {\n        const modifyMap = this.modifyMap();\n        return modifyMap ? new ModifyMap(this, modifyMap) : null;\n    }\n\n    getClearMap(): ClearMap | null {\n        return this.clearLink() ? new ClearMap(this) : null;\n    }\n\n    getPromptMap(): PromptMap | null {\n        const link = this.promptLink();\n        if (link) {\n            const pr = link.getTargetAs<PromptRepresentation>();\n            return new PromptMap(link, pr.instanceId());\n        }\n        return null;\n    }\n\n    value(): Value {\n        return new Value(withNull(this.wrapped().value));\n    }\n\n    override isScalar(): boolean {\n        return isScalarType(this.extensions().returnType());\n    }\n\n    attachmentLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'attachment') || null;\n    }\n\n    promptLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'prompt') || null;\n    }\n\n    getDetails(): PropertyRepresentation | null {\n        const link = this.detailsLink();\n        return link ? link.getTargetAs<PropertyRepresentation>() : null;\n    }\n\n    private hasChoices(): boolean {\n        return this.wrapped().hasChoices;\n    }\n\n    private hasPrompt(): boolean {\n        return !!this.promptLink();\n    }\n\n    choices(): Dictionary<Value> | null {\n\n        // use custom choices extension by preference\n        const choices = this.extensions().choices();\n        if (choices) {\n            return mapValues(choices, v => new Value(v));\n        }\n        const ch = this.wrapped().choices;\n        if (ch) {\n            const values = map(ch, (item) => new Value(item));\n            return fromPairs(map(values, v => [v.toString(), v])) as Dictionary<Value>;\n        }\n        return null;\n    }\n\n    private hasConditionalChoices(): boolean {\n        return !!this.promptLink() && !this.hasPrompt();\n    }\n\n    // This is actually not relevant to a property. Slight smell here!\n\n    isCollectionContributed(): boolean {\n        return false;\n    }\n\n    entryType(): EntryType {\n\n        const link = this.promptLink();\n        if (link) {\n            // ConditionalChoices, ConditionalMultipleChoices, AutoComplete\n\n            if (isAutoComplete(link.arguments())) {\n                // autocomplete\n                return EntryType.AutoComplete;\n            }\n            return EntryType.ConditionalChoices;\n        }\n\n        if (this.choices()) {\n            return EntryType.Choices;\n        }\n\n        return EntryType.FreeForm;\n    }\n}\n\n// matches 14.4.2\nexport class CollectionMember\n    extends Member<RoCustom.ICustomCollectionMember>\n    implements IHasLinksAsValue, IHasActions {\n\n    private lazyValue?: Link[];\n    private actionMemberMap?: Dictionary<ActionMember>;\n    etagDigest?: string;\n\n    override wrapped = () => this.resource() as RoCustom.ICustomCollectionMember;\n\n    constructor(wrapped: Ro.ICollectionMember, public parent: DomainObjectRepresentation | Link, private readonly id: string) {\n        super(wrapped);\n        this.etagDigest = parent instanceof DomainObjectRepresentation ? parent.etagDigest : undefined;\n    }\n\n    collectionId(): string {\n        return this.id;\n    }\n\n    value(): Link[] | undefined {\n        this.lazyValue = this.lazyValue || (this.wrapped().value ? wrapLinks(this.wrapped().value!) : undefined);\n        return this.lazyValue;\n    }\n\n    size(): number | null {\n        return withNull(this.wrapped().size);\n    }\n\n    getDetails(): CollectionRepresentation | null {\n        const link = this.detailsLink();\n        return link ? link.getTargetAs<CollectionRepresentation>() : null;\n    }\n\n    hasTableData = () => {\n        const valueLinks = this.value();\n        return valueLinks && some(valueLinks, (i: Link) => i.members());\n    };\n\n    actionMembers(): Dictionary<ActionMember> {\n        const members = this.wrapped().members;\n        if (members) {\n            return this.actionMemberMap || mapValues(members, (m, id) => Member.wrapMember(m, this, id)) as Dictionary<ActionMember>;\n        }\n        return {};\n    }\n\n    hasActionMember(id: string): boolean {\n        return !!this.actionMembers()[id];\n    }\n\n    actionMember(id: string): ActionMember {\n        return getMember(this.actionMembers(), id, this.collectionId());\n    }\n}\n\n// matches 14.4.3\nexport class ActionMember extends Member<Ro.IActionMember> {\n\n    override wrapped = () => this.resource() as Ro.IActionMember;\n\n    constructor(wrapped: Ro.IActionMember, public parent: IHasActions, private readonly id: string) {\n        super(wrapped);\n    }\n\n    actionId(): string {\n        return this.id;\n    }\n\n    getDetails(): ActionRepresentation | null {\n        const link = this.detailsLink();\n        if (link) {\n            const details = link.getTargetAs<ActionRepresentation>();\n            details.parent = this.parent;\n            return details;\n        }\n        return null;\n    }\n\n    // 1.1 inlined\n\n    invokeLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'invoke') || null;\n    }\n\n    override disabledReason(): string {\n        return this.wrapped().disabledReason || '';\n    }\n\n    returnsScalar(): boolean {\n        return isScalarType(this.extensions().returnType());\n    }\n}\n\nexport class InvokableActionMember extends ActionMember {\n\n    private parameterMap?: Dictionary<Parameter>;\n\n    constructor(wrapped: Ro.IActionMember, parent: IHasActions, id: string) {\n        super(wrapped, parent, id);\n    }\n\n    getInvokeMap(): InvokeMap | null {\n        const invokeLink = this.invokeLink();\n\n        return invokeLink ? new InvokeMap(invokeLink) : null;\n    }\n\n    isQueryOnly(): boolean {\n        const invokeLink = this.invokeLink();\n        return !!invokeLink && invokeLink.method() === 'GET';\n    }\n\n    isNotQueryOnly(): boolean {\n        const invokeLink = this.invokeLink();\n        return !!invokeLink && invokeLink.method() !== 'GET';\n    }\n\n    isPotent(): boolean {\n        const invokeLink = this.invokeLink();\n        return !!invokeLink && invokeLink.method() === 'POST';\n    }\n\n    private initParameterMap(): void {\n\n        if (!this.parameterMap) {\n            const parameters = this.wrapped().parameters;\n            this.parameterMap = mapValues(parameters, (p, id) => new Parameter(p, this, id));\n        }\n    }\n\n    parameters(): Dictionary<Parameter> {\n        this.initParameterMap();\n        return this.parameterMap!;\n    }\n}\n\nexport class DomainObjectRepresentation extends ResourceRepresentation<Ro.IDomainObjectRepresentation> implements IHasActions {\n\n    private memberMap?: Dictionary<Member<Ro.IMember>>;\n    private propertyMemberMap?: Dictionary<PropertyMember>;\n    private collectionMemberMap?: Dictionary<CollectionMember>;\n    private actionMemberMap?: Dictionary<ActionMember>;\n    private oid?: ObjectIdWrapper;\n\n    wrapped = () => this.resource() as Ro.IDomainObjectRepresentation;\n\n    constructor(model?: Ro.IRepresentation) {\n        super(model);\n    }\n\n    id(): string {\n        return `${this.domainType() || this.serviceId()}${this.instanceId() ? `${this.keySeparator}${this.instanceId()}` : ''}`;\n    }\n\n    title(): string {\n        return this.wrapped().title;\n    }\n\n    domainType(): string | null {\n        return withNull(this.wrapped().domainType);\n    }\n\n    serviceId(): string | null {\n        return withNull(this.wrapped().serviceId);\n    }\n\n    instanceId(): string | null {\n        return withNull(this.wrapped().instanceId);\n    }\n\n    private resetMemberMaps() {\n        const members = this.wrapped().members;\n        this.memberMap = mapValues(members, (m, id) => Member.wrapMember(m, this, id));\n        this.propertyMemberMap = pickBy(this.memberMap, (m: Member<Ro.IMember>) => m.memberType() === 'property') as Dictionary<PropertyMember>;\n        this.collectionMemberMap = pickBy(this.memberMap, (m: Member<Ro.IMember>) => m.memberType() === 'collection') as Dictionary<CollectionMember>;\n        this.actionMemberMap = pickBy(this.memberMap, (m: Member<Ro.IMember>) => m.memberType() === 'action') as Dictionary<ActionMember>;\n    }\n\n    private initMemberMaps() {\n        if (!this.memberMap) {\n            this.resetMemberMaps();\n        }\n    }\n\n    members(): Dictionary<Member<Ro.IMember>> {\n        this.initMemberMaps();\n        return this.memberMap!;\n    }\n\n    propertyMembers(): Dictionary<PropertyMember> {\n        this.initMemberMaps();\n        return this.propertyMemberMap!;\n    }\n\n    collectionMembers(): Dictionary<CollectionMember> {\n        this.initMemberMaps();\n        return this.collectionMemberMap!;\n    }\n\n    actionMembers(): Dictionary<ActionMember> {\n        this.initMemberMaps();\n        return this.actionMemberMap!;\n    }\n\n    member(id: string): Member<Ro.IMember> {\n        return this.members()[id];\n    }\n\n    propertyMember(id: string): PropertyMember {\n        return this.propertyMembers()[id];\n    }\n\n    collectionMember(id: string): CollectionMember {\n        return this.collectionMembers()[id];\n    }\n\n    hasActionMember(id: string): boolean {\n        return !!this.actionMembers()[id];\n    }\n\n    actionMember(id: string): ActionMember {\n        return getMember(this.actionMembers(), id, this.id());\n    }\n\n    updateLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'update') || null;\n    }\n\n    isTransient(): boolean {\n        return !!this.persistLink();\n    }\n\n    persistLink(): Link | null {\n        return linkByNamespacedRel(this.links(), 'persist') || null;\n    }\n\n    selfLink(): Link | null {\n        return linkByRel(this.links(), 'self') || null;\n    }\n\n    private updateMap() {\n        const link = this.updateLink();\n        return link ? link.arguments() as Ro.IValueMap : null;\n    }\n\n    private persistMap() {\n        const link = this.persistLink();\n        return link ? link.arguments() as Ro.IObjectOfType : null;\n    }\n\n    // linked representations\n    getSelf() {\n        const link = this.selfLink();\n        return link ? link.getTargetAs<DomainObjectRepresentation>() : null;\n    }\n\n    getPersistMap() {\n        const persistMap = validateExists(this.persistMap(), 'PersistMap');\n        return new PersistMap(this, persistMap);\n    }\n\n    getUpdateMap() {\n        const updateMap = validateExists(this.updateMap(), 'UpdateMap');\n        return new UpdateMap(this, updateMap);\n    }\n\n    setInlinePropertyDetails(flag: boolean) {\n        this.setUrlParameter(roInlinePropertyDetails, flag);\n    }\n\n    getOid(): ObjectIdWrapper {\n        if (!this.oid) {\n            this.oid = ObjectIdWrapper.fromObject(this);\n        }\n\n        return this.oid;\n    }\n\n    updateSelfLinkWithTitle() {\n        const link = this.selfLink();\n        if (link) {\n            link.setTitle(this.title());\n        }\n        return link;\n    }\n}\n\nexport class MenuRepresentation extends ResourceRepresentation<RoCustom.IMenuRepresentation> implements IHasActions {\n\n    private memberMap?: Dictionary<Member<Ro.IMember>>;\n    private actionMemberMap?: Dictionary<ActionMember>;\n    wrapped = () => this.resource() as RoCustom.IMenuRepresentation;\n\n    constructor() {\n        super();\n    }\n\n    title(): string {\n        return this.wrapped().title;\n    }\n\n    menuId(): string {\n        return this.wrapped().menuId;\n    }\n\n    private resetMemberMaps() {\n        const members = this.wrapped().members;\n        this.memberMap = mapValues(members, (m, id) => Member.wrapMember(m, this, id));\n        this.actionMemberMap = pickBy(this.memberMap, m => m.memberType() === 'action') as Dictionary<ActionMember>;\n    }\n\n    private initMemberMaps() {\n        if (!this.memberMap) {\n            this.resetMemberMaps();\n        }\n    }\n\n    members(): Dictionary<Member<Ro.IMember>> {\n        this.initMemberMaps();\n        return this.memberMap!;\n    }\n\n    actionMembers(): Dictionary<ActionMember> {\n        this.initMemberMaps();\n        return this.actionMemberMap!;\n    }\n\n    member(id: string): Member<Ro.IMember> {\n        return this.members()[id];\n    }\n\n    hasActionMember(id: string): boolean {\n        return !!this.actionMembers()[id];\n    }\n\n    actionMember(id: string): ActionMember {\n        return getMember(this.actionMembers(), id, this.menuId());\n    }\n\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link; // mandatory\n    }\n\n    // linked representations\n    getSelf(): MenuRepresentation {\n        return this.selfLink().getTargetAs<MenuRepresentation>();\n    }\n\n}\n\n// matches scalar representation 12.0\nexport class ScalarValueRepresentation extends NestedRepresentation<Ro.IScalarValueRepresentation> {\n\n    wrapped = () => this.resource() as Ro.IScalarValueRepresentation;\n\n    constructor(wrapped: Ro.IScalarValueRepresentation) {\n        super(wrapped);\n    }\n\n    value(): Value {\n        return new Value(this.wrapped().value);\n    }\n}\n\n// matches List Representation 11.0\nexport class ListRepresentation\n    extends ResourceRepresentation<RoCustom.ICustomListRepresentation> implements IHasLinksAsValue, IHasActions {\n\n    private actionMemberMap?: Dictionary<ActionMember>;\n    private lazyValue?: Link[];\n\n    constructor(model?: Ro.IRepresentation) {\n        super(model);\n    }\n\n    wrapped = () => this.resource() as RoCustom.ICustomListRepresentation;\n\n    // links\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link;\n    }\n\n    // linked representations\n    getSelf(): ListRepresentation {\n        return this.selfLink().getTargetAs<ListRepresentation>();\n    }\n\n    value(): Link[] {\n        this.lazyValue = this.lazyValue || wrapLinks(this.wrapped().value);\n        return this.lazyValue;\n    }\n\n    pagination(): RoCustom.IPagination | null {\n        return this.wrapped().pagination || null;\n    }\n\n    actionMembers() : Dictionary<ActionMember> {\n        this.actionMemberMap = this.actionMemberMap || mapValues(this.wrapped().members, (m, id) => Member.wrapMember(m, this, id)) as Dictionary<ActionMember>;\n        return this.actionMemberMap;\n    }\n\n    actionMember(id: string): ActionMember {\n        return getMember(this.actionMembers(), id, 'list');\n    }\n\n    hasActionMember(id: string): boolean {\n        return !!this.actionMembers()[id];\n    }\n\n    hasTableData = () => {\n        const valueLinks = this.value();\n        return valueLinks && some(valueLinks, (i: Link) => i.members());\n    };\n}\n\nexport interface IErrorDetails {\n    message(): string;\n    stackTrace(): string[];\n}\n\n// matches the error representation 10.0\nexport class ErrorRepresentation extends ResourceRepresentation<Ro.IErrorRepresentation> implements IErrorDetails {\n\n    constructor() {\n        super();\n    }\n\n    static create(message: string, stackTrace?: string[], causedBy?: Ro.IErrorDetailsRepresentation) {\n        const rawError = {\n            links: [] as Ro.ILink[],\n            extensions: {},\n            message: message,\n            stackTrace: stackTrace,\n            causedBy: causedBy\n        };\n        const errorRep = new ErrorRepresentation();\n        errorRep.populate(rawError);\n        return errorRep;\n    }\n\n    wrapped = () => this.resource() as Ro.IErrorRepresentation;\n\n    // scalar properties\n    message(): string {\n        return this.wrapped().message;\n    }\n\n    stackTrace(): string[] {\n        return this.wrapped().stackTrace || [];\n    }\n\n    causedBy(): IErrorDetails | undefined {\n        const cb = this.wrapped().causedBy;\n        return cb ? {\n            message: () => cb.message,\n            stackTrace: () => cb.stackTrace || []\n        } : undefined;\n    }\n}\n\n// matches Objects of Type Resource 9.0\nexport class PersistMap extends HateosModel implements IHateoasModel {\n\n    constructor(private readonly domainObject: DomainObjectRepresentation, private readonly objectOfType: Ro.IObjectOfType) {\n        super(objectOfType);\n        const link = domainObject.persistLink();\n        if (link) {\n            link.copyToHateoasModel(this);\n        } else {\n            error('PersistMap attempting to create persist map for object with no persist link');\n        }\n    }\n\n    setMember(name: string, value: Value) {\n        value.set(this.objectOfType.members, name);\n    }\n\n    setValidateOnly() {\n        this.objectOfType[roValidateOnly] = true;\n    }\n}\n\n// matches the version representation 8.0\nexport class VersionRepresentation extends ResourceRepresentation<Ro.IVersionRepresentation> {\n\n    wrapped = () => this.resource() as Ro.IVersionRepresentation;\n\n    // links\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link; // mandatory\n    }\n\n    upLink(): Link {\n        return linkByRel(this.links(), 'up') as Link; // mandatory\n    }\n\n    // linked representations\n    getSelf(): VersionRepresentation {\n        return this.selfLink().getTargetAs<VersionRepresentation>();\n    }\n\n    getUp(): HomePageRepresentation {\n        return this.upLink().getTargetAs<HomePageRepresentation>();\n    }\n\n    // scalar properties\n    specVersion(): string {\n        return this.wrapped().specVersion;\n    }\n\n    implVersion(): string | null {\n        return this.wrapped().implVersion || null;\n    }\n\n    appVersion(): string | null {\n        return this.wrapped().appVersion || null;\n    }\n\n    optionalCapabilities(): Ro.IOptionalCapabilities {\n        return this.wrapped().optionalCapabilities;\n    }\n}\n\n// matches Domain Services Representation 7.0\nexport class DomainServicesRepresentation extends ListRepresentation {\n\n    override wrapped = () => this.resource() as RoCustom.ICustomListRepresentation;\n\n    // links\n    upLink(): Link {\n        return linkByRel(this.links(), 'up') as Link; // mandatory\n    }\n\n    // linked representations\n    override getSelf(): DomainServicesRepresentation {\n        return this.selfLink().getTargetAs<DomainServicesRepresentation>();\n    }\n\n    getUp(): HomePageRepresentation {\n        return this.upLink().getTargetAs<HomePageRepresentation>();\n    }\n\n    getService(serviceType: string) {\n        const serviceLink = find(this.value(), link => link.rel()?.parms[0].value === serviceType);\n        return serviceLink ? serviceLink.getTargetAs<DomainObjectRepresentation>() : null;\n    }\n}\n\n// custom\nexport class MenusRepresentation extends ListRepresentation {\n\n    override wrapped = () => this.resource() as RoCustom.ICustomListRepresentation;\n\n    // links\n    upLink(): Link {\n        return linkByRel(this.links(), 'up') as Link; // mandatory\n    }\n\n    // linked representations\n    override getSelf(): MenusRepresentation {\n        return this.selfLink().getTargetAs<MenusRepresentation>();\n    }\n\n    getUp(): HomePageRepresentation {\n        return this.upLink().getTargetAs<HomePageRepresentation>();\n    }\n\n    getMenu(menuId: string) {\n        const menuLink = find(this.value(), link => link.rel()?.parms[0].value === menuId);\n        if (menuLink) {\n            return menuLink.getTargetAs<MenuRepresentation>();\n        }\n        error(`MenusRepresentation:getMenu Failed to find menu ${menuId}`);\n    }\n}\n\n// matches the user representation 6.0\nexport class UserRepresentation extends ResourceRepresentation<Ro.IUserRepresentation> {\n\n    wrapped = () => this.resource() as Ro.IUserRepresentation;\n\n    // links\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self')!; // mandatory\n    }\n\n    upLink(): Link {\n        return linkByRel(this.links(), 'up')!; // mandatory\n    }\n\n    // linked representations\n    getSelf(): UserRepresentation {\n        return this.selfLink().getTargetAs<UserRepresentation>();\n    }\n\n    getUp(): HomePageRepresentation {\n        return this.upLink().getTargetAs<HomePageRepresentation>();\n    }\n\n    // scalar properties\n    userName(): string {\n        return this.wrapped().userName;\n    }\n\n    friendlyName(): string {\n        return this.wrapped().friendlyName;\n    }\n\n    email(): string {\n        return this.wrapped().email;\n    }\n\n    roles(): string[] {\n        return this.wrapped().roles;\n    }\n}\n\nexport class DomainTypeActionInvokeRepresentation extends ResourceRepresentation<Ro.IDomainTypeActionInvokeRepresentation> {\n\n    wrapped = () => this.resource() as Ro.IDomainTypeActionInvokeRepresentation;\n\n    constructor(againstType: string, toCheckType: string, appPath: string) {\n        super();\n        this.hateoasUrl = `${appPath}/domain-types/${toCheckType}/type-actions/isSubtypeOf/invoke`;\n        this.urlParms['supertype'] = againstType;\n    }\n\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link;\n    }\n\n    // linked representations\n    getSelf(): DomainTypeActionInvokeRepresentation {\n        return this.selfLink().getTargetAs<DomainTypeActionInvokeRepresentation>();\n    }\n\n    id(): string {\n        return this.wrapped().id;\n    }\n\n    value(): boolean {\n        return this.wrapped().value;\n    }\n}\n\n// matches the home page representation  5.0\nexport class HomePageRepresentation extends ResourceRepresentation<Ro.IHomePageRepresentation> {\n\n    constructor(rep: Ro.IRepresentation, appPath: string) {\n        super(rep);\n        this.hateoasUrl = appPath;\n    }\n\n    wrapped = () => this.resource() as Ro.IHomePageRepresentation;\n\n    // links\n    serviceLink(): Link {\n        return linkByNamespacedRel(this.links(), 'services') as Link;\n    }\n\n    userLink(): Link {\n        return linkByNamespacedRel(this.links(), 'user') as Link;\n    }\n\n    selfLink(): Link {\n        return linkByRel(this.links(), 'self') as Link;\n    }\n\n    versionLink(): Link {\n        return linkByNamespacedRel(this.links(), 'version') as Link;\n    }\n\n    // custom\n    menusLink(): Link {\n        return linkByNamespacedRel(this.links(), 'menus') as Link;\n    }\n\n    // linked representations\n    getSelf(): HomePageRepresentation {\n        return this.selfLink().getTargetAs<HomePageRepresentation>();\n    }\n\n    getUser(): UserRepresentation {\n        return this.userLink().getTargetAs<UserRepresentation>();\n    }\n\n    getDomainServices(): DomainServicesRepresentation {\n        // cannot use getTarget here as that will just return a ListRepresentation\n        const domainServices = new DomainServicesRepresentation();\n        this.serviceLink().copyToHateoasModel(domainServices);\n        return domainServices;\n    }\n\n    getVersion(): VersionRepresentation {\n        return this.versionLink().getTargetAs<VersionRepresentation>();\n    }\n\n    //  custom\n\n    getMenus(): MenusRepresentation {\n        // cannot use getTarget here as that will just return a ListRepresentation\n        const menus = new MenusRepresentation();\n        this.menusLink().copyToHateoasModel(menus);\n        return menus;\n    }\n\n}\n\n// matches the Link representation 2.7\nexport class Link {\n    private oid?: ObjectIdWrapper;\n    private lazyExtensions?: Extensions;\n    private repTypeToModel = {\n        'homepage': HomePageRepresentation,\n        'user': UserRepresentation,\n        'version': VersionRepresentation,\n        'list': ListRepresentation,\n        'object': DomainObjectRepresentation,\n        'object-property': PropertyRepresentation,\n        'object-collection': CollectionRepresentation,\n        'object-action': ActionRepresentation,\n        'action-result': ActionResultRepresentation,\n        'error': ErrorRepresentation,\n        'prompt': PromptRepresentation,\n        // custom\n        'menu': MenuRepresentation\n    };\n\n    constructor(public wrapped: Ro.ILink) { }\n\n    compress(shortCutMarker: string, urlShortCuts: string[]) {\n        const href = compress(this.wrapped.href, shortCutMarker, urlShortCuts);\n        return new Link({ href: href });\n    }\n\n    decompress(shortCutMarker: string, urlShortCuts: string[]) {\n        const href = decompress(this.wrapped.href, shortCutMarker, urlShortCuts);\n        return new Link({ href: href });\n    }\n\n    href(): string {\n        return decodeURIComponent(this.wrapped.href);\n    }\n\n    method(): Ro.HttpMethodsType | undefined {\n        return this.wrapped.method;\n    }\n\n    rel(): Rel | undefined {\n        return this.wrapped.rel ? new Rel(this.wrapped.rel) : undefined;\n    }\n\n    type(): MediaType | undefined {\n        return this.wrapped.type ? new MediaType(this.wrapped.type) : undefined;\n    }\n\n    title(): string | null {\n        return withNull(this.wrapped.title);\n    }\n\n    // Typically used to set a title on a link that doesn't naturally have one e.g. Self link\n    setTitle(title: string): void {\n        this.wrapped.title = title;\n    }\n\n    arguments(): Ro.IValue | Ro.IValueMap | Ro.IObjectOfType | Ro.IPromptMap | null {\n        return withNull(this.wrapped.arguments);\n    }\n\n    members(): Dictionary<PropertyMember | CollectionMember> | null {\n        const members = (this.wrapped as RoCustom.ICustomLink).members;\n        return members ? mapValues(members, (m, id) => Member.wrapLinkMember(m, this, id)) : null;\n    }\n\n    extensions(): Extensions {\n        this.lazyExtensions = this.lazyExtensions ?? new Extensions(this.wrapped.extensions ?? {});\n        return this.lazyExtensions;\n    }\n\n    copyToHateoasModel(hateoasModel: IHateoasModel): void {\n        hateoasModel.hateoasUrl = this.href();\n        hateoasModel.method = throwIfNotExists(this.method());\n    }\n\n    private getHateoasTarget(targetType: string): IHateoasModel {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const MatchingType = (this.repTypeToModel as any)[targetType];\n        const target: IHateoasModel = new MatchingType();\n        return target;\n    }\n\n    // get the object that this link points to\n    getTarget(): IHateoasModel {\n        const target = this.getHateoasTarget(throwIfNotExists(this.type()?.representationType));\n        this.copyToHateoasModel(target);\n        return target;\n    }\n\n    getTargetAs<T extends IHateoasModel>(): T {\n        const target = this.getHateoasTarget(throwIfNotExists(this.type()?.representationType));\n        this.copyToHateoasModel(target);\n        return target as T;\n    }\n\n    // helper\n    getOid(keySeparator: string): ObjectIdWrapper {\n        if (!this.oid) {\n            this.oid = ObjectIdWrapper.fromLink(this, keySeparator);\n        }\n\n        return this.oid;\n    }\n}\n\nexport enum EntryType { FreeForm, Choices, MultipleChoices, ConditionalChoices, MultipleConditionalChoices, AutoComplete, File }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}