{"version":3,"sources":["webpack:///./src/Shared/Value/TypeChecks.ts","webpack:///./src/Shared/Value/Numeric.ts","webpack:///./src/Shared/Value/DateTime.ts","webpack:///./src/Shared/Value/Collections.ts","webpack:///./src/Shared/Value/index.ts","webpack:///./src/Shared/Scopes/ChildScope.ts","webpack:///./src/Shared/Diff/ArrayModifications.ts","webpack:///./src/Shared/Value/Misc.ts","webpack:///./src/Shared/Scopes/RegularPropertyDescriptor.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/Shared/Scopes/PropertyDescriptor.ts","webpack:///./src/Shared/Scripting/Script.ts","webpack:///./src/Shared/Scripting/IntermediateExecutionContext.ts","webpack:///./src/Shared/Scripting/index.ts","webpack:///./src/Shared/Diff/DiffGenerator.ts","webpack:///./src/Shared/Diff/IDiff.ts","webpack:///./src/Shared/Scopes/RootExecutionContext.ts","webpack:///./src/Shared/Scopes/ScopeDescriptor.ts","webpack:///./src/Shared/Scopes/ChildScopesPropertyDescriptor.ts","webpack:///./src/Shared/Scopes/RootScope.ts","webpack:///./src/Shared/Validation/ValidationRule.ts","webpack:///./src/Shared/Validation/ValidationError.ts","webpack:///./src/Shared/Scopes/Property.ts","webpack:///./src/Shared/Scopes/RegularProperty.ts","webpack:///./src/Shared/Scopes/ChildScopesProperty.ts","webpack:///./src/Shared/Scopes/ScopeBuilder.ts","webpack:///./src/Shared/Scopes/MutationFunctions.ts","webpack:///./src/Shared/Scopes/index.ts","webpack:///./src/Shared/Reactivity/Implementation.ts","webpack:///./src/Shared/Reactivity/Decorators.ts","webpack:///./src/Shared/Reactivity/index.ts","webpack:///./src/Shared/Utilities/Errors.ts","webpack:///./src/Shared/Utilities/Objects.ts","webpack:///./src/Shared/Utilities/index.ts","webpack:///./src/Shared/Libraries/index.ts","webpack:///./src/Shared/FormBuilder/FormController.ts","webpack:///./src/Shared/Diff/DiffFormatter.ts","webpack:///./src/Shared/Scopes/Path.ts","webpack:///./src/Shared/FormBuilder/DiffController.ts","webpack:///./src/Shared/FormBuilder/ComponentController.ts","webpack:///./src/Shared/FormBuilder/index.ts","webpack:///./src/Shared/Scopes/Scope.ts","webpack:///./src/Shared/Diff/DiffType.ts","webpack:///./src/Shared/BuiltInFunctions/Math.ts","webpack:///./src/Shared/BuiltInFunctions/DateTime.ts","webpack:///./src/Shared/BuiltInFunctions/Scope.ts","webpack:///./src/Shared/BuiltInFunctions/Comparison.ts","webpack:///./src/Shared/BuiltInFunctions/StringAndCollection.ts","webpack:///./src/Shared/BuiltInFunctions/Misc.ts","webpack:///./src/Shared/BuiltInFunctions/index.ts"],"names":["IsNull","value","IsBoolean","IsNumber","IsDecimal","isDecimal","IsString","IsReadonlyArray","Array","isArray","IsFunction","IsReadonlyList","Size","GetValueAtIndex","Values","IsReadonlyCollection","IsReadonlyObject","Object","getPrototypeOf","prototype","IsReadonlyDictionary","HasKey","GetValueByKey","Entries","Keys","IsReadonlyMap","NumericStringRegex","MaxDecimalValue","MinDecimalValue","MaxDecimals","ToDecimal","Number","isFinite","toDecimalPlaces","test","ToNumber","toNumber","ToIntegerNumber","numberValue","undefined","isSafeInteger","FormatDecimal","isNaN","decimalPlaces","lessThan","greaterThan","toString","FormatNumber","decimalValue","Error","DateFormat","DateTimeFormat","DateDisplayFormat","DateTimeDisplayFormat","ToDateMoment","dateMoment","parseMoment","startOf","ToDateTimeMoment","dateTimeMoment","FormatDate","format","FormatDateTime","FormatDateDisplayValue","FormatDateTimeDisplayValue","input","result","utc","isValid","length","index","RangeError","values","key","ToArray","results","item","push","IDENTIFIER_KEY","ChildScope","scopeDescriptor","ParentProperty","initialValues","identifierProperty","this","GetRequiredProperty","Value","Scope","IndexOf","identifier","Key","GetArrayModifications","diff","Type","added","Set","removed","ChangesByIdentifier","Simple","OldValue","add","NewValue","AddedIdentifiers","RemovedIdentifiers","identifiers","None","RequireDefined","NormalizeScalar","ToString","ToStringArray","stringValues","optionValue","option","ToJson","StringifyJson","JSON","stringify","RegularPropertyDescriptor","scope","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","code","keys","resolve","module","exports","PropertyDescriptor","Applicable","Required","DefaultValue","ComputedValue","NotApplicableValue","AvailableInDraft","ValidationRules","ValueChangeHandlers","ApplicableChangeHandlers","Name","Parameters","Code","JavaScriptCode","JavaScriptFunction","functionSignature","join","context","args","error","console","name","parameters","javaScriptCode","cacheKey","script","Script","Cache","get","functionName","replace","argumentUnpacking","argument","compiledFunction","Function","bind","set","func","WrappedFunction","apply","Invoke","Map","options","UnderlyingExecutionContext","Variables","Functions","GetVariable","GetFunction","GenerateDiff","oldValue","newValue","GenerateSimpleDiff","IsCollectionOfIdentifiableObjects","GenerateArrayDiff","GenerateObjectDiff","oldArray","newArray","changesByIdentifier","oldIdentifiers","GetIdentifiersInArray","newIdentifiers","Distinct","FindElementByIdentifier","array","from","oldObject","newObject","changesByKey","oldKeys","newKeys","ChangesByKey","GetIdentifierOfValue","NO_DIFF","RootExecutionContext","BuiltInFunctions","PropertyDescriptors","initialValue","Initialize","ChildScopeDescriptor","ParentExecutionContext","Expression","Message","Property","watchersStarted","startedWatchers","Descriptor","ExecutionContext","defaultValue","SetupWatchers","watcher","source","callback","valueChangeHandlers","applicableChangeHandlers","StartWatcher","ApplyHandlers","applicable","GenerateInitialValue","computedValue","notApplicableValue","EvaluateBooleanScript","errors","rule","pass","OwnErrors","childScopes","ChildScopes","childScope","indexOf","AllProperties","removedChildScopes","splice","removedChildScope","StopWatchers","AppendChildScope","newChildScope","CreateChildScope","existingChildScope","FindChildScopeByIdentifier","Identifier","comparison","sorting","CompileSortingScript","sort","a","b","Compile","i","inCorrectOrder","initialData","StartWatchers","Clear","AllErrors","BuildFunction","path","BuildScript","BuildExpression","allowParameters","RequireString","Optional","parameter","BuildValidationRule","expression","Require","message","BuildScopeDescriptor","functions","properties","Properties","scriptOptions","propertyOptions","BuildPropertyDescriptor","propertyDescriptor","childScopePath","childScopeDescriptor","IsSet","validationRules","validationRule","valueChangeHandler","applicableChangeHandler","fallback","ParseMutions","mutations","mutation","ParseMution","target","entries","Target","ApplyMutions","property","GetProperty","warn","handlers","handler","ref","instance","data","watcherInstance","watch","$watch","computed","optionsOrGetter","computedGetInternal","computedGetSetInternal","getter","setter","refMapKey","getRefMap","hasOwnProperty","defineProperty","configurable","enumerable","writable","getRef","factory","reference","Reactive","refFactory","Memoize","descriptor","originalGet","originalSet","ObjectEntries","ObjectKeys","ObjectValues","ObjectSize","object","size","ObjectHasKey","ObjectGetValueByKey","ObjectSetValueByKey","csharpDecimalPrecision","Decimal","clone","precision","toExpNeg","toExpPos","rounding","ROUND_HALF_UP","randomByte","Math","floor","random","randomBytes","count","bytes","generateCryptographicallyWeakUuid","rootScope","activeLanguages","RootScope","ActiveLanguages","Diff","DiffFormatter","SegmentType","GetPath","segments","unshift","GetElementByIdentifier","componentController","rootDiff","diffFormatter","currentDiff","segment","DiffType","diffCandidate","GetDiffAtPath","date","displayValue","convertToDisplayValue","DatePicker","FormatDatePickerDiff","DateTimePicker","FormatDateTimePickerDiff","NumberInput","FormatNumberInputDiff","TextInput","FormatTextInputDiff","arrayModifications","ParentDiff","has","trim","formController","renderErrorMessage","FormController","PropertyKey","disabledScript","Disabled","guardedScript","Guarded","hiddenScript","Hidden","convertToDisplayValueScript","ConvertToDisplayValue","convertFromDisplayValueScript","ConvertFromDisplayValue","AvailableOptionsScript","AvailableOptions","formatSelectedOptionScript","FormatSelectedOption","DiffController","executionContext","InvokeScript","LogError","optionData","formattedOption","IsSortingRequired","Sort","RemoveChildScope","ComponentController","ParseSimpleValue","convertFromDisplayValue","EvaluateBooleanExpression","ComputeAvailableOptions","availableOptions","OwnProperties","AllChildProperties","descriptors","unknownKeys","initialValueKey","CreateProperty","NonExistingPropertyDescriptor","Add","make2","Subtract","sub","Multiply","mul","Divide","isZero","div","Abs","make1","abs","Ceiling","ceil","Floor","Cbrt","cbrt","Exp","exp","Log","log","Log10","log10","Log2","log2","Pow","pow","Sqrt","sqrt","Acos","acos","Acosh","acosh","Asin","asin","Asinh","asinh","Atan","atan","Atanh","atanh","Atan2","y","x","atan2","Cos","cos","Cosh","cosh","Sin","sin","Sinh","sinh","Tan","tan","Tanh","tanh","Pi","make0","E","CountDecimals","Round","Wrap","decimals","integerDecimals","operation","arguments","decimalA","decimalB","AddYears","makeModifier","forceTime","dateTime","years","AddMonths","months","AddDays","days","AddHours","hours","AddMinutes","minutes","AddSeconds","seconds","HoursDiff","makeDiff","startDate","endDate","MinutesDiff","SecondsDiff","requireIntegerNumber","integer","implementation","integerParameter","dateValue","dateTimeValue","dateTime2","dateTimeValue2","GetCurrentIndex","WrapWithContext","scopeName","Index","GetCurrentScope","GetRootScope","GetMember","member","memberString","requireString","memberValue","CreateMutation","stringValue","IsEmpty","IsNotEmpty","IsTruthy","Not","Equals","left","right","NotEquals","IsGreaterThan","makeRelationalOperator","isAfter","IsGreaterThanOrEqual","greaterThanOrEqualTo","isSameOrAfter","IsLessThan","isBefore","IsLessThanOrEqual","lessThanOrEqualTo","isSameOrBefore","decimalComparer","momentComparer","leftDecimal","rightDecimal","leftMoment","rightMoment","ToLower","toLowerCase","ToUpper","toUpperCase","StartsWith","prefix","startsWith","EndsWith","suffix","endsWith","IsMatch","pattern","regExp","RegExp","Replace","valueString","oldValueString","newValueString","String","replaceAll","split","Split","match","First","collection","requireCollection","Last","Where","predicate","Select","selector","SelectMany","itemResult","nestedCollection","nestedItem","Max","makeAggregator","Min","Sum","Average","sum","Count","Contains","haystack","needle","includes","element","Concat","nonNullItems","firstItem","subCollection","Join","separator","separatorString","strings","Any","All","Call","argsArray","arg"],"mappings":"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","file":"js/chunk-common.js","sourcesContent":["import { Value, ReadonlyValueArray, ReadonlyValueList, ReadonlyValueCollection, ReadonlyValueObject, ReadonlyValueDictionary, ReadonlyValueMap } from '.';\r\nimport { ValueFunction } from './Types';\r\nimport { Decimal } from '../Libraries';\r\n\r\nexport function IsNull(value: Value): value is null {\r\n return value === null;\r\n}\r\n\r\nexport function IsBoolean(value: Value): value is boolean {\r\n return typeof value === 'boolean';\r\n}\r\n\r\nexport function IsNumber(value: Value): value is number {\r\n return typeof value === 'number';\r\n}\r\n\r\nexport function IsDecimal(value: Value): value is Decimal & Readonly {\r\n return Decimal.isDecimal(value);\r\n}\r\n\r\nexport function IsString(value: Value): value is string {\r\n return typeof value === 'string';\r\n}\r\n\r\nexport function IsReadonlyArray(value: Value): value is ReadonlyValueArray {\r\n return Array.isArray(value);\r\n}\r\n\r\nexport function IsFunction(value: any): value is ValueFunction {\r\n return typeof value === 'function';\r\n}\r\n\r\nexport function IsReadonlyList(value: Value): value is ReadonlyValueList {\r\n if (value === null || typeof value !== 'object') {\r\n return false;\r\n }\r\n\r\n return (\r\n IsFunction((value as any).Size) &&\r\n IsFunction((value as any).GetValueAtIndex) &&\r\n IsFunction((value as any).Values)\r\n );\r\n}\r\n\r\nexport function IsReadonlyCollection(value: Value): value is ReadonlyValueCollection {\r\n return IsReadonlyArray(value) || IsReadonlyList(value);\r\n}\r\n\r\nexport function IsReadonlyObject(value: Value): value is ReadonlyValueObject {\r\n return typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype;\r\n}\r\n\r\nexport function IsReadonlyDictionary(value: Value): value is ReadonlyValueDictionary {\r\n if (value === null || typeof value !== 'object') {\r\n return false;\r\n }\r\n\r\n return (\r\n IsFunction((value as any).Size) &&\r\n IsFunction((value as any).HasKey) &&\r\n IsFunction((value as any).GetValueByKey) &&\r\n IsFunction((value as any).Entries) &&\r\n IsFunction((value as any).Keys) &&\r\n IsFunction((value as any).Values)\r\n );\r\n}\r\n\r\nexport function IsReadonlyMap(value: Value): value is ReadonlyValueMap {\r\n return IsReadonlyObject(value) || IsReadonlyDictionary(value);\r\n}\r\n","import { Value, IsDecimal, IsNumber, IsString } from '.';\r\nimport { Decimal } from '../Libraries';\r\nimport { FormatDecimalError } from '../Utilities';\r\n\r\nexport const NumericStringRegex = /^\\-?[0-9]{1,14}(\\.[0-9]{1,14})?$/;\r\nexport const MaxDecimalValue = new Decimal('99999999999999.99999999999999');\r\nexport const MinDecimalValue = new Decimal('-99999999999999.99999999999999');\r\nexport const MaxDecimals = 14; // May not be more than 14\r\n\r\n\r\nexport function ToDecimal(value: Decimal): Decimal;\r\nexport function ToDecimal(value: Value): Decimal | undefined;\r\nexport function ToDecimal(value: Value): Decimal | undefined {\r\n\r\n if (IsDecimal(value)) {\r\n return value;\r\n\r\n } else if (IsNumber(value)) {\r\n if (!Number.isFinite(value)) {\r\n return undefined;\r\n }\r\n\r\n return new Decimal(value).toDecimalPlaces(MaxDecimals);\r\n\r\n } else if (IsString(value)) {\r\n if (!NumericStringRegex.test(value)) {\r\n return undefined;\r\n }\r\n\r\n return new Decimal(value);\r\n\r\n\r\n\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function ToNumber(value: Value): number | undefined {\r\n if (IsNumber(value)) {\r\n return value;\r\n }\r\n\r\n return ToDecimal(value)?.toNumber();\r\n}\r\n\r\nexport function ToIntegerNumber(value: Value): number | undefined {\r\n\r\n const numberValue = ToNumber(value);\r\n if (numberValue === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (!Number.isSafeInteger(numberValue)) {\r\n return undefined;\r\n }\r\n\r\n return numberValue;\r\n}\r\n\r\nexport function FormatDecimal(value: Decimal): string {\r\n\r\n if (value.isNaN()) {\r\n throw new FormatDecimalError(`Can't convert NaN to String.`);\r\n }\r\n\r\n if (!value.isFinite()) {\r\n throw new FormatDecimalError(`Can't convert infinity to String.`);\r\n }\r\n\r\n if (value.decimalPlaces() > MaxDecimals) {\r\n throw new FormatDecimalError(`Can't convert Decimal to String. Too many decimals: ${value}`);\r\n }\r\n\r\n if (value.lessThan(MinDecimalValue) || value.greaterThan(MaxDecimalValue)) {\r\n throw new FormatDecimalError(`Can't convert Decimal to String. Value too large: ${value}`);\r\n }\r\n\r\n return value.toString();\r\n}\r\n\r\nexport function FormatNumber(value: number): string {\r\n const decimalValue = ToDecimal(value);\r\n if (decimalValue === undefined) {\r\n throw new Error(`Can't format number. Invalid decimal: ${value}`);\r\n }\r\n\r\n return FormatDecimal(decimalValue);\r\n}\r\n","import { Value, IsString } from '.';\r\nimport { Moment, moment } from '../Libraries';\r\n\r\nexport const DateFormat = 'YYYY-MM-DD';\r\nexport const DateTimeFormat = 'YYYY-MM-DD HH:mm:ss';\r\n\r\nexport const DateDisplayFormat = 'DD-MM-YYYY';\r\nexport const DateTimeDisplayFormat = 'DD-MM-YYYY HH:mm';\r\n\r\n\r\nexport function ToDateMoment(value: Value): Moment | undefined {\r\n\r\n if (IsString(value)) {\r\n const dateMoment = parseMoment(value, DateFormat);\r\n if (dateMoment !== undefined) {\r\n return dateMoment.startOf('day');\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function ToDateTimeMoment(value: Value): Moment | undefined {\r\n\r\n if (IsString(value)) {\r\n const dateTimeMoment = parseMoment(value, DateTimeFormat);\r\n if (dateTimeMoment !== undefined) {\r\n return dateTimeMoment;\r\n }\r\n\r\n return ToDateMoment(value);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function FormatDate(value: Moment): string {\r\n return value.format(DateFormat);\r\n}\r\n\r\nexport function FormatDateTime(value: Moment): string {\r\n return value.format(DateTimeFormat);\r\n}\r\n\r\nexport function FormatDateDisplayValue(value: Moment): string {\r\n return value.format(DateDisplayFormat);\r\n}\r\n\r\nexport function FormatDateTimeDisplayValue(value: Moment): string {\r\n return value.format(DateTimeDisplayFormat);\r\n}\r\n\r\nfunction parseMoment(input: string, format: string): Moment | undefined {\r\n const result = moment.utc(input, format, 'en', true);\r\n\r\n if (result.isValid()) {\r\n return result;\r\n }\r\n\r\n return undefined;\r\n}\r\n","import { ReadonlyValueCollection, ReadonlyValueMap, ReadonlyValueObject, IsReadonlyArray, IsReadonlyList, IsReadonlyObject, IsReadonlyDictionary, Value, IsReadonlyCollection } from '.';\r\nimport { ObjectSize, ObjectValues, ObjectHasKey, ObjectGetValueByKey, ObjectEntries, ObjectKeys } from '../Utilities';\r\n\r\nexport function Size(value: ReadonlyValueCollection | ReadonlyValueMap): number {\r\n if (IsReadonlyArray(value)) {\r\n return value.length;\r\n\r\n } else if (IsReadonlyObject(value)) {\r\n return ObjectSize(value);\r\n\r\n } else if (IsReadonlyList(value) || IsReadonlyDictionary(value)) {\r\n return value.Size();\r\n\r\n } else {\r\n throw new Error(`Invalid argument.`);\r\n }\r\n}\r\n\r\nexport function GetValueAtIndex(value: ReadonlyValueCollection, index: number): Value {\r\n if (IsReadonlyArray(value)) {\r\n if (index < 0 || index >= value.length) {\r\n throw new RangeError(`Index out of range: ${index}`);\r\n }\r\n\r\n return value[index];\r\n\r\n } else if (IsReadonlyList(value)) {\r\n return value.GetValueAtIndex(index);\r\n\r\n } else {\r\n throw new Error(`Invalid argument.`);\r\n }\r\n}\r\n\r\nexport function Values(value: ReadonlyValueCollection): IterableIterator {\r\n if (IsReadonlyArray(value)) {\r\n return value.values();\r\n\r\n } else if (IsReadonlyObject(value)) {\r\n return ObjectValues(value);\r\n\r\n } else if (IsReadonlyList(value) || IsReadonlyDictionary(value)) {\r\n return value.Values();\r\n\r\n } else {\r\n throw new Error(`Invalid argument.`);\r\n }\r\n}\r\n\r\nexport function HasKey(value: ReadonlyValueMap, key: string): boolean {\r\n if (IsReadonlyObject(value)) {\r\n return ObjectHasKey(value, key);\r\n\r\n } else if (IsReadonlyDictionary(value)) {\r\n return value.HasKey(key);\r\n\r\n } else {\r\n throw new Error(`Invalid argument.`);\r\n }\r\n}\r\n\r\nexport function GetValueByKey(value: ReadonlyValueMap, key: string): Value | undefined {\r\n if (IsReadonlyObject(value)) {\r\n return ObjectGetValueByKey(value, key);\r\n\r\n } else if (IsReadonlyDictionary(value)) {\r\n return value.GetValueByKey(key);\r\n\r\n } else {\r\n throw new Error(`Invalid argument.`);\r\n }\r\n}\r\n\r\nexport function Entries(value: ReadonlyValueMap): IterableIterator<[string, Value]> {\r\n if (IsReadonlyObject(value)) {\r\n return ObjectEntries(value);\r\n\r\n } else if (IsReadonlyDictionary(value)) {\r\n return value.Entries();\r\n\r\n } else {\r\n throw new Error(`Invalid argument.`);\r\n }\r\n}\r\n\r\nexport function Keys(value: ReadonlyValueMap): IterableIterator {\r\n if (IsReadonlyObject(value)) {\r\n return ObjectKeys(value);\r\n\r\n } else if (IsReadonlyDictionary(value)) {\r\n return value.Keys();\r\n\r\n } else {\r\n throw new Error(`Invalid argument.`);\r\n }\r\n}\r\n\r\nexport function ToArray(input: Value): Value[] | undefined {\r\n\r\n if (!IsReadonlyCollection(input)) {\r\n return undefined;\r\n }\r\n\r\n const results: Value[] = [];\r\n\r\n for (const item of Values(input)) {\r\n results.push(item);\r\n }\r\n\r\n return results;\r\n}","// The order is important to prevent circular references\r\n\r\nexport * from './Types';\r\nexport * from './TypeChecks';\r\nexport * from './Numeric';\r\nexport * from './DateTime';\r\nexport * from './Collections';\r\nexport * from './Misc';\r\n","import { Scope } from './Scope';\r\nimport { ScopeDescriptor, ChildScopesProperty } from '.';\r\nimport { IExecutionContext } from '../Scripting';\r\nimport { Value } from '../Value';\r\nimport { Memoize } from '../Reactivity';\r\nimport { IsEmpty } from '../BuiltInFunctions';\r\nimport { generateCryptographicallyWeakUuid } from '../Libraries';\r\n\r\nconst IDENTIFIER_KEY = 'Identifier';\r\n\r\nexport class ChildScope extends Scope {\r\n\r\n public constructor(\r\n scopeDescriptor: ScopeDescriptor,\r\n public readonly ParentProperty: ChildScopesProperty,\r\n ) {\r\n super(scopeDescriptor);\r\n }\r\n\r\n public get ParentExecutionContext(): IExecutionContext {\r\n return this.ParentProperty.Scope;\r\n }\r\n\r\n public get Index(): number {\r\n const index = this.ParentProperty.IndexOf(this);\r\n\r\n if (index < 0) {\r\n throw new Error(`Can't get index of detached ChildScope.`);\r\n }\r\n\r\n return index;\r\n }\r\n\r\n @Memoize()\r\n public get Identifier(): string {\r\n var identifier = this.GetRequiredProperty(IDENTIFIER_KEY).Value;\r\n\r\n if (IsEmpty(identifier)) {\r\n throw new Error(`${this.ParentProperty.Key}[].${IDENTIFIER_KEY} is not set.`);\r\n }\r\n\r\n if (typeof identifier !== 'string') {\r\n throw new Error(`${this.ParentProperty.Key}[].${IDENTIFIER_KEY} must be a string.`);\r\n }\r\n\r\n return identifier;\r\n }\r\n\r\n public Initialize(initialValues: Value): void {\r\n super.Initialize(initialValues);\r\n\r\n const identifierProperty = this.GetRequiredProperty(IDENTIFIER_KEY);\r\n\r\n if (IsEmpty(identifierProperty.Value)) {\r\n identifierProperty.Value = generateCryptographicallyWeakUuid();\r\n }\r\n }\r\n}\r\n","import { IsEmpty } from \"../BuiltInFunctions\";\r\nimport { ObjectEntries } from \"../Utilities\";\r\nimport { GetIdentifiersInArray, IsCollectionOfIdentifiableObjects } from \"./DiffGenerator\";\r\nimport { DiffType } from \"./DiffType\";\r\nimport { IDiff } from \"./IDiff\";\r\n\r\nexport function GetArrayModifications(diff: IDiff): IArrayModifications {\r\n switch (diff.Type) {\r\n case DiffType.Array:\r\n const added = new Set();\r\n const removed = new Set();\r\n for (const [identifier, value] of ObjectEntries(diff.ChangesByIdentifier)) {\r\n if (value.Type === DiffType.Simple && value.OldValue === null) {\r\n added.add(identifier);\r\n }\r\n\r\n if (value.Type === DiffType.Simple && value.NewValue === null) {\r\n removed.add(identifier);\r\n }\r\n }\r\n\r\n return { AddedIdentifiers: added, RemovedIdentifiers: removed };\r\n case DiffType.Simple:\r\n if (IsEmpty(diff.OldValue) && IsCollectionOfIdentifiableObjects(diff.NewValue)) {\r\n const identifiers = GetIdentifiersInArray(diff.NewValue);\r\n return { AddedIdentifiers: new Set(identifiers), RemovedIdentifiers: new Set() };\r\n\r\n } else if (IsEmpty(diff.NewValue) && IsCollectionOfIdentifiableObjects(diff.OldValue)) {\r\n const identifiers = GetIdentifiersInArray(diff.OldValue);\r\n return { AddedIdentifiers: new Set(), RemovedIdentifiers: new Set(identifiers) };\r\n }\r\n\r\n throw new Error(\"Couldn't get array modifications from Simple diff\");\r\n case DiffType.None:\r\n return { AddedIdentifiers: new Set(), RemovedIdentifiers: new Set() };\r\n default:\r\n throw new Error(\"Invalid diff type.\");\r\n }\r\n}\r\n\r\nexport interface IArrayModifications {\r\n AddedIdentifiers: Set\r\n RemovedIdentifiers: Set\r\n}","import { isUndefined } from 'lodash';\r\nimport { Value, IsString, IsNumber, IsDecimal, IsNull, IsBoolean, IsReadonlyCollection, IsReadonlyMap, FormatNumber, FormatDecimal, JsonValue, Values, Entries } from '.';\r\nimport { Decimal } from '../Libraries';\r\nimport { ReadonlyValueCollection, ReadonlyValueMap, JsonValueObject } from './Types';\r\n\r\nexport function RequireDefined(value: T): Exclude {\r\n if (value === undefined) {\r\n throw new Error(`Value is required.`);\r\n }\r\n\r\n return value as Exclude;\r\n}\r\n\r\nexport function NormalizeScalar(value: Value): Exclude> {\r\n\r\n if (IsNumber(value)) {\r\n return FormatNumber(value);\r\n\r\n } else if (IsDecimal(value)) {\r\n return FormatDecimal(value);\r\n\r\n } else {\r\n return value as any;\r\n }\r\n}\r\n\r\nexport function ToString(value: Value): string | undefined {\r\n\r\n value = NormalizeScalar(value);\r\n\r\n if (IsString(value)) {\r\n return value;\r\n\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function ToStringArray(values: Value): string[] | undefined {\r\n\r\n if (!IsReadonlyCollection(values)) {\r\n return undefined;\r\n }\r\n\r\n const stringValues: string[] = [];\r\n\r\n for (const optionValue of Values(values)) {\r\n const option = NormalizeScalar(optionValue);\r\n\r\n if (IsString(option)) {\r\n stringValues.push(option);\r\n\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n return stringValues;\r\n}\r\n\r\nexport function ToJson(value: null): null;\r\nexport function ToJson(value: boolean): boolean;\r\nexport function ToJson(value: string): string;\r\nexport function ToJson(value: ReadonlyValueCollection): JsonValue[];\r\nexport function ToJson(value: ReadonlyValueMap): JsonValueObject;\r\nexport function ToJson(value: Value): JsonValue;\r\nexport function ToJson(value: Value): JsonValue {\r\n\r\n value = NormalizeScalar(value);\r\n\r\n if (IsNull(value)) {\r\n return null;\r\n\r\n } else if (isUndefined(value)) {\r\n return null;\r\n\r\n } else if (IsBoolean(value)) {\r\n return value;\r\n\r\n } else if (IsString(value)) {\r\n return value;\r\n\r\n } else if (IsReadonlyCollection(value)) {\r\n\r\n const result: JsonValue[] = [];\r\n\r\n for (const item of Values(value)) {\r\n result.push(ToJson(item));\r\n }\r\n\r\n return result;\r\n\r\n } else if (IsReadonlyMap(value)) {\r\n\r\n const result: JsonValueObject = {};\r\n\r\n for (const [key, item] of Entries(value)) {\r\n result[key] = ToJson(item);\r\n }\r\n\r\n return result;\r\n\r\n } else {\r\n throw new Error(`Can't convert to JSON: ${value}`);\r\n }\r\n}\r\n\r\n\r\nexport function StringifyJson(value: Value): string {\r\n return JSON.stringify(ToJson(value));\r\n}\r\n","import { PropertyDescriptor } from './PropertyDescriptor';\r\nimport { Scope, RegularProperty } from '.';\r\n\r\nexport class RegularPropertyDescriptor extends PropertyDescriptor {\r\n\r\n public CreateProperty(scope: Scope, key: string): RegularProperty {\r\n return new RegularProperty(this, scope, key);\r\n }\r\n}\r\n","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"73332\",\n\t\"./en-il.js\": \"73332\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","import { Scope, Property } from '.';\r\nimport { IScript } from '../Scripting';\r\nimport { ValidationRule } from '../Validation';\r\n\r\nexport abstract class PropertyDescriptor {\r\n public Applicable: IScript | null = null;\r\n public Required: IScript | null = null;\r\n public DefaultValue: IScript | null = null;\r\n public ComputedValue: IScript | null = null;\r\n public NotApplicableValue: IScript | null = null;\r\n public AvailableInDraft: IScript | null = null;\r\n public ValidationRules: ValidationRule[] = [];\r\n public ValueChangeHandlers: IScript[] = [];\r\n public ApplicableChangeHandlers: IScript[] = [];\r\n\r\n public abstract CreateProperty(scope: Scope, key: string): Property;\r\n}\r\n","import { IExecutionContext, IScript } from '.';\r\nimport { Value } from '../Value';\r\n\r\ntype CompiledFunction = (context: IExecutionContext, args: ReadonlyArray) => Value;\r\n\r\nexport class Script implements IScript {\r\n\r\n private static Cache = new Map();\r\n\r\n private constructor(\r\n public Name: string,\r\n public Parameters: ReadonlyArray,\r\n public Code: string | null,\r\n public JavaScriptCode: string,\r\n private JavaScriptFunction: CompiledFunction,\r\n ) { }\r\n\r\n public toString() {\r\n const functionSignature = `${this.Name}(${this.Parameters.join(', ')})`;\r\n\r\n if (this.Code) {\r\n return `${functionSignature} => ${this.Code}`;\r\n\r\n } else {\r\n return functionSignature;\r\n }\r\n }\r\n\r\n public Invoke(context: IExecutionContext, args: ReadonlyArray): Value {\r\n if (args.length !== this.Parameters.length) {\r\n throw new Error(`'${this.Name}' expected ${this.Parameters.length} arguments, got ${args.length} instead.`);\r\n }\r\n\r\n try {\r\n return this.JavaScriptFunction(context, args);\r\n\r\n } catch (error) {\r\n\r\n // tslint:disable-next-line: no-console\r\n console.error(`Error in script: ${this.toString()}`);\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n public static Compile(name: string | null, parameters: ReadonlyArray, javaScriptCode: string, code: string | null): IScript {\r\n name = name || '';\r\n const cacheKey = name + ';' + parameters.join(',') + ';' + javaScriptCode;\r\n\r\n let script = Script.Cache.get(cacheKey);\r\n if (script === undefined) {\r\n\r\n const functionName = name.replace(/[^0-9a-zA-Z_]/g, '').replace(/^[0-9]+/, '');\r\n\r\n const argumentUnpacking = parameters.map((argument, index) => `const ${argument} = _args[${index}];`).join('\\n');\r\n const compiledFunction = Function(\r\n `'use strict'; return function ${functionName}($c, _args) {\r\n\t\t\t\t\t${argumentUnpacking}\r\n\t\t\t\t\t${javaScriptCode}\r\n\t\t\t\t}`,\r\n )().bind(undefined);\r\n\r\n script = new Script(name, parameters, code, javaScriptCode, compiledFunction);\r\n Script.Cache.set(cacheKey, script);\r\n }\r\n\r\n return script;\r\n }\r\n\r\n public static Wrap) => Value>(func: T): IScript & T {\r\n\r\n const WrappedFunction: any = (...args: any[]): Value => {\r\n return func.apply(null, args);\r\n };\r\n\r\n WrappedFunction.Invoke = (context: IExecutionContext, args: ReadonlyArray): Value => {\r\n return func.apply(null, args as []);\r\n };\r\n\r\n return WrappedFunction;\r\n }\r\n\r\n public static WrapWithContext) => Value>(func: T): IScript & T {\r\n\r\n const WrappedFunction: any = (context: IExecutionContext, ...args: any[]): Value => {\r\n return func.apply(null, [context, ...args]);\r\n };\r\n\r\n WrappedFunction.Invoke = (context: IExecutionContext, args: ReadonlyArray): Value => {\r\n return func.apply(null, [context, ...args]);\r\n };\r\n\r\n return WrappedFunction;\r\n }\r\n}\r\n","import { Value } from '../Value';\r\nimport { IExecutionContext, IScript } from '../Scripting';\r\n\r\nexport interface IIntermediateExecutionContextOptions {\r\n UnderlyingExecutionContext: IExecutionContext;\r\n Variables?: Map;\r\n Functions?: Map;\r\n}\r\n\r\nexport class IntermediateExecutionContext implements IExecutionContext {\r\n\r\n public readonly UnderlyingExecutionContext: IExecutionContext;\r\n public readonly Variables: Map;\r\n public readonly Functions: Map;\r\n\r\n public constructor(options: IIntermediateExecutionContextOptions) {\r\n this.UnderlyingExecutionContext = options.UnderlyingExecutionContext;\r\n this.Variables = options.Variables ?? new Map();\r\n this.Functions = options.Functions ?? new Map();\r\n }\r\n\r\n public GetVariable(key: string): Value {\r\n\r\n const value = this.Variables.get(key);\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n\r\n return this.UnderlyingExecutionContext.GetVariable(key);\r\n }\r\n\r\n public Invoke(functionName: string, args: ReadonlyArray): Value {\r\n return this.GetFunction(functionName).Invoke(this, args);\r\n }\r\n\r\n public GetFunction(functionName: string): IScript {\r\n\r\n const script = this.Functions.get(functionName);\r\n if (script !== undefined) {\r\n return script;\r\n }\r\n\r\n return this.UnderlyingExecutionContext.GetFunction(functionName);\r\n }\r\n}\r\n","// The order is important to prevent circular references\r\n\r\nexport * from './IExecutionContext';\r\nexport * from './IScript';\r\nexport * from './Script';\r\nexport * from './IntermediateExecutionContext';\r\n","import { IsEmpty } from \"../BuiltInFunctions\";\r\nimport { ObjectSize, WritableObject } from \"../Utilities\";\r\nimport { GetValueByKey, IsReadonlyCollection, IsReadonlyMap, IsString, Keys, ReadonlyValueCollection, ReadonlyValueMap, StringifyJson, Value, Values } from \"../Value\";\r\nimport { DiffType } from \"./DiffType\";\r\nimport { IDiff, ISimpleDiff, NO_DIFF } from \"./IDiff\";\r\n\r\nconst IDENTIFIER_KEY = 'Identifier';\r\n\r\nexport function GenerateDiff(oldValue: Value, newValue: Value): IDiff {\r\n if (StringifyJson(oldValue) === StringifyJson(newValue)) return NO_DIFF;\r\n if (IsEmpty(oldValue) && IsEmpty(newValue)) return NO_DIFF;\r\n if (IsEmpty(oldValue) || IsEmpty(newValue)) return GenerateSimpleDiff(oldValue, newValue);\r\n if (IsCollectionOfIdentifiableObjects(oldValue) && IsCollectionOfIdentifiableObjects(newValue)) return GenerateArrayDiff(oldValue, newValue);\r\n if (IsReadonlyMap(oldValue) && IsReadonlyMap(newValue)) return GenerateObjectDiff(oldValue, newValue);\r\n\r\n return GenerateSimpleDiff(oldValue, newValue);\r\n}\r\n\r\nfunction GenerateArrayDiff(oldArray: ReadonlyValueCollection, newArray: ReadonlyValueCollection): IDiff {\r\n const changesByIdentifier: WritableObject = {};\r\n\r\n const oldIdentifiers = GetIdentifiersInArray(oldArray);\r\n const newIdentifiers = GetIdentifiersInArray(newArray);\r\n const identifiers = Distinct([...oldIdentifiers, ...newIdentifiers]);\r\n\r\n for (const identifier of identifiers) {\r\n const oldValue = FindElementByIdentifier(oldArray, identifier);\r\n const newValue = FindElementByIdentifier(newArray, identifier);\r\n\r\n const diff = GenerateDiff(oldValue ?? null, newValue ?? null);\r\n if (diff.Type === DiffType.None) continue;\r\n\r\n changesByIdentifier[identifier] = diff;\r\n }\r\n\r\n if (ObjectSize(changesByIdentifier) === 0) {\r\n return NO_DIFF;\r\n }\r\n\r\n return {\r\n Type: DiffType.Array,\r\n ChangesByIdentifier: changesByIdentifier\r\n };\r\n}\r\n\r\nfunction Distinct(array: Array): Array {\r\n return Array.from(new Set(array));\r\n}\r\n\r\nfunction GenerateObjectDiff(oldObject: ReadonlyValueMap, newObject: ReadonlyValueMap): IDiff {\r\n const changesByKey: WritableObject = {};\r\n\r\n const oldKeys = Keys(oldObject);\r\n const newKeys = Keys(newObject);\r\n const keys = Distinct([...oldKeys, ...newKeys]);\r\n\r\n for (const key of keys) {\r\n const oldValue = GetValueByKey(oldObject, key);\r\n const newValue = GetValueByKey(newObject, key);\r\n\r\n const diff = GenerateDiff(oldValue ?? null, newValue ?? null);\r\n if (diff.Type === DiffType.None) continue;\r\n\r\n changesByKey[key] = diff;\r\n }\r\n\r\n if (ObjectSize(changesByKey) === 0) {\r\n return NO_DIFF;\r\n }\r\n\r\n return {\r\n Type: DiffType.Object,\r\n ChangesByKey: changesByKey\r\n };\r\n}\r\n\r\nfunction GenerateSimpleDiff(oldValue: Value, newValue: Value): ISimpleDiff {\r\n return {\r\n Type: DiffType.Simple,\r\n OldValue: oldValue,\r\n NewValue: newValue\r\n };\r\n}\r\n\r\nfunction FindElementByIdentifier(array: ReadonlyValueCollection, identifier: string): Value | undefined {\r\n for (const item of Values(array)) {\r\n if (GetIdentifierOfValue(item) === identifier) return item;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction GetIdentifierOfValue(value: Value): string | undefined {\r\n if (!IsReadonlyMap(value)) return undefined;\r\n\r\n const identifier = GetValueByKey(value, IDENTIFIER_KEY);\r\n if (identifier === undefined) return undefined;\r\n\r\n if (!IsString(identifier) || IsEmpty(identifier)) return undefined;\r\n\r\n return identifier;\r\n}\r\n\r\nexport function GetIdentifiersInArray(array: ReadonlyValueCollection): string[] {\r\n const identifiers: string[] = [];\r\n\r\n for (const item of Values(array)) {\r\n const identifier = GetIdentifierOfValue(item);\r\n if (identifier !== undefined) {\r\n identifiers.push(identifier);\r\n }\r\n }\r\n\r\n return identifiers;\r\n}\r\n\r\nexport function IsCollectionOfIdentifiableObjects(array: Value): array is ReadonlyValueCollection {\r\n if (!IsReadonlyCollection(array)) return false;\r\n\r\n for (const item of Values(array)) {\r\n if (GetIdentifierOfValue(item) === undefined) return false;\r\n }\r\n return true;\r\n}","import { WritableObject } from \"../Utilities\";\r\nimport { Value } from \"../Value\";\r\nimport { DiffType } from \"./DiffType\";\r\n\r\n\r\nexport interface IBaseDiff {\r\n Type: DiffType;\r\n}\r\n\r\nexport interface INoDiff extends IBaseDiff {\r\n Type: DiffType.None;\r\n}\r\n\r\nexport interface ISimpleDiff extends IBaseDiff {\r\n Type: DiffType.Simple;\r\n OldValue: Value;\r\n NewValue: Value;\r\n}\r\n\r\nexport interface IObjectDiff extends IBaseDiff {\r\n Type: DiffType.Object;\r\n ChangesByKey: WritableObject;\r\n}\r\n\r\nexport interface IArrayDiff extends IBaseDiff {\r\n Type: DiffType.Array;\r\n ChangesByIdentifier: WritableObject;\r\n}\r\n\r\nexport type IDiff = INoDiff | ISimpleDiff | IObjectDiff | IArrayDiff;\r\n\r\nexport const NO_DIFF: IDiff = {\r\n Type: DiffType.None,\r\n}","import { ObjectEntries } from '../Utilities';\r\nimport { Value } from '../Value';\r\nimport { IExecutionContext, IScript } from '../Scripting';\r\nimport * as BuiltInFunctions from '../BuiltInFunctions';\r\n\r\nexport class RootExecutionContext implements IExecutionContext {\r\n\r\n public Functions = new Map();\r\n\r\n public GetVariable(key: string): Value {\r\n throw new Error(`Unknown property: ${key}`);\r\n }\r\n\r\n public Invoke(functionName: string, args: ReadonlyArray): Value {\r\n return this.GetFunction(functionName).Invoke(this, args);\r\n }\r\n\r\n public GetFunction(functionName: string): IScript {\r\n const script = this.Functions.get(functionName);\r\n\r\n if (script) {\r\n return script;\r\n\r\n } else {\r\n throw new Error(`Unknown function: ${functionName}`);\r\n }\r\n }\r\n\r\n public static CreateDefault() {\r\n\r\n const context = new RootExecutionContext();\r\n\r\n for (const [functionName, func] of ObjectEntries(BuiltInFunctions)) {\r\n context.Functions.set(functionName, func);\r\n }\r\n\r\n return context;\r\n }\r\n}\r\n","import { PropertyDescriptor, RootScope } from '.';\r\nimport { IScript, IExecutionContext } from '../Scripting';\r\nimport { Value } from '../Value';\r\n\r\nexport class ScopeDescriptor {\r\n\r\n public Functions = new Map();\r\n public PropertyDescriptors = new Map();\r\n\r\n public CreateRootScope(context: IExecutionContext, initialValue: Value) {\r\n\r\n const scope = new RootScope(this, context);\r\n scope.Initialize(initialValue);\r\n return scope;\r\n }\r\n}\r\n","import { PropertyDescriptor, ScopeDescriptor, Scope, ChildScopesProperty } from '.';\r\n\r\nexport class ChildScopesPropertyDescriptor extends PropertyDescriptor {\r\n\r\n public constructor(\r\n public readonly ChildScopeDescriptor: ScopeDescriptor,\r\n ) {\r\n super();\r\n }\r\n\r\n public CreateProperty(scope: Scope, key: string): ChildScopesProperty {\r\n return new ChildScopesProperty(this, scope, key);\r\n }\r\n}\r\n","import { Scope, ScopeDescriptor } from '.';\r\nimport { IExecutionContext } from '../Scripting';\r\n\r\nexport class RootScope extends Scope {\r\n\r\n public constructor(\r\n scopeDescriptor: ScopeDescriptor,\r\n public readonly ParentExecutionContext: IExecutionContext,\r\n ) {\r\n super(scopeDescriptor);\r\n }\r\n}\r\n","import { IScript } from '../Scripting';\r\nimport { Translation } from '../Globalization';\r\n\r\nexport class ValidationRule {\r\n\r\n public constructor(\r\n public readonly Expression: IScript,\r\n public readonly Message: Translation,\r\n ) { }\r\n}\r\n","import { Property } from '../Scopes';\r\nimport { Translation } from '../Globalization';\r\n\r\nexport class ValidationError {\r\n\r\n public constructor(\r\n public readonly Property: Property,\r\n public readonly Message: Translation,\r\n ) { }\r\n}\r\n","import { PropertyDescriptor, Scope, ApplyHandlers } from '.';\r\nimport { IScript } from '../Scripting';\r\nimport { Value, IsBoolean } from '../Value';\r\nimport { ValidationError } from '../Validation';\r\nimport { Memoize, watch, WatcherStopHandle, WatcherSource, WatcherCallback } from '../Reactivity';\r\n\r\nexport abstract class Property {\r\n\r\n protected watchersStarted = false;\r\n private startedWatchers: WatcherStopHandle[] = [];\r\n\r\n public abstract readonly Descriptor: PropertyDescriptor;\r\n public abstract readonly Scope: Scope;\r\n public abstract readonly Key: string;\r\n public abstract Value: Value;\r\n\r\n public get ExecutionContext() {\r\n return this.Scope;\r\n }\r\n\r\n @Memoize()\r\n public get ComputedValue(): Value | undefined {\r\n if (!this.Descriptor.ComputedValue) {\r\n return undefined;\r\n }\r\n\r\n return this.Descriptor.ComputedValue.Invoke(this.ExecutionContext, []);\r\n }\r\n\r\n @Memoize()\r\n public get NotApplicableValue(): Value | undefined {\r\n if (!this.Descriptor.NotApplicableValue) {\r\n return undefined;\r\n }\r\n\r\n return this.Descriptor.NotApplicableValue.Invoke(this.ExecutionContext, []);\r\n }\r\n\r\n @Memoize()\r\n public get Applicable(): boolean {\r\n return this.EvaluateBooleanScript(this.Descriptor.Applicable, [], true);\r\n }\r\n\r\n @Memoize()\r\n public get AvailableInDraft(): boolean {\r\n return this.EvaluateBooleanScript(this.Descriptor.AvailableInDraft, [], true);\r\n }\r\n\r\n @Memoize()\r\n public get Required(): boolean {\r\n if (!this.Applicable) {\r\n return false;\r\n }\r\n\r\n return this.EvaluateBooleanScript(this.Descriptor.Required, [], false);\r\n }\r\n\r\n //@Memoize()\r\n public get OwnErrors(): ValidationError[] {\r\n if (!this.Applicable) {\r\n return [];\r\n }\r\n\r\n const errors: ValidationError[] = [];\r\n for (const rule of this.Descriptor.ValidationRules) {\r\n const pass = this.EvaluateBooleanScript(rule.Expression, [this.Value], true);\r\n if (!pass) {\r\n errors.push(new ValidationError(this, rule.Message));\r\n }\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n @Memoize()\r\n public get AllErrors(): ValidationError[] {\r\n return this.OwnErrors;\r\n }\r\n\r\n public abstract Initialize(initialData: Value | undefined): void;\r\n public abstract Clear(): void;\r\n\r\n public abstract AllChildProperties(): Generator;\r\n\r\n protected GenerateInitialValue(): Value {\r\n\r\n if (this.Applicable) {\r\n\r\n if (this.Descriptor.DefaultValue !== null) {\r\n return this.Descriptor.DefaultValue.Invoke(this.ExecutionContext, []);\r\n }\r\n\r\n if (this.Descriptor.ComputedValue !== null) {\r\n return this.ComputedValue ?? null;\r\n }\r\n\r\n } else {\r\n if (this.Descriptor.NotApplicableValue !== null) {\r\n return this.NotApplicableValue ?? null;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private EvaluateBooleanScript(script: IScript | null, args: Value[], defaultValue: boolean): boolean {\r\n if (script === null) {\r\n return defaultValue;\r\n }\r\n\r\n const result = script.Invoke(this.ExecutionContext, args);\r\n if (!IsBoolean(result)) {\r\n throw new Error(`Script must return a boolean.`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public StartWatchers() {\r\n if (this.watchersStarted) {\r\n return;\r\n }\r\n\r\n this.SetupWatchers();\r\n\r\n this.watchersStarted = true;\r\n }\r\n\r\n public StopWatchers() {\r\n if (!this.watchersStarted) {\r\n return;\r\n }\r\n\r\n for (const watcher of this.startedWatchers) {\r\n watcher();\r\n }\r\n\r\n this.startedWatchers = [];\r\n this.watchersStarted = false;\r\n }\r\n\r\n protected StartWatcher(source: WatcherSource, callback: WatcherCallback): void {\r\n this.startedWatchers.push(watch(source, callback));\r\n }\r\n\r\n protected SetupWatchers() {\r\n\r\n const valueChangeHandlers = this.Descriptor.ValueChangeHandlers;\r\n const applicableChangeHandlers = this.Descriptor.ApplicableChangeHandlers;\r\n\r\n if (valueChangeHandlers.length) {\r\n this.StartWatcher(() => this.Value, (newValue, oldValue) => {\r\n\r\n ApplyHandlers(valueChangeHandlers, this.ExecutionContext, [newValue, oldValue]);\r\n\r\n });\r\n }\r\n\r\n if (this.Descriptor.Applicable) {\r\n this.StartWatcher(() => this.Applicable, (applicable) => {\r\n\r\n ApplyHandlers(applicableChangeHandlers, this.ExecutionContext, [applicable]);\r\n\r\n if (applicable) {\r\n this.Value = this.GenerateInitialValue();\r\n } else {\r\n this.Value = this.NotApplicableValue ?? null;\r\n }\r\n\r\n });\r\n }\r\n\r\n if (this.Descriptor.ComputedValue) {\r\n this.StartWatcher(() => this.ComputedValue, (computedValue) => {\r\n\r\n if (this.Applicable) {\r\n this.Value = computedValue ?? null;\r\n }\r\n\r\n });\r\n }\r\n\r\n if (this.Descriptor.NotApplicableValue) {\r\n this.StartWatcher(() => this.NotApplicableValue, (notApplicableValue) => {\r\n\r\n if (!this.Applicable) {\r\n this.Value = notApplicableValue ?? null;\r\n }\r\n\r\n });\r\n }\r\n }\r\n}\r\n","import { Property, RegularPropertyDescriptor, Scope } from '.';\r\nimport { Value } from '../Value';\r\nimport { Reactive } from '../Reactivity';\r\n\r\nexport class RegularProperty extends Property {\r\n\r\n @Reactive()\r\n private value: Value = null;\r\n\r\n public constructor(\r\n public readonly Descriptor: RegularPropertyDescriptor,\r\n public readonly Scope: Scope,\r\n public readonly Key: string,\r\n ) {\r\n super();\r\n }\r\n\r\n public get Value(): Value {\r\n return this.value;\r\n }\r\n\r\n public set Value(value: Value) {\r\n this.value = value;\r\n }\r\n\r\n public * AllChildProperties(): Generator {\r\n // No children\r\n }\r\n\r\n public Clear(): void {\r\n this.Value = null;\r\n }\r\n\r\n public Initialize(initialValue: Value | undefined): void {\r\n\r\n if (initialValue === undefined) {\r\n initialValue = this.GenerateInitialValue();\r\n }\r\n\r\n this.Value = initialValue;\r\n }\r\n}\r\n","import { Property, ChildScope, ChildScopesPropertyDescriptor, Scope, IScriptOptionsObject } from '.';\r\nimport { Value, ReadonlyValueList, Values, IsReadonlyCollection, Size } from '../Value';\r\nimport { ValidationError } from '../Validation';\r\nimport { Reactive, Memoize } from '../Reactivity';\r\nimport { IScript, Script } from '../Scripting';\r\n\r\nexport class ChildScopesProperty extends Property implements ReadonlyValueList {\r\n\r\n @Reactive()\r\n private childScopes: ChildScope[] = [];\r\n\r\n public get ChildScopes(): ReadonlyArray {\r\n return this.childScopes;\r\n }\r\n\r\n public get Value(): Value {\r\n return this;\r\n }\r\n\r\n public set Value(value: Value) {\r\n if (value === null || (IsReadonlyCollection(value) && Size(value) === 0)) {\r\n this.Clear();\r\n } else if (this.Size() === 0) {\r\n this.Initialize(value);\r\n } else {\r\n throw new Error(`ChildScopesProperty does not support Value assignment (yet).`);\r\n }\r\n }\r\n\r\n public constructor(\r\n public readonly Descriptor: ChildScopesPropertyDescriptor,\r\n public readonly Scope: Scope,\r\n public readonly Key: string,\r\n ) {\r\n super();\r\n }\r\n\r\n @Memoize()\r\n public get AllErrors(): ValidationError[] {\r\n if (!this.Applicable) {\r\n return [];\r\n }\r\n\r\n const errors = this.OwnErrors;\r\n\r\n for (const childScope of this.ChildScopes) {\r\n for (const error of childScope.AllErrors) {\r\n errors.push(error);\r\n }\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n public Size(): number {\r\n return this.ChildScopes.length;\r\n }\r\n\r\n public GetValueAtIndex(index: number): Value {\r\n if (index < 0 || index >= this.ChildScopes.length) {\r\n throw new RangeError(`Index out of range: ${index}`);\r\n }\r\n\r\n return this.ChildScopes[index].Value;\r\n }\r\n\r\n public * Values(): Generator {\r\n for (const childScope of this.ChildScopes) {\r\n yield childScope.Value;\r\n }\r\n }\r\n\r\n public IndexOf(childScope: ChildScope): number {\r\n return this.ChildScopes.indexOf(childScope);\r\n }\r\n\r\n public * AllChildProperties(): Generator {\r\n for (const childScope of this.childScopes) {\r\n yield* childScope.AllProperties();\r\n }\r\n }\r\n\r\n public Clear(): void {\r\n const removedChildScopes = this.childScopes.splice(0, this.childScopes.length);\r\n\r\n for (const removedChildScope of removedChildScopes) {\r\n removedChildScope.StopWatchers();\r\n }\r\n }\r\n\r\n public Initialize(initialValue: Value | undefined): void {\r\n\r\n if (initialValue === undefined) {\r\n initialValue = this.GenerateInitialValue();\r\n }\r\n\r\n initialValue = initialValue ?? [];\r\n\r\n if (!IsReadonlyCollection(initialValue)) {\r\n throw new Error(`Initial value for ChildScopesProperty must be an array.`);\r\n }\r\n\r\n for (const value of Values(initialValue)) {\r\n this.AppendChildScope(value);\r\n }\r\n }\r\n\r\n public AppendChildScope(initialValue?: Value | undefined): ChildScope {\r\n\r\n if (initialValue === undefined) {\r\n initialValue = {};\r\n }\r\n\r\n const newChildScope = this.CreateChildScope(initialValue);\r\n\r\n const existingChildScope = this.FindChildScopeByIdentifier(newChildScope.Identifier);\r\n if (existingChildScope !== null) {\r\n throw new Error(`Property ${this.Key} contains duplicate identifier: ${newChildScope.Identifier}`);\r\n }\r\n\r\n this.childScopes.push(newChildScope);\r\n\r\n return newChildScope;\r\n }\r\n\r\n public RemoveChildScope(childScope: ChildScope): void {\r\n\r\n const index = this.IndexOf(childScope);\r\n if (index < 0) {\r\n throw new Error(`Child scope not part of this property.`);\r\n }\r\n\r\n this.childScopes.splice(index, 1);\r\n\r\n childScope.StopWatchers();\r\n }\r\n\r\n public Sort(comparison: IScriptOptionsObject): void {\r\n\r\n const sorting = this.CompileSortingScript(comparison);\r\n\r\n this.childScopes.sort((a, b) => sorting.Invoke(this.ExecutionContext, [a, b]) ? -1 : 1);\r\n }\r\n\r\n private CompileSortingScript(comparison: IScriptOptionsObject): IScript {\r\n\r\n const parameters = comparison.Parameters ?? [];\r\n if (parameters.length != 2) {\r\n throw new Error(\"Comparison script requires 2 parameters\");\r\n }\r\n\r\n return Script.Compile(`${this.Key}.Sorting`, parameters, comparison.JavaScriptCode, comparison.Code ?? null);\r\n }\r\n\r\n public IsSortingRequired(comparison: IScriptOptionsObject): boolean {\r\n if (this.childScopes.length <= 1) {\r\n return false;\r\n }\r\n\r\n const sorting = this.CompileSortingScript(comparison);\r\n\r\n for (var i = 0;\r\n i < this.childScopes.length - 1; i++) {\r\n const inCorrectOrder = sorting.Invoke(this.ExecutionContext, [this.childScopes[i], this.childScopes[i + 1]]);\r\n if (!inCorrectOrder) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private FindChildScopeByIdentifier(identifier: string): ChildScope | null {\r\n for (const childScope of this.childScopes) {\r\n if (childScope.Identifier === identifier) {\r\n return childScope;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private CreateChildScope(initialData: Value) {\r\n const scope = new ChildScope(this.Descriptor.ChildScopeDescriptor, this);\r\n scope.Initialize(initialData);\r\n\r\n if (this.watchersStarted) {\r\n scope.StartWatchers();\r\n }\r\n\r\n return scope;\r\n }\r\n\r\n public StartWatchers() {\r\n super.StartWatchers();\r\n\r\n for (const childScope of this.ChildScopes) {\r\n childScope.StartWatchers();\r\n }\r\n }\r\n\r\n public StopWatchers() {\r\n super.StopWatchers();\r\n\r\n for (const childScope of this.ChildScopes) {\r\n childScope.StopWatchers();\r\n }\r\n }\r\n}\r\n","import { Script } from '../Scripting';\r\nimport { PropertyDescriptor, ChildScopesPropertyDescriptor, ScopeDescriptor, RegularPropertyDescriptor } from '.';\r\nimport { ValidationRule } from '../Validation';\r\nimport { ObjectEntries } from '../Utilities';\r\nimport { Translation } from '../Globalization';\r\n\r\n\r\nexport type IScriptOptionsObject = {\r\n Code?: string | undefined;\r\n JavaScriptCode: string;\r\n Parameters?: string[] | null;\r\n};\r\n\r\nexport type IScriptOptions = string | IScriptOptionsObject;\r\n\r\nexport interface IValidationRuleOptions {\r\n Expression: IScriptOptions;\r\n Message: Translation;\r\n}\r\n\r\nexport interface IScopeOptions {\r\n Functions?: { [name: string]: IScriptOptions } | null;\r\n Properties?: IPropertyOptions[] | null;\r\n}\r\n\r\nexport interface IPropertyOptionsBase {\r\n Type: 'RegularProperty' | 'ChildScopesProperty';\r\n Key: string;\r\n Applicable?: IScriptOptions | null;\r\n Required?: IScriptOptions | null;\r\n DefaultValue?: IScriptOptions | null;\r\n ComputedValue?: IScriptOptions | null;\r\n NotApplicableValue?: IScriptOptions | null;\r\n AvailableInDraft?: IScriptOptions | null;\r\n ValidationRules?: IValidationRuleOptions[] | null;\r\n ValueChangeHandlers?: IScriptOptions[] | null;\r\n ApplicableChangeHandlers?: IScriptOptions[] | null;\r\n}\r\n\r\nexport interface IRegularPropertyOptions extends IPropertyOptionsBase {\r\n Type: 'RegularProperty';\r\n}\r\n\r\nexport interface IChildScopesPropertyOptions extends IPropertyOptionsBase {\r\n Type: 'ChildScopesProperty';\r\n ChildScope: IScopeOptions;\r\n}\r\n\r\nexport type IPropertyOptions = IRegularPropertyOptions | IChildScopesPropertyOptions;\r\n\r\n\r\nexport function BuildFunction(path: string[], options: IScriptOptions) {\r\n return BuildScript(path, options, true);\r\n}\r\n\r\nexport function BuildExpression(path: string[], options: IScriptOptions) {\r\n return BuildScript(path, options, false);\r\n}\r\n\r\nexport function BuildScript(path: string[], options: IScriptOptions, allowParameters: boolean) {\r\n let code: string | null;\r\n let javaScriptCode: string;\r\n let parameters: string[];\r\n\r\n if (typeof options === 'string') {\r\n code = null;\r\n javaScriptCode = options;\r\n parameters = [];\r\n\r\n } else {\r\n code = RequireString(options.Code);\r\n javaScriptCode = RequireString(options.JavaScriptCode);\r\n parameters = Optional(options.Parameters, []);\r\n }\r\n\r\n for (const parameter of parameters) {\r\n RequireString(parameter);\r\n }\r\n\r\n const name = path.join('.');\r\n\r\n if (!allowParameters && parameters.length > 0) {\r\n throw new Error(`Expression '${name}' is not allowed to have parameters.`);\r\n }\r\n\r\n return Script.Compile(name, parameters, javaScriptCode, code);\r\n}\r\n\r\nexport function BuildValidationRule(path: string[], options: IValidationRuleOptions) {\r\n const expression = Require(options.Expression);\r\n const message = Require(options.Message);\r\n\r\n return new ValidationRule(BuildFunction(path, expression), message);\r\n}\r\n\r\nexport function BuildScopeDescriptor(path: string[], options: IScopeOptions) {\r\n const functions = Optional(options.Functions, {});\r\n const properties = Optional(options.Properties, []);\r\n\r\n const scopeDescriptor = new ScopeDescriptor();\r\n\r\n for (const [name, scriptOptions] of ObjectEntries(functions)) {\r\n Require(scriptOptions);\r\n\r\n scopeDescriptor.Functions.set(name, BuildFunction([...path, name], scriptOptions));\r\n }\r\n\r\n for (const propertyOptions of properties) {\r\n Require(propertyOptions);\r\n\r\n scopeDescriptor.PropertyDescriptors.set(propertyOptions.Key, BuildPropertyDescriptor([...path, propertyOptions.Key], propertyOptions));\r\n }\r\n\r\n return scopeDescriptor;\r\n}\r\n\r\nexport function BuildPropertyDescriptor(path: string[], options: IPropertyOptions) {\r\n let propertyDescriptor: PropertyDescriptor;\r\n\r\n if (options.Type === 'RegularProperty') {\r\n propertyDescriptor = new RegularPropertyDescriptor();\r\n\r\n } else if (options.Type === 'ChildScopesProperty') {\r\n Require(options.ChildScope);\r\n\r\n const childScopePath = [...path];\r\n childScopePath[childScopePath.length - 1] += '[]';\r\n\r\n const childScopeDescriptor = BuildScopeDescriptor(childScopePath, options.ChildScope);\r\n\r\n propertyDescriptor = new ChildScopesPropertyDescriptor(childScopeDescriptor);\r\n\r\n } else {\r\n throw new Error(`Unknown property type.`);\r\n }\r\n\r\n if (IsSet(options.Applicable)) {\r\n propertyDescriptor.Applicable = BuildExpression([...path, 'Applicable'], options.Applicable);\r\n }\r\n\r\n if (IsSet(options.Required)) {\r\n propertyDescriptor.Required = BuildExpression([...path, 'Required'], options.Required);\r\n }\r\n\r\n if (IsSet(options.DefaultValue)) {\r\n propertyDescriptor.DefaultValue = BuildExpression([...path, 'DefaultValue'], options.DefaultValue);\r\n }\r\n\r\n if (IsSet(options.ComputedValue)) {\r\n propertyDescriptor.ComputedValue = BuildExpression([...path, 'ComputedValue'], options.ComputedValue);\r\n }\r\n\r\n if (IsSet(options.NotApplicableValue)) {\r\n propertyDescriptor.NotApplicableValue = BuildExpression([...path, 'NotApplicableValue'], options.NotApplicableValue);\r\n }\r\n\r\n if (IsSet(options.AvailableInDraft)) {\r\n propertyDescriptor.AvailableInDraft = BuildExpression([...path, 'AvailableInDraft'], options.AvailableInDraft);\r\n }\r\n\r\n const validationRules = Optional(options.ValidationRules, []);\r\n\r\n for (const validationRule of validationRules) {\r\n Require(validationRule);\r\n\r\n propertyDescriptor.ValidationRules.push(BuildValidationRule([...path, 'ValidationRule'], validationRule));\r\n }\r\n\r\n const valueChangeHandlers = Optional(options.ValueChangeHandlers, []);\r\n\r\n for (const valueChangeHandler of valueChangeHandlers) {\r\n Require(valueChangeHandler);\r\n\r\n propertyDescriptor.ValueChangeHandlers.push(BuildFunction([...path, 'ValueChangeHandler'], valueChangeHandler));\r\n }\r\n\r\n const applicableChangeHandlers = Optional(options.ApplicableChangeHandlers, []);\r\n\r\n for (const applicableChangeHandler of applicableChangeHandlers) {\r\n Require(applicableChangeHandler);\r\n\r\n propertyDescriptor.ApplicableChangeHandlers.push(BuildFunction([...path, 'ApplicableChangeHandler'], applicableChangeHandler));\r\n }\r\n\r\n return propertyDescriptor;\r\n}\r\n\r\n\r\n\r\n\r\nfunction IsSet(value: T): value is Exclude {\r\n return value !== undefined && value !== null;\r\n}\r\n\r\nfunction Require(value: T): Exclude {\r\n if (!IsSet(value)) {\r\n throw new Error(`Missing option.`);\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction Optional(value: TValue, fallback: TFallback): Exclude | TFallback {\r\n if (IsSet(value)) {\r\n return value;\r\n\r\n } else {\r\n return fallback;\r\n }\r\n}\r\n\r\nfunction RequireString(value: unknown): string {\r\n Require(value);\r\n\r\n if (typeof value !== 'string') {\r\n throw new Error(`Options must be string.`);\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction OptionalString(value: unknown, fallback: TFallback): string | TFallback {\r\n value = Optional(value, fallback);\r\n\r\n if (typeof value !== 'string') {\r\n throw new Error(`Options must be string.`);\r\n }\r\n\r\n return value;\r\n}\r\n","import { Scope, IMutation } from '.';\r\nimport { ReadonlyValueMap, Value, IsReadonlyCollection, Values, IsReadonlyMap, StringifyJson, GetValueByKey, Entries } from '../Value';\r\nimport { RegularProperty } from './RegularProperty';\r\nimport { ChildScopesProperty } from './ChildScopesProperty';\r\nimport { IScript, IExecutionContext } from '../Scripting';\r\n\r\nexport function ParseMutions(mutations: Value): IMutation[] {\r\n\r\n if (mutations === null) {\r\n return [];\r\n }\r\n\r\n if (!IsReadonlyCollection(mutations)) {\r\n mutations = [mutations];\r\n }\r\n\r\n const results: IMutation[] = [];\r\n\r\n for (const mutation of Values(mutations)) {\r\n if (mutation === null) {\r\n continue;\r\n }\r\n\r\n results.push(ParseMution(mutation));\r\n }\r\n\r\n return results;\r\n}\r\n\r\nfunction ParseMution(mutation: Value): IMutation {\r\n if (!IsReadonlyMap(mutation)) {\r\n throw new Error(`Invalid mutation object: ${StringifyJson(mutation)}`);\r\n }\r\n\r\n const target = GetValueByKey(mutation, \"Target\");\r\n const entries = GetValueByKey(mutation, \"Entries\");\r\n\r\n if (target === null || target === undefined) {\r\n throw new Error(`Assignment target required.`);\r\n }\r\n\r\n if (entries === null || entries === undefined) {\r\n throw new Error(`Assignment entries required.`);\r\n }\r\n\r\n if (!(target instanceof Scope)) {\r\n throw new Error(`Can only assign to scope objects. Not to ${StringifyJson(target)}`);\r\n }\r\n\r\n if (!IsReadonlyMap(entries)) {\r\n throw new Error(`Don't know how to assign: ${StringifyJson(entries)}`);\r\n }\r\n\r\n return {\r\n Target: target,\r\n Entries: entries,\r\n };\r\n}\r\n\r\nexport function ApplyMutions(mutations: IMutation[]): void {\r\n for (const mutation of mutations) {\r\n\r\n const scope = mutation.Target;\r\n\r\n for (const [key, value] of Entries(mutation.Entries)) {\r\n const property = scope.GetProperty(key);\r\n if (!property) {\r\n console.warn(`Skipping assignment of unknown key: ${key}`);\r\n\r\n } else if (property instanceof RegularProperty) {\r\n property.Value = value;\r\n\r\n } else if (property instanceof ChildScopesProperty) {\r\n property.Clear();\r\n property.Initialize(value);\r\n\r\n } else {\r\n throw new Error(`Unknown property type.`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function ApplyHandlers(handlers: IScript[], context: IExecutionContext, args: ReadonlyArray): void {\r\n for(const handler of handlers) {\r\n try {\r\n const mutations = handler.Invoke(context, args);\r\n ApplyMutions(ParseMutions(mutations));\r\n\r\n } catch (error) {\r\n // Bugsnag not available in V8 backend.\r\n console.error(error);\r\n }\r\n }\r\n}","// The order is important to prevent circular references\r\n\r\nexport * from './RootExecutionContext';\r\nexport * from './ScopeDescriptor';\r\n\r\nexport * from './PropertyDescriptor';\r\nexport * from './RegularPropertyDescriptor';\r\nexport * from './ChildScopesPropertyDescriptor';\r\n\r\nexport * from './Scope';\r\nexport * from './RootScope';\r\nexport * from './ChildScope';\r\n\r\nexport * from './IMutation';\r\n\r\nexport * from './Property';\r\nexport * from './RegularProperty';\r\nexport * from './ChildScopesProperty';\r\n\r\nexport * from './ScopeBuilder';\r\nexport * from './MutationFunctions';\r\n","import Vue from 'vue';\r\nimport { Ref, ComputedGetter, ReadonlyRef, WatcherSource, WatcherCallback, ComputedSetter, WatcherStopHandle, ComputedOptions } from '.';\r\n\r\nexport function ref(value: T): Ref {\r\n\r\n const instance = new Vue({\r\n data: {\r\n value,\r\n },\r\n });\r\n\r\n return {\r\n get value() {\r\n return instance.value;\r\n },\r\n set value(newValue: T) {\r\n instance.value = newValue;\r\n },\r\n };\r\n}\r\n\r\n\r\n\r\nconst watcherInstance = new Vue();\r\n\r\nexport function watch(source: WatcherSource, callback: WatcherCallback): WatcherStopHandle {\r\n return watcherInstance.$watch(source.bind(undefined), callback.bind(undefined));\r\n}\r\n\r\n\r\n\r\nexport function computed(getter: ComputedGetter): ReadonlyRef;\r\nexport function computed(options: ComputedOptions): Ref;\r\nexport function computed(optionsOrGetter: ComputedOptions | ComputedGetter): Ref | ReadonlyRef {\r\n\r\n if (typeof optionsOrGetter === 'function') {\r\n return computedGetInternal(optionsOrGetter);\r\n\r\n } else {\r\n return computedGetSetInternal(optionsOrGetter.get, optionsOrGetter.set);\r\n }\r\n}\r\n\r\nfunction computedGetInternal(getter: ComputedGetter): ReadonlyRef {\r\n const instance = new Vue({\r\n computed: {\r\n value() {\r\n return getter();\r\n },\r\n },\r\n });\r\n\r\n return {\r\n get value() {\r\n return instance.value;\r\n },\r\n };\r\n}\r\n\r\nfunction computedGetSetInternal(getter: ComputedGetter, setter: ComputedSetter): Ref {\r\n const instance = new Vue({\r\n computed: {\r\n value: {\r\n get() {\r\n return getter();\r\n },\r\n set(value: T) {\r\n setter(value);\r\n },\r\n },\r\n },\r\n });\r\n\r\n return {\r\n get value() {\r\n return instance.value;\r\n },\r\n set value(value: T) {\r\n instance.value = value;\r\n },\r\n };\r\n}","import { Ref, ref, computed } from '.';\r\n\r\nconst refMapKey = '__refs';\r\n\r\nfunction getRefMap(instance: any): Map> {\r\n if (!instance.hasOwnProperty(refMapKey)) {\r\n Object.defineProperty(instance, refMapKey, {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: new Map(),\r\n });\r\n }\r\n\r\n return instance[refMapKey];\r\n}\r\n\r\nfunction getRef(instance: any, property: string | symbol, factory: () => Ref): Ref {\r\n const map = getRefMap(instance);\r\n\r\n let reference = map.get(property);\r\n if (!reference) {\r\n reference = factory();\r\n map.set(property, reference);\r\n }\r\n\r\n return reference;\r\n}\r\n\r\nexport function Reactive() {\r\n return (target: any, property: string | symbol) => {\r\n\r\n const initialValue = target.hasOwnProperty(property) ? target[property] : undefined;\r\n\r\n const refFactory = () => ref(initialValue);\r\n\r\n Object.defineProperty(target, property, {\r\n configurable: true,\r\n enumerable: true,\r\n get() {\r\n return getRef(this, property, refFactory).value;\r\n },\r\n set(value: any) {\r\n getRef(this, property, refFactory).value = value;\r\n },\r\n });\r\n };\r\n}\r\n\r\nexport function Memoize() {\r\n return (target: any, property: string | symbol, descriptor: PropertyDescriptor) => {\r\n\r\n const originalGet = descriptor.get;\r\n const originalSet = descriptor.set;\r\n\r\n if (!originalGet) {\r\n throw new Error('Memoize must be called on a getter.');\r\n }\r\n\r\n let refFactory: () => Ref;\r\n if (originalSet) {\r\n refFactory = function (this: any) {\r\n return computed({\r\n get: originalGet.bind(this),\r\n set: originalSet.bind(this),\r\n });\r\n };\r\n\r\n } else {\r\n refFactory = function (this: any) {\r\n return computed(originalGet.bind(this));\r\n };\r\n }\r\n\r\n descriptor.get = function () {\r\n return getRef(this, property, refFactory.bind(this)).value;\r\n };\r\n\r\n if (originalSet) {\r\n descriptor.set = function (value: any) {\r\n getRef(this, property, refFactory.bind(this)).value = value;\r\n };\r\n }\r\n };\r\n}\r\n","export * from './Types';\r\nexport * from './Implementation';\r\nexport * from './Decorators';\r\n","export class FormatDecimalError extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"FormatDecimalError\";\r\n }\r\n}","export interface WritableObject { [key: string]: TValue | undefined; }\r\nexport type ReadonlyObject = Readonly>;\r\n\r\nexport function ObjectSize(object: ReadonlyObject) {\r\n let size = 0;\r\n\r\n for (const entry of ObjectEntries(object)) {\r\n size++;\r\n }\r\n\r\n return size;\r\n}\r\n\r\nexport function ObjectHasKey(object: ReadonlyObject, key: string) {\r\n return object.hasOwnProperty(key) && object[key] !== undefined;\r\n}\r\n\r\nexport function ObjectGetValueByKey(object: ReadonlyObject, key: string): TValue | undefined {\r\n return object.hasOwnProperty(key) ? object[key] : undefined;\r\n}\r\n\r\nexport function ObjectSetValueByKey(object: WritableObject, key: string, value: TValue): void {\r\n object[key] = value;\r\n // TODO: Vue.set\r\n}\r\n\r\nexport function* ObjectEntries(object: ReadonlyObject): Generator<[string, TValue]> {\r\n for (const key in object) {\r\n if (ObjectHasKey(object, key)) {\r\n yield [key, object[key]!];\r\n }\r\n }\r\n}\r\n\r\nexport function* ObjectKeys(object: ReadonlyObject): Generator {\r\n for (const [key, value] of ObjectEntries(object)) {\r\n yield key;\r\n }\r\n}\r\n\r\nexport function* ObjectValues(object: ReadonlyObject): Generator {\r\n for (const [key, value] of ObjectEntries(object)) {\r\n yield value;\r\n }\r\n}\r\n","// The order is important to prevent circular references\r\n\r\nexport * from './Errors';\r\nexport * from './Objects';","export { default as moment, Moment } from 'moment';\r\nimport { Decimal as BaseDecimal } from 'decimal.js';\r\nimport { v4 as v4uuid } from 'uuid';\r\n\r\nconst csharpDecimalPrecision = 28;\r\n\r\nexport type Decimal = BaseDecimal;\r\nexport const Decimal = BaseDecimal.clone({\r\n precision: csharpDecimalPrecision,\r\n toExpNeg: -(csharpDecimalPrecision + 1),\r\n toExpPos: csharpDecimalPrecision + 1,\r\n rounding: BaseDecimal.ROUND_HALF_UP,\r\n});\r\n\r\nfunction randomByte() {\r\n return Math.floor(Math.random() * 256);\r\n}\r\n\r\nfunction randomBytes(count: number) {\r\n var bytes = new Array(count);\r\n\r\n for (var i = 0; i < count; i++) {\r\n bytes[i] = randomByte();\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\n// the `v4uuid` function uses the `crypto.getRandomValues()` browser API by default, which isn't available in the back-end scripting engine.\r\nexport function generateCryptographicallyWeakUuid() {\r\n return v4uuid({\r\n random: randomBytes(16),\r\n });\r\n}","import { Reactive } from '../Reactivity';\r\nimport { Language } from '../Globalization';\r\nimport { Scope } from '../Scopes';\r\nimport { IDiff } from '../Diff/IDiff';\r\n\r\nexport abstract class FormController {\r\n\r\n @Reactive()\r\n public readonly RootScope: Scope;\r\n\r\n @Reactive()\r\n public ActiveLanguages: Language[];\r\n\r\n @Reactive()\r\n public readonly Diff: IDiff;\r\n\r\n public constructor(\r\n rootScope: Scope,\r\n activeLanguages: Language[],\r\n diff: IDiff\r\n ) {\r\n this.RootScope = rootScope;\r\n this.ActiveLanguages = activeLanguages;\r\n this.Diff = diff;\r\n }\r\n\r\n public abstract LogError(error: Error): void;\r\n}\r\n","export enum DiffFormatter {\r\n None = 'None',\r\n Generic = 'Generic',\r\n DatePicker = 'DatePicker',\r\n DateTimePicker = 'DateTimePicker',\r\n NumberInput = 'NumberInput',\r\n TextInput = 'TextInput',\r\n}","import { ChildScope } from \"./ChildScope\";\r\nimport { Property } from \"./Property\";\r\n\r\nexport enum SegmentType {\r\n GetValueByKey = 'GetValueByKey',\r\n GetElementByIdentifier = 'GetElementByIdentifier',\r\n}\r\n\r\nexport interface IBaseSegment {\r\n Type: SegmentType;\r\n}\r\n\r\nexport interface IGetValueByKeySegment extends IBaseSegment {\r\n Type: SegmentType.GetValueByKey;\r\n Key: string;\r\n}\r\n\r\nexport interface IGetElementByIdentifierSegment extends IBaseSegment {\r\n Type: SegmentType.GetElementByIdentifier;\r\n Identifier: string;\r\n}\r\n\r\nexport type ISegment = IGetValueByKeySegment | IGetElementByIdentifierSegment;\r\n\r\nexport function GetPath(property: Property): ISegment[] {\r\n\r\n const segments: ISegment[] = [];\r\n\r\n while (true) {\r\n segments.unshift({\r\n Type: SegmentType.GetValueByKey,\r\n Key: property.Key,\r\n });\r\n\r\n if (property.Scope instanceof ChildScope) {\r\n segments.unshift({\r\n Type: SegmentType.GetElementByIdentifier,\r\n Identifier: property.Scope.Identifier,\r\n });\r\n\r\n property = property.Scope.ParentProperty;\r\n\r\n } else {\r\n return segments;\r\n }\r\n }\r\n}","import { Property, Scope, ChildScope } from '../Scopes';\r\nimport { NormalizeScalar, ToDateMoment, FormatDateDisplayValue, ToDateTimeMoment, FormatDateTimeDisplayValue } from '../Value';\r\nimport { IsEmpty } from '../BuiltInFunctions';\r\nimport { Memoize } from '../Reactivity';\r\nimport { IDiff, NO_DIFF } from '../Diff/IDiff';\r\nimport { DiffType } from '../Diff/DiffType';\r\nimport { GetPath, ISegment, SegmentType } from '../Scopes/Path';\r\nimport { GetArrayModifications } from '../Diff/ArrayModifications';\r\nimport { DiffFormatter } from '../Diff/DiffFormatter';\r\nimport { ComponentController } from '.';\r\n\r\nexport class DiffController {\r\n public constructor(\r\n private readonly componentController: ComponentController,\r\n private readonly rootDiff: IDiff,\r\n private readonly scope: Scope,\r\n private readonly property: Property | null,\r\n private readonly diffFormatter: DiffFormatter) {\r\n }\r\n\r\n @Memoize()\r\n private get ParentDiff(): IDiff {\r\n if (!(this.scope instanceof ChildScope)) {\r\n return NO_DIFF;\r\n }\r\n\r\n const path = GetPath(this.scope.ParentProperty)\r\n return this.GetDiffAtPath(this.rootDiff, path);\r\n }\r\n\r\n @Memoize()\r\n public get Diff(): IDiff {\r\n if (this.property === null) {\r\n return NO_DIFF;\r\n }\r\n\r\n const path = GetPath(this.property);\r\n return this.GetDiffAtPath(this.rootDiff, path);\r\n }\r\n\r\n private GetDiffAtPath(diff: IDiff, path: ISegment[]): IDiff {\r\n let currentDiff: IDiff = diff;\r\n\r\n for (const segment of path) {\r\n if (segment.Type === SegmentType.GetValueByKey) {\r\n if (currentDiff.Type === DiffType.Object) {\r\n const diffCandidate = currentDiff.ChangesByKey[segment.Key];\r\n if (diffCandidate === undefined) {\r\n return NO_DIFF;\r\n }\r\n currentDiff = diffCandidate;\r\n }\r\n else {\r\n return NO_DIFF;\r\n }\r\n }\r\n\r\n if (segment.Type === SegmentType.GetElementByIdentifier) {\r\n if (currentDiff.Type === DiffType.Array) {\r\n const diffCandidate = currentDiff.ChangesByIdentifier[segment.Identifier];\r\n if (diffCandidate === undefined) {\r\n return NO_DIFF;\r\n }\r\n currentDiff = diffCandidate;\r\n }\r\n else {\r\n return NO_DIFF;\r\n }\r\n }\r\n }\r\n\r\n return currentDiff;\r\n }\r\n\r\n @Memoize()\r\n private get FormatDatePickerDiff(): string {\r\n if (this.Diff.Type !== DiffType.Simple) {\r\n throw new Error(\"Diff type was not Simple.\");\r\n }\r\n\r\n if (typeof this.Diff.OldValue !== \"string\") {\r\n throw new Error(\"Value could not be formatted\");\r\n }\r\n const date = ToDateMoment(this.Diff.OldValue);\r\n return date !== undefined ? FormatDateDisplayValue(date) : \"\";\r\n }\r\n\r\n @Memoize()\r\n private get FormatDateTimePickerDiff(): string {\r\n if (this.Diff.Type !== DiffType.Simple) {\r\n throw new Error(\"Diff type was not Simple.\");\r\n }\r\n\r\n if (typeof this.Diff.OldValue !== \"string\") {\r\n throw new Error(\"Value could not be formatted\");\r\n }\r\n const date = ToDateTimeMoment(this.Diff.OldValue);\r\n return date !== undefined ? FormatDateTimeDisplayValue(date) : \"\";\r\n }\r\n\r\n @Memoize()\r\n private get FormatNumberInputDiff(): string {\r\n if (this.Diff.Type !== DiffType.Simple) {\r\n throw new Error(\"Diff type was not Simple.\");\r\n }\r\n\r\n let displayValue = this.componentController.convertToDisplayValue(this.Diff.OldValue);\r\n displayValue = NormalizeScalar(displayValue);\r\n if (typeof displayValue !== \"string\") {\r\n throw new Error(\"Value could not be formatted\");\r\n }\r\n\r\n return displayValue.replace(\".\", \",\");\r\n }\r\n\r\n @Memoize()\r\n private get FormatTextInputDiff(): string {\r\n if (this.Diff.Type !== DiffType.Simple) {\r\n throw new Error(\"Diff type was not Simple.\");\r\n }\r\n\r\n if (typeof this.Diff.OldValue !== \"string\") {\r\n throw new Error(\"Value could not be formatted\");\r\n }\r\n\r\n return this.Diff.OldValue;\r\n }\r\n\r\n @Memoize()\r\n public get FormatDiff(): string {\r\n switch (this.diffFormatter) {\r\n case DiffFormatter.DatePicker:\r\n return this.FormatDatePickerDiff;\r\n case DiffFormatter.DateTimePicker:\r\n return this.FormatDateTimePickerDiff;\r\n case DiffFormatter.NumberInput:\r\n return this.FormatNumberInputDiff;\r\n case DiffFormatter.TextInput:\r\n return this.FormatTextInputDiff;\r\n default:\r\n throw new Error(`${this.diffFormatter}. Unexpected formatter.`);\r\n }\r\n }\r\n\r\n @Memoize()\r\n public get ShowAddedRepeatableItemIndicator(): boolean {\r\n if (!(this.scope instanceof ChildScope)) {\r\n throw new Error(\"Current scope is not an instance of ChildScope\");\r\n }\r\n\r\n const arrayModifications = GetArrayModifications(this.ParentDiff);\r\n return arrayModifications.AddedIdentifiers.has(this.scope.Identifier);\r\n }\r\n\r\n @Memoize()\r\n public get ShowRepeatableDiffSummary(): boolean {\r\n const arrayModifications = GetArrayModifications(this.Diff);\r\n return arrayModifications.AddedIdentifiers.size !== 0 || arrayModifications.RemovedIdentifiers.size !== 0;\r\n }\r\n\r\n @Memoize()\r\n public get ShowCommonDecorationsDiff(): boolean {\r\n return this.diffFormatter != DiffFormatter.None && this.Diff.Type !== DiffType.None;\r\n }\r\n\r\n @Memoize()\r\n public get PreviouslyEmpty(): boolean {\r\n if (this.Diff.Type !== DiffType.Simple) {\r\n return false;\r\n }\r\n\r\n if (IsEmpty(this.Diff.OldValue)) {\r\n return true;\r\n }\r\n\r\n if (typeof this.Diff.OldValue === \"string\") {\r\n if (this.Diff.OldValue.trim() === \"\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}","import { Property, Scope, RegularProperty, ChildScopesProperty, ChildScope, BuildExpression, BuildFunction, IScriptOptionsObject } from '../Scopes';\r\nimport { IScript, IExecutionContext, Script } from '../Scripting';\r\nimport { Value, NormalizeScalar, IsNull, IsString, IsBoolean, IsReadonlyCollection, IsReadonlyMap, ReadonlyValueMap, ToArray, ReadonlyValueCollection, ToStringArray, StringifyJson } from '../Value';\r\nimport { IsTruthy } from '../BuiltInFunctions';\r\nimport { FormController } from './FormController';\r\nimport { Reactive, Memoize } from '../Reactivity';\r\nimport { ValidationError } from '../Validation';\r\nimport { IComponentControllerOptions } from '.';\r\nimport { DiffFormatter } from '../Diff/DiffFormatter';\r\nimport { DiffController } from './DiffController';\r\n\r\nexport class ComponentController {\r\n\r\n public readonly FormController: FormController;\r\n public readonly DiffController: DiffController;\r\n public readonly Scope: Scope;\r\n public readonly Property: Property | null;\r\n\r\n private readonly disabledScript: IScript | null;\r\n private readonly guardedScript: IScript | null;\r\n private readonly hiddenScript: IScript | null;\r\n private readonly convertToDisplayValueScript: IScript | null;\r\n private readonly convertFromDisplayValueScript: IScript | null;\r\n public readonly AvailableOptionsScript: IScript | null;\r\n private readonly formatSelectedOptionScript: IScript | null;\r\n\r\n public constructor(formController: FormController, scope: Scope, options: IComponentControllerOptions) {\r\n this.FormController = formController;\r\n this.Scope = scope;\r\n this.Property = options.PropertyKey ? scope.GetRequiredProperty(options.PropertyKey) : null;\r\n this.disabledScript = options.Disabled ? BuildExpression([], options.Disabled) : null;\r\n this.guardedScript = options.Guarded ? BuildExpression([], options.Guarded) : null;\r\n this.hiddenScript = options.Hidden ? BuildExpression([], options.Hidden) : null;\r\n this.convertToDisplayValueScript = options.ConvertToDisplayValue ? BuildFunction([], options.ConvertToDisplayValue) : null;\r\n this.convertFromDisplayValueScript = options.ConvertFromDisplayValue ? BuildFunction([], options.ConvertFromDisplayValue) : null;\r\n this.AvailableOptionsScript = options.AvailableOptions ? BuildExpression([], options.AvailableOptions) : null;\r\n this.formatSelectedOptionScript = options.FormatSelectedOption ? BuildFunction([], options.FormatSelectedOption) : null;\r\n // TODO: UAB-1155: Circular dependency van ComponentController\r\n this.DiffController = new DiffController(this, this.FormController.Diff, this.Scope, this.Property, options.DiffFormatter ?? DiffFormatter.None);\r\n }\r\n\r\n @Reactive()\r\n private renderErrorMessage: string | null = null;\r\n\r\n public get RenderErrorMessage() {\r\n return this.renderErrorMessage;\r\n }\r\n\r\n @Memoize()\r\n public get Value(): Value {\r\n if (!this.Property) {\r\n throw new Error(`Can't get value without a property.`);\r\n }\r\n\r\n return this.Property.Value;\r\n }\r\n\r\n public set Value(value: Value) {\r\n if (!this.Property) {\r\n throw new Error(`Can't set value without a property.`);\r\n }\r\n\r\n if (!(this.Property instanceof RegularProperty)) {\r\n throw new Error(`Can only set value on a RegularProperty.`);\r\n }\r\n\r\n this.Property.Value = value;\r\n }\r\n\r\n @Memoize()\r\n public get ValueOrNull(): Value {\r\n if (!this.Property) {\r\n return null;\r\n }\r\n\r\n return this.Property.Value;\r\n }\r\n\r\n @Memoize()\r\n public get ValueAsJavaScriptArray(): Value[] {\r\n\r\n const results = ToArray(this.Value);\r\n if (results === undefined) {\r\n throw new Error(`Input is not array-like.`);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n @Memoize()\r\n public get ValueAsFormattedSelectedOption(): string | null {\r\n return this.Value !== null ? this.FormatSelectedOption(this.Value) : null;\r\n }\r\n\r\n @Memoize()\r\n public get DisplayValue(): Value {\r\n return this.convertToDisplayValue(this.Value);\r\n }\r\n\r\n public set DisplayValue(value: Value) {\r\n this.Value = this.convertFromDisplayValue(value);\r\n }\r\n\r\n private static ParseSimpleValue(value: Value) {\r\n value = NormalizeScalar(value);\r\n\r\n if (IsNull(value) || IsString(value) || IsBoolean(value)) {\r\n return value;\r\n }\r\n\r\n throw new Error(`Whoops! Can only handle value types for now. Reference types cause Vue to enter an infinite render loop, because each invocation returns a new instance.`);\r\n }\r\n\r\n @Memoize()\r\n public get ExecutionContext(): IExecutionContext {\r\n\r\n if (this.Scope) {\r\n return this.Scope;\r\n }\r\n\r\n throw new Error(`Can't get executionContext without a property or scope.`);\r\n }\r\n\r\n @Memoize()\r\n public get Required() {\r\n if (!this.Property) {\r\n return false;\r\n }\r\n\r\n try {\r\n return this.Property.Required;\r\n\r\n } catch (error) {\r\n this.LogError(new Error(`Error while evaluating Required for key ${this.Property.Key}\\n${error}`));\r\n\r\n return false;\r\n }\r\n }\r\n\r\n @Memoize()\r\n public get Disabled() {\r\n return this.EvaluateBooleanExpression(this.disabledScript, false);\r\n }\r\n\r\n @Memoize()\r\n public get Guarded() {\r\n return this.EvaluateBooleanExpression(this.guardedScript, false);\r\n }\r\n\r\n @Memoize()\r\n public get Hidden() {\r\n return this.EvaluateBooleanExpression(this.hiddenScript, false);\r\n }\r\n\r\n public ComputeAvailableOptions(executionContext: IExecutionContext): ReadonlyValueCollection | null {\r\n if (!this.AvailableOptionsScript) {\r\n return null;\r\n }\r\n\r\n var result = this.InvokeScript(this.AvailableOptionsScript, [], null, executionContext);\r\n if (result == null) {\r\n return [];\r\n }\r\n\r\n if (!IsReadonlyCollection(result)) {\r\n this.LogError(new Error(`AvailableOptions must return an array.`));\r\n return [];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n @Memoize()\r\n public get AvailableOptions(): ReadonlyValueCollection | null {\r\n return this.ComputeAvailableOptions(this.ExecutionContext);\r\n }\r\n\r\n @Memoize()\r\n public get AvailableOptionsAsStrings(): string[] | null {\r\n\r\n const availableOptions = this.AvailableOptions;\r\n if (availableOptions === null) {\r\n return null;\r\n }\r\n\r\n const options = ToStringArray(availableOptions);\r\n if (options === undefined) {\r\n this.LogError(new Error(`AvailableOptions must return array of strings.`));\r\n return [];\r\n }\r\n\r\n return options;\r\n }\r\n\r\n public FormatSelectedOption(optionData: Value): string | null {\r\n\r\n const formattedOption = NormalizeScalar(this.InvokeScript(this.formatSelectedOptionScript, [optionData], null));\r\n\r\n if (formattedOption === null) {\r\n return null;\r\n }\r\n\r\n if (typeof formattedOption !== 'string') {\r\n this.LogError(new Error(`FormatSelectedOption must return a string (or null). Instead got: ${StringifyJson(formattedOption)}`));\r\n return null;\r\n }\r\n\r\n return formattedOption.trim();\r\n }\r\n\r\n @Memoize()\r\n public get ApplicableValidationErrors(): ValidationError[] {\r\n if (!this.Property) {\r\n return [];\r\n }\r\n\r\n try {\r\n return this.Property.OwnErrors;\r\n\r\n } catch (error) {\r\n this.LogError(new Error(`Error while evaluating validation rules for key ${this.Property.Key}\\n${error}`));\r\n\r\n return []; // The exception is very sad, but return \"no validation errors\" to prevent the user getting stuck.\r\n }\r\n }\r\n\r\n public InvokeScript(script: IScript | null | undefined, args: Value[], defaultValue: Value, executionContext: IExecutionContext | null = null): Value {\r\n\r\n if (!script) {\r\n return defaultValue;\r\n }\r\n\r\n try {\r\n return script.Invoke(executionContext ?? this.ExecutionContext, args);\r\n\r\n } catch (error) {\r\n this.LogError(new Error(`Error while evaluating: ${script}\\n${error}`));\r\n\r\n return defaultValue;\r\n }\r\n }\r\n\r\n public EvaluateBooleanExpression(script: IScript | null | undefined, defaultValue: boolean, args: Value[] = []): boolean {\r\n\r\n return IsTruthy(this.InvokeScript(script, args, defaultValue));\r\n }\r\n\r\n public LogError(error: Error) {\r\n\r\n if (!this.renderErrorMessage) { // Set error message only once, to prevent infinite render loops.\r\n this.renderErrorMessage = error.message;\r\n }\r\n\r\n this.FormController.LogError(error);\r\n }\r\n\r\n public AddChildScope(defaultValue?: ReadonlyValueMap | undefined) {\r\n\r\n // Sanity check, because this function is called from the HTML template where there is no type checking.\r\n if (defaultValue !== undefined && !IsReadonlyMap(defaultValue)) {\r\n throw new Error(`Initial value of a scope must be an object.`);\r\n }\r\n\r\n if (!(this.Property instanceof ChildScopesProperty)) {\r\n throw new Error(`Can't add child scope to: ${this.Property}`);\r\n }\r\n\r\n this.Property.AppendChildScope(defaultValue);\r\n }\r\n\r\n public IsSortingRequired(script: IScriptOptionsObject): boolean {\r\n if (!(this.Property instanceof ChildScopesProperty)) {\r\n throw new Error(`Can't check sorting of: ${this.Property}`);\r\n }\r\n\r\n return this.Property.IsSortingRequired(script);\r\n }\r\n\r\n public SortChildScopes(script: IScriptOptionsObject) {\r\n if (!(this.Property instanceof ChildScopesProperty)) {\r\n throw new Error(`Can't sort: ${this.Property}`);\r\n }\r\n\r\n this.Property.Sort(script);\r\n }\r\n\r\n public RemoveChildScope(childScope: ChildScope) {\r\n\r\n // Sanity check, because this function is called from the HTML template where there is no type checking.\r\n if (!(childScope instanceof ChildScope)) {\r\n throw new Error(`Can't remove child scope: ${childScope}`);\r\n }\r\n\r\n if (!(this.Property instanceof ChildScopesProperty)) {\r\n throw new Error(`Can't remove child scope from: ${this.Property}`);\r\n }\r\n\r\n this.Property.RemoveChildScope(childScope);\r\n }\r\n\r\n public convertToDisplayValue(value: Value): Value {\r\n return ComponentController.ParseSimpleValue(this.InvokeScript(this.convertToDisplayValueScript, [value], value));\r\n }\r\n\r\n public convertFromDisplayValue(value: Value): Value {\r\n return ComponentController.ParseSimpleValue(this.InvokeScript(this.convertFromDisplayValueScript, [value], value));\r\n }\r\n}","// The order is important to prevent circular references\r\n\r\nexport * from './IComponentControllerOptions';\r\nexport * from './FormController';\r\nexport * from './ComponentController';\r\n","import { RegularPropertyDescriptor } from './RegularPropertyDescriptor';\r\nimport { Property, RegularProperty, ChildScopesProperty, ScopeDescriptor } from '.';\r\nimport { IExecutionContext, IScript } from '../Scripting';\r\nimport { Value, ReadonlyValueDictionary, IsReadonlyMap, Keys, GetValueByKey } from '../Value';\r\nimport { ValidationError } from '../Validation';\r\nimport { Memoize, Reactive } from '../Reactivity';\r\nimport { ObjectValues, ObjectHasKey, ObjectGetValueByKey, ObjectEntries, ObjectSetValueByKey } from '../Utilities';\r\n\r\nexport abstract class Scope implements ReadonlyValueDictionary, IExecutionContext {\r\n\r\n public static readonly NonExistingPropertyDescriptor = new RegularPropertyDescriptor();\r\n\r\n public abstract readonly ParentExecutionContext: IExecutionContext;\r\n\r\n public get Value(): Value {\r\n return this;\r\n }\r\n\r\n @Reactive()\r\n private readonly properties: { [key: string]: Property } = {};\r\n\r\n private watchersStarted = false;\r\n\r\n public constructor(\r\n public readonly Descriptor: ScopeDescriptor,\r\n ) { }\r\n\r\n @Memoize()\r\n public get AllErrors(): ValidationError[] {\r\n const errors: ValidationError[] = [];\r\n\r\n for (const property of ObjectValues(this.properties)) {\r\n for (const error of property.AllErrors) {\r\n errors.push(error);\r\n }\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n public HasKey(key: string): boolean {\r\n return ObjectHasKey(this.properties, key);\r\n }\r\n\r\n public GetValueByKey(key: string): Value | undefined {\r\n\r\n const property = ObjectGetValueByKey(this.properties, key);\r\n if (property === undefined) {\r\n return undefined;\r\n }\r\n\r\n return property.Value;\r\n }\r\n\r\n public * Entries(): Generator<[string, Value]> {\r\n for (const [key, property] of ObjectEntries(this.properties)) {\r\n yield [key, property.Value];\r\n }\r\n }\r\n\r\n public * Keys(): Generator {\r\n for (const [key, value] of this.Entries()) {\r\n yield key;\r\n }\r\n }\r\n\r\n public * Values(): Generator {\r\n for (const [key, value] of this.Entries()) {\r\n yield value;\r\n }\r\n }\r\n\r\n public OwnProperties(): Generator {\r\n return ObjectValues(this.properties);\r\n }\r\n\r\n public * AllProperties(): Generator {\r\n for (const property of this.OwnProperties()) {\r\n yield property;\r\n yield* property.AllChildProperties();\r\n }\r\n }\r\n\r\n public Size(): number {\r\n let size = 0;\r\n\r\n for (const entry of this.Entries()) {\r\n size++;\r\n }\r\n\r\n return size;\r\n }\r\n\r\n public HasProperty(key: string): boolean {\r\n return ObjectHasKey(this.properties, key);\r\n }\r\n\r\n public GetProperty(key: string): Property | undefined {\r\n return ObjectGetValueByKey(this.properties, key);\r\n }\r\n\r\n public GetRequiredProperty(key: string): Property {\r\n const property = this.GetProperty(key);\r\n\r\n if (property) {\r\n return property;\r\n }\r\n\r\n throw new Error(`Can't get property for unknown key: ${key}`);\r\n }\r\n\r\n public GetRegularProperty(key: string): RegularProperty {\r\n const property = this.GetProperty(key);\r\n\r\n if (property instanceof RegularProperty) {\r\n return property;\r\n }\r\n\r\n throw new Error(`Not a RegularProperty: ${key}`);\r\n }\r\n\r\n public GetChildScopesProperty(key: string): ChildScopesProperty {\r\n const property = this.GetProperty(key);\r\n\r\n if (property instanceof ChildScopesProperty) {\r\n return property;\r\n }\r\n\r\n throw new Error(`Not a ChildScopesProperty: ${key}`);\r\n }\r\n\r\n public Initialize(initialValues: Value): void {\r\n\r\n if (!IsReadonlyMap(initialValues)) {\r\n throw new Error(`Initial value of a scope must be an object.`);\r\n }\r\n\r\n const descriptors = this.Descriptor.PropertyDescriptors;\r\n\r\n const unknownKeys: string[] = [];\r\n for (const initialValueKey of Keys(initialValues)) {\r\n if (!descriptors.has(initialValueKey)) {\r\n unknownKeys.push(initialValueKey);\r\n }\r\n }\r\n\r\n if (unknownKeys.length > 0) {\r\n console.warn(`Ignoring values for unknown keys:\\n${unknownKeys.join('\\n')}`);\r\n }\r\n\r\n for (const [key, descriptor] of descriptors) {\r\n\r\n const property = descriptor.CreateProperty(this, key);\r\n ObjectSetValueByKey(this.properties, key, property);\r\n\r\n property.Initialize(GetValueByKey(initialValues, key));\r\n }\r\n }\r\n\r\n public GetVariable(key: string): Value {\r\n\r\n const property = this.GetProperty(key);\r\n\r\n if (property) {\r\n return property.Value;\r\n\r\n } else {\r\n return this.ParentExecutionContext.GetVariable(key);\r\n }\r\n }\r\n\r\n public Invoke(functionName: string, args: ReadonlyArray): Value {\r\n return this.GetFunction(functionName).Invoke(this, args);\r\n }\r\n\r\n public GetFunction(functionName: string): IScript {\r\n const script = this.Descriptor.Functions.get(functionName);\r\n\r\n if (script) {\r\n return script;\r\n\r\n } else {\r\n return this.ParentExecutionContext.GetFunction(functionName);\r\n }\r\n }\r\n\r\n public StartWatchers() {\r\n if (this.watchersStarted) {\r\n return;\r\n }\r\n\r\n for (const property of this.OwnProperties()) {\r\n property.StartWatchers();\r\n }\r\n\r\n this.watchersStarted = true;\r\n }\r\n\r\n public StopWatchers() {\r\n if (!this.watchersStarted) {\r\n return;\r\n }\r\n\r\n for (const property of this.OwnProperties()) {\r\n property.StopWatchers();\r\n }\r\n\r\n this.watchersStarted = false;\r\n }\r\n}\r\n","export enum DiffType {\r\n None = 'None',\r\n Simple = 'Simple',\r\n Object = 'Object',\r\n Array = 'Array',\r\n}","import { Value, MaxDecimals, ToDecimal, RequireDefined, ToIntegerNumber, StringifyJson } from '../Value';\r\nimport { Script } from '../Scripting';\r\nimport { Decimal } from '../Libraries';\r\n\r\n\r\nexport const Add = make2('Add', (a, b) => a.add(b));\r\nexport const Subtract = make2('Subtract', (a, b) => a.sub(b));\r\nexport const Multiply = make2('Multiply', (a, b) => a.mul(b));\r\nexport const Divide = make2('Divide', (a, b) => {\r\n if (b.isZero()) {\r\n throw new Error(`Division by zero.`);\r\n }\r\n\r\n return a.div(b);\r\n});\r\n\r\nexport const Abs = make1('Abs', (a) => a.abs());\r\nexport const Ceiling = make1('Ceiling', (a) => a.ceil());\r\nexport const Floor = make1('Floor', (a) => a.floor());\r\n\r\nexport const Cbrt = make1('Cbrt', (a) => a.cbrt());\r\nexport const Exp = make1('Exp', (a) => a.exp());\r\nexport const Log = make2('Log', (a, b) => a.log(b));\r\nexport const Log10 = make1('Log10', (a) => Decimal.log10(a));\r\nexport const Log2 = make1('Log2', (a) => Decimal.log2(a));\r\nexport const Pow = make2('Pow', (a, b) => a.pow(b));\r\nexport const Sqrt = make1('Sqrt', (a) => a.sqrt());\r\n\r\nexport const Acos = make1('Acos', (a) => a.acos());\r\nexport const Acosh = make1('Acosh', (a) => a.acosh());\r\nexport const Asin = make1('Asin', (a) => a.asin());\r\nexport const Asinh = make1('Asinh', (a) => a.asinh());\r\nexport const Atan = make1('Atan', (a) => a.atan());\r\nexport const Atanh = make1('Atanh', (a) => a.atanh());\r\nexport const Atan2 = make2('Atan2', (y, x) => Decimal.atan2(y, x));\r\nexport const Cos = make1('Cos', (a) => a.cos());\r\nexport const Cosh = make1('Cosh', (a) => a.cosh());\r\nexport const Sin = make1('Sin', (a) => a.sin());\r\nexport const Sinh = make1('Sinh', (a) => a.sinh());\r\nexport const Tan = make1('Tan', (a) => a.tan());\r\nexport const Tanh = make1('Tanh', (a) => a.tanh());\r\n\r\nexport const Pi = make0('Pi', () => new Decimal('3.14159265358979'));\r\nexport const E = make0('E', () => new Decimal('2.71828182845905'));\r\n\r\nexport const CountDecimals = make1('CountDecimals', (a) => new Decimal(a.decimalPlaces()));\r\n\r\nexport const Round = Script.Wrap((value: Value, decimals: Value = 0): Value => {\r\n if (value === null || decimals === null) {\r\n return null;\r\n }\r\n\r\n const decimalValue = RequireDefined(ToDecimal(value));\r\n const integerDecimals = RequireDefined(ToIntegerNumber(decimals));\r\n\r\n if (integerDecimals < 0 || integerDecimals > MaxDecimals) {\r\n throw new Error(`Invalid number of decimals: ${integerDecimals}`);\r\n }\r\n\r\n return decimalValue.toDecimalPlaces(integerDecimals);\r\n});\r\n\r\nfunction make0(name: string, operation: () => Decimal) {\r\n return Script.Wrap(function (): Value {\r\n if (arguments.length !== 0) {\r\n throw new Error(`'${name}' expected 0 arguments, got ${arguments.length} instead.`);\r\n }\r\n\r\n return operation().toDecimalPlaces(MaxDecimals);\r\n });\r\n}\r\n\r\nfunction make1(name: string, operation: (a: Decimal) => Decimal) {\r\n return Script.Wrap(function (a: Value): Value {\r\n if (arguments.length !== 1) {\r\n throw new Error(`'${name}' expected 1 argument, got ${arguments.length} instead.`);\r\n }\r\n\r\n if (a === null) {\r\n return null;\r\n }\r\n\r\n const decimalA = ToDecimal(a);\r\n if (decimalA === undefined) {\r\n throw new Error(`'${name}' expected the first argument to be a decimal, instead got: ${StringifyJson(a)}`);\r\n }\r\n\r\n return operation(decimalA).toDecimalPlaces(MaxDecimals);\r\n });\r\n}\r\n\r\nfunction make2(name: string, operation: (a: Decimal, b: Decimal) => Decimal) {\r\n return Script.Wrap(function (a: Value, b: Value): Value {\r\n if (arguments.length !== 2) {\r\n throw new Error(`'${name}' expected 2 argument, got ${arguments.length} instead.`);\r\n }\r\n\r\n if (a === null || b === null) {\r\n return null;\r\n }\r\n\r\n const decimalA = ToDecimal(a);\r\n if (decimalA === undefined) {\r\n throw new Error(`'${name}' expected the first argument to be a decimal, instead got: ${StringifyJson(a)}`);\r\n }\r\n\r\n const decimalB = ToDecimal(b);\r\n if (decimalB === undefined) {\r\n throw new Error(`'${name}' expected the second argument to be a decimal, instead got: ${StringifyJson(b)}`);\r\n }\r\n\r\n return operation(decimalA, decimalB).toDecimalPlaces(MaxDecimals);\r\n });\r\n}\r\n","import { Script } from '../Scripting';\r\nimport { Moment } from '../Libraries';\r\nimport { Value, ToIntegerNumber, StringifyJson, ToDateMoment, ToDateTimeMoment, FormatDate, FormatDateTime } from '../Value';\r\n\r\n// On purpose no Now() and Today() functions.\r\n\r\nexport const AddYears = makeModifier({ forceTime: false }, (dateTime, years) => {\r\n return dateTime.add(years, 'years');\r\n});\r\n\r\nexport const AddMonths = makeModifier({ forceTime: false }, (dateTime, months) => {\r\n return dateTime.add(months, 'months');\r\n});\r\n\r\nexport const AddDays = makeModifier({ forceTime: false }, (dateTime, days) => {\r\n return dateTime.add(days, 'days');\r\n});\r\n\r\nexport const AddHours = makeModifier({ forceTime: true }, (dateTime, hours) => {\r\n return dateTime.add(hours, 'hours');\r\n});\r\n\r\nexport const AddMinutes = makeModifier({ forceTime: true }, (dateTime, minutes) => {\r\n return dateTime.add(minutes, 'minutes');\r\n});\r\n\r\nexport const AddSeconds = makeModifier({ forceTime: true }, (dateTime, seconds) => {\r\n return dateTime.add(seconds, 'seconds');\r\n});\r\n\r\nexport const HoursDiff = makeDiff((startDate, endDate) => {\r\n return startDate.diff(endDate, 'hours');\r\n});\r\n\r\nexport const MinutesDiff = makeDiff((startDate, endDate) => {\r\n return startDate.diff(endDate, 'minutes');\r\n});\r\n\r\nexport const SecondsDiff = makeDiff((startDate, endDate) => {\r\n return startDate.diff(endDate, 'seconds');\r\n});\r\n\r\nfunction requireIntegerNumber(value: Value): number {\r\n const integer = ToIntegerNumber(value);\r\n\r\n if (integer === undefined) {\r\n throw new Error(`Expected an integer, instead got: ${StringifyJson(value)}`);\r\n }\r\n\r\n return integer;\r\n}\r\n\r\nfunction makeModifier(\r\n options: { forceTime: boolean },\r\n implementation: (dateTime: Moment, parameter: number) => Moment,\r\n) {\r\n return Script.Wrap((value: Value, parameter: Value): string | null => {\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n const integerParameter = requireIntegerNumber(parameter);\r\n\r\n const dateValue = ToDateMoment(value);\r\n if (dateValue !== undefined) {\r\n const result = implementation(dateValue, integerParameter);\r\n if (options.forceTime) {\r\n return FormatDateTime(result);\r\n\r\n } else {\r\n return FormatDate(result);\r\n }\r\n }\r\n\r\n const dateTimeValue = ToDateTimeMoment(value);\r\n if (dateTimeValue !== undefined) {\r\n return FormatDateTime(implementation(dateTimeValue, integerParameter));\r\n }\r\n\r\n throw new Error(`Can't convert to date(time): ${StringifyJson(value)}`);\r\n });\r\n}\r\n\r\nfunction makeDiff(\r\n implementation: (startDate: Moment, endDate: Moment) => number,\r\n) {\r\n return Script.Wrap((dateTime: Value, dateTime2: Value): number | null => {\r\n\r\n if (dateTime === null || dateTime2 === null) {\r\n return null;\r\n }\r\n\r\n const dateTimeValue = ToDateTimeMoment(dateTime);\r\n const dateTimeValue2 = ToDateTimeMoment(dateTime2);\r\n\r\n if (dateTimeValue === undefined) {\r\n throw new Error(`Can't convert to datetime: ${StringifyJson(dateTime)}`);\r\n }\r\n\r\n if (dateTimeValue2 === undefined) {\r\n throw new Error(`Can't convert to datetime: ${StringifyJson(dateTime2)}`);\r\n }\r\n\r\n return implementation(dateTimeValue, dateTimeValue2);\r\n });\r\n}\r\n","import { IExecutionContext, Script, IntermediateExecutionContext } from '../Scripting';\r\nimport { Value, RequireDefined, ToString, IsReadonlyCollection, StringifyJson, IsReadonlyMap, ToIntegerNumber, Size, GetValueAtIndex, GetValueByKey, ReadonlyValueMap } from '../Value';\r\nimport { ChildScope, RootExecutionContext, Scope, RootScope, IMutation } from '../Scopes';\r\n\r\nexport const GetCurrentIndex = Script.WrapWithContext((context: IExecutionContext, scopeName: Value = null): Value => {\r\n\r\n if (scopeName !== null) {\r\n scopeName = RequireDefined(ToString(scopeName));\r\n }\r\n\r\n while (context) {\r\n if (context instanceof IntermediateExecutionContext) {\r\n context = context.UnderlyingExecutionContext;\r\n continue;\r\n }\r\n\r\n if (context instanceof RootExecutionContext || context instanceof RootScope) {\r\n throw new Error(`Can't get current index of root scope.`);\r\n }\r\n\r\n if (!(context instanceof Scope)) {\r\n throw new Error(`Can't get current index of context ${context}.`);\r\n }\r\n\r\n if (!(context instanceof ChildScope)) {\r\n break;\r\n }\r\n\r\n if (scopeName === null || scopeName === context.ParentProperty.Key) {\r\n return context.Index;\r\n }\r\n\r\n context = context.ParentExecutionContext;\r\n }\r\n\r\n if (scopeName !== null) {\r\n throw new Error(`Can't get current index of unknown scope: ${scopeName}.`);\r\n\r\n } else {\r\n throw new Error(`Can't get current index.`);\r\n }\r\n});\r\n\r\nexport const GetCurrentScope = Script.WrapWithContext((context: IExecutionContext, scopeName: Value = null): Value => {\r\n\r\n if (scopeName !== null) {\r\n scopeName = RequireDefined(ToString(scopeName));\r\n }\r\n\r\n while (context) {\r\n if (context instanceof IntermediateExecutionContext) {\r\n context = context.UnderlyingExecutionContext;\r\n continue;\r\n }\r\n\r\n if (!(context instanceof Scope)) {\r\n throw new Error(`Can't get scope from context ${context}.`);\r\n }\r\n\r\n if (scopeName === null) {\r\n return context;\r\n }\r\n\r\n if (!(context instanceof ChildScope)) {\r\n break;\r\n }\r\n\r\n if (scopeName === context.ParentProperty.Key) {\r\n return context;\r\n }\r\n\r\n context = context.ParentExecutionContext;\r\n }\r\n\r\n if (scopeName !== null) {\r\n throw new Error(`Can't get current scope by name: ${scopeName}.`);\r\n\r\n } else {\r\n throw new Error(`Can't get current scope.`);\r\n }\r\n});\r\n\r\nexport const GetRootScope = Script.WrapWithContext((context: IExecutionContext): Value => {\r\n\r\n while (context) {\r\n if (context instanceof IntermediateExecutionContext) {\r\n context = context.UnderlyingExecutionContext;\r\n continue;\r\n }\r\n\r\n if (context instanceof RootScope) {\r\n return context;\r\n\r\n } else if (context instanceof ChildScope) {\r\n context = context.ParentExecutionContext;\r\n\r\n } else {\r\n throw new Error(`Can't get scope from context ${context}.`);\r\n }\r\n }\r\n\r\n throw new Error(`Can't get root scope.`);\r\n});\r\n\r\nexport const GetMember = Script.WrapWithContext((context: IExecutionContext, value: Value, member: Value): Value => {\r\n\r\n if (value === null || member === null) {\r\n return null;\r\n }\r\n\r\n if (IsReadonlyCollection(value)) {\r\n const index = requireIntegerNumber(member);\r\n\r\n if (index >= 0 && index < Size(value)) {\r\n return GetValueAtIndex(value, index);\r\n\r\n } else {\r\n return null;\r\n }\r\n\r\n } else if (IsReadonlyMap(value)) {\r\n const memberString = requireString(member);\r\n\r\n const memberValue = GetValueByKey(value, memberString);\r\n if (memberValue !== undefined) {\r\n return memberValue;\r\n\r\n } else {\r\n return null;\r\n }\r\n\r\n } else {\r\n throw new Error(`Can't access member ${StringifyJson(member)} of value ${StringifyJson(value)}.`);\r\n }\r\n});\r\n\r\nexport const CreateMutation = Script.WrapWithContext((context: IExecutionContext, target: Value, entries: Value): Value => {\r\n\r\n if (target === null || entries === null) {\r\n return null;\r\n }\r\n\r\n if (!(target instanceof Scope)) {\r\n throw new Error(`Can only assign to scope objects. Not to ${StringifyJson(target)}`);\r\n }\r\n\r\n if (!IsReadonlyMap(entries)) {\r\n throw new Error(`Don't know how to assign: ${StringifyJson(entries)}`);\r\n }\r\n\r\n const mutation: IMutation = {\r\n Target: target,\r\n Entries: entries,\r\n };\r\n\r\n return mutation as any;\r\n});\r\n\r\n\r\n\r\nfunction requireIntegerNumber(value: Value): number {\r\n\r\n const integer = ToIntegerNumber(value);\r\n if (integer === undefined) {\r\n throw new Error(`Expected an integer, instead got: ${StringifyJson(value)}`);\r\n }\r\n\r\n return integer;\r\n}\r\n\r\nfunction requireString(value: Value): string {\r\n\r\n const stringValue = ToString(value);\r\n if (stringValue === undefined) {\r\n throw new Error(`Expected a string, instead got: ${StringifyJson(value)}`);\r\n }\r\n\r\n return stringValue;\r\n}\r\n","import { Script } from '../Scripting';\r\nimport { Value, IsNull, IsString, IsReadonlyCollection, IsReadonlyMap, Size, IsBoolean, NormalizeScalar, ToDecimal, StringifyJson, ToDateTimeMoment } from '../Value';\r\nimport { Decimal, Moment } from '../Libraries';\r\n\r\nexport const IsEmpty = Script.Wrap((value: Value): boolean => {\r\n\r\n if (IsNull(value)) {\r\n return true;\r\n\r\n } else if (IsString(value)) {\r\n return value.length === 0;\r\n\r\n } else if (IsReadonlyCollection(value) || IsReadonlyMap(value)) {\r\n return Size(value) === 0;\r\n\r\n } else {\r\n return false;\r\n }\r\n});\r\n\r\nexport const IsNotEmpty = Script.Wrap((value: Value): boolean => {\r\n\r\n return !IsEmpty(value);\r\n});\r\n\r\nexport const IsTruthy = Script.Wrap((value: Value): boolean => {\r\n\r\n if (IsBoolean(value)) {\r\n return value;\r\n\r\n } else {\r\n return !IsEmpty(value);\r\n }\r\n});\r\n\r\nexport const Not = Script.Wrap((value: Value): boolean => {\r\n\r\n return !IsTruthy(value);\r\n});\r\n\r\nexport const Equals = Script.Wrap((left: Value, right: Value): boolean => {\r\n\r\n left = NormalizeScalar(left);\r\n right = NormalizeScalar(right);\r\n\r\n return left === right;\r\n});\r\n\r\nexport const NotEquals = Script.Wrap((left: Value, right: Value): boolean => {\r\n\r\n return !Equals(left, right);\r\n});\r\n\r\nexport const IsGreaterThan = makeRelationalOperator(\r\n (left, right) => left.greaterThan(right), // Decimal\r\n (left, right) => left.isAfter(right), // Moment\r\n);\r\n\r\nexport const IsGreaterThanOrEqual = makeRelationalOperator(\r\n (left, right) => left.greaterThanOrEqualTo(right), // Decimal\r\n (left, right) => left.isSameOrAfter(right), // Moment\r\n);\r\n\r\nexport const IsLessThan = makeRelationalOperator(\r\n (left, right) => left.lessThan(right), // Decimal\r\n (left, right) => left.isBefore(right), // Moment\r\n);\r\n\r\nexport const IsLessThanOrEqual = makeRelationalOperator(\r\n (left, right) => left.lessThanOrEqualTo(right), // Decimal\r\n (left, right) => left.isSameOrBefore(right), // Moment\r\n);\r\n\r\n\r\n\r\nfunction makeRelationalOperator(\r\n decimalComparer: (left: Decimal, right: Decimal) => boolean,\r\n momentComparer: (left: Moment, right: Moment) => boolean,\r\n) {\r\n return Script.Wrap((left: Value, right: Value): boolean => {\r\n\r\n if (left === null || right === null) {\r\n return false;\r\n }\r\n\r\n const leftDecimal = ToDecimal(left);\r\n if (leftDecimal !== undefined) {\r\n const rightDecimal = ToDecimal(right);\r\n\r\n if (rightDecimal !== undefined) {\r\n return decimalComparer(leftDecimal, rightDecimal);\r\n }\r\n }\r\n\r\n const leftMoment = ToDateTimeMoment(left);\r\n if (leftMoment !== undefined) {\r\n const rightMoment = ToDateTimeMoment(right);\r\n\r\n if (rightMoment !== undefined) {\r\n return momentComparer(leftMoment, rightMoment);\r\n }\r\n }\r\n\r\n throw new Error(`Can't compare ${StringifyJson(left)} with ${StringifyJson(right)}.`);\r\n });\r\n}\r\n","import { Script } from '../Scripting';\r\nimport { Value, ToString, StringifyJson, IsString, IsReadonlyCollection, IsReadonlyMap, NormalizeScalar, Values, Size, ReadonlyValueCollection, GetValueAtIndex, IsFunction, ReadonlyValueArray } from '../Value';\r\nimport { Equals, IsTruthy, IsGreaterThan, IsLessThan } from '.';\r\nimport { Add, Divide } from './Math';\r\n\r\n/*\r\n * String-only functions.\r\n */\r\n\r\nexport const ToLower = Script.Wrap((value: Value): string | null => {\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n let result = requireString(value).toLowerCase();\r\n\r\n // Internet Explorer does not correctly handle some case transformations. Most of those errors occur in exotic foreign languages, however one of them is quite common:\r\n result = result.replace(/ẞ/g, 'ß');\r\n\r\n return result;\r\n});\r\n\r\nexport const ToUpper = Script.Wrap((value: Value): string | null => {\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n let result = requireString(value).toUpperCase();\r\n\r\n // Internet Explorer does not correctly handle some case transformations. Most of those errors occur in exotic foreign languages, however one of them is quite common:\r\n result = result.replace(/ß/g, 'SS');\r\n\r\n return result;\r\n});\r\n\r\nexport const StartsWith = Script.Wrap((value: Value, prefix: Value): boolean => {\r\n\r\n if (value === null) {\r\n return false;\r\n }\r\n\r\n return requireString(value).startsWith(requireString(prefix));\r\n});\r\n\r\nexport const EndsWith = Script.Wrap((value: Value, suffix: Value): boolean => {\r\n\r\n if (value === null) {\r\n return false;\r\n }\r\n\r\n return requireString(value).endsWith(requireString(suffix));\r\n});\r\n\r\nexport const IsMatch = Script.Wrap((value: Value, pattern: Value): boolean => {\r\n\r\n const regExp = new RegExp(requireString(pattern), '');\r\n\r\n if (value === null) {\r\n return false;\r\n }\r\n\r\n return regExp.test(requireString(value));\r\n});\r\n\r\nexport const Replace = Script.Wrap((value: Value, oldValue: Value, newValue: Value): string | null => {\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n const valueString = requireString(value);\r\n const oldValueString = requireString(oldValue);\r\n const newValueString = requireString(newValue);\r\n\r\n if (String.prototype.replaceAll !== undefined) {\r\n return valueString.replaceAll(oldValueString, newValueString);\r\n\r\n } else {\r\n // Internet Explorer...\r\n return valueString.split(oldValueString).join(newValueString);\r\n }\r\n});\r\n\r\nexport const Split = Script.Wrap((value: Value, pattern: Value = null): ReadonlyValueArray | null => {\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n if (pattern === null) {\r\n return requireString(value).split('');\r\n }\r\n\r\n const regExp = new RegExp(requireString(pattern), 'g');\r\n\r\n return requireString(value).match(regExp);\r\n});\r\n\r\n/*\r\n * Collection-only functions.\r\n */\r\n\r\nexport const First = Script.Wrap((values: Value): Value => {\r\n\r\n if (values === null) {\r\n return null;\r\n }\r\n\r\n const collection = requireCollection(values);\r\n const size = Size(collection);\r\n if (!size) {\r\n return null;\r\n }\r\n\r\n return GetValueAtIndex(collection, 0);\r\n});\r\n\r\nexport const Last = Script.Wrap((values: Value): Value => {\r\n\r\n if (values === null) {\r\n return null;\r\n }\r\n\r\n const collection = requireCollection(values);\r\n const size = Size(collection);\r\n if (!size) {\r\n return null;\r\n }\r\n\r\n return GetValueAtIndex(collection, size - 1);\r\n});\r\n\r\nexport const Where = Script.Wrap((values: Value, predicate: Value): ReadonlyValueArray | null => {\r\n\r\n if (values === null) {\r\n return null;\r\n }\r\n\r\n if (!IsFunction(predicate)) {\r\n throw new Error(`Predicate is not a function.`);\r\n }\r\n\r\n const collection = requireCollection(values);\r\n const results: Value[] = [];\r\n\r\n for (const item of Values(collection)) {\r\n if (IsTruthy(predicate(item))) {\r\n results.push(item);\r\n }\r\n }\r\n\r\n return results;\r\n});\r\n\r\nexport const Select = Script.Wrap((values: Value, selector: Value): ReadonlyValueArray | null => {\r\n\r\n if (values === null) {\r\n return null;\r\n }\r\n\r\n if (!IsFunction(selector)) {\r\n throw new Error(`Selector is not a function.`);\r\n }\r\n\r\n const collection = requireCollection(values);\r\n const results: Value[] = [];\r\n\r\n for (const item of Values(collection)) {\r\n results.push(selector(item));\r\n }\r\n\r\n return results;\r\n});\r\n\r\nexport const SelectMany = Script.Wrap((values: Value, selector: Value): ReadonlyValueArray | null => {\r\n\r\n if (values === null) {\r\n return null;\r\n }\r\n\r\n if (!IsFunction(selector)) {\r\n throw new Error(`Selector is not a function.`);\r\n }\r\n\r\n const collection = requireCollection(values);\r\n const results: Value[] = [];\r\n\r\n for (const item of Values(collection)) {\r\n const itemResult = selector(item);\r\n\r\n if (itemResult === null) {\r\n continue;\r\n }\r\n\r\n const nestedCollection = requireCollection(itemResult);\r\n\r\n for (const nestedItem of Values(nestedCollection)) {\r\n results.push(nestedItem);\r\n }\r\n }\r\n\r\n return results;\r\n});\r\n\r\nexport const Max = makeAggregator((collection) => {\r\n\r\n let result: Value = null;\r\n\r\n for (const item of Values(collection)) {\r\n if (item !== null && (result === null || IsGreaterThan(item, result))) {\r\n result = item;\r\n }\r\n }\r\n\r\n return result;\r\n});\r\n\r\nexport const Min = makeAggregator((collection) => {\r\n\r\n let result: Value = null;\r\n\r\n for (const item of Values(collection)) {\r\n if (item !== null && (result === null || IsLessThan(item, result))) {\r\n result = item;\r\n }\r\n }\r\n\r\n return result;\r\n});\r\n\r\nexport const Sum = makeAggregator((collection) => {\r\n\r\n let result: Value = null;\r\n\r\n for (const item of Values(collection)) {\r\n if (item !== null) {\r\n if (result === null) {\r\n result = item;\r\n\r\n } else {\r\n result = Add(result, item);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n});\r\n\r\nexport const Average = makeAggregator((collection) => {\r\n\r\n let sum: Value = null;\r\n let count = 0;\r\n\r\n for (const item of Values(collection)) {\r\n if (item !== null) {\r\n count++;\r\n\r\n if (sum === null) {\r\n sum = item;\r\n\r\n } else {\r\n sum = Add(sum, item);\r\n }\r\n }\r\n }\r\n\r\n if (count === 0) {\r\n return null;\r\n\r\n } else {\r\n return Divide(sum, count);\r\n }\r\n});\r\n\r\n\r\n\r\n/*\r\n * String & Collection functions.\r\n */\r\n\r\nexport const Count = Script.Wrap((value: Value): number | null => {\r\n\r\n value = NormalizeScalar(value);\r\n\r\n if (value === null) {\r\n return null;\r\n\r\n } else if (IsString(value)) {\r\n return value.length;\r\n\r\n } else if (IsReadonlyCollection(value)) {\r\n return Size(value);\r\n\r\n } else {\r\n throw new Error(`Can't get size/length/count of: ${StringifyJson(value)}.`);\r\n }\r\n});\r\n\r\nexport const Contains = Script.Wrap((haystack: Value, needle: Value): boolean => {\r\n\r\n haystack = NormalizeScalar(haystack);\r\n needle = NormalizeScalar(needle);\r\n\r\n if (haystack === null) {\r\n return false;\r\n\r\n } else if (IsString(haystack)) {\r\n if (needle === null) {\r\n throw new Error(`Can't call Contains with a needle of 'null'.`);\r\n }\r\n\r\n return haystack.includes(requireString(needle));\r\n\r\n } else if (IsReadonlyCollection(haystack)) {\r\n\r\n for (const element of Values(haystack)) {\r\n if (Equals(element, needle)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n\r\n } else {\r\n throw new Error(`Can't call Contains on: ${StringifyJson(haystack)}.`);\r\n }\r\n});\r\n\r\nexport const Concat = makeAggregator((collection) => {\r\n\r\n const nonNullItems = Where(collection, (item) => item !== null);\r\n if (!nonNullItems?.length) {\r\n return null;\r\n }\r\n\r\n const firstItem = nonNullItems[0];\r\n\r\n if (IsString(firstItem)) {\r\n let result = '';\r\n\r\n for (const item of nonNullItems) {\r\n result += requireString(item);\r\n }\r\n\r\n return result;\r\n\r\n } else if (IsReadonlyCollection(firstItem)) {\r\n const result: Value[] = [];\r\n\r\n for (const subCollection of nonNullItems) {\r\n for (const item of Values(requireCollection(subCollection))) {\r\n result.push(item);\r\n }\r\n }\r\n\r\n return result;\r\n\r\n } else {\r\n throw new Error(`Can't concatenate: ${StringifyJson(collection)}`);\r\n }\r\n});\r\n\r\nexport const Join = Script.Wrap((values: Value, separator: Value): string | null => {\r\n\r\n if (values === null) {\r\n return null;\r\n }\r\n\r\n const collection = requireCollection(values);\r\n const separatorString = separator === null ? '' : requireString(separator);\r\n\r\n const strings: string[] = [];\r\n for (const item of Values(collection)) {\r\n if (item === null) {\r\n strings.push('');\r\n\r\n } else {\r\n strings.push(requireString(item));\r\n }\r\n }\r\n\r\n return strings.join(separatorString);\r\n});\r\n\r\n\r\nfunction requireString(value: Value): string {\r\n\r\n if (value === undefined) {\r\n throw new Error(`Expected a string, instead got: undefined`);\r\n }\r\n\r\n const stringValue = ToString(value);\r\n if (stringValue === undefined) {\r\n throw new Error(`Expected a string, instead got: ${StringifyJson(value)}`);\r\n }\r\n\r\n return stringValue;\r\n}\r\n\r\nfunction requireCollection(value: Value): ReadonlyValueCollection {\r\n\r\n if (value === undefined) {\r\n throw new Error(`Expected an array, instead got: undefined`);\r\n }\r\n\r\n if (!IsReadonlyCollection(value)) {\r\n throw new Error(`Expected an array, instead got: ${StringifyJson(value)}`);\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction makeAggregator(implementation: (collection: ReadonlyValueCollection) => T) {\r\n return Script.Wrap((...args: Value[]): T | null => {\r\n\r\n if (args.length === 0) {\r\n throw new Error(`Expected at least one argument.`);\r\n\r\n } else if (args.length === 1) {\r\n if (args[0] === null) {\r\n return null;\r\n }\r\n\r\n return implementation(requireCollection(args[0]));\r\n\r\n } else {\r\n return implementation(args);\r\n }\r\n });\r\n}\r\n\r\nexport const Any = Script.Wrap((values: Value, predicate: Value): boolean => {\r\n\r\n if (values === null) {\r\n return false;\r\n }\r\n\r\n if (!IsFunction(predicate)) {\r\n throw new Error(`Predicate is not a function.`);\r\n }\r\n\r\n const collection = requireCollection(values);\r\n\r\n for (const item of Values(collection)) {\r\n if (IsTruthy(predicate(item))) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n});\r\n\r\nexport const All = Script.Wrap((values: Value, predicate: Value): boolean => {\r\n\r\n if (values === null) {\r\n return true;\r\n }\r\n\r\n if (!IsFunction(predicate)) {\r\n throw new Error(`Predicate is not a function.`);\r\n }\r\n\r\n const collection = requireCollection(values);\r\n\r\n for (const item of Values(collection)) {\r\n if (!IsTruthy(predicate(item))) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n});\r\n\r\nexport const Distinct = Script.Wrap((values: Value): ReadonlyValueArray | null => {\r\n\r\n if (values === null) {\r\n return null;\r\n }\r\n\r\n const collection = requireCollection(values);\r\n\r\n const results: Value[] = [];\r\n\r\n for (const item of Values(collection)) {\r\n if (!Contains(results, item)) {\r\n results.push(item);\r\n }\r\n }\r\n\r\n return results;\r\n});\r\n","import { Script } from '../Scripting';\r\nimport { Value, IsFunction, IsReadonlyCollection, Values } from '../Value';\r\n\r\nexport const Call = Script.Wrap((func: Value, args?: Value): Value => {\r\n\r\n if (func === null) {\r\n return null;\r\n }\r\n\r\n if (!IsFunction(func)) {\r\n throw new Error(`First argument of Call must be a function.`);\r\n }\r\n\r\n const argsArray: Value[] = [];\r\n if (args !== null && args !== undefined) {\r\n if (!IsReadonlyCollection(args)) {\r\n throw new Error(`Second argument of Call must be an array.`);\r\n }\r\n\r\n for (const arg of Values(args)) {\r\n argsArray.push(arg);\r\n }\r\n }\r\n\r\n const result = func.apply(undefined, argsArray);\r\n if (result === undefined) {\r\n throw new Error(`Function passed to Call did not return a value.`);\r\n }\r\n\r\n return result;\r\n});","// The order is important to prevent circular references\r\n\r\nexport * from './Math';\r\nexport * from './DateTime';\r\nexport * from './Scope';\r\nexport * from './Comparison';\r\nexport * from './StringAndCollection';\r\nexport * from './Misc';\r\n"],"sourceRoot":""}