{"version":3,"file":"nakedobjects-cicero.mjs","sources":["../../../cicero/src/helpers-components.ts","../../../cicero/src/user-messages.ts","../../../cicero/src/cicero-commands/result.ts","../../../cicero/src/cicero-commands/command-result.ts","../../../cicero/src/cicero-commands/command.ts","../../../cicero/src/cicero-commands/action.ts","../../../cicero/src/cicero-commands/back.ts","../../../cicero/src/cicero-commands/cancel.ts","../../../cicero/src/cicero-commands/clipboard.ts","../../../cicero/src/cicero-commands/edit.ts","../../../cicero/src/validate.ts","../../../cicero/src/cicero-commands/enter.ts","../../../cicero/src/cicero-commands/forward.ts","../../../cicero/src/cicero-commands/gemini.ts","../../../cicero/src/cicero-commands/goto.ts","../../../cicero/src/cicero-commands/help.ts","../../../cicero/src/cicero-commands/menu.ts","../../../cicero/src/cicero-commands/ok.ts","../../../cicero/src/cicero-commands/page.ts","../../../cicero/src/cicero-commands/reload.ts","../../../cicero/src/cicero-commands/root.ts","../../../cicero/src/cicero-commands/save.ts","../../../cicero/src/cicero-commands/selection.ts","../../../cicero/src/cicero-commands/show.ts","../../../cicero/src/cicero-commands/where.ts","../../../cicero/src/cicero-context.service.ts","../../../cicero/src/cicero-renderer.service.ts","../../../cicero/src/cicero-command-factory.service.ts","../../../cicero/src/cicero/cicero.component.ts","../../../cicero/src/cicero/cicero.component.html","../../../cicero/src/lib.module.ts","../../../cicero/src/nakedobjects-cicero.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\nimport { SubscriptionLike as ISubscription } from 'rxjs';\n\nexport function safeUnsubscribe(sub?: ISubscription) {\n    if (sub) {\n        sub.unsubscribe();\n    }\n}\n\nfunction isFocusable(nativeElement: unknown): nativeElement is { focus: () => void } {\n    return !!(nativeElement && nativeElement instanceof Object && 'focus' in nativeElement);\n}\n\nfunction safeFocus(nativeElement?: unknown) {\n    if (isFocusable(nativeElement)) {\n        nativeElement.focus();\n    }\n}\n\nexport function focus(element?: ElementRef) {\n    setTimeout(() => safeFocus(element?.nativeElement));\n    return true;\n}\n\nexport function hasMessage(obj: unknown): obj is { message: string } {\n    return typeof obj === 'object' && obj !== null && 'message' in obj && typeof obj.message == 'string';\n}\n\nexport function messageFrom(e: unknown) {\n    return hasMessage(e) ? e.message : 'unknown error';\n}","import { ILocalFilter } from '@nakedobjects/services';\n\nexport const mandatory = 'Mandatory';\nexport const optional = 'Optional';\nexport const choices = 'Choices';\n\nexport const tooLong = 'Too long';\nexport const notANumber = 'Not a number';\nexport const noPatternMatch = 'Invalid entry';\n\nexport const outOfRange = (_: unknown, min: unknown, max: unknown, filter: ILocalFilter) => {\n    const minVal = filter ? filter.filter(min) : min;\n    const maxVal = filter ? filter.filter(max) : max;\n\n    return `Value is outside the range ${minVal || 'unlimited'} to ${maxVal || 'unlimited'}`;\n};\n\nexport const welcomeMessage = 'Welcome to Cicero. Type \\'help\\' and the Enter key for more information.';\nexport const basicHelp = 'Cicero is a user interface purpose-designed to work with an audio screen-reader.\\n' +\n    'The display has only two fields: a read-only output field, and a single input field.\\n' +\n    'The input field always has the focus.\\n' +\n    'Commands are typed into the input field followed by the Enter key.\\n' +\n    'When the output field updates (either instantaneously or after the server has responded)\\n' +\n    'its contents are read out automatically, so \\n' +\n    'the user never has to navigate around the screen.\\n' +\n    'Commands, such as \\'action\\', \\'field\\' and \\'save\\', may be typed in full\\n' +\n    'or abbreviated to the first two or more characters.\\n' +\n    'Commands are not case sensitive.\\n' +\n    'Some commands take one or more arguments.\\n' +\n    'There must be a space between the command word and the first argument,\\n' +\n    'and a comma between arguments.\\n' +\n    'Arguments may contain spaces if needed.\\n' +\n    'The commands available to the user vary according to the context.\\n' +\n    'The command \\'help ?\\' (note that there is a space between help and \\'?\\')\\n' +\n    'will list the commands available to the user in the current context.\\n' +\n    '‘help’ followed by another command word (in full or abbreviated) will give more details about that command.\\n' +\n    'Some commands will change the context, for example using the Go command to navigate to an associated object, \\n' +\n    'in which case the new context will be read out.\\n' +\n    'Other commands - help being an example - do not change the context, but will read out information to the user.\\n' +\n    'If the user needs a reminder of the current context, the \\'Where\\' command will read the context out again.\\n' +\n    'Hitting Enter on the empty input field has the same effect.\\n' +\n    'When the user enters a command and the output has been updated, the input field will  be cleared, \\n' +\n    'ready for the next command. The user may recall the previous command by hitting the up-arrow key.\\n' +\n    'The user might then edit or extend that previous command and hit Enter to run it again.\\n' +\n    'For advanced users: commands may be chained using a semi-colon between them,\\n' +\n    'however commands that do, or might, result in data updates cannot be chained.';\nexport const actionCommand = 'action';\nexport const actionHelp = 'Open the dialog for action from a menu, or from object actions.\\n' +\n    'A dialog is always opened for an action, even if it has no fields (parameters):\\n' +\n    'This is a safety mechanism, allowing the user to confirm that the action is the one intended.\\n' +\n    'Once the dialog fields have been completed, using the Enter command,\\n' +\n    'the action may then be invoked  with the OK command.\\n' +\n    'The action command takes two optional arguments.\\n' +\n    'The first is the name, or partial name, of the action.\\n' +\n    'If the partial name matches more than one action, a list of matches is returned but none opened.\\n' +\n    'If no argument is provided, a full list of available action names is returned.\\n' +\n    'The partial name may have more than one clause, separated by spaces.\\n' +\n    'these may match either parts of the action name or the sub-menu name if one exists.\\n' +\n    'If the action name matches a single action, then a question-mark may be added as a second\\n' +\n    'parameter, which will generate a more detailed description of the Action.';\nexport const backCommand = 'back';\nexport const backHelp = 'Move back to the previous context.';\nexport const cancelCommand = 'cancel';\nexport const cancelHelp = 'Leave the current activity (action dialog, or object edit), incomplete.';\nexport const clipboardCommand = 'clipboard';\nexport const clipboardCopy = 'copy';\nexport const clipboardShow = 'show';\nexport const clipboardGo = 'go';\nexport const clipboardDiscard = 'discard';\nexport const clipboardHelp = 'The clipboard command is used for temporarily\\n' +\n    'holding a reference to an object, so that it may be used later\\n' +\n    'to enter into a field.\\n' +\n    'Clipboard requires one argument, which may take one of four values:\\n' +\n    'copy, show, go, or discard\\n' +\n    'each of which may be abbreviated down to one character.\\n' +\n    'Copy copies a reference to the object being viewed into the clipboard,\\n' +\n    'overwriting any existing reference.\\n' +\n    'Show displays the content of the clipboard without using it.\\n' +\n    'Go takes you directly to the object held in the clipboard.\\n' +\n    'Discard removes any existing reference from the clipboard.\\n' +\n    'The reference held in the clipboard may be used within the Enter command.';\nexport const editCommand = 'edit';\nexport const editHelp = 'Put an object into Edit mode.';\nexport const enterCommand = 'enter';\nexport const enterHelp = 'Enter a value into a field,\\n' +\n    'meaning a parameter in an action dialog,\\n' +\n    'or  a property on an object being edited.\\n' +\n    'Enter requires 2 arguments.\\n' +\n    'The first argument is the partial field name, which must match a single field.\\n' +\n    'The second optional argument specifies the value, or selection, to be entered.\\n' +\n    'If a question mark is provided as the second argument, the field will not be\\n' +\n    'updated but further details will be provided about that input field.\\n' +\n    'If the word paste is used as the second argument, then, provided that the field is\\n' +\n    'a reference field, the object reference in the clipboard will be pasted into the field.\\n';\nexport const forwardCommand = 'forward';\nexport const forwardHelp = 'Move forward to next context in the history\\n' +\n    '(if you have previously moved back).';\nexport const geminiCommand = 'gemini';\nexport const geminiHelp = 'Switch to the Gemini (graphical) user interface\\n' +\n    'preserving the current context.';\nexport const gotoCommand = 'goto';\nexport const gotoHelp = 'Go to the object referenced in a property,\\n' +\n    'or to a collection within an object,\\n' +\n    'or to an object within an open list or collection.\\n' +\n    'Goto takes one argument.  In the context of an object\\n' +\n    'that is the name or partial name of the property or collection.\\n' +\n    'In the context of an open list or collection, it is the\\n' +\n    'number of the item within the list or collection (starting at 1). ';\nexport const helpCommand = 'help';\nexport const helpHelp = 'If no argument is specified, help provides a basic explanation of how to use Cicero.\\n' +\n    'If help is followed by a question mark as an argument, this lists the commands available\\n' +\n    'in the current context. If help is followed by another command word as an argument\\n' +\n    '(or an abbreviation of it), a description of the specified Command is returned.';\nexport const menuCommand = 'menu';\nexport const menuHelp = 'Open a named main menu, from any context.\\n' +\n    'Menu takes one optional argument: the name, or partial name, of the menu.\\n' +\n    'If the partial name matches more than one menu, a list of matches is returned\\n' +\n    'but no menu is opened; if no argument is provided a list of all the menus\\n' +\n    'is returned.';\nexport const okCommand = 'ok';\nexport const okHelp = 'Invoke the action currently open as a dialog.\\n' +\n    'Fields in the dialog should be completed before this.';\nexport const pageCommand = 'page';\nexport const pageFirst = 'first';\nexport const pagePrevious = 'previous';\nexport const pageNext = 'next';\nexport const pageLast = 'last';\nexport const pageHelp = 'Supports paging of returned lists.\\n' +\n    'The page command takes a single argument, which may be one of these four words:\\n' +\n    'first, previous, next, or last, \\n' +\n    'which may be abbreviated down to the first character.\\n' +\n    'Alternative, the argument may be a specific page number.';\nexport const reloadCommand = 'reload';\nexport const reloadHelp = 'Not yet implemented. Reload the data from the server for an object or a list.\\n' +\n    'Note that for a list, which was generated by an action, reload runs the action again, \\n' +\n    'thus ensuring that the list is up to date. However, reloading a list does not reload the\\n' +\n    'individual objects in that list, which may still be cached. Invoking Reload on an\\n' +\n    'individual object, however, will ensure that its fields show the latest server data.';\nexport const rootCommand = 'root';\nexport const rootHelp = 'From within an opend collection context, the root command returns\\n' +\n    ' to the root object that owns the collection. Does not take any arguments.\\n';\nexport const saveCommand = 'save';\nexport const saveHelp = 'Save the updated fields on an object that is being edited,\\n' +\n    'and return from edit mode to a normal view of that object';\nexport const selectionCommand = 'selection';\nexport const selectionHelp = 'Not fully implemented. Select one or more items from a list,\\n' +\n    'prior to invoking an action on the selection.\\n' +\n    'Selection has one mandatory argument, which must be one of these words,\\n' +\n    'add, remove, all, clear, show.\\n' +\n    'The Add and Remove options must be followed by a second argument specifying\\n' +\n    'the item number, or range, to be added or removed.\\n';\nexport const showCommand = 'show';\nexport const showHelp = 'In the context of an object, shows the name and content of\\n' +\n    'one or more of the properties.\\n' +\n    'May take 1 argument: the partial field name.\\n' +\n    'If this matches more than one property, a list of matches is returned.\\n' +\n    'If no argument is provided, the full list of properties is returned.\\n' +\n    'In the context of an opened object collection, or a list,\\n' +\n    'shows one or more items from that collection or list.\\n' +\n    'If no arguments are specified, show will list all of the the items in the collection,\\n' +\n    'or the first page of items if in a list view.\\n' +\n    'Alternatively, the command may be specified with an item number, or a range such as 3- 5.';\nexport const whereCommand = 'where';\nexport const whereHelp = 'Display a reminder of the current context.\\n' +\n    'The same can also be achieved by hitting the Return key on the empty input field.';\n\n// Cicero feedback messages\nexport const commandTooShort = 'Command word must have at least 2 characters';\nexport const noCommandMatch = (a: string) => `No command begins with ${a}`;\nexport const commandsAvailable = 'Commands available in current context:\\n';\n\nexport const noArguments = 'No arguments provided';\nexport const tooFewArguments = 'Too few arguments provided';\nexport const tooManyArguments = 'Too many arguments provided';\n\nexport const commandNotAvailable = (c: string) => `The command: ${c} is not available in the current context`;\n\nexport const startHigherEnd = 'Starting item number cannot be greater than the ending item number';\n\nexport const highestItem = (n: number) => `The highest numbered item is ${n}`;\n\nexport const item = 'item';\nexport const empty = 'empty';\nexport const numberOfItems = (n: number) => `${n} items`;\nexport const on = 'on';\nexport const collection = 'Collection';\nexport const modified = 'modified';\nexport const properties = 'properties';\nexport const modifiedProperties = `Modified ${properties}`;\nexport const page = 'Page';\n\nexport const noVisible = 'No visible properties';\n\nexport const doesNotMatch = (name: string) => `${name} does not match any properties`;\n\nexport const cannotPage = 'Cannot page list';\n\nexport const alreadyOnFirst = 'List is already showing the first page';\n\nexport const alreadyOnLast = 'List is already showing the last page';\n\nexport const pageArgumentWrong = 'The argument must match: first, previous, next, last, or a single number';\n\nexport const pageNumberWrong = (max: number) => `Specified page number must be between 1 and ${max}`;\n\nexport const mayNotbeChainedMessage = (c: string, r: string) => `${c} command may not be chained${r}. Use Where command to see where execution stopped.`;\n\nexport const queryOnlyRider = ' unless the action is query-only';\n\nexport const noSuchCommand = (c: string) => `No such command: ${c}`;\n\nexport const missingArgument = (i: number) => `Required argument number ${i} is missing`;\n\nexport const wrongTypeArgument = (i: number) => `Argument number ${i} must be a number`;\n\nexport const isNotANumber = (s: string) => `${s} is not a number`;\n\nexport const tooManyDashes = 'Cannot have more than one dash in argument';\n\nexport const mustBeGreaterThanZero = 'Item number or range values must be greater than zero';\n\nexport const pleaseCompleteOrCorrect = 'Please complete or correct these fields:\\n';\n\nexport const required = 'required';\n\nexport const mustbeQuestionMark = 'Second argument may only be a question mark -  to get action details';\n\nexport const noActionsAvailable = 'No actions available';\n\nexport const doesNotMatchActions = (a: string | undefined) => `${a} does not match any actions`;\n\nexport const matchingActions = 'Matching actions:\\n';\nexport const actionsMessage = 'Actions:\\n';\nexport const actionPrefix = 'Action:';\nexport const disabledPrefix = 'disabled:';\n\nexport const isDisabled = 'is disabled.';\n\nexport const noDescription = 'No description provided';\n\nexport const descriptionPrefix = 'Description for action:';\n\nexport const clipboardError = 'Clipboard command may only be followed by copy, show, go, or discard';\n\nexport const clipboardContextError = 'Clipboard copy may only be used in the context of viewing an object';\n\nexport const clipboardContents = (contents: string) => `Clipboard contains: ${contents}`;\n\nexport const clipboardEmpty = 'Clipboard is empty';\n\nexport const doesNotMatchProperties = (name: string | undefined) => `${name} does not match any properties`;\n\nexport const matchesMultiple = 'matches multiple fields:\\n';\n\nexport const doesNotMatchDialog = (name: string | undefined) => `${name} does not match any fields in the dialog`;\n\nexport const multipleFieldMatches = 'Multiple fields match';\n\nexport const isNotModifiable = 'is not modifiable';\n\nexport const invalidCase = 'Invalid case';\n\nexport const invalidRefEntry = 'Invalid entry for a reference field. Use clipboard or clip';\n\nexport const emptyClipboard = 'Cannot use Clipboard as it is empty';\nexport const incompatibleClipboard = 'Contents of Clipboard are not compatible with the field';\nexport const noMatch = (s: string) => `None of the choices matches ${s}`;\nexport const multipleMatches = 'Multiple matches:\\n';\nexport const fieldName = (name: string) => `Field name: ${name}`;\nexport const descriptionFieldPrefix = 'Description:';\nexport const typePrefix = 'Type:';\n\nexport const unModifiablePrefix = (reason: string) => `Unmodifiable: ${reason}`;\nexport const outOfItemRange = (n: number | undefined) => `${n} is out of range for displayed items`;\nexport const doesNotMatchMenu = (name: string | undefined) => `${name} does not match any menu`;\nexport const matchingMenus = 'Matching menus:';\nexport const menuTitle = (title: string) => `${title} menu`;\nexport const allMenus = 'Menus:';\nexport const noRefFieldMatch = (s: string) => `${s} does not match any reference fields or collections`;\nexport const unsaved = 'Unsaved';\nexport const editing = 'Editing';\n","export class Result {\n    input: string | null = null;\n    output: string | null = null;\n\n    static create(input: string | null, output: string | null): Result {\n        return { input: input, output: output };\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { ContextService } from '@nakedobjects/services';\nimport { Dictionary } from 'lodash';\nimport map from 'lodash-es/map';\nimport mapValues from 'lodash-es/mapValues';\nimport { Result } from './result';\n\n// todo move this\nexport function getParametersAndCurrentValue(action: Ro.ActionMember | Ro.ActionRepresentation | Ro.InvokableActionMember, context: ContextService): Dictionary<Ro.Value> {\n\n    if (action instanceof Ro.InvokableActionMember || action instanceof Ro.ActionRepresentation) {\n        const parms = action.parameters();\n        const cachedValues = context.getDialogCachedValues(action.actionId());\n        const values = mapValues(parms, p => {\n            const value = cachedValues[p.id()];\n            return value === undefined ? p.default() : value;\n        });\n        return values;\n    }\n    return {};\n}\n\nexport function getFields(field: Ro.IField): Ro.IField[] {\n\n    if (field instanceof Ro.Parameter) {\n        const action = field.parent;\n        if (action instanceof Ro.InvokableActionMember || action instanceof Ro.ActionRepresentation) {\n            const parms = action.parameters();\n            return map(parms, p => p as Ro.IField);\n        }\n    }\n\n    if (field instanceof Ro.PropertyMember) {\n        // todo\n        return [];\n    }\n\n    return [];\n}\n\nexport class CommandResult extends Result {\n    stopChain?: boolean;\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    changeState: () => void = () => { };\n}\n","import { Location } from '@angular/common';\nimport * as Ro from '@nakedobjects/restful-objects';\nimport {\n    ClientErrorCode,\n    CollectionViewState,\n    ConfigService,\n    ContextService,\n    ErrorCategory,\n    ErrorService,\n    ErrorWrapper,\n    InteractionMode,\n    MaskService,\n    PaneRouteData,\n    UrlManagerService\n    } from '@nakedobjects/services';\nimport { Dictionary } from 'lodash';\nimport each from 'lodash-es/each';\nimport every from 'lodash-es/every';\nimport filter from 'lodash-es/filter';\nimport findIndex from 'lodash-es/findIndex';\nimport forEach from 'lodash-es/forEach';\nimport keys from 'lodash-es/keys';\nimport map from 'lodash-es/map';\nimport some from 'lodash-es/some';\nimport * as Commandresult from './command-result';\nimport { CommandResult } from './command-result';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport * as Usermessages from '../user-messages';\n\nexport abstract class Command {\n\n    constructor(protected urlManager: UrlManagerService,\n        protected location: Location,\n        protected commandFactory: CiceroCommandFactoryService,\n        protected context: ContextService,\n        protected mask: MaskService,\n        protected error: ErrorService,\n        protected configService: ConfigService,\n        protected ciceroContext: CiceroContextService,\n        protected ciceroRenderer: CiceroRendererService,\n    ) {\n       \n    }\n\n    argString: string | null = null;\n    chained = false;\n\n    abstract shortCommand: string;\n    abstract fullCommand: string;\n    abstract helpText: string;\n    protected abstract minArguments: number;\n    protected abstract maxArguments: number;\n    protected get keySeparator() { \n        return this.configService.config.keySeparator;\n    }\n\n    execute(): Promise<CommandResult> {\n        const result = new CommandResult();\n\n        // TODO Create outgoing Vm and copy across values as needed\n        if (!this.isAvailableInCurrentContext()) {\n            return this.returnResult('', Usermessages.commandNotAvailable(this.fullCommand));\n        }\n        // TODO: This could be moved into a pre-parse method as it does not depend on context\n        if (this.argString == null) {\n            if (this.minArguments > 0) {\n                return this.returnResult('', Usermessages.noArguments);\n            }\n        } else {\n            const args = this.argString.split(',');\n            if (args.length < this.minArguments) {\n\n                return this.returnResult('', Usermessages.tooFewArguments);\n            } else if (args.length > this.maxArguments) {\n                return this.returnResult('', Usermessages.tooManyArguments);\n            }\n        }\n        return this.doExecute(this.argString!, this.chained, result);\n    }\n\n    protected returnResult(input: string | null, output: string | null, changeState?: () => void, stopChain?: boolean): Promise<CommandResult> {\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\n        changeState = changeState ? changeState : () => { };\n        return Promise.resolve({ input: input, output: output, changeState: changeState, stopChain: !!stopChain });\n    }\n\n    protected abstract doExecute(args: string | null, chained: boolean, result: CommandResult): Promise<CommandResult>;\n\n    abstract isAvailableInCurrentContext(): boolean;\n\n    protected mayNotBeChained(rider = '') {\n        return Usermessages.mayNotbeChainedMessage(this.fullCommand, rider);\n    }\n\n    checkMatch(matchText: string): void {\n        if (this.fullCommand.indexOf(matchText) !== 0) {\n            throw new Error(Usermessages.noSuchCommand(matchText));\n        }\n    }\n\n    // argNo starts from 0.\n    // If argument does not parse correctly, message will be passed to UI and command aborted.\n    protected argumentAsString(argString: string | null, argNo: number, optional = false, toLower = true): string | undefined {\n        if (!argString) { return undefined; }\n        if (!optional && argString.split(',').length < argNo + 1) {\n            throw new Error(Usermessages.tooFewArguments);\n        }\n        const args = argString.split(',');\n        if (args.length < argNo + 1) {\n            if (optional) {\n                return undefined;\n            } else {\n                throw new Error(Usermessages.missingArgument(argNo + 1));\n            }\n        }\n        return toLower ? args[argNo].trim().toLowerCase() : args[argNo].trim(); // which may be \"\" if argString ends in a ','\n    }\n\n    // argNo starts from 0.\n    protected argumentAsNumber(args: string | null, argNo: number, optional = false): number | null {\n        const arg = this.argumentAsString(args, argNo, optional);\n        if (!arg && optional) { return null; }\n        const number = parseInt(arg!, 10);\n        if (isNaN(number)) {\n            throw new Error(Usermessages.wrongTypeArgument(argNo + 1));\n        }\n        return number;\n    }\n\n    protected parseInt(input: string): number {\n        const number = parseInt(input, 10);\n        if (isNaN(number)) {\n            throw new Error(Usermessages.isNotANumber(input));\n        }\n        return number;\n    }\n\n    // Parses '17, 3-5, -9, 6-' into two numbers\n    protected parseRange(arg?: string): { start: number | null; end: number | null } {\n        if (!arg) {\n            arg = '1-';\n        }\n        const clauses = arg.split('-');\n        const range: { start: number | null; end: number | null } = { start: null, end: null };\n        switch (clauses.length) {\n            case 1: {\n                const firstValue = clauses[0];\n                range.start = firstValue ? this.parseInt(firstValue) : null;\n                range.end = range.start;\n                break;\n            }\n            case 2: {\n                const firstValue = clauses[0];\n                const secondValue = clauses[1];\n                range.start = firstValue ? this.parseInt(firstValue) : null;\n                range.end = secondValue ? this.parseInt(secondValue) : null;\n                break;\n            }\n            default:\n                throw new Error(Usermessages.tooManyDashes);\n        }\n        if ((range.start != null && range.start < 1) || (range.end != null && range.end < 1)) {\n            throw new Error(Usermessages.mustBeGreaterThanZero);\n        }\n        return range;\n    }\n\n    protected getContextDescription(): string | null {\n        // todo\n        return null;\n    }\n\n    protected routeData(): PaneRouteData {\n        return this.urlManager.getRouteData().pane1;\n    }\n\n    // Helpers delegating to RouteData\n    protected isHome(): boolean {\n        return this.urlManager.isHome();\n    }\n\n    protected isObject(): boolean {\n        return this.urlManager.isObject();\n    }\n\n    protected getObject(): Promise<Ro.DomainObjectRepresentation> {\n        const oid = Ro.ObjectIdWrapper.fromObjectId(this.routeData().objectId!, this.keySeparator);\n        // TODO: Consider view model & transient modes?\n\n        return this.context.getObject(1, oid, this.routeData().interactionMode!).then((obj: Ro.DomainObjectRepresentation) => {\n            if (this.routeData().interactionMode === InteractionMode.Edit) {\n                return this.context.getObjectForEdit(1, obj);\n            } else {\n                return obj; // To wrap a known object as a promise\n            }\n        });\n    }\n\n    protected isList(): boolean {\n        return this.urlManager.isList();\n    }\n\n    protected getList(): Promise<Ro.ListRepresentation> {\n        const routeData = this.routeData();\n        // TODO: Currently covers only the list-from-menu; need to cover list from object action\n        return this.context.getListFromMenu(routeData, routeData.page, routeData.pageSize);\n    }\n\n    protected isMenu(): boolean {\n        return !!this.routeData().menuId;\n    }\n\n    protected getMenu(): Promise<Ro.MenuRepresentation> {\n        return this.context.getMenu(this.routeData().menuId!);\n    }\n\n    protected isDialog(): boolean {\n        return !!this.routeData().dialogId;\n    }\n\n    protected isMultiChoiceField(field: Ro.IField) {\n        const entryType = field.entryType();\n        return entryType === Ro.EntryType.MultipleChoices || entryType === Ro.EntryType.MultipleConditionalChoices;\n    }\n\n    protected getActionForCurrentDialog(): Promise<Ro.InvokableActionMember | Ro.ActionRepresentation> {\n        const dialogId = this.routeData().dialogId;\n        if (this.isObject()) {\n            return this.getObject().then((obj: Ro.DomainObjectRepresentation) => this.context.getInvokableAction(obj.actionMember(dialogId!)));\n        } else if (this.isMenu()) {\n            return this.getMenu().then((menu: Ro.MenuRepresentation) => this.context.getInvokableAction(menu.actionMember(dialogId!))); // i.e. return a promise\n        }\n        return Promise.reject(new ErrorWrapper(ErrorCategory.ClientError, ClientErrorCode.NotImplemented, 'List actions not implemented yet'));\n    }\n\n    // Tests that at least one collection is open (should only be one).\n    // TODO: assumes that closing collection removes it from routeData NOT sets it to Summary\n    protected isCollection(): boolean {\n        return this.isObject() && some(this.routeData().collections);\n    }\n\n    protected closeAnyOpenCollections() {\n        const open = this.ciceroRenderer.openCollectionIds(this.routeData());\n        forEach(open, id => this.urlManager.setCollectionMemberState(id, CollectionViewState.Summary));\n    }\n\n    protected isTable(): boolean {\n        return false; // TODO\n    }\n\n    protected isEdit(): boolean {\n        return this.routeData().interactionMode === InteractionMode.Edit;\n    }\n\n    protected isForm(): boolean {\n        return this.routeData().interactionMode === InteractionMode.Form;\n    }\n\n    protected isTransient(): boolean {\n        return this.routeData().interactionMode === InteractionMode.Transient;\n    }\n\n    protected matchingProperties(obj: Ro.DomainObjectRepresentation, match?: string): Ro.PropertyMember[] {\n        let props = map(obj.propertyMembers(), prop => prop);\n        if (match) {\n            props = this.matchFriendlyNameAndOrMenuPath(props, match);\n        }\n        return props;\n    }\n\n    protected matchingCollections(obj: Ro.DomainObjectRepresentation, match?: string): Ro.CollectionMember[] {\n        const allColls = map(obj.collectionMembers(), action => action);\n        if (match) {\n            return this.matchFriendlyNameAndOrMenuPath<Ro.CollectionMember>(allColls, match);\n        } else {\n            return allColls;\n        }\n    }\n\n    protected matchingParameters(action: Ro.InvokableActionMember, match: string): Ro.Parameter[] {\n        let params = map(action.parameters(), p => p);\n        if (match) {\n            params = this.matchFriendlyNameAndOrMenuPath(params, match);\n        }\n        return params;\n    }\n\n    protected matchFriendlyNameAndOrMenuPath<T extends Ro.IHasExtensions>(\n        reps: T[],\n        match: string | undefined): T[] {\n        const clauses = match ? match.split(' ') : [];\n        // An exact match has preference over any partial match\n        const exactMatches = filter(reps,\n            (rep) => {\n                const path = rep.extensions().menuPath();\n                const name = rep.extensions().friendlyName().toLowerCase();\n                return match === name ||\n                    (!!path && match === path.toLowerCase() + ' ' + name) ||\n                    every(clauses, clause => name === clause || (!!path && path.toLowerCase() === clause));\n            });\n        if (exactMatches.length > 0) { return exactMatches; }\n        return filter(reps,\n            rep => {\n                const path = rep.extensions().menuPath();\n                const name = rep.extensions().friendlyName().toLowerCase();\n                return every(clauses, clause => name.indexOf(clause) >= 0 || (!!path && path.toLowerCase().indexOf(clause) >= 0));\n            });\n    }\n\n    protected findMatchingChoicesForRef(choices: Dictionary<Ro.Value> | null, titleMatch: string): Ro.Value[] {\n        return choices ? filter(choices, v => v.toString().toLowerCase().indexOf(titleMatch.toLowerCase()) >= 0) : [];\n    }\n\n    protected findMatchingChoicesForScalar(choices: Dictionary<Ro.Value> | null, titleMatch: string): Ro.Value[] {\n        if (choices == null) {\n            return [];\n        }\n\n        const labels = keys(choices);\n        const matchingLabels = filter(labels, l => l.toString().toLowerCase().indexOf(titleMatch.toLowerCase()) >= 0);\n        const result = new Array<Ro.Value>();\n        switch (matchingLabels.length) {\n            case 0:\n                break; // leave result empty\n            case 1:\n                // Push the VALUE for the key\n                // For simple scalars they are the same, but not for Enums\n                result.push(choices[matchingLabels[0]]);\n                break;\n            default:\n                // Push the matching KEYs, wrapped as (pseudo) Values for display in message to user\n                // For simple scalars the values would also be OK, but not for Enums\n                forEach(matchingLabels, label => result.push(new Ro.Value(label)));\n                break;\n        }\n        return result;\n    }\n\n    protected handleErrorResponse(err: Ro.ErrorMap, getFriendlyName: (id: string) => string) {\n        if (err.invalidReason()) {\n            return this.returnResult('', err.invalidReason());\n        }\n        let msg = Usermessages.pleaseCompleteOrCorrect;\n        each(err.valuesMap(),\n            (errorValue, fieldId) => {\n                msg += this.fieldValidationMessage(errorValue, () => getFriendlyName(fieldId!));\n            });\n        return this.returnResult('', msg);\n    }\n\n    protected handleErrorResponseNew(err: Ro.ErrorMap, getFriendlyName: (id: string) => string) {\n        if (err.invalidReason()) {\n            return this.returnResult('', err.invalidReason());\n        }\n        let msg = Usermessages.pleaseCompleteOrCorrect;\n        each(err.valuesMap(),\n            (errorValue, fieldId) => {\n                msg += this.fieldValidationMessage(errorValue, () => getFriendlyName(fieldId!));\n            });\n        return this.returnResult('', msg);\n    }\n\n    protected validationMessage(reason: string | null, value: Ro.Value, fieldFriendlyName: string): string {\n        if (reason) {\n            const prefix = `${fieldFriendlyName}: `;\n            const suffix = reason === Usermessages.mandatory ? Usermessages.required : `${value} ${reason}`;\n            return `${prefix}${suffix}\\n`;\n        }\n        return '';\n    }\n\n    private fieldValidationMessage(errorValue: Ro.ErrorValue, fieldFriendlyName: () => string): string {\n        const reason = errorValue.invalidReason;\n        return this.validationMessage(reason, errorValue.value, fieldFriendlyName());\n    }\n\n    protected valueForUrl(val: Ro.Value, field: Ro.IField): Ro.Value | null {\n        if (val.isNull()) { return val; }\n        const fieldEntryType = field.entryType();\n\n        if (fieldEntryType !== Ro.EntryType.FreeForm || field.isCollectionContributed()) {\n\n            if (this.isMultiChoiceField(field) || field.isCollectionContributed()) {\n                let valuesFromRouteData: Ro.Value[] | null = new Array<Ro.Value>();\n                if (field instanceof Ro.Parameter) {\n                    const rd = Commandresult.getParametersAndCurrentValue(field.parent, this.context)[field.id()];\n                    if (rd) { valuesFromRouteData = rd.list(); } // TODO: what if only one?\n                } else if (field instanceof Ro.PropertyMember) {\n                    const obj = field.parent as Ro.DomainObjectRepresentation;\n                    const props = this.context.getObjectCachedValues(obj.id());\n                    const rd = props[field.id()];\n                    if (rd) { valuesFromRouteData = rd.list(); } // TODO: what if only one?\n                }\n                let vals: Ro.Value[] = [];\n                if (val.isReference() || val.isScalar()) {\n                    vals = new Array<Ro.Value>(val);\n                } else if (val.isList()) { // Should be!\n                    vals = val.list()!;\n                }\n                valuesFromRouteData = valuesFromRouteData || [];\n\n                forEach(vals, v => this.addOrRemoveValue(valuesFromRouteData!, v));\n\n                if (vals[0].isScalar()) { // then all must be scalar\n                    const scalars = map(valuesFromRouteData, v => v.scalar());\n                    return new Ro.Value(scalars);\n                } else { // assumed to be links\n                    const links: Ro.ILink[] = map(valuesFromRouteData, v => ({ href: v.link()!.href(), title: Ro.withUndefined(v.link()!.title()) }));\n                    return new Ro.Value(links.length > 0 ? links : null);\n                }\n            }\n            if (val.isScalar()) {\n                return val;\n            }\n            // reference\n            return this.leanLink(val);\n        }\n\n        if (val.isScalar()) {\n            if (val.isNull()) {\n                return new Ro.Value('');\n            }\n            return val;\n            // TODO: consider these options:\n            //    if (from.value instanceof Date) {\n            //        return new Value((from.value as Date).toISOString());\n            //    }\n\n            //    return new Value(from.value as number | string | boolean);\n        }\n        if (val.isReference()) {\n            return this.leanLink(val);\n        }\n        return null;\n    }\n\n    private leanLink(val: Ro.Value): Ro.Value {\n        return new Ro.Value({ href: val.link()!.href()!, title: val.link()!.title()! });\n    }\n\n    private addOrRemoveValue(valuesFromRouteData: Ro.Value[], val: Ro.Value) {\n        let index: number;\n        let valToAdd: Ro.Value;\n        if (val.isScalar()) {\n            valToAdd = val;\n            index = findIndex(valuesFromRouteData, v => v.scalar() === val.scalar());\n        } else { // Must be reference\n            valToAdd = this.leanLink(val);\n            index = findIndex(valuesFromRouteData, v => v.link()!.href() === valToAdd.link()!.href());\n        }\n        if (index > -1) {\n            valuesFromRouteData.splice(index, 1);\n        } else {\n            valuesFromRouteData.push(valToAdd);\n        }\n    }\n\n    protected setFieldValueInContext(field: Ro.Parameter, val: Ro.Value) {\n        this.context.cacheFieldValue(this.routeData().dialogId!, field.id(), val);\n    }\n\n    protected setPropertyValueinContext(obj: Ro.DomainObjectRepresentation, property: Ro.PropertyMember, urlVal: Ro.Value) {\n        this.context.cachePropertyValue(obj, property, urlVal);\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { Location } from '@angular/common';\nimport { Dictionary } from 'lodash';\nimport forEach from 'lodash-es/forEach';\nimport map from 'lodash-es/map';\nimport reduce from 'lodash-es/reduce';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\n\nexport class Action extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'ac';\n    override fullCommand = Usermessages.actionCommand;\n\n    override helpText = Usermessages.actionHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 2;\n\n    isAvailableInCurrentContext(): boolean {\n        return (this.isMenu() || this.isObject() || this.isForm()) && !this.isDialog() && !this.isEdit(); // TODO add list\n    }\n\n    doExecute(args: string | null, _chained: boolean, _result: CommandResult): Promise<CommandResult> {\n        const match = this.argumentAsString(args, 0);\n        const details = this.argumentAsString(args, 1, true);\n        if (details && details !== '?') {\n            return this.returnResult('', Usermessages.mustbeQuestionMark);\n        }\n        if (this.isObject()) {\n            return this.getObject().then(obj => this.processActions(match, obj.actionMembers(), details));\n\n        } else if (this.isMenu()) {\n            return this.getMenu().then(menu => this.processActions(match, menu.actionMembers(), details));\n        }\n        // TODO: handle list - CCAs\n        return Promise.reject('TODO: handle list - CCAs');\n    }\n\n    private processActions(match: string | undefined, actionsMap: Dictionary<Ro.ActionMember>, details: string | undefined): Promise<CommandResult> {\n        let actions = map(actionsMap, action => action);\n        if (actions.length === 0) {\n            return this.returnResult('', Usermessages.noActionsAvailable);\n        }\n        if (match) {\n            actions = this.matchFriendlyNameAndOrMenuPath(actions, match);\n        }\n        switch (actions.length) {\n            case 0:\n                return this.returnResult('', Usermessages.doesNotMatchActions(match));\n            case 1: {\n                const action = actions[0];\n                if (details) {\n                    return this.returnResult('', this.renderActionDetails(action));\n                } else if (action.disabledReason()) {\n                    return this.returnResult('', this.disabledAction(action));\n                } else {\n                    return this.openActionDialog(action);\n                }\n            }\n            default: {\n                let output = match ? Usermessages.matchingActions : Usermessages.actionsMessage;\n                output += this.listActions(actions);\n                return this.returnResult('', output);\n            }\n        }\n    }\n\n    private disabledAction(action: Ro.ActionMember) {\n        return `${Usermessages.actionPrefix} ${action.extensions().friendlyName()} ${Usermessages.isDisabled} ${action.disabledReason()}`;\n    }\n\n    private listActions(actions: Ro.ActionMember[]): string {\n        return reduce(actions,\n            (s, t) => {\n                const menupath = t.extensions().menuPath() ? `${t.extensions().menuPath()} - ` : '';\n                const disabled = t.disabledReason() ? ` (${Usermessages.disabledPrefix} ${t.disabledReason()})` : '';\n                return s + menupath + t.extensions().friendlyName() + disabled + '\\n';\n            },\n            '');\n    }\n\n    private openActionDialog(action: Ro.ActionMember): Promise<CommandResult> {\n\n        return this.context.getInvokableAction(action).\n            then(invokable => {\n\n                this.context.clearDialogCachedValues();\n                this.urlManager.setDialog(action.actionId());\n                forEach(invokable.parameters(), p => this.setFieldValueInContext(p, p.default()));\n\n                return this.returnResult('', '');\n            });\n    }\n\n    private renderActionDetails(action: Ro.ActionMember) {\n        return `${Usermessages.descriptionPrefix} ${action.extensions().friendlyName()}\\n${action.extensions().description() || Usermessages.noDescription}`;\n    }\n}\n","import { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Back extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'ba';\n    override fullCommand = Usermessages.backCommand;\n    override helpText = Usermessages.backHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return true;\n    }\n\n    doExecute(_args: string | null, _chained: boolean): Promise<CommandResult> {\n        return this.returnResult('', '', () => this.location.back());\n    }\n}\n","import { InteractionMode } from '@nakedobjects/services';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Msg from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Cancel extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'ca';\n    override fullCommand = Msg.cancelCommand;\n    override helpText = Msg.cancelHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isDialog() || this.isEdit();\n    }\n\n    doExecute(_args: string | null, _chained: boolean): Promise<CommandResult> {\n        if (this.isEdit()) {\n            return this.returnResult('', '', () => this.urlManager.setInteractionMode(InteractionMode.View));\n        }\n\n        if (this.isDialog()) {\n            return this.returnResult('', '', () => this.urlManager.closeDialogReplaceHistory(this.routeData().dialogId!));\n        }\n\n        return this.returnResult('', 'some sort of error'); // todo\n    }\n}\n","import * as Models from '@nakedobjects/restful-objects';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Clipboard extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'cl';\n    override fullCommand = Usermessages.clipboardCommand;\n    override helpText = Usermessages.clipboardHelp;\n\n    protected override minArguments = 1;\n    protected override maxArguments = 1;\n\n    isAvailableInCurrentContext(): boolean {\n        return true;\n    }\n\n    doExecute(args: string | null, _chained: boolean): Promise<CommandResult> {\n        const sub = this.argumentAsString(args, 0);\n\n        if (sub === undefined) {\n            return this.returnResult('', Usermessages.clipboardError);\n        }\n\n        if (Usermessages.clipboardCopy.indexOf(sub) === 0) {\n            return this.copy();\n        } else if (Usermessages.clipboardShow.indexOf(sub) === 0) {\n            return this.show();\n        } else if (Usermessages.clipboardGo.indexOf(sub) === 0) {\n            return this.go();\n        } else if (Usermessages.clipboardDiscard.indexOf(sub) === 0) {\n            return this.discard();\n        } else {\n            return this.returnResult('', Usermessages.clipboardError);\n        }\n    }\n\n    private copy(): Promise<CommandResult> {\n        if (!this.isObject()) {\n            return this.returnResult('', Usermessages.clipboardContextError);\n        }\n        return this.getObject().then(obj => {\n            this.ciceroContext.ciceroClipboard = obj;\n            const label = Models.typePlusTitle(obj);\n            return this.returnResult('', Usermessages.clipboardContents(label));\n        });\n    }\n\n    private show(): Promise<CommandResult> {\n        if (this.ciceroContext.ciceroClipboard) {\n            const label = Models.typePlusTitle(this.ciceroContext.ciceroClipboard);\n            return this.returnResult('', Usermessages.clipboardContents(label));\n        } else {\n\n            return this.returnResult('', Usermessages.clipboardEmpty);\n        }\n    }\n\n    private go(): Promise<CommandResult> {\n        const link = this.ciceroContext.ciceroClipboard && this.ciceroContext.ciceroClipboard.selfLink();\n        if (link) {\n            return this.returnResult('', '', () => this.urlManager.setItem(link));\n        } else {\n            return this.show();\n        }\n    }\n\n    private discard(): Promise<CommandResult> {\n        this.ciceroContext.ciceroClipboard = null;\n        return this.show();\n    }\n}\n","import { InteractionMode } from '@nakedobjects/services';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Edit extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'ed';\n    override fullCommand = Usermessages.editCommand;\n    override helpText = Usermessages.editHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isObject() && !this.isEdit();\n    }\n\n    doExecute(args: string | null, chained: boolean): Promise<CommandResult> {\n        if (chained) {\n            // eslint-disable-next-line @typescript-eslint/no-empty-function\n            return this.returnResult('', this.mayNotBeChained(), () => { }, true);\n        }\n        const newState = () => {\n            this.context.clearObjectCachedValues();\n            this.urlManager.setInteractionMode(InteractionMode.Edit);\n        };\n\n        return this.returnResult('', '', newState);\n    }\n}\n","import * as Models from '@nakedobjects/restful-objects';\nimport { DateTime } from 'luxon';\nimport { ILocalFilter } from '@nakedobjects/services';\nimport * as Msg from './user-messages';\nimport { fixedDateFormat } from '@nakedobjects/services';\n\n\nfunction isInteger(value: number) {\n    return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n\nfunction getDate(val: string): Date | null {\n    const dt1 = DateTime.fromFormat(val, fixedDateFormat);\n    return dt1.isValid ? dt1.toJSDate() : null;\n}\n\nexport function validateNumber(model: Models.IHasExtensions, newValue: number, filter: ILocalFilter): string {\n    const format = model.extensions().format();\n\n    switch (format) {\n        case ('int'):\n            if (!isInteger(newValue)) {\n                return 'Not an integer';\n            }\n    }\n\n    const range = model.extensions().range();\n\n    if (range) {\n        const min = range.min;\n        const max = range.max;\n\n        if (typeof min === 'number' && newValue < min) {\n            return Msg.outOfRange(newValue, min, max, filter);\n        }\n\n        if (typeof max === 'number' && newValue > max) {\n            return Msg.outOfRange(newValue, min, max, filter);\n        }\n    }\n\n    return '';\n}\n\nexport function validateStringFormat(model: Models.IHasExtensions, newValue: string): string {\n\n    const maxLength = model.extensions().maxLength();\n    const pattern = model.extensions().pattern();\n    const len = newValue ? newValue.length : 0;\n\n    if (maxLength && len > maxLength) {\n        return Msg.tooLong;\n    }\n\n    if (pattern) {\n        const regex = new RegExp(pattern);\n        return regex.test(newValue) ? '' : Msg.noPatternMatch;\n    }\n    return '';\n}\n\nexport function validateDateTimeFormat(_model: Models.IHasExtensions, _newValue: string): string {\n    return '';\n}\n\nexport function validateDateFormat(model: Models.IHasExtensions, newValue: Date | string, filter: ILocalFilter): string {\n    const range = model.extensions().range();\n    const newDate = (newValue instanceof Date) ? newValue : getDate(newValue);\n\n    if (range && newDate) {\n        const min = range.min ? getDate(range.min as string) : null;\n        const max = range.max ? getDate(range.max as string) : null;\n\n        if (min && newDate < min) {\n            return Msg.outOfRange(Models.toDateString(newDate), min.toISOString(), max?.toISOString(), filter);\n        }\n\n        if (max && newDate > max) {\n            return Msg.outOfRange(Models.toDateString(newDate), min?.toISOString(), max.toISOString(), filter);\n        }\n    }\n\n    return '';\n}\n\nexport function validateTimeFormat(_model: Models.IHasExtensions, _newValue: string): string {\n    return '';\n}\n\nexport function validateString(model: Models.IHasExtensions, newValue: string, filter: ILocalFilter): string {\n    const format = model.extensions().format();\n\n    switch (format) {\n        case ('string'):\n            return validateStringFormat(model, newValue as string);\n        case ('date-time'):\n            return validateDateTimeFormat(model, newValue);\n        case ('date'):\n            return validateDateFormat(model, newValue, filter);\n        case ('time'):\n            return validateTimeFormat(model, newValue);\n        default:\n            return '';\n    }\n}\n\nexport function validateMandatory(model: Models.IHasExtensions, viewValue: string): string {\n    // first check\n    const isMandatory = !model.extensions().optional();\n\n    if (isMandatory && (viewValue === '' || viewValue == null)) {\n        return Msg.mandatory;\n    }\n\n    return '';\n}\n\nexport function validateMandatoryAgainstType(model: Models.IHasExtensions, viewValue: string, filter: ILocalFilter): string {\n\n    // check type\n    const returnType = model.extensions().returnType();\n\n    switch (returnType) {\n        case ('number'): {\n            const valueAsNumber = parseFloat(viewValue);\n            if (Number.isFinite(valueAsNumber)) {\n                return validateNumber(model, valueAsNumber, filter);\n            }\n            return Msg.notANumber;\n        }\n        case ('string'):\n            return validateString(model, viewValue, filter);\n        case ('boolean'):\n            return '';\n        default:\n            return '';\n    }\n}\n\nexport function validateDate(newValue: string, validInputFormats: string[]) {\n\n    for (const f of validInputFormats) {\n        const dt = DateTime.fromFormat(newValue, f);\n        if (dt.isValid) {\n            return dt;\n        }\n    }\n\n    return null;\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { Dictionary } from 'lodash';\nimport forEach from 'lodash-es/forEach';\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 mapKeys from 'lodash-es/mapKeys';\nimport mapValues from 'lodash-es/mapValues';\nimport reduce from 'lodash-es/reduce';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Commandresult from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { validateDate, validateMandatory, validateMandatoryAgainstType } from '../validate';\nimport { supportedDateFormats } from '@nakedobjects/services';\nimport { Location } from '@angular/common';\n\nexport class Enter extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'en';\n    override fullCommand = Usermessages.enterCommand;\n    override helpText = Usermessages.enterHelp;\n    protected override minArguments = 2;\n    protected override maxArguments = 2;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isDialog() || this.isEdit() || this.isTransient() || this.isForm();\n    }\n\n    doExecute(args: string | null, _chained: boolean): Promise<CommandResult> {\n        const fieldName = this.argumentAsString(args, 0);\n        const fieldEntry = this.argumentAsString(args, 1, false, false);\n\n        if (fieldName === undefined) {\n            return this.returnResult('', Usermessages.doesNotMatchDialog(fieldName));\n        }\n\n        if (fieldEntry === undefined) {\n            return this.returnResult('', Usermessages.tooFewArguments);\n        }\n\n        if (this.isDialog()) {\n            return this.fieldEntryForDialog(fieldName, fieldEntry);\n        } else {\n            return this.fieldEntryForEdit(fieldName, fieldEntry);\n        }\n    }\n\n    private fieldEntryForEdit(fieldName: string | undefined, fieldEntry: string) {\n        return this.getObject().then(obj => {\n            const fields = this.matchingProperties(obj, fieldName);\n\n            switch (fields.length) {\n                case 0: {\n                    const s = Usermessages.doesNotMatchProperties(fieldName);\n                    return this.returnResult('', s);\n                }\n                case 1: {\n                    const field = fields[0];\n                    if (fieldEntry === '?') {\n                        // TODO: does this work in edit mode i.e. show entered value\n                        const details = this.renderFieldDetails(field, field.value());\n                        return this.returnResult('', details);\n                    } else {\n                        this.findAndClearAnyDependentFields(field.id(), obj.propertyMembers());\n                        return this.setField(field, fieldEntry);\n                    }\n                }\n                default: {\n                    const ss = reduce(fields, (str, prop) => str + prop.extensions().friendlyName() + '\\n', `${fieldName} ${Usermessages.matchesMultiple}`);\n                    return this.returnResult('', ss);\n                }\n            }\n        });\n    }\n\n    private isDependentField(fieldName: string, possibleDependent: Ro.IField): boolean {\n        const promptLink = possibleDependent.promptLink();\n\n        if (promptLink) {\n            const pArgs = promptLink.arguments();\n            const argNames = keys(pArgs);\n\n            return (argNames.indexOf(fieldName.toLowerCase()) >= 0);\n        }\n        return false;\n    }\n\n    private findAndClearAnyDependentFields(changingField: string, allFields: Dictionary<Ro.IField>) {\n\n        forEach(allFields, field => {\n            if (this.isDependentField(changingField, field)) {\n                if (!this.isMultiChoiceField(field)) {\n                    this.clearField(field);\n                }\n            }\n        });\n    }\n\n    private fieldEntryForDialog(fieldName: string, fieldEntry: string) {\n        return this.getActionForCurrentDialog().then(action => {\n            //\n            let params = map(action.parameters(), param => param);\n            params = this.matchFriendlyNameAndOrMenuPath(params, fieldName);\n            switch (params.length) {\n                case 0:\n                    return this.returnResult('', Usermessages.doesNotMatchDialog(fieldName));\n                case 1:\n                    if (fieldEntry === '?') {\n                        const p = params[0];\n                        const value = Commandresult.getParametersAndCurrentValue(p.parent, this.context)[p.id()];\n                        const s = this.renderFieldDetails(p, value);\n                        return this.returnResult('', s);\n                    } else {\n                        this.findAndClearAnyDependentFields(fieldName, action.parameters());\n                        return this.setField(params[0], fieldEntry);\n                    }\n                default:\n                    return this.returnResult('', `${Usermessages.multipleFieldMatches} ${fieldName}`); // TODO: list them\n            }\n        });\n    }\n\n    private clearField(field: Ro.IField): void {\n        this.context.cacheFieldValue(this.routeData().dialogId!, field.id(), new Ro.Value(null));\n\n        if (field instanceof Ro.Parameter) {\n            this.context.cacheFieldValue(this.routeData().dialogId!, field.id(), new Ro.Value(null));\n        } else if (field instanceof Ro.PropertyMember) {\n            const parent = field.parent as Ro.DomainObjectRepresentation;\n            this.context.cachePropertyValue(parent, field, new Ro.Value(null));\n        }\n    }\n\n    private setField(field: Ro.IField, fieldEntry: string) {\n        if (field instanceof Ro.PropertyMember && field.disabledReason()) {\n            return this.returnResult('', `${field.extensions().friendlyName()} ${Usermessages.isNotModifiable}`);\n        }\n        const entryType = field.entryType();\n        switch (entryType) {\n            case Ro.EntryType.FreeForm:\n                return this.handleFreeForm(field, fieldEntry);\n            case Ro.EntryType.AutoComplete:\n                return this.handleAutoComplete(field, fieldEntry);\n            case Ro.EntryType.Choices:\n                return this.handleChoices(field, fieldEntry);\n            case Ro.EntryType.MultipleChoices:\n                return this.handleChoices(field, fieldEntry);\n            case Ro.EntryType.ConditionalChoices:\n                return this.handleConditionalChoices(field, false, fieldEntry);\n            case Ro.EntryType.MultipleConditionalChoices:\n                return this.handleConditionalChoices(field, false, fieldEntry);\n            default:\n                return this.returnResult('', Usermessages.invalidCase);\n        }\n    }\n\n    private handleFreeForm(field: Ro.IField, fieldEntry: string) {\n        if (field.isScalar()) {\n\n            const mandatoryError = validateMandatory(field, fieldEntry);\n\n            if (mandatoryError) {\n                return this.returnResult('', this.validationMessage(mandatoryError, new Ro.Value(''), field.extensions().friendlyName()));\n            }\n\n            let value = new Ro.Value(fieldEntry);\n            if (Ro.isDateOrDateTime(field)) {\n                const dt = validateDate(fieldEntry, supportedDateFormats);\n\n                if (dt) {\n                    value = new Ro.Value(Ro.toDateString(dt.toJSDate()));\n                }\n            }\n\n            // if optional but empty always valid\n            if (fieldEntry != null && fieldEntry !== '') {\n\n                const remoteMask = field.extensions().mask();\n                const localFilter = this.mask.toLocalFilter(remoteMask, field.extensions().format()!);\n\n                const validateError = validateMandatoryAgainstType(field, fieldEntry, localFilter);\n\n                if (validateError) {\n                    return this.returnResult('', this.validationMessage(validateError, value, field.extensions().friendlyName()));\n                }\n            }\n\n            this.setFieldValue(field, value);\n            return this.returnResult('', '', () => this.urlManager.triggerPageReloadByFlippingReloadFlagInUrl());\n        } else {\n            return this.handleReferenceField(field, fieldEntry);\n        }\n    }\n\n    private setFieldValue(field: Ro.IField, value: Ro.Value): void {\n        const urlVal = this.valueForUrl(value, field);\n        if (urlVal != null) {\n            if (field instanceof Ro.Parameter) {\n                this.setFieldValueInContext(field, urlVal);\n            } else if (field instanceof Ro.PropertyMember) {\n                const parent = field.parent;\n                if (parent instanceof Ro.DomainObjectRepresentation) {\n                    this.setPropertyValueinContext(parent, field, urlVal);\n                }\n            }\n        }\n    }\n\n    private handleReferenceField(field: Ro.IField, fieldEntry: string) {\n        if (this.isPaste(fieldEntry)) {\n            return this.handleClipboard(field);\n        } else {\n            return this.returnResult('', Usermessages.invalidRefEntry);\n        }\n    }\n\n    private isPaste(fieldEntry: string) {\n        return 'paste'.indexOf(fieldEntry) === 0;\n    }\n\n    private handleClipboard(field: Ro.IField) {\n        const ref = this.ciceroContext.ciceroClipboard;\n        if (!ref) {\n            return this.returnResult('', Usermessages.emptyClipboard);\n        }\n        const paramType = field.extensions().returnType()!;\n        const refType = ref.domainType();\n        return this.context.isSubTypeOf(refType, paramType).then(isSubType => {\n            if (isSubType) {\n                const obj = this.ciceroContext.ciceroClipboard;\n                const selfLink = obj.selfLink();\n                // Need to add a title to the SelfLink as not there by default\n                selfLink.setTitle(obj.title());\n                const value = new Ro.Value(selfLink);\n                this.setFieldValue(field, value);\n                return this.returnResult('', '', () => this.urlManager.triggerPageReloadByFlippingReloadFlagInUrl());\n            } else {\n                return this.returnResult('', Usermessages.incompatibleClipboard);\n            }\n        });\n    }\n\n    private handleAutoComplete(field: Ro.IField, fieldEntry: string) {\n        // TODO: Need to check that the minimum number of characters has been entered or fail validation\n        if (!field.isScalar() && this.isPaste(fieldEntry)) {\n            return this.handleClipboard(field);\n        } else {\n            return this.context.autoComplete(field, field.id(), () => ({}), fieldEntry).then((choices: Dictionary<Ro.Value>) => {\n                const matches = this.findMatchingChoicesForRef(choices, fieldEntry);\n                const allFields = Commandresult.getFields(field);\n                return this.switchOnMatches(field, allFields, fieldEntry, matches);\n            });\n        }\n    }\n\n    private handleChoices(field: Ro.IField, fieldEntry: string) {\n        let matches: Ro.Value[];\n        if (field.isScalar()) {\n            matches = this.findMatchingChoicesForScalar(field.choices(), fieldEntry);\n        } else {\n            matches = this.findMatchingChoicesForRef(field.choices(), fieldEntry);\n        }\n        const allFields = Commandresult.getFields(field);\n        return this.switchOnMatches(field, allFields, fieldEntry, matches);\n    }\n\n    private updateDependentField(field: Ro.IField): Promise<CommandResult> {\n        return this.handleConditionalChoices(field, true);\n    }\n\n    private setFieldAndCheckDependencies(field: Ro.IField, allFields: Ro.IField[], match: Ro.Value): Promise<CommandResult[]> {\n        this.setFieldValue(field, match);\n        const promises: Promise<CommandResult>[] = [];\n\n        // find any dependent multi choice fields and update\n        // non multi choice we will have just cleared\n        forEach(allFields, depField => {\n            if (this.isMultiChoiceField(depField)) {\n                if (this.isDependentField(field.id().toLowerCase(), depField)) {\n                    promises.push(this.updateDependentField(depField));\n                }\n            }\n        });\n\n        promises.push(this.returnResult('', '', () => this.urlManager.triggerPageReloadByFlippingReloadFlagInUrl()));\n        return Promise.all(promises);\n    }\n\n    private switchOnMatches(field: Ro.IField, allFields: Ro.IField[], fieldEntry: string, matches: Ro.Value[]) {\n        switch (matches.length) {\n            case 0:\n                return this.returnResult('', Usermessages.noMatch(fieldEntry));\n            case 1:\n                // TODO fix \"!\"\"\n                return this.setFieldAndCheckDependencies(field, allFields, matches[0]).then((crs: CommandResult[]) => last(crs)!);\n            default: {\n                let msg = Usermessages.multipleMatches;\n                forEach(matches, m => msg += m.toString() + '\\n');\n                return this.returnResult('', msg);\n            }\n        }\n    }\n\n    private getPropertiesAndCurrentValue(obj: Ro.DomainObjectRepresentation): Dictionary<Ro.Value> {\n        const props = obj.propertyMembers();\n        const values = mapValues(props, p => p.value());\n        const modifiedProps = this.context.getObjectCachedValues(obj.id());\n\n        forEach(values, (v, k) => {\n            const newValue = modifiedProps[k];\n            if (newValue) {\n                values[k] = newValue;\n            }\n        });\n        return mapKeys(values, (v, k) => k.toLowerCase());\n    }\n\n    private updateOnMatches(field: Ro.IField, allFields: Ro.IField[], fieldEntry: string, matches: Ro.Value[]) {\n        switch (matches.length) {\n            case 0:\n            case 1: {\n                const match = matches.length === 0 ? new Ro.Value(null) : matches[0];\n                // TODO fix \"!\"\"\n                return this.setFieldAndCheckDependencies(field, allFields, match).then((crs: CommandResult[]) => last(crs)!);\n            }\n            default:\n                // shouldn't happen - ignore\n                return this.returnResult('', '');\n        }\n    }\n\n    private handleConditionalChoices(field: Ro.IField, updating: boolean, fieldEntry?: string, ) {\n        let enteredFields: Dictionary<Ro.Value>;\n        const allFields = Commandresult.getFields(field);\n\n        if (field instanceof Ro.Parameter) {\n            enteredFields = Commandresult.getParametersAndCurrentValue(field.parent, this.context);\n        }\n\n        if (field instanceof Ro.PropertyMember) {\n            enteredFields = this.getPropertiesAndCurrentValue(field.parent as Ro.DomainObjectRepresentation);\n        }\n\n        // TODO fix this any cast\n        const args = fromPairs(map(field.promptLink()!.arguments()!, (v: Ro.IValue, key: string) => [key, new Ro.Value(v.value)])) as Dictionary<Ro.Value>;\n        forEach(keys(args), key => args[key] = enteredFields[key]);\n\n        let fieldEntryOrExistingValue: string;\n\n        if (fieldEntry === undefined) {\n            const def = args[field.id()];\n            fieldEntryOrExistingValue = def ? def.toValueString() : '';\n        } else {\n            fieldEntryOrExistingValue = fieldEntry;\n        }\n\n        return this.context.conditionalChoices(field, field.id(), () => ({}), args).then((choices: Dictionary<Ro.Value>) => {\n            const matches = this.findMatchingChoicesForRef(choices, fieldEntryOrExistingValue);\n\n            if (updating) {\n                return this.updateOnMatches(field, allFields, fieldEntryOrExistingValue, matches);\n            }\n\n            return this.switchOnMatches(field, allFields, fieldEntryOrExistingValue, matches);\n        });\n    }\n\n    private renderFieldDetails(field: Ro.IField, _value: Ro.Value): string {\n\n        const fieldName = Usermessages.fieldName(field.extensions().friendlyName());\n        const desc = field.extensions().description();\n        const descAndPrefix = desc ? `\\n${Usermessages.descriptionFieldPrefix} ${desc}` : '';\n        const types = `\\n${Usermessages.typePrefix} ${Ro.friendlyTypeName(field.extensions().returnType()!)}`;\n\n        let postFix = '';\n        if (field instanceof Ro.PropertyMember && field.disabledReason()) {\n            postFix = `\\n${Usermessages.unModifiablePrefix(field.disabledReason())}`;\n        } else {\n            postFix = field.extensions().optional() ? `\\n${Usermessages.optional}` : `\\n${Usermessages.mandatory}`;\n            const choices = field.choices();\n            if (choices) {\n                const label = `\\n${Usermessages.choices}: `;\n                const labelAndChoices = reduce(choices, (ss, cho) => ss + cho + ' ', label);\n                postFix = `${postFix}${labelAndChoices}`;\n            }\n        }\n        return `${fieldName}${descAndPrefix}${types}${postFix}`;\n    }\n}\n","import { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Forward extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'fo';\n    override fullCommand = Usermessages.forwardCommand;\n    override helpText = Usermessages.forwardHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return true;\n    }\n\n    doExecute(_args: string | null, _chained: boolean): Promise<CommandResult> {\n        return this.returnResult('', null, () => this.location.forward());\n    }\n}\n","import { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Gemini extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'ge';\n    override fullCommand = Usermessages.geminiCommand;\n    override helpText = Usermessages.geminiHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return true;\n    }\n\n    doExecute(_args: string | null, _chained: boolean): Promise<CommandResult> {\n        return this.returnResult('', '', () => this.urlManager.gemini());\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { CollectionViewState } from '@nakedobjects/services';\nimport filter from 'lodash-es/filter';\nimport reduce from 'lodash-es/reduce';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\nimport { messageFrom } from '../helpers-components';\n\nexport class Goto extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'go';\n    override fullCommand = Usermessages.gotoCommand;\n    override helpText = Usermessages.gotoHelp;\n    protected override minArguments = 1;\n    protected override maxArguments = 1;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isObject() || this.isList();\n    }\n\n    doExecute(args: string | null, _chained: boolean): Promise<CommandResult> {\n        const arg0 = this.argumentAsString(args, 0);\n\n        if (arg0 === undefined) {\n            return this.returnResult('', Usermessages.outOfItemRange(undefined));\n        }\n\n        if (this.isList()) {\n            let itemNo: number;\n            try {\n                itemNo = this.parseInt(arg0);\n            } catch (e) {\n                return this.returnResult('', messageFrom(e));\n            }\n            return this.getList().then((list: Ro.ListRepresentation) => this.attemptGotoLinkNumber(itemNo, list.value()));\n        }\n        if ((this.isObject())) {\n\n            return this.getObject().then((obj: Ro.DomainObjectRepresentation) => {\n                if (this.isCollection()) {\n                    const itemNo = this.argumentAsNumber(args, 0)!;\n                    const openCollIds = this.ciceroRenderer.openCollectionIds(this.routeData());\n                    const coll = obj.collectionMember(openCollIds[0]);\n                    // Safe to assume always a List (Cicero doesn't support tables as such & must be open)\n                    return this.context.getCollectionDetails(coll, CollectionViewState.List, false).then(details => this.attemptGotoLinkNumber(itemNo, details.value()!));\n\n                } else {\n                    const matchingProps = this.matchingProperties(obj, arg0);\n                    const matchingRefProps = filter(matchingProps, p => !p.isScalar());\n                    const matchingColls = this.matchingCollections(obj, arg0);\n\n                    switch (matchingRefProps.length + matchingColls.length) {\n                        case 0:\n\n                            return this.returnResult('', Usermessages.noRefFieldMatch(arg0));\n                        case 1:\n                            // TODO: Check for any empty reference\n                            if (matchingRefProps.length > 0) {\n                                const link = matchingRefProps[0].value().link();\n                                if (link) {\n                                    this.urlManager.setItem(link);\n                                }\n\n                                return this.returnResult('', '');\n\n                            } else { // Must be collection\n\n                                return this.returnResult('', '', () => this.openCollection(matchingColls[0]));\n                            }\n\n                        default: {\n                            const props = reduce(matchingRefProps, (str, prop) => str + prop.extensions().friendlyName() + '\\n', '');\n                            const colls = reduce(matchingColls, (str, coll) => str + coll.extensions().friendlyName() + '\\n', '');\n                            const s = `Multiple matches for ${arg0}:\\n${props}${colls}`;\n                            return this.returnResult('', s);\n                        }\n                    }\n\n                }\n            });\n        }\n        // should never happen\n        return this.returnResult('', Usermessages.commandNotAvailable(this.fullCommand));\n    }\n\n    private attemptGotoLinkNumber(itemNo: number, links: Ro.Link[]): Promise<CommandResult> {\n        if (itemNo < 1 || itemNo > links.length) {\n            return this.returnResult('', Usermessages.outOfItemRange(itemNo));\n        } else {\n            const link = links[itemNo - 1]; // On UI, first item is '1'\n            return this.returnResult('', '', () => this.urlManager.setItem(link));\n        }\n    }\n\n    private openCollection(collection: Ro.CollectionMember): void {\n        this.closeAnyOpenCollections();\n        this.urlManager.setCollectionMemberState(collection.collectionId(), CollectionViewState.List);\n    }\n}\n","import { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\nimport { messageFrom } from '../helpers-components';\n\nexport class Help extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'he';\n    override fullCommand = Usermessages.helpCommand;\n    override helpText = Usermessages.helpHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 1;\n\n    isAvailableInCurrentContext(): boolean {\n        return true;\n    }\n\n    doExecute(args: string | null, _chained: boolean): Promise<CommandResult> {\n        const arg = this.argumentAsString(args, 0);\n        if (!arg) {\n            return this.returnResult('', Usermessages.basicHelp);\n        } else if (arg === '?') {\n            const commands = this.commandFactory.allCommandsForCurrentContext();\n            return this.returnResult('', commands);\n        } else {\n            try {\n                const c = this.commandFactory.getCommand(arg);\n                return this.returnResult('', `${c.fullCommand} command:\\n${c.helpText}`);\n            } catch (e) {\n                return this.returnResult('', messageFrom(e));\n            }\n        }\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport filter from 'lodash-es/filter';\nimport reduce from 'lodash-es/reduce';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Menu extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'me';\n    override fullCommand = Usermessages.menuCommand;\n    override helpText = Usermessages.menuHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 1;\n\n    isAvailableInCurrentContext(): boolean {\n        return true;\n    }\n\n    doExecute(args: string | null, _chained: boolean): Promise<CommandResult> {\n        const name = this.argumentAsString(args, 0);\n        return this.context.getMenus()\n            .then((menus: Ro.MenusRepresentation) => {\n                let links = menus.value();\n                if (name) {\n                    // TODO: do multi-clause match\n                    const exactMatches = filter(links, t => (t.title() || '').toLowerCase() === name);\n                    const partialMatches = filter(links, t => (t.title() || '').toLowerCase().indexOf(name) > -1);\n                    links = exactMatches.length === 1 ? exactMatches : partialMatches;\n                }\n                switch (links.length) {\n                    case 0:\n                        return this.returnResult('', Usermessages.doesNotMatchMenu(name));\n                    case 1: {\n                        const menuId = links[0].rel()?.parms[0].value;\n                        this.urlManager.setHome();\n                        this.urlManager.clearUrlState(1);\n                        return this.returnResult('', '', () => { if (menuId) { this.urlManager.setMenu(menuId);}});\n                    }\n                    default: {\n                        const label = name ? `${Usermessages.matchingMenus}\\n` : `${Usermessages.allMenus}\\n`;\n                        const ss = reduce(links, (s, t) => s + t.title() + '\\n', label);\n                        return this.returnResult('', ss);\n                    }\n                }\n            });\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { ErrorWrapper } from '@nakedobjects/services';\nimport { Dictionary } from 'lodash';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult, getParametersAndCurrentValue } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class OK extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'ok';\n    override fullCommand = Usermessages.okCommand;\n    override helpText = Usermessages.okHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isDialog();\n    }\n\n    doExecute(args: string | null, chained: boolean): Promise<CommandResult> {\n        return this.getActionForCurrentDialog().then((action: Ro.ActionRepresentation | Ro.InvokableActionMember) => {\n\n            if (chained && action.isNotQueryOnly()) {\n                // eslint-disable-next-line @typescript-eslint/no-empty-function\n                return this.returnResult('', this.mayNotBeChained(Usermessages.queryOnlyRider), () => { }, true);\n            }\n\n            let fieldMap: Dictionary<Ro.Value>;\n            if (this.isForm()) {\n                const obj = action.parent as Ro.DomainObjectRepresentation;\n                fieldMap = this.context.getObjectCachedValues(obj.id()); // Props passed in as pseudo-params to action\n            } else {\n                fieldMap = getParametersAndCurrentValue(action, this.context);\n            }\n\n            return this.context.invokeAction(action, fieldMap).then((_result: Ro.ActionResultRepresentation) => {\n\n                return this.returnResult('', null, () => this.urlManager.closeDialogReplaceHistory(this.routeData().dialogId!));\n\n            }).catch((reject: ErrorWrapper) => {\n                if (reject.error instanceof Ro.ErrorMap) {\n                    const paramFriendlyName = (paramId: string) => Ro.friendlyNameForParam(action, paramId);\n                    return this.handleErrorResponse(reject.error as Ro.ErrorMap, paramFriendlyName);\n                }\n                return Promise.reject(reject);\n            });\n        });\n    }\n}\n","import { CollectionViewState } from '@nakedobjects/services';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Page extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'pa';\n    override fullCommand = Usermessages.pageCommand;\n    override helpText = Usermessages.pageHelp;\n    protected override minArguments = 1;\n    protected override maxArguments = 1;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isList();\n    }\n\n    doExecute(args: string | null, _chained: boolean): Promise<CommandResult> {\n        const arg = this.argumentAsString(args, 0);\n        if (arg === undefined) {\n            return this.returnResult('', Usermessages.pageArgumentWrong);\n        }\n\n        return this.getList().then(listRep => {\n            const paginationData = listRep.pagination();\n\n            if (!paginationData) {\n                return this.returnResult('', Usermessages.cannotPage);\n            }\n\n            const numPages = paginationData.numPages;\n            const page = this.routeData().page;\n            if (Usermessages.pageFirst.indexOf(arg) === 0) {\n                return this.returnResult(null, null, () => this.setPage(1));\n            } else if (Usermessages.pagePrevious.indexOf(arg) === 0) {\n                if (page === 1) {\n                    return this.returnResult('', Usermessages.alreadyOnFirst);\n                } else {\n                    return this.returnResult(null, null, () => this.setPage(page! - 1));\n                }\n            } else if (Usermessages.pageNext.indexOf(arg) === 0) {\n                if (page === numPages) {\n                    return this.returnResult('', Usermessages.alreadyOnLast);\n                } else {\n                    return this.returnResult(null, null, () => this.setPage(page! + 1));\n                }\n            } else if (Usermessages.pageLast.indexOf(arg) === 0) {\n                return this.returnResult(null, null, () => this.setPage(numPages));\n            } else {\n                const number = parseInt(arg, 10);\n                if (isNaN(number)) {\n                    return this.returnResult('', Usermessages.pageArgumentWrong);\n                }\n                if (number < 1 || number > numPages) {\n                    return this.returnResult('', Usermessages.pageNumberWrong(numPages));\n                }\n                return this.returnResult(null, null, () => this.setPage(number));\n            }\n        });\n    }\n\n    private setPage(page: number) {\n        const pageSize = this.routeData().pageSize;\n        this.urlManager.setListPaging(page, pageSize!, CollectionViewState.List);\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Reload extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 're';\n    override fullCommand = Usermessages.reloadCommand;\n    override helpText = Usermessages.reloadHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isObject() || this.isList();\n    }\n\n    doExecute(_args: string | null, _chained: boolean): Promise<CommandResult> {\n\n        return this.getObject()\n            .then(o => this.context.reloadObject(1, o))\n            .then((_updatedObject: Ro.DomainObjectRepresentation) => this.returnResult('', '', () => this.urlManager.triggerPageReloadByFlippingReloadFlagInUrl()));\n    }\n}\n","import { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Root extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'ro';\n    override fullCommand = Usermessages.rootCommand;\n    override helpText = Usermessages.rootHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isCollection();\n    }\n\n    doExecute(_args: string | null, _chained: boolean): Promise<CommandResult> {\n        return this.returnResult(null, null, () => this.closeAnyOpenCollections());\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { ErrorWrapper, InteractionMode } from '@nakedobjects/services';\nimport { Dictionary } from 'lodash';\nimport forEach from 'lodash-es/forEach';\nimport zipObject from 'lodash-es/zipObject';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Save extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'sa';\n    override fullCommand = Usermessages.saveCommand;\n    override helpText = Usermessages.saveHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isEdit() || this.isTransient();\n    }\n\n    doExecute(args: string | null, chained: boolean): Promise<CommandResult> {\n        if (chained) {\n            // eslint-disable-next-line @typescript-eslint/no-empty-function\n            return this.returnResult('', this.mayNotBeChained(), () => { }, true);\n        }\n        return this.getObject().then((obj: Ro.DomainObjectRepresentation) => {\n            const props = obj.propertyMembers();\n            const newValsFromUrl = this.context.getObjectCachedValues(obj.id());\n            const propIds = new Array<string>();\n            const values = new Array<Ro.Value>();\n            forEach(props,\n                (propMember, propId) => {\n                    if (!propMember.disabledReason()) {\n                        propIds.push(propId);\n                        const newVal = newValsFromUrl[propId];\n                        if (newVal) {\n                            values.push(newVal);\n                        } else if (propMember.value().isNull() &&\n                            propMember.isScalar()) {\n                            values.push(new Ro.Value(''));\n                        } else {\n                            values.push(propMember.value());\n                        }\n                    }\n                });\n            const propMap = zipObject(propIds, values) as Dictionary<Ro.Value>;\n            const mode = obj.extensions().interactionMode();\n            const toSave = mode === 'form' || mode === 'transient';\n            const saveOrUpdate = toSave ? this.context.saveObject : this.context.updateObject;\n\n            return saveOrUpdate(obj, propMap, 1, true).then(() => {\n                return this.returnResult(null, null);\n            }).catch((reject: ErrorWrapper) => {\n                if (reject.error instanceof Ro.ErrorMap) {\n                    const propFriendlyName = (propId: string) => Ro.friendlyNameForProperty(obj, propId);\n                    return this.handleErrorResponse(reject.error, propFriendlyName);\n                }\n                return Promise.reject(reject);\n            });\n        });\n    }\n\n    private handleError(err: Ro.ErrorMap, obj: Ro.DomainObjectRepresentation) {\n        if (err.containsError()) {\n            const propFriendlyName = (propId: string) => Ro.friendlyNameForProperty(obj, propId);\n            this.handleErrorResponse(err, propFriendlyName);\n        } else {\n            this.urlManager.setInteractionMode(InteractionMode.View);\n        }\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Selection extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'se';\n    override fullCommand = Usermessages.selectionCommand;\n    override helpText = Usermessages.selectionHelp;\n    protected override minArguments = 1;\n    protected override maxArguments = 1;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isList();\n    }\n\n    doExecute(_args: string | null, _chained: boolean): Promise<CommandResult> {\n        //    //TODO: Add in sub-commands: Add, Remove, All, Clear & Show\n        //    const arg = this.argumentAsString(args, 0);\n        //    const { start, end } = this.parseRange(arg); //'destructuring'\n        //    this.getList().then(list => this.selectItems(list, start, end)).catch((reject: Ro.ErrorWrapper) => this.error.handleError(reject));\n        return Promise.reject('Not Implemented');\n    }\n\n    private selectItems(list: Ro.ListRepresentation, startNo: number, endNo: number): void {\n        let itemNo: number;\n        for (itemNo = startNo; itemNo <= endNo; itemNo++) {\n            this.urlManager.setItemSelected(itemNo - 1, true, '');\n        }\n    }\n}\n","import * as Ro from '@nakedobjects/restful-objects';\nimport { CollectionViewState } from '@nakedobjects/services';\nimport reduce from 'lodash-es/reduce';\nimport { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\nimport { messageFrom } from '../helpers-components';\n\nexport class Show extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'sh';\n    override fullCommand = Usermessages.showCommand;\n    override helpText = Usermessages.showHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 1;\n\n    isAvailableInCurrentContext(): boolean {\n        return this.isObject() || this.isCollection() || this.isList();\n    }\n\n    doExecute(args: string | null, _chained: boolean): Promise<CommandResult> {\n        if (this.isCollection()) {\n            const arg = this.argumentAsString(args, 0, true);\n            try {\n                const { start, end } = this.parseRange(arg);\n                return this.getObject().then(obj => {\n                    const openCollIds = this.ciceroRenderer.openCollectionIds(this.routeData());\n                    const coll = obj.collectionMember(openCollIds[0]);\n                    return this.renderCollectionItems(coll, start, end);\n                });\n            } catch (e1) {\n                return this.returnResult('', messageFrom(e1));\n            }\n        } else if (this.isList()) {\n            const arg = this.argumentAsString(args, 0, true);\n            try {\n                const { start, end } = this.parseRange(arg);\n                return this.getList().then(list => this.renderItems(list, start, end));\n            } catch (e2) {\n                return this.returnResult('', messageFrom(e2));\n            }\n        } else if (this.isObject()) {\n            const fieldName = this.argumentAsString(args, 0);\n            return this.getObject().then((obj: Ro.DomainObjectRepresentation) => {\n                const props = this.matchingProperties(obj, fieldName);\n                const colls = this.matchingCollections(obj, fieldName);\n                // TODO -  include these\n                let s: string;\n                switch (props.length + colls.length) {\n                    case 0:\n                        s = fieldName ? Usermessages.doesNotMatch(fieldName) : Usermessages.noVisible;\n                        break;\n                    case 1:\n                        s = props.length > 0 ? this.renderPropNameAndValue(props[0]) : this.ciceroRenderer.renderCollectionNameAndSize(colls[0]);\n                        break;\n                    default:\n                        s = reduce(props, (str, prop) => str + this.renderPropNameAndValue(prop), '');\n                        s += reduce(colls, (str, coll) => str + this.ciceroRenderer.renderCollectionNameAndSize(coll), '');\n                }\n                return this.returnResult('', s);\n            });\n        }\n        throw new Error('unexpected view type');\n    }\n\n    private renderPropNameAndValue(pm: Ro.PropertyMember): string {\n        const name = pm.extensions().friendlyName();\n        let value: string;\n        const parent = pm.parent as Ro.DomainObjectRepresentation;\n        const props = this.context.getObjectCachedValues(parent.id());\n        const modifiedValue = props[pm.id()];\n        if (this.isEdit() && !pm.disabledReason() && modifiedValue) {\n            value = this.ciceroRenderer.renderFieldValue(pm, modifiedValue, this.mask) + ` (${Usermessages.modified})`;\n        } else {\n            value = this.ciceroRenderer.renderFieldValue(pm, pm.value(), this.mask);\n        }\n        return `${name}: ${value}\\n`;\n    }\n\n    private renderCollectionItems(coll: Ro.CollectionMember, startNo: number | null, endNo: number | null) {\n        if (coll.value()) {\n            return this.renderItems(coll, startNo, endNo);\n        } else {\n            return this.context.getCollectionDetails(coll, CollectionViewState.List, false).\n                then(details => this.renderItems(details, startNo, endNo));\n        }\n    }\n\n    private renderItems(source: Ro.IHasLinksAsValue, startNo: number | null, endNo: number | null) {\n        // TODO: problem here is that unless collections are in-lined value will be null.\n\n        const links = source.value();\n        if (links == null) {\n            throw new Error('unexpected null value');\n        }\n\n        const max = links.length;\n        if (!startNo) {\n            startNo = 1;\n        }\n        if (!endNo) {\n            endNo = max;\n        }\n        if (startNo > max || endNo > max) {\n\n            return this.returnResult('', Usermessages.highestItem(links.length));\n        }\n        if (startNo > endNo) {\n\n            return this.returnResult('', Usermessages.startHigherEnd);\n        }\n        let output = '';\n        let i: number;\n\n        for (i = startNo; i <= endNo; i++) {\n            output += `${Usermessages.item} ${i}: ${links[i - 1].title()}\\n`;\n        }\n\n        return this.returnResult('', output);\n    }\n}\n","import { Command } from './command';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { UrlManagerService, ContextService, MaskService, ErrorService, ConfigService } from '@nakedobjects/services';\nimport { CommandResult } from './command-result';\nimport * as Usermessages from '../user-messages';\nimport { Location } from '@angular/common';\n\nexport class Where extends Command {\n\n    constructor(urlManager: UrlManagerService,\n        location: Location,\n        commandFactory: CiceroCommandFactoryService,\n        context: ContextService,\n        mask: MaskService,\n        error: ErrorService,\n        configService: ConfigService,\n        ciceroContext: CiceroContextService,\n        ciceroRenderer: CiceroRendererService,\n    ) {\n        super(urlManager, location, commandFactory, context, mask, error, configService, ciceroContext, ciceroRenderer);\n    }\n\n    override shortCommand = 'wh';\n    override fullCommand = Usermessages.whereCommand;\n    override helpText = Usermessages.whereHelp;\n    protected override minArguments = 0;\n    protected override maxArguments = 0;\n\n    isAvailableInCurrentContext(): boolean {\n        return true;\n    }\n\n    doExecute(_args: string | null, _chained: boolean): Promise<CommandResult> {\n        this.urlManager.triggerPageReloadByFlippingReloadFlagInUrl();\n        return this.returnResult(null, null);\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Command } from './cicero-commands/command';\n\n@Injectable()\nexport class CiceroContextService {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ciceroClipboard: any;\n    chainedCommands?: Command[];\n    nextChainedCommand?: Command;\n}\n","import { Injectable } from '@angular/core';\nimport * as Ro from '@nakedobjects/restful-objects';\nimport { CollectionViewState, ConfigService, ContextService, ErrorService, InteractionMode, MaskService, PaneRouteData } from '@nakedobjects/services';\nimport filter from 'lodash-es/filter';\nimport invert from 'lodash-es/invert';\nimport keys from 'lodash-es/keys';\nimport reduce from 'lodash-es/reduce';\nimport some from 'lodash-es/some';\nimport { getParametersAndCurrentValue } from './cicero-commands/command-result';\nimport { Result } from './cicero-commands/result';\nimport * as Msg from './user-messages';\n\n@Injectable()\nexport class CiceroRendererService {\n\n    constructor(\n        private readonly context: ContextService,\n        private readonly configService: ConfigService,\n        private readonly error: ErrorService,\n        private readonly mask: MaskService\n    ) {\n    }\n\n    protected get keySeparator() {\n        return this.configService.config.keySeparator;\n    }\n\n    private returnResult = (input: string, output: string): Promise<Result> => Promise.resolve(Result.create(input, output));\n\n    // TODO: remove renderer.\n    renderHome(routeData: PaneRouteData): Promise<Result> {\n        if (routeData.menuId) {\n            return this.renderOpenMenu(routeData);\n        } else {\n            return this.returnResult('', Msg.welcomeMessage);\n        }\n    }\n\n    renderObject(routeData: PaneRouteData): Promise<Result> {\n\n        const oid = Ro.ObjectIdWrapper.fromObjectId(routeData.objectId!, this.keySeparator);\n\n        return this.context.getObject(1, oid, routeData.interactionMode!) // TODO: move following code out into a ICireroRenderers service with methods for rendering each context type\n            .then((obj: Ro.DomainObjectRepresentation) => {\n                const openCollIds = this.openCollectionIds(routeData);\n                if (some(openCollIds)) {\n                    return this.renderOpenCollection(openCollIds[0], obj);\n                } else if (obj.isTransient()) {\n                    return this.renderTransientObject(routeData, obj);\n                } else if (routeData.interactionMode === InteractionMode.Edit ||\n                    routeData.interactionMode === InteractionMode.Form) {\n                    return this.renderForm(routeData, obj);\n                } else {\n                    return this.renderObjectTitleAndDialogIfOpen(routeData, obj);\n                }\n            });\n    }\n\n    renderList(routeData: PaneRouteData): Promise<Result> {\n        const listPromise = this.context.getListFromMenu(routeData, routeData.page, routeData.pageSize);\n        return listPromise.\n            then((list: Ro.ListRepresentation) =>\n                this.context.getMenu(routeData.menuId!).\n                    then(menu => {\n                        const count = list.value().length;\n                        const description = this.getListDescription(list, count);\n                        const actionMember = menu.actionMember(routeData.actionId!);\n                        const actionName = actionMember.extensions().friendlyName();\n                        const output = `Result from ${actionName}:\\n${description}`;\n\n                        return this.returnResult('', output);\n                    })\n            );\n    }\n\n    renderError(message: string) {\n        const err = this.context.getError();\n        const errRep = err ? err.error : null;\n        const msg = (errRep instanceof Ro.ErrorRepresentation) ? errRep.message() : message;\n        return this.returnResult('', `Sorry, an application error has occurred. ${msg}`);\n    }\n\n    private getListDescription(list: Ro.ListRepresentation, count: number) {\n        const pagination = list.pagination();\n        if (pagination) {\n            const numPages = pagination.numPages;\n            if (numPages > 1) {\n                const page = pagination.page;\n                const totalCount = pagination.totalCount;\n                return `Page ${page} of ${numPages} containing ${count} of ${totalCount} items`;\n            }\n        }\n        return `${count} items`;\n    }\n\n    // TODO functions become 'private'\n    // Returns collection Ids for any collections on an object that are currently in List or Table mode\n\n    private renderOpenCollection(collId: string, obj: Ro.DomainObjectRepresentation): Promise<Result> {\n        const coll = obj.collectionMember(collId);\n        const output = `${this.renderCollectionNameAndSize(coll)}(${Msg.collection} ${Msg.on} ${Ro.typePlusTitle(obj)})`;\n        return this.returnResult('', output);\n    }\n\n    private renderTransientObject(routeData: PaneRouteData, obj: Ro.DomainObjectRepresentation) {\n        const output = `${Msg.unsaved} ${obj.extensions().friendlyName()}\\n${this.renderModifiedProperties(obj, routeData, this.mask)}`;\n        return this.returnResult('', output);\n    }\n\n    private renderForm(routeData: PaneRouteData, obj: Ro.DomainObjectRepresentation) {\n        const prefix = `${Msg.editing} ${Ro.typePlusTitle(obj)}\\n`;\n        if (routeData.dialogId) {\n            return this.context.getInvokableAction(obj.actionMember(routeData.dialogId)).\n                then(invokableAction => {\n                    const output = `${prefix}${this.renderActionDialog(invokableAction, routeData, this.mask)}`;\n                    return this.returnResult('', output);\n                });\n        } else {\n            const output = `${prefix}${this.renderModifiedProperties(obj, routeData, this.mask)}`;\n            return this.returnResult('', output);\n        }\n    }\n\n    private renderObjectTitleAndDialogIfOpen(routeData: PaneRouteData, obj: Ro.DomainObjectRepresentation) {\n        const prefix = `${Ro.typePlusTitle(obj)}\\n`;\n        if (routeData.dialogId) {\n            return this.context.getInvokableAction(obj.actionMember(routeData.dialogId)).\n                then(invokableAction => {\n                    const output = `${prefix}${this.renderActionDialog(invokableAction, routeData, this.mask)}`;\n                    return this.returnResult('', output);\n                });\n        } else {\n            return this.returnResult('', prefix);\n        }\n    }\n\n    private renderOpenMenu(routeData: PaneRouteData): Promise<Result> {\n\n        return this.context.getMenu(routeData.menuId!).then(menu => {\n            const prefix = Msg.menuTitle(menu.title());\n            if (routeData.dialogId) {\n                return this.context.getInvokableAction(menu.actionMember(routeData.dialogId)).then(invokableAction => {\n                    const output = `${prefix}\\n${this.renderActionDialog(invokableAction, routeData, this.mask)}`;\n                    return this.returnResult('', output);\n                });\n            } else {\n                return this.returnResult('', prefix);\n            }\n        });\n    }\n\n    private renderActionDialog(invokable: Ro.ActionRepresentation | Ro.InvokableActionMember,\n        routeData: PaneRouteData,\n        mask: MaskService): string {\n\n        const actionName = invokable.extensions().friendlyName();\n        const prefix = `Action dialog: ${actionName}\\n`;\n        const parms = getParametersAndCurrentValue(invokable, this.context);\n        return reduce(parms, (s, value, paramId) => {\n            const param = invokable.parameters()[paramId];\n            return `${s}${Ro.friendlyNameForParam(invokable, paramId)}: ${this.renderFieldValue(param, value, mask)}\\n`;\n        }, prefix);\n    }\n\n    private renderModifiedProperties(obj: Ro.DomainObjectRepresentation, routeData: PaneRouteData, mask: MaskService): string {\n        const props = this.context.getObjectCachedValues(obj.id());\n        if (keys(props).length > 0) {\n            const prefix = `${Msg.modifiedProperties}:\\n`;\n\n            return reduce(props, (s, value, propId) => {\n                const pm = obj.propertyMember(propId);\n                return `${s}${Ro.friendlyNameForProperty(obj, propId)}: ${this.renderFieldValue(pm, value, mask)}\\n`;\n            }, prefix);\n        }\n        return '';\n    }\n\n    private renderSingleChoice(field: Ro.IField, value: Ro.Value) {\n        // This is to handle an enum: render it as text, not a number:\n        const inverted = invert(field.choices()!);\n        return inverted[value.toValueString()];\n    }\n\n    private renderMultipleChoicesCommaSeparated(field: Ro.IField, value: Ro.Value) {\n        // This is to handle an enum: render it as text, not a number:\n        const inverted = invert(field.choices()!);\n        const values = value.list()!;\n        return reduce(values, (s, v) => `${s}${inverted[v.toValueString()]},`, '');\n    }\n\n    // helpers\n\n    renderCollectionNameAndSize(coll: Ro.CollectionMember): string {\n        const prefix = `${coll.extensions().friendlyName()}`;\n        const size = coll.size() || 0;\n        switch (size) {\n            case 0:\n                return `${prefix}: ${Msg.empty}\\n`;\n            case 1:\n                return `${prefix}: 1 ${Msg.item}\\n`;\n            default:\n                return `${prefix}: ${Msg.numberOfItems(size)}\\n`;\n        }\n    }\n\n    openCollectionIds(routeData: PaneRouteData): string[] {\n        return filter(keys(routeData.collections), k => routeData.collections![k] !== CollectionViewState.Summary);\n    }\n\n    // Handles empty values, and also enum conversion\n    renderFieldValue(field: Ro.IField, value: Ro.Value, mask: MaskService): string {\n        if (!field.isScalar()) { // i.e. a reference\n            return value.isNull() ? Msg.empty : value.toString();\n        }\n        // Rest is for scalar fields only:\n        if (value.toString()) { // i.e. not empty\n            if (field.entryType() === Ro.EntryType.Choices) {\n                return this.renderSingleChoice(field, value);\n            } else if (field.entryType() === Ro.EntryType.MultipleChoices && value.isList()) {\n                return this.renderMultipleChoicesCommaSeparated(field, value);\n            }\n        }\n        let properScalarValue: number | string | boolean | Date | null;\n        if (Ro.isDateOrDateTime(field)) {\n            properScalarValue = Ro.toUtcDate(value);\n        } else {\n            properScalarValue = value.scalar();\n        }\n        if (properScalarValue === '' || properScalarValue == null) {\n            return Msg.empty;\n        } else {\n            const remoteMask = field.extensions().mask();\n            const format = field.extensions().format()!;\n            return mask.toLocalFilter(remoteMask, format).filter(properScalarValue);\n        }\n    }\n}\n","import { Location } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { ConfigService, ContextService, ErrorService, MaskService, UrlManagerService } from '@nakedobjects/services';\nimport { Dictionary } from 'lodash';\nimport filter from 'lodash-es/filter';\nimport fromPairs from 'lodash-es/fromPairs';\nimport last from 'lodash-es/last';\nimport map from 'lodash-es/map';\nimport reduce from 'lodash-es/reduce';\nimport { Action } from './cicero-commands/action';\nimport { Back } from './cicero-commands/back';\nimport { Cancel } from './cicero-commands/cancel';\nimport { Clipboard } from './cicero-commands/clipboard';\nimport { Command } from './cicero-commands/command';\nimport { Edit } from './cicero-commands/edit';\nimport { Enter } from './cicero-commands/enter';\nimport { Forward } from './cicero-commands/forward';\nimport { Gemini } from './cicero-commands/gemini';\nimport { Goto } from './cicero-commands/goto';\nimport { Help } from './cicero-commands/help';\nimport { Menu } from './cicero-commands/menu';\nimport { OK } from './cicero-commands/ok';\nimport { Page } from './cicero-commands/page';\nimport { Reload } from './cicero-commands/reload';\nimport { Result } from './cicero-commands/result';\nimport { Root } from './cicero-commands/root';\nimport { Save } from './cicero-commands/save';\nimport { Selection } from './cicero-commands/selection';\nimport { Show } from './cicero-commands/show';\nimport { Where } from './cicero-commands/where';\nimport { CiceroContextService } from './cicero-context.service';\nimport { CiceroRendererService } from './cicero-renderer.service';\nimport * as Msg from './user-messages';\nimport { hasMessage, messageFrom } from './helpers-components';\n\nexport class ParseResult {\n    commands?: Command[];\n    error?: string;\n\n    static create(commands: Command[]): ParseResult {\n        return { commands: commands };\n    }\n    static createError(msg: string): ParseResult {\n        return { error: msg };\n    }\n}\n\n@Injectable()\nexport class CiceroCommandFactoryService {\n\n    constructor(private readonly urlManager: UrlManagerService,\n        private readonly location: Location,\n        private readonly context: ContextService,\n        private readonly mask: MaskService,\n        private readonly error: ErrorService,\n        private readonly configService: ConfigService,\n        private readonly ciceroContext: CiceroContextService,\n        private readonly ciceroRenderer: CiceroRendererService) {\n         this.commandsInitialised = false;\n         this.commandTypes = [Action, Back, Cancel, Clipboard, Edit, Enter, Forward, Gemini, Goto, Help, Menu, OK, Page, Reload, Root, Save, Selection, Show, Where];\n         this.allCommands = map(this.commandTypes, T => new T(this.urlManager, this.location, this, this.context, this.mask, this.error, this.configService, this.ciceroContext, this.ciceroRenderer));\n         this.commands = fromPairs(map(this.allCommands, c => [c.shortCommand, c]));\n         }\n\n    private commandsInitialised;\n\n    private commandTypes;\n\n    private allCommands: Command[];\n\n    private commands: Dictionary<Command>;\n\n    private mapInputToCommands(input: string) {\n        if (!input) {\n            // Special case for hitting Enter with no input\n            return [this.getCommand('wh')];\n        }\n        const commands = input.split(';');\n        return map(commands, c => this.getSingleCommand(c, commands.length > 1));\n    }\n\n    getCommands(input: string): ParseResult {\n        try {\n            return ParseResult.create(this.mapInputToCommands(input));\n        } catch (e) {\n            return ParseResult.createError(hasMessage(e) ? e.message : 'unknown error');\n        }\n    }\n\n    getArgs(input: string) {\n        const index = input.indexOf(' ');\n        return index >= 0 ? input.substr(index + 1) : null;\n    }\n\n    getSingleCommand = (input: string, chained: boolean) => {\n\n        input = input.trim();\n        const [firstWord] = input.split(' ');\n        const command = this.getCommand(firstWord);\n        command.argString = this.getArgs(input);\n        command.chained = chained;\n        return command;\n    };\n\n    // TODO:  could do more than auto complete e.g. reject unrecognised action or one not available in context.\n    preParse = (input: string): Result => {\n        if (!input) {\n            return Result.create(input, null);\n        }\n        let lastInChain = (last(input.split(';')) || '').toLowerCase();\n        const charsTyped = lastInChain.length;\n        lastInChain = lastInChain.trim();\n        if (lastInChain.length === 0 || lastInChain.indexOf(' ') >= 0) { // i.e. not the first word\n            return Result.create(`${input} `, null);\n        }\n        try {\n            const command = this.getCommand(lastInChain);\n            const earlierChain = input.substr(0, input.length - charsTyped);\n            return Result.create(`${earlierChain}${command.fullCommand} `, null);\n        } catch (e) {\n            return Result.create('', messageFrom(e));\n        }\n    };\n\n    getCommand = (commandWord: string) => {\n        if (commandWord.length < 2) {\n            throw new Error(Msg.commandTooShort);\n        }\n        commandWord = commandWord.toLowerCase();\n        const abbr = commandWord.substr(0, 2);\n        const command = this.commands[abbr];\n        if (command == null) {\n            throw new Error(Msg.noCommandMatch(abbr));\n        }\n        command.checkMatch(commandWord);\n        return command;\n    };\n\n    allCommandsForCurrentContext = () => {\n        const commandsInContext = filter(this.commands, c => c.isAvailableInCurrentContext());\n        return reduce<Command, string>(commandsInContext, (r, c) => `${r}${c.fullCommand}\\n`, Msg.commandsAvailable);\n    };\n}\n","import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport * as Ro from '@nakedobjects/restful-objects';\nimport {\n    ClientErrorCode,\n    ContextService,\n    ErrorCategory,\n    ErrorService,\n    ErrorWrapper,\n    PaneRouteData,\n    UrlManagerService,\n    ViewType\n    } from '@nakedobjects/services';\nimport reduce from 'lodash-es/reduce';\nimport { SubscriptionLike as ISubscription } from 'rxjs';\nimport { CiceroCommandFactoryService } from '../cicero-command-factory.service';\nimport { Command } from '../cicero-commands/command';\nimport { Result } from '../cicero-commands/result';\nimport { CiceroContextService } from '../cicero-context.service';\nimport { CiceroRendererService } from '../cicero-renderer.service';\nimport { focus, safeUnsubscribe } from '../helpers-components';\n\n@Component({\n    selector: 'nof-cicero',\n    templateUrl: 'cicero.component.html',\n    styleUrls: ['cicero.component.css'],\n    standalone: false\n})\nexport class CiceroComponent implements OnInit, OnDestroy {\n\n    constructor(\n        private readonly commandFactory: CiceroCommandFactoryService,\n        private readonly ciceroRendererService: CiceroRendererService,\n        private readonly error: ErrorService,\n        private readonly urlManager: UrlManagerService,\n        private readonly ciceroContext: CiceroContextService,\n        private readonly context: ContextService) {\n    }\n\n    private warnings: string[] = [];\n    private messages: string[] = [];\n    private paneRouteDataSub?: ISubscription;\n    private warnSub?: ISubscription;\n    private errorSub?: ISubscription;\n    private lastPaneRouteData?: PaneRouteData;\n    private previousInput = '';\n\n    @ViewChild('inputField', {static: false})\n    inputField?: ElementRef;\n\n    // template API\n    inputText = '';\n    outputText= '';\n\n    private render() {\n        switch (this.lastPaneRouteData?.location) {\n            case ViewType.Home:\n                return this.ciceroRendererService.renderHome(this.lastPaneRouteData);\n            case ViewType.Object:\n                return this.ciceroRendererService.renderObject(this.lastPaneRouteData);\n            case ViewType.List:\n                return this.ciceroRendererService.renderList(this.lastPaneRouteData);\n            default:\n                return this.ciceroRendererService.renderError('unknown render error');\n        }\n    }\n\n    ngOnInit() {\n        if (!this.paneRouteDataSub) {\n            this.paneRouteDataSub =\n                this.urlManager.getPaneRouteDataObservable(1)\n                    .subscribe((paneRouteData: PaneRouteData) => {\n                        if (!paneRouteData.isEqual(this.lastPaneRouteData)) {\n                            this.lastPaneRouteData = paneRouteData;\n\n                            this.render().\n                                then(result => {\n                                    this.writeInputOutput(result);\n                                    this.executeCommands(this.ciceroContext.chainedCommands);\n                                }).\n                                catch((reject: ErrorWrapper) => {\n                                    if (reject.category === ErrorCategory.ClientError && reject.clientErrorCode === ClientErrorCode.ExpiredTransient) {\n                                        this.outputText = 'The requested view of unsaved object details has expired.';\n                                    } else {\n                                        const display = (em: Ro.ErrorMap) => this.outputText = em.invalidReason() || em.warningMessage;\n                                        this.error.handleErrorAndDisplayMessages(reject, display);\n                                    }\n                                });\n                        }\n                    });\n        }\n\n        this.warnSub = this.context.warning$.subscribe(ws => this.warnings = ws);\n        this.errorSub = this.context.messages$.subscribe(ms => this.messages = ms);\n    }\n\n    ngOnDestroy(): void {\n        safeUnsubscribe(this.paneRouteDataSub);\n        safeUnsubscribe(this.warnSub);\n        safeUnsubscribe(this.errorSub);\n    }\n\n    private executeCommand(cmd: Command) {\n        cmd.execute().\n            then(result => {\n                this.writeInputOutput(result);\n                result.changeState();\n            }).\n            catch((reject: ErrorWrapper) => {\n                const display = (em: Ro.ErrorMap) => this.outputText = em.invalidReason() || em.warningMessage;\n                this.error.handleErrorAndDisplayMessages(reject, display);\n            });\n    }\n\n    private executeCommands(cmds?: Command[]) {\n        if (cmds && cmds.length > 0) {\n            const [cmd, ...chained] = cmds;\n            this.ciceroContext.chainedCommands = chained;\n            this.executeCommand(cmd);\n        }\n    }\n\n    private writeInputOutput(result: Result) {\n        if (result.input != null) {\n            this.inputText = result.input;\n        }\n\n        if (result.output != null) {\n            const warning = this.warnings && this.warnings.length > 0 ? reduce(this.warnings, (s, w) => `${s}${w}\\n`, 'Warning: ') : '';\n            const messages = this.messages && this.messages.length > 0 ? reduce(this.messages, (s, w) => `${s}${w}\\n`, '') : '';\n            const prefix = `${warning}${messages}`;\n            const output = result.output != null ? result.output : '';\n\n            this.outputText = `${prefix}${output}`;\n        }\n        this.focusOnInput();\n    }\n\n    parseInput(input: string): void {\n        const prevInput = this.commandFactory.preParse(input).input;\n        this.previousInput = prevInput ? prevInput.trim() : '';\n        const parseResult = this.commandFactory.getCommands(input);\n\n        if (parseResult.commands) {\n            this.executeCommands(parseResult.commands);\n        } else if (parseResult.error) {\n            this.outputText = parseResult.error;\n            this.inputText = '';\n        }\n    }\n\n    selectPreviousInput : () => number = () => setTimeout(() => this.inputText = this.previousInput) as unknown as number;\n\n    clearInput = () => this.inputText = '';\n\n    autocomplete(input: string): boolean {\n        input = input.trim();\n        const res = this.commandFactory.preParse(input);\n        this.writeInputOutput(res);\n        return false;\n    }\n\n    focusOnInput() {\n        focus(this.inputField);\n    }\n}\n","<div class=\"cicero\">\n    <div class=\"output\" aria-live=\"polite\"><pre>{{outputText}}</pre></div>\n    <input #inputField type=\"text\" [(ngModel)]=\"inputText\" \n           (keyup.enter)=\"parseInput(inputField.value)\"\n           (keydown.space)=\"autocomplete(inputField.value)\"\n           (keydown.tab)=\"autocomplete(inputField.value)\"\n           (keydown.arrowup)=\"selectPreviousInput()\" \n           (keydown.arrowdown)=\"clearInput()\"\n     />\n</div>","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { RouterModule } from '@angular/router';\nimport { CiceroCommandFactoryService } from './cicero-command-factory.service';\nimport { CiceroContextService } from './cicero-context.service';\nimport { CiceroRendererService } from './cicero-renderer.service';\nimport { CiceroComponent } from './cicero/cicero.component';\n\n@NgModule({\n    declarations: [\n        CiceroComponent,\n    ],\n    imports: [\n        BrowserModule,\n        FormsModule,\n        ReactiveFormsModule,\n        HttpClientModule,\n        RouterModule,\n    ],\n    exports: [\n        CiceroComponent,\n    ],\n})\nexport class LibModule {\n    public static forRoot(): ModuleWithProviders<LibModule> {\n\n        return {\n            ngModule: LibModule,\n            providers: [\n                CiceroCommandFactoryService,\n                CiceroRendererService,\n                CiceroContextService,\n            ]\n        };\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["Usermessages.commandNotAvailable","Usermessages.noArguments","Usermessages.tooFewArguments","Usermessages.tooManyArguments","Usermessages.mayNotbeChainedMessage","Usermessages.noSuchCommand","Usermessages.missingArgument","Usermessages.wrongTypeArgument","Usermessages.isNotANumber","Usermessages.tooManyDashes","Usermessages.mustBeGreaterThanZero","Usermessages.pleaseCompleteOrCorrect","Usermessages.mandatory","Usermessages.required","Commandresult.getParametersAndCurrentValue","Usermessages.actionCommand","Usermessages.actionHelp","Usermessages.mustbeQuestionMark","Usermessages.noActionsAvailable","Usermessages.doesNotMatchActions","Usermessages.matchingActions","Usermessages.actionsMessage","Usermessages.actionPrefix","Usermessages.isDisabled","Usermessages.disabledPrefix","Usermessages.descriptionPrefix","Usermessages.noDescription","Usermessages.backCommand","Usermessages.backHelp","Msg.cancelCommand","Msg.cancelHelp","Usermessages.clipboardCommand","Usermessages.clipboardHelp","Usermessages.clipboardError","Usermessages.clipboardCopy","Usermessages.clipboardShow","Usermessages.clipboardGo","Usermessages.clipboardDiscard","Usermessages.clipboardContextError","Models","Usermessages.clipboardContents","Usermessages.clipboardEmpty","Usermessages.editCommand","Usermessages.editHelp","Msg.outOfRange","Msg.tooLong","Msg.noPatternMatch","Msg.mandatory","Msg.notANumber","Usermessages.enterCommand","Usermessages.enterHelp","Usermessages.doesNotMatchDialog","Usermessages.doesNotMatchProperties","Usermessages.matchesMultiple","Usermessages.multipleFieldMatches","Usermessages.isNotModifiable","Usermessages.invalidCase","Usermessages.invalidRefEntry","Usermessages.emptyClipboard","Usermessages.incompatibleClipboard","Commandresult.getFields","Usermessages.noMatch","Usermessages.multipleMatches","fieldName","Usermessages.fieldName","Usermessages.descriptionFieldPrefix","Usermessages.typePrefix","Usermessages.unModifiablePrefix","Usermessages.optional","choices","Usermessages.choices","Usermessages.forwardCommand","Usermessages.forwardHelp","Usermessages.geminiCommand","Usermessages.geminiHelp","Usermessages.gotoCommand","Usermessages.gotoHelp","Usermessages.outOfItemRange","Usermessages.noRefFieldMatch","Usermessages.helpCommand","Usermessages.helpHelp","Usermessages.basicHelp","Usermessages.menuCommand","Usermessages.menuHelp","Usermessages.doesNotMatchMenu","Usermessages.matchingMenus","Usermessages.allMenus","Usermessages.okCommand","Usermessages.okHelp","Usermessages.queryOnlyRider","Usermessages.pageCommand","Usermessages.pageHelp","Usermessages.pageArgumentWrong","Usermessages.cannotPage","Usermessages.pageFirst","Usermessages.pagePrevious","Usermessages.alreadyOnFirst","Usermessages.pageNext","Usermessages.alreadyOnLast","Usermessages.pageLast","Usermessages.pageNumberWrong","Usermessages.reloadCommand","Usermessages.reloadHelp","Usermessages.rootCommand","Usermessages.rootHelp","Usermessages.saveCommand","Usermessages.saveHelp","Usermessages.selectionCommand","Usermessages.selectionHelp","Usermessages.showCommand","Usermessages.showHelp","Usermessages.doesNotMatch","Usermessages.noVisible","Usermessages.modified","Usermessages.highestItem","Usermessages.startHigherEnd","Usermessages.item","Usermessages.whereCommand","Usermessages.whereHelp","Msg.welcomeMessage","Msg.collection","Msg.on","Msg.unsaved","Msg.editing","Msg.menuTitle","Msg.modifiedProperties","Msg.empty","Msg.item","Msg.numberOfItems","Msg.commandTooShort","Msg.noCommandMatch","Msg.commandsAvailable","i3.CiceroContextService","i4.CiceroRendererService","i1.CiceroCommandFactoryService","i2.CiceroRendererService","i3","i4.CiceroContextService"],"mappings":"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"}