diff --git a/src/AXSharp.abstractions/src/AXSharp.Abstractions/AXSharp.Abstractions.csproj b/src/AXSharp.abstractions/src/AXSharp.Abstractions/AXSharp.Abstractions.csproj index 0b2d7f2e..33f54dd2 100644 --- a/src/AXSharp.abstractions/src/AXSharp.Abstractions/AXSharp.Abstractions.csproj +++ b/src/AXSharp.abstractions/src/AXSharp.Abstractions/AXSharp.Abstractions.csproj @@ -42,10 +42,6 @@ - - - - Full diff --git a/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/AXSharp.Presentation.Blazor.Controls.csproj b/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/AXSharp.Presentation.Blazor.Controls.csproj index 4df77933..33cd2ba7 100644 --- a/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/AXSharp.Presentation.Blazor.Controls.csproj +++ b/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/AXSharp.Presentation.Blazor.Controls.csproj @@ -82,17 +82,16 @@ - - - - - + - + + + + diff --git a/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/RenderableContent/RenderableComponentBase.cs b/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/RenderableContent/RenderableComponentBase.cs index 8d466b33..986dd436 100644 --- a/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/RenderableContent/RenderableComponentBase.cs +++ b/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/RenderableContent/RenderableComponentBase.cs @@ -31,7 +31,7 @@ public partial class RenderableComponentBase : ComponentBase, IRenderableCompone [Parameter] public object RccContainer { get; set; } = new Object(); - [Parameter] public int PollingInterval { get; set; } + [Parameter] public int PollingInterval { get; set; } = 250; /// /// Disposes this object as well as communication resources used by this component. @@ -159,7 +159,10 @@ public void UpdateValuesOnChangeOutFocus(OnlinerBase tag) protected void HandlePropertyChanged(object sender, PropertyChangedEventArgs a) { - InvokeAsync(StateHasChanged); + if (ShouldBeUpdated(sender as ITwinElement)) + { + InvokeAsync(StateHasChanged); + } } protected void HandleShadowPropertyChanged(object sender, ValueChangedEventArgs a) @@ -167,9 +170,39 @@ protected void HandleShadowPropertyChanged(object sender, ValueChangedEventArgs InvokeAsync(StateHasChanged); } + protected virtual bool ShouldBeUpdated(ITwinElement element) + { + if (element == null) + return true; + + var renderableContentControl = (RccContainer as RenderableContentControl); + + if(renderableContentControl != null) + { + if (renderableContentControl.Context.GetParent().GetConnector().SubscriptionMode == ReadSubscriptionMode.AutoSubscribeUsedVariables) + { + return true; + } + + if (renderableContentControl.Context.GetParent().GetConnector().SubscriptionMode == ReadSubscriptionMode.Polling) + { + return this.PolledElements.Contains(element); + } + } + + return true; + } + protected void HandlePropertyChangedOnOutFocus(object sender, PropertyChangedEventArgs a) { - if(!HasFocus) InvokeAsync(StateHasChanged); + if (!HasFocus) + { + if (ShouldBeUpdated(sender as ITwinElement)) + { + InvokeAsync(StateHasChanged); + } + } + } } } diff --git a/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/Templates/Base/Online/TemplateBaseOnline.cs b/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/Templates/Base/Online/TemplateBaseOnline.cs index abb9ec48..bbe6d804 100644 --- a/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/Templates/Base/Online/TemplateBaseOnline.cs +++ b/src/AXSharp.blazor/src/AXSharp.Presentation.Blazor.Controls/Templates/Base/Online/TemplateBaseOnline.cs @@ -1,5 +1,6 @@ using AXSharp.Connector.ValueTypes; using Microsoft.AspNetCore.Components; +using Serilog; using System; using System.Collections.Generic; using System.ComponentModel; @@ -15,6 +16,7 @@ public partial class TemplateBaseOnline : TemplateBase protected override Task OnInitializedAsync() { + AddToPolling(this.Onliner, this.PollingInterval); UpdateValuesOnChangeOutFocus(Onliner); return base.OnInitializedAsync(); } diff --git a/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/AXSharp.Compiler.Cs.csproj b/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/AXSharp.Compiler.Cs.csproj index 0b366c4b..69ae54bd 100644 --- a/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/AXSharp.Compiler.Cs.csproj +++ b/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/AXSharp.Compiler.Cs.csproj @@ -58,9 +58,9 @@ - - - + + + diff --git a/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Helpers/CsHelpers.cs b/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Helpers/CsHelpers.cs index c56f1b6a..1dc2cd06 100644 --- a/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Helpers/CsHelpers.cs +++ b/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Helpers/CsHelpers.cs @@ -5,8 +5,10 @@ // https://github.com/ix-ax/axsharp/blob/dev/LICENSE // Third party licenses: https://github.com/ix-ax/axsharp/blob/master/notices.md +using System.Text; using AX.ST.Semantic.Model.Declarations; using AX.ST.Syntax.Tree; +using AXSharp.Connector; namespace AXSharp.Compiler.Cs.Helpers; @@ -43,6 +45,15 @@ public static string CreateGenericSwapperMethodToPlainer(string methodName, stri return $"public async {qualifier} Task {methodName}(){{\n return await (dynamic)this.{methodName}Async();\n}}"; } + public static string CreateGenericHasChangedMethodMethod(string methodName, string pocoTypeName, bool isExtended = false) + { + var qualifier = isExtended ? "override" : "virtual"; + var sb = new StringBuilder(); + sb.AppendLine("///\r\n"); + sb.AppendLine($"public async {qualifier} Task {TwinObjectExtensions.HasChangedMethodName}(T plain){{\n return await this.{methodName}((dynamic)plain);\n}}"); + return sb.ToString(); + } + public static string CreateGenericSwapperMethodFromPlainer(string methodName, string pocoTypeName, bool isExtended) { var qualifier = isExtended ? "override" : "virtual"; diff --git a/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs b/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs index 9c410d0b..ef00a14c 100644 --- a/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs +++ b/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs @@ -142,6 +142,8 @@ public void CreateClassDeclaration(IClassDeclarationSyntax classDeclarationSynta AddToSource(CsOnlinerPlainerShadowToPlainBuilder.Create(visitor, classDeclaration, this, isExtended).Output); AddToSource(CsOnlinerPlainerShadowToPlainProtectedBuilder.Create(visitor, classDeclaration, this, isExtended).Output); AddToSource(CsOnlinerPlainerPlainToShadowBuilder.Create(visitor, classDeclaration, this, isExtended).Output); + + AddToSource(CsOnlinerHasChangedBuilder.Create(visitor, classDeclaration, this, isExtended).Output); AddPollingMethod(isExtended); AddCreatePocoMethod(classDeclaration, isExtended); @@ -296,6 +298,7 @@ public void CreateStructuredType(IStructTypeDeclarationSyntax structTypeDeclarat AddToSource(CsOnlinerPlainerShadowToPlainProtectedBuilder.Create(visitor, structuredTypeDeclaration, this).Output); AddToSource(CsOnlinerPlainerPlainToShadowBuilder.Create(visitor, structuredTypeDeclaration, this).Output); + AddToSource(CsOnlinerHasChangedBuilder.Create(visitor, structuredTypeDeclaration, this).Output); AddPollingMethod(false); AddCreatePocoMethod(structuredTypeDeclaration, false); diff --git a/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/HasChangedBuilder/CsOnlinerHasChangedBuilder.cs b/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/HasChangedBuilder/CsOnlinerHasChangedBuilder.cs new file mode 100644 index 00000000..e7c4d598 --- /dev/null +++ b/src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/HasChangedBuilder/CsOnlinerHasChangedBuilder.cs @@ -0,0 +1,185 @@ +// AXSharp.Compiler.Cs +// Copyright (c) 2023 Peter Kurhajec (PTKu), MTS, and Contributors. All Rights Reserved. +// Contributors: https://github.com/ix-ax/axsharp/graphs/contributors +// See the LICENSE file in the repository root for more information. +// https://github.com/ix-ax/axsharp/blob/dev/LICENSE +// Third party licenses: https://github.com/ix-ax/axsharp/blob/master/notices.md + +using AX.ST.Semantic; +using AX.ST.Semantic.Model.Declarations; +using AX.ST.Semantic.Model.Declarations.Types; +using AXSharp.Compiler.Core; +using AXSharp.Compiler.Cs.Helpers; +using AXSharp.Connector; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AXSharp.Compiler.Cs.Onliner +{ + internal class CsOnlinerHasChangedBuilder : ICombinedThreeVisitor + { + private readonly StringBuilder _memberDeclarations = new(); + + protected CsOnlinerHasChangedBuilder(ISourceBuilder sourceBuilder) + { + SourceBuilder = sourceBuilder; + } + + private ISourceBuilder SourceBuilder { get; } + + public string Output => _memberDeclarations.ToString().FormatCode(); + + + public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor) + { + if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO")) + { + CreateAssignment(fieldDeclaration.Type, fieldDeclaration); + } + } + + public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaration, IxNodeVisitor visitor) + { + // + } + + public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor) + { + if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO")) + { + CreateAssignment(variableDeclaration.Type, variableDeclaration); + } + } + + internal void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration declaration) + { + var index_var_name = "i760901_3001_mimi"; + switch (typeDeclaration) + { + case IInterfaceDeclaration interfaceDeclaration: + break; + case IClassDeclaration classDeclaration: + //case IAnonymousTypeDeclaration anonymousTypeDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + AddToSource($" if(await {declaration.Name}.{MethodName}(plain.{declaration.Name}, latest.{declaration.Name})) somethingChanged = true;"); + break; + case IArrayTypeDeclaration arrayTypeDeclaration: + if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder)) + { + switch (arrayTypeDeclaration.ElementTypeAccess.Type) + { + case IClassDeclaration classDeclaration: + case IStructuredTypeDeclaration structuredTypeDeclaration: + AddToSource( + $"for (int {index_var_name} = 0; {index_var_name} < latest.{declaration.Name}.Length; {index_var_name}++)\r\n{{\r\n if (await {declaration.Name}.ElementAt({index_var_name}).DetectsAnyChangeAsync(plain.{declaration.Name}[{index_var_name}], latest.{declaration.Name}[{index_var_name}]))\r\n somethingChanged = true;\r\n}}"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + AddToSource( + $"for (int {index_var_name} = 0; {index_var_name} < latest.{declaration.Name}.Length; {index_var_name}++)\r\n{{\r\n if (latest.{declaration.Name}.ElementAt({index_var_name}) != plain.{declaration.Name}[{index_var_name}])\r\n somethingChanged = true;\r\n}}"); + break; + } + } + + break; + case IReferenceTypeDeclaration referenceTypeDeclaration: + break; + case IEnumTypeDeclaration enumTypeDeclaration: + AddToSource($" if(plain.{declaration.Name} != ({declaration.Type.FullyQualifiedName})latest.{declaration.Name}) somethingChanged = true;"); + break; + case INamedValueTypeDeclaration namedValueTypeDeclaration: + AddToSource($" if(plain.{declaration.Name} != {declaration.Name}.LastValue) somethingChanged = true;"); + break; + case IScalarTypeDeclaration scalarTypeDeclaration: + case IStringTypeDeclaration stringTypeDeclaration: + AddToSource($" if(plain.{declaration.Name} != {declaration.Name}.LastValue) somethingChanged = true;"); + break; + } + } + + public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor) + { + // + } + + + protected void AddToSource(string token, string separator = " ") + { + _memberDeclarations.Append($"{token}{separator}"); + } + + public void AddTypeConstructionParameters(string parametersString) + { + AddToSource(parametersString); + } + + protected static readonly string MethodName = $"Detects{TwinObjectExtensions.HasChangedMethodName}"; + + public static CsOnlinerHasChangedBuilder Create(IxNodeVisitor visitor, IStructuredTypeDeclaration semantics, + ISourceBuilder sourceBuilder) + { + var builder = new CsOnlinerHasChangedBuilder(sourceBuilder); + + builder.AddToSource(CsHelpers.CreateGenericHasChangedMethodMethod(MethodName, $"Pocos.{semantics.FullyQualifiedName}")); + + builder.AddToSource("///\n"); + builder.AddToSource("///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated.\n"); + builder.AddToSource("///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed.\n"); + builder.AddToSource("///\n"); + + + builder.AddToSource($"public async Task {MethodName}(Pocos.{semantics.FullyQualifiedName} plain, Pocos.{semantics.FullyQualifiedName} latest = null){{\n"); + builder.AddToSource("var somethingChanged = false;"); + builder.AddToSource("if(latest == null) latest = await this._OnlineToPlainNoacAsync();"); + builder.AddToSource("return await Task.Run(async () => {\n"); + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + builder.AddToSource($"plain = latest;"); + builder.AddToSource($"return somethingChanged;"); + builder.AddToSource($"}});"); + builder.AddToSource($"}}"); + return builder; + } + + public static CsOnlinerHasChangedBuilder Create(IxNodeVisitor visitor, IClassDeclaration semantics, + ISourceBuilder sourceBuilder, bool isExtended) + { + var builder = new CsOnlinerHasChangedBuilder(sourceBuilder); + + builder.AddToSource(CsHelpers.CreateGenericHasChangedMethodMethod(MethodName, $"Pocos.{semantics.FullyQualifiedName}", isExtended)); + + var qualifier = isExtended ? "new" : string.Empty; + + builder.AddToSource("///\n"); + builder.AddToSource("///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated.\n"); + builder.AddToSource("///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed.\n"); + builder.AddToSource("///\n"); + builder.AddToSource($"public {qualifier} async Task {MethodName}(Pocos.{semantics.FullyQualifiedName} plain, Pocos.{semantics.FullyQualifiedName} latest = null){{\n"); + + builder.AddToSource("if(latest == null) latest = await this._OnlineToPlainNoacAsync();"); + builder.AddToSource("var somethingChanged = false;"); + + builder.AddToSource("return await Task.Run(async () => {\n"); + if (isExtended) + { + builder.AddToSource($"if(await base.{MethodName}(plain)) return true;"); + } + + semantics.Fields.ToList().ForEach(p => p.Accept(visitor, builder)); + + builder.AddToSource($"plain = latest;"); + builder.AddToSource($"return somethingChanged;"); + builder.AddToSource($"}});"); + builder.AddToSource($"}}"); + return builder; + } + + /// + public void CreateDocComment(IDocComment semanticTypeAccess, ICombinedThreeVisitor data) + { + AddToSource(semanticTypeAccess.AddDocumentationComment(SourceBuilder)); + } + } +} diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Cs/CsSourceBuilderTests.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Cs/CsSourceBuilderTests.cs index 52058070..342e3798 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Cs/CsSourceBuilderTests.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Cs/CsSourceBuilderTests.cs @@ -299,6 +299,15 @@ private void CompareOutputs(string memberName) var actualFileContent = File.ReadAllText(actualSourceFile); var expectedFileContent = File.Exists(expectedSourceFile) ? File.ReadAllText(expectedSourceFile) : string.Empty; + var actualFileContentLines = actualFileContent.Split("\n").Select(a => a.Trim()).ToArray(); + var expectedFileContentLines = expectedFileContent.Split("\n").Select(a => a.Trim()).ToArray(); + + for (int i = 0; i < expectedFileContentLines.Length; i++) + { + Assert.Equal(expectedFileContentLines[i], actualFileContentLines[i]); + } + + output.WriteLine("------------------------ actual ------------------"); output.WriteLine(actualSourceFile); output.WriteLine(actualFileContent); @@ -306,7 +315,7 @@ private void CompareOutputs(string memberName) output.WriteLine(expectedSourceFile); output.WriteLine(expectedFileContent); - Assert.Equal(expectedFileContent, actualFileContent); + } public string GetMethodName() diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Exploratory/Generics.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Exploratory/Generics.cs index e801c79f..34032ccc 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Exploratory/Generics.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Exploratory/Generics.cs @@ -121,6 +121,11 @@ public Task PlainToShadow(T plain) { throw new NotImplementedException(); } + + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } } public class GenericMemberB : IPlain { diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Integration.Cs/IxProjectTests.IntegrationCs.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Integration.Cs/IxProjectTests.IntegrationCs.cs index 0e7516d6..32c8a581 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Integration.Cs/IxProjectTests.IntegrationCs.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/Integration.Cs/IxProjectTests.IntegrationCs.cs @@ -123,7 +123,13 @@ public void should_match_expected_and_generated_whole_project() var actualFileContent = File.ReadAllText(actualList[currentIndex]); try { - Assert.Equal(expectedFileContent, actualFileContent); + var actualFileContentLines = actualFileContent.Split("\n").Select(a => a.Trim()).ToArray(); + var expectedFileContentLines = expectedFileContent.Split("\n").Select(a => a.Trim()).ToArray(); + + for (int i = 0; i < expectedFileContentLines.Length; i++) + { + Assert.Equal(expectedFileContentLines[i], actualFileContentLines[i]); + } } catch (Exception) { diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/array_declaration.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/array_declaration.g.cs index b98f0190..5deb0d23 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/array_declaration.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/array_declaration.g.cs @@ -136,6 +136,40 @@ public async Task> PlainToShadowAsync(Pocos.ArrayDec return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class plain, Pocos.ArrayDeclarationSimpleNamespace.array_declaration_class latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest.primitive.Length; i760901_3001_mimi++) + { + if (latest.primitive.ElementAt(i760901_3001_mimi) != plain.primitive[i760901_3001_mimi]) + somethingChanged = true; + } + + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest.complex.Length; i760901_3001_mimi++) + { + if (await complex.ElementAt(i760901_3001_mimi).DetectsAnyChangeAsync(plain.complex[i760901_3001_mimi], latest.complex[i760901_3001_mimi])) + somethingChanged = true; + } + + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -307,6 +341,28 @@ public async Task> PlainToShadowAsync(Pocos.ArrayDec return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ArrayDeclarationSimpleNamespace.some_complex_type plain, Pocos.ArrayDeclarationSimpleNamespace.some_complex_type latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_all_primitives.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_all_primitives.g.cs index bdc1f869..2c0a63a0 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_all_primitives.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_all_primitives.g.cs @@ -420,6 +420,72 @@ public async Task> PlainToShadowAsync(Pocos.class_al return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.class_all_primitives plain, Pocos.class_all_primitives latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.myBOOL != myBOOL.LastValue) + somethingChanged = true; + if (plain.myBYTE != myBYTE.LastValue) + somethingChanged = true; + if (plain.myWORD != myWORD.LastValue) + somethingChanged = true; + if (plain.myDWORD != myDWORD.LastValue) + somethingChanged = true; + if (plain.myLWORD != myLWORD.LastValue) + somethingChanged = true; + if (plain.mySINT != mySINT.LastValue) + somethingChanged = true; + if (plain.myINT != myINT.LastValue) + somethingChanged = true; + if (plain.myDINT != myDINT.LastValue) + somethingChanged = true; + if (plain.myLINT != myLINT.LastValue) + somethingChanged = true; + if (plain.myUSINT != myUSINT.LastValue) + somethingChanged = true; + if (plain.myUINT != myUINT.LastValue) + somethingChanged = true; + if (plain.myUDINT != myUDINT.LastValue) + somethingChanged = true; + if (plain.myULINT != myULINT.LastValue) + somethingChanged = true; + if (plain.myREAL != myREAL.LastValue) + somethingChanged = true; + if (plain.myLREAL != myLREAL.LastValue) + somethingChanged = true; + if (plain.myTIME != myTIME.LastValue) + somethingChanged = true; + if (plain.myLTIME != myLTIME.LastValue) + somethingChanged = true; + if (plain.myDATE != myDATE.LastValue) + somethingChanged = true; + if (plain.myTIME_OF_DAY != myTIME_OF_DAY.LastValue) + somethingChanged = true; + if (plain.myDATE_AND_TIME != myDATE_AND_TIME.LastValue) + somethingChanged = true; + if (plain.mySTRING != mySTRING.LastValue) + somethingChanged = true; + if (plain.myWSTRING != myWSTRING.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extended_by_known_type.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extended_by_known_type.g.cs index 343f2055..e296c211 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extended_by_known_type.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extended_by_known_type.g.cs @@ -100,6 +100,30 @@ public async Task> PlainToShadowAsync(Pocos.Simatic. return this.RetrievePrimitives(); } + /// + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public new async Task DetectsAnyChangeAsync(Pocos.Simatic.Ax.StateFramework.State1Transition plain, Pocos.Simatic.Ax.StateFramework.State1Transition latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -230,6 +254,32 @@ public async Task> PlainToShadowAsync(Pocos.Simatic. return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Simatic.Ax.StateFramework.AbstractState plain, Pocos.Simatic.Ax.StateFramework.AbstractState latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.StateID != StateID.LastValue) + somethingChanged = true; + if (plain.StateName != StateName.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends.g.cs index 9b17569f..44483170 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends.g.cs @@ -98,6 +98,30 @@ public async Task> PlainToShadowAsync(Pocos.Extended return this.RetrievePrimitives(); } + /// + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public new async Task DetectsAnyChangeAsync(Pocos.Extended plain, Pocos.Extended latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -195,6 +219,28 @@ public async Task> PlainToShadowAsync(Pocos.Extendee return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Extendee plain, Pocos.Extendee latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends_and_implements.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends_and_implements.g.cs index 2d0c278e..7a0a86ad 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends_and_implements.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_extends_and_implements.g.cs @@ -98,6 +98,30 @@ public async Task> PlainToShadowAsync(Pocos.ExtendsA return this.RetrievePrimitives(); } + /// + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public new async Task DetectsAnyChangeAsync(Pocos.ExtendsAndImplements plain, Pocos.ExtendsAndImplements latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -195,6 +219,28 @@ public async Task> PlainToShadowAsync(Pocos.Extendee return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ExtendeeExtendsAndImplements plain, Pocos.ExtendeeExtendsAndImplements latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_generic_extension.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_generic_extension.g.cs index b7049813..2b3483f6 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_generic_extension.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_generic_extension.g.cs @@ -92,6 +92,28 @@ public async Task> PlainToShadowAsync(Pocos.Generics return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Generics.Extender plain, Pocos.Generics.Extender latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -313,6 +335,34 @@ public async Task> PlainToShadowAsync(Pocos.Generics return this.RetrievePrimitives(); } + /// + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public new async Task DetectsAnyChangeAsync(Pocos.Generics.Extendee plain, Pocos.Generics.Extendee latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + if (await SomeType.DetectsAnyChangeAsync(plain.SomeType, latest.SomeType)) + somethingChanged = true; + if (await SomeTypeAsPoco.DetectsAnyChangeAsync(plain.SomeTypeAsPoco, latest.SomeTypeAsPoco)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -439,6 +489,32 @@ public async Task> PlainToShadowAsync(Pocos.Generics return this.RetrievePrimitives(); } + /// + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public new async Task DetectsAnyChangeAsync(Pocos.Generics.Extendee2 plain, Pocos.Generics.Extendee2 latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + if (await SomeType.DetectsAnyChangeAsync(plain.SomeType, latest.SomeType)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -536,6 +612,28 @@ public async Task> PlainToShadowAsync(Pocos.Generics return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Generics.SomeType plain, Pocos.Generics.SomeType latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements.g.cs index 721fa867..fc71424d 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements.g.cs @@ -90,6 +90,28 @@ public async Task> PlainToShadowAsync(Pocos._NULL_CO return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos._NULL_CONTEXT plain, Pocos._NULL_CONTEXT latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements_multiple.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements_multiple.g.cs index 89d59e20..57207585 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements_multiple.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_implements_multiple.g.cs @@ -90,6 +90,28 @@ public async Task> PlainToShadowAsync(Pocos._NULL_CO return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos._NULL_CONTEXT_MULTIPLE plain, Pocos._NULL_CONTEXT_MULTIPLE latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_internal.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_internal.g.cs index 980e3a1a..0929a8fb 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_internal.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_internal.g.cs @@ -90,6 +90,28 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithComplexTypes plain, Pocos.ClassWithComplexTypes latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_no_access_modifier.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_no_access_modifier.g.cs index faa965b0..af6e8a75 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_no_access_modifier.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_no_access_modifier.g.cs @@ -90,6 +90,28 @@ public async Task> PlainToShadowAsync(Pocos.NoAccess return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.NoAccessModifierClass plain, Pocos.NoAccessModifierClass latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_complex_members.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_complex_members.g.cs index 9e94144c..65ed1ceb 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_complex_members.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_complex_members.g.cs @@ -113,6 +113,30 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes plain, Pocos.ClassWithComplexTypesNamespace.ClassWithComplexTypes latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await myComplexType.DetectsAnyChangeAsync(plain.myComplexType, latest.myComplexType)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -284,6 +308,28 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithComplexTypesNamespace.ComplexType1 plain, Pocos.ClassWithComplexTypesNamespace.ComplexType1 latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_non_public_members.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_non_public_members.g.cs index d45ea598..58646006 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_non_public_members.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_non_public_members.g.cs @@ -113,6 +113,30 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers plain, Pocos.ClassWithNonTraspilableMemberssNamespace.ClassWithNonTraspilableMembers latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await myComplexType.DetectsAnyChangeAsync(plain.myComplexType, latest.myComplexType)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -284,6 +308,28 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1 plain, Pocos.ClassWithNonTraspilableMemberssNamespace.ComplexType1 latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_pragmas.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_pragmas.g.cs index 8ca94821..719a472a 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_pragmas.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_pragmas.g.cs @@ -115,6 +115,30 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithPragmasNamespace.ClassWithPragmas plain, Pocos.ClassWithPragmasNamespace.ClassWithPragmas latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await myComplexType.DetectsAnyChangeAsync(plain.myComplexType, latest.myComplexType)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -286,6 +310,28 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithPragmasNamespace.ComplexType1 plain, Pocos.ClassWithPragmasNamespace.ComplexType1 latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_primitive_members.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_primitive_members.g.cs index 657546b8..d80acd05 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_primitive_members.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_primitive_members.g.cs @@ -497,6 +497,82 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes plain, Pocos.ClassWithPrimitiveTypesNamespace.ClassWithPrimitiveTypes latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.myBOOL != myBOOL.LastValue) + somethingChanged = true; + if (plain.myBYTE != myBYTE.LastValue) + somethingChanged = true; + if (plain.myWORD != myWORD.LastValue) + somethingChanged = true; + if (plain.myDWORD != myDWORD.LastValue) + somethingChanged = true; + if (plain.myLWORD != myLWORD.LastValue) + somethingChanged = true; + if (plain.mySINT != mySINT.LastValue) + somethingChanged = true; + if (plain.myINT != myINT.LastValue) + somethingChanged = true; + if (plain.myDINT != myDINT.LastValue) + somethingChanged = true; + if (plain.myLINT != myLINT.LastValue) + somethingChanged = true; + if (plain.myUSINT != myUSINT.LastValue) + somethingChanged = true; + if (plain.myUINT != myUINT.LastValue) + somethingChanged = true; + if (plain.myUDINT != myUDINT.LastValue) + somethingChanged = true; + if (plain.myULINT != myULINT.LastValue) + somethingChanged = true; + if (plain.myREAL != myREAL.LastValue) + somethingChanged = true; + if (plain.myLREAL != myLREAL.LastValue) + somethingChanged = true; + if (plain.myTIME != myTIME.LastValue) + somethingChanged = true; + if (plain.myLTIME != myLTIME.LastValue) + somethingChanged = true; + if (plain.myDATE != myDATE.LastValue) + somethingChanged = true; + if (plain.myLDATE != myLDATE.LastValue) + somethingChanged = true; + if (plain.myTIME_OF_DAY != myTIME_OF_DAY.LastValue) + somethingChanged = true; + if (plain.myLTIME_OF_DAY != myLTIME_OF_DAY.LastValue) + somethingChanged = true; + if (plain.myDATE_AND_TIME != myDATE_AND_TIME.LastValue) + somethingChanged = true; + if (plain.myLDATE_AND_TIME != myLDATE_AND_TIME.LastValue) + somethingChanged = true; + if (plain.myCHAR != myCHAR.LastValue) + somethingChanged = true; + if (plain.myWCHAR != myWCHAR.LastValue) + somethingChanged = true; + if (plain.mySTRING != mySTRING.LastValue) + somethingChanged = true; + if (plain.myWSTRING != myWSTRING.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_using_directives.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_using_directives.g.cs index 16e82b7d..7aaf679d 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_using_directives.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/class_with_using_directives.g.cs @@ -93,6 +93,28 @@ public async Task> PlainToShadowAsync(Pocos.ClassWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ClassWithUsingDirectives plain, Pocos.ClassWithUsingDirectives latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/compileromitsattribute.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/compileromitsattribute.g.cs index 22d52e9d..75699b34 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/compileromitsattribute.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/compileromitsattribute.g.cs @@ -115,6 +115,34 @@ public async Task> PlainToShadowAsync(Pocos.Compiler return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.CompilerOmmits.ClassWithArrays plain, Pocos.CompilerOmmits.ClassWithArrays latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest._primitive.Length; i760901_3001_mimi++) + { + if (latest._primitive.ElementAt(i760901_3001_mimi) != plain._primitive[i760901_3001_mimi]) + somethingChanged = true; + } + + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -316,6 +344,32 @@ public async Task> PlainToShadowAsync(Pocos.Compiler return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.CompilerOmmits.Complex plain, Pocos.CompilerOmmits.Complex latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.HelloString != HelloString.LastValue) + somethingChanged = true; + if (plain.Id != Id.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -522,6 +576,32 @@ public async Task> PlainToShadowAsync(Pocos.Enums.Cl return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Enums.ClassWithEnums plain, Pocos.Enums.ClassWithEnums latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.colors != (Enums.Colors)latest.colors) + somethingChanged = true; + if (plain.NamedValuesColors != NamedValuesColors.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -752,6 +832,32 @@ public async Task> PlainToShadowAsync(Pocos.misc.Var return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.misc.VariousMembers plain, Pocos.misc.VariousMembers latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await _SomeClass.DetectsAnyChangeAsync(plain._SomeClass, latest._SomeClass)) + somethingChanged = true; + if (await _Motor.DetectsAnyChangeAsync(plain._Motor, latest._Motor)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -938,6 +1044,30 @@ public async Task> PlainToShadowAsync(Pocos.misc.Som return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.misc.SomeClass plain, Pocos.misc.SomeClass latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.SomeClassVariable != SomeClassVariable.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1118,6 +1248,30 @@ public async Task> PlainToShadowAsync(Pocos.misc.Mot return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.misc.Motor plain, Pocos.misc.Motor latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (plain.isRunning != isRunning.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1319,6 +1473,32 @@ public async Task> PlainToShadowAsync(Pocos.misc.Veh return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.misc.Vehicle plain, Pocos.misc.Vehicle latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (await m.DetectsAnyChangeAsync(plain.m, latest.m)) + somethingChanged = true; + if (plain.displacement != displacement.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1537,6 +1717,40 @@ public async Task> PlainToShadowAsync(Pocos.UnknownA return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.UnknownArraysShouldNotBeTraspiled.ClassWithArrays plain, Pocos.UnknownArraysShouldNotBeTraspiled.ClassWithArrays latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest._complexKnown.Length; i760901_3001_mimi++) + { + if (await _complexKnown.ElementAt(i760901_3001_mimi).DetectsAnyChangeAsync(plain._complexKnown[i760901_3001_mimi], latest._complexKnown[i760901_3001_mimi])) + somethingChanged = true; + } + + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest._primitive.Length; i760901_3001_mimi++) + { + if (latest._primitive.ElementAt(i760901_3001_mimi) != plain._primitive[i760901_3001_mimi]) + somethingChanged = true; + } + + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1738,6 +1952,32 @@ public async Task> PlainToShadowAsync(Pocos.UnknownA return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.UnknownArraysShouldNotBeTraspiled.Complex plain, Pocos.UnknownArraysShouldNotBeTraspiled.Complex latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.HelloString != HelloString.LastValue) + somethingChanged = true; + if (plain.Id != Id.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/configuration.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/configuration.g.cs index 01065f59..b3d301d6 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/configuration.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/configuration.g.cs @@ -686,6 +686,84 @@ public async Task> PlainToShadowAsync(Pocos.ComplexF return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.ComplexForConfig plain, Pocos.ComplexForConfig latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.myBOOL != myBOOL.LastValue) + somethingChanged = true; + if (plain.myBYTE != myBYTE.LastValue) + somethingChanged = true; + if (plain.myWORD != myWORD.LastValue) + somethingChanged = true; + if (plain.myDWORD != myDWORD.LastValue) + somethingChanged = true; + if (plain.myLWORD != myLWORD.LastValue) + somethingChanged = true; + if (plain.mySINT != mySINT.LastValue) + somethingChanged = true; + if (plain.myINT != myINT.LastValue) + somethingChanged = true; + if (plain.myDINT != myDINT.LastValue) + somethingChanged = true; + if (plain.myLINT != myLINT.LastValue) + somethingChanged = true; + if (plain.myUSINT != myUSINT.LastValue) + somethingChanged = true; + if (plain.myUINT != myUINT.LastValue) + somethingChanged = true; + if (plain.myUDINT != myUDINT.LastValue) + somethingChanged = true; + if (plain.myULINT != myULINT.LastValue) + somethingChanged = true; + if (plain.myREAL != myREAL.LastValue) + somethingChanged = true; + if (plain.myLREAL != myLREAL.LastValue) + somethingChanged = true; + if (plain.myTIME != myTIME.LastValue) + somethingChanged = true; + if (plain.myLTIME != myLTIME.LastValue) + somethingChanged = true; + if (plain.myDATE != myDATE.LastValue) + somethingChanged = true; + if (plain.myLDATE != myLDATE.LastValue) + somethingChanged = true; + if (plain.myTIME_OF_DAY != myTIME_OF_DAY.LastValue) + somethingChanged = true; + if (plain.myLTIME_OF_DAY != myLTIME_OF_DAY.LastValue) + somethingChanged = true; + if (plain.myDATE_AND_TIME != myDATE_AND_TIME.LastValue) + somethingChanged = true; + if (plain.myLDATE_AND_TIME != myLDATE_AND_TIME.LastValue) + somethingChanged = true; + if (plain.myCHAR != myCHAR.LastValue) + somethingChanged = true; + if (plain.myWCHAR != myWCHAR.LastValue) + somethingChanged = true; + if (plain.mySTRING != mySTRING.LastValue) + somethingChanged = true; + if (plain.myWSTRING != myWSTRING.LastValue) + somethingChanged = true; + if (await myMotor.DetectsAnyChangeAsync(plain.myMotor, latest.myMotor)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -880,6 +958,30 @@ public async Task> PlainToShadowAsync(Pocos.Motor pl return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Motor plain, Pocos.Motor latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (plain.isRunning != isRunning.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1081,6 +1183,32 @@ public async Task> PlainToShadowAsync(Pocos.Vehicle return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Vehicle plain, Pocos.Vehicle latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (await m.DetectsAnyChangeAsync(plain.m, latest.m)) + somethingChanged = true; + if (plain.displacement != displacement.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonce.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonce.g.cs index 35cfb553..253e5ae6 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonce.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonce.g.cs @@ -168,6 +168,36 @@ public async Task> PlainToShadowAsync(Pocos.makeread return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.makereadonce.MembersWithMakeReadOnce plain, Pocos.makereadonce.MembersWithMakeReadOnce latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.makeReadOnceMember != makeReadOnceMember.LastValue) + somethingChanged = true; + if (plain.someOtherMember != someOtherMember.LastValue) + somethingChanged = true; + if (await makeReadComplexMember.DetectsAnyChangeAsync(plain.makeReadComplexMember, latest.makeReadComplexMember)) + somethingChanged = true; + if (await someotherComplexMember.DetectsAnyChangeAsync(plain.someotherComplexMember, latest.someotherComplexMember)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -369,6 +399,32 @@ public async Task> PlainToShadowAsync(Pocos.makeread return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.makereadonce.ComplexMember plain, Pocos.makereadonce.ComplexMember latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.someMember != someMember.LastValue) + somethingChanged = true; + if (plain.someOtherMember != someOtherMember.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonly.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonly.g.cs index c863790e..e055e04e 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonly.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/makereadonly.g.cs @@ -168,6 +168,36 @@ public async Task> PlainToShadowAsync(Pocos.makeread return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.makereadonly.MembersWithMakeReadOnly plain, Pocos.makereadonly.MembersWithMakeReadOnly latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.makeReadOnceMember != makeReadOnceMember.LastValue) + somethingChanged = true; + if (plain.someOtherMember != someOtherMember.LastValue) + somethingChanged = true; + if (await makeReadComplexMember.DetectsAnyChangeAsync(plain.makeReadComplexMember, latest.makeReadComplexMember)) + somethingChanged = true; + if (await someotherComplexMember.DetectsAnyChangeAsync(plain.someotherComplexMember, latest.someotherComplexMember)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -369,6 +399,32 @@ public async Task> PlainToShadowAsync(Pocos.makeread return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.makereadonly.ComplexMember plain, Pocos.makereadonly.ComplexMember latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.someMember != someMember.LastValue) + somethingChanged = true; + if (plain.someOtherMember != someOtherMember.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/misc.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/misc.g.cs index 3b93bf25..be130728 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/misc.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/misc.g.cs @@ -124,6 +124,32 @@ public async Task> PlainToShadowAsync(Pocos.Enums.Cl return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Enums.ClassWithEnums plain, Pocos.Enums.ClassWithEnums latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.colors != (Enums.Colors)latest.colors) + somethingChanged = true; + if (plain.NamedValuesColors != NamedValuesColors.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -354,6 +380,32 @@ public async Task> PlainToShadowAsync(Pocos.misc.Var return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.misc.VariousMembers plain, Pocos.misc.VariousMembers latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await _SomeClass.DetectsAnyChangeAsync(plain._SomeClass, latest._SomeClass)) + somethingChanged = true; + if (await _Motor.DetectsAnyChangeAsync(plain._Motor, latest._Motor)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -540,6 +592,30 @@ public async Task> PlainToShadowAsync(Pocos.misc.Som return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.misc.SomeClass plain, Pocos.misc.SomeClass latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.SomeClassVariable != SomeClassVariable.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -720,6 +796,30 @@ public async Task> PlainToShadowAsync(Pocos.misc.Mot return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.misc.Motor plain, Pocos.misc.Motor latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (plain.isRunning != isRunning.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -921,6 +1021,32 @@ public async Task> PlainToShadowAsync(Pocos.misc.Veh return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.misc.Vehicle plain, Pocos.misc.Vehicle latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (await m.DetectsAnyChangeAsync(plain.m, latest.m)) + somethingChanged = true; + if (plain.displacement != displacement.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1139,6 +1265,40 @@ public async Task> PlainToShadowAsync(Pocos.UnknownA return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.UnknownArraysShouldNotBeTraspiled.ClassWithArrays plain, Pocos.UnknownArraysShouldNotBeTraspiled.ClassWithArrays latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest._complexKnown.Length; i760901_3001_mimi++) + { + if (await _complexKnown.ElementAt(i760901_3001_mimi).DetectsAnyChangeAsync(plain._complexKnown[i760901_3001_mimi], latest._complexKnown[i760901_3001_mimi])) + somethingChanged = true; + } + + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest._primitive.Length; i760901_3001_mimi++) + { + if (latest._primitive.ElementAt(i760901_3001_mimi) != plain._primitive[i760901_3001_mimi]) + somethingChanged = true; + } + + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1340,6 +1500,32 @@ public async Task> PlainToShadowAsync(Pocos.UnknownA return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.UnknownArraysShouldNotBeTraspiled.Complex plain, Pocos.UnknownArraysShouldNotBeTraspiled.Complex latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.HelloString != HelloString.LastValue) + somethingChanged = true; + if (plain.Id != Id.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/mixed_access.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/mixed_access.g.cs index 75b51b17..318b3d82 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/mixed_access.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/mixed_access.g.cs @@ -148,6 +148,30 @@ public async Task> PlainToShadowAsync(Pocos.Motor pl return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Motor plain, Pocos.Motor latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Run != Run.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -334,6 +358,30 @@ public async Task> PlainToShadowAsync(Pocos.struct1 return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.struct1 plain, Pocos.struct1 latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (await s2.DetectsAnyChangeAsync(plain.s2, latest.s2)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -520,6 +568,30 @@ public async Task> PlainToShadowAsync(Pocos.struct2 return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.struct2 plain, Pocos.struct2 latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (await s3.DetectsAnyChangeAsync(plain.s3, latest.s3)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -706,6 +778,30 @@ public async Task> PlainToShadowAsync(Pocos.struct3 return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.struct3 plain, Pocos.struct3 latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (await s4.DetectsAnyChangeAsync(plain.s4, latest.s4)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -886,6 +982,30 @@ public async Task> PlainToShadowAsync(Pocos.struct4 return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.struct4 plain, Pocos.struct4 latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (plain.s5 != s5.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1087,6 +1207,32 @@ public async Task> PlainToShadowAsync(Pocos.Abstract return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.AbstractMotor plain, Pocos.AbstractMotor latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Run != Run.LastValue) + somethingChanged = true; + if (plain.ReverseDirection != ReverseDirection.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1266,6 +1412,30 @@ public async Task> PlainToShadowAsync(Pocos.GenericM return this.RetrievePrimitives(); } + /// + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public new async Task DetectsAnyChangeAsync(Pocos.GenericMotor plain, Pocos.GenericMotor latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1371,6 +1541,30 @@ public async Task> PlainToShadowAsync(Pocos.Specific return this.RetrievePrimitives(); } + /// + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public new async Task DetectsAnyChangeAsync(Pocos.SpecificMotorA plain, Pocos.SpecificMotorA latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/ref_to_simple.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/ref_to_simple.g.cs index 3e06a0e8..2c4dfe74 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/ref_to_simple.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/ref_to_simple.g.cs @@ -92,6 +92,28 @@ public async Task> PlainToShadowAsync(Pocos.RefToSim return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.RefToSimple.ref_to_simple plain, Pocos.RefToSimple.ref_to_simple latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -278,6 +300,30 @@ public async Task> PlainToShadowAsync(Pocos.RefToSim return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.RefToSimple.referenced plain, Pocos.RefToSimple.referenced latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.b != b.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class.g.cs index 3fa72e36..6e9e8eaa 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class.g.cs @@ -90,6 +90,28 @@ public async Task> PlainToShadowAsync(Pocos.simple_c return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.simple_class plain, Pocos.simple_class latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class_within_namespace.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class_within_namespace.g.cs index 42bd8172..49c36a50 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class_within_namespace.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/simple_empty_class_within_namespace.g.cs @@ -92,6 +92,28 @@ public async Task> PlainToShadowAsync(Pocos.sampleNa return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.sampleNamespace.simple_empty_class_within_namespace plain, Pocos.sampleNamespace.simple_empty_class_within_namespace latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/struct_simple.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/struct_simple.g.cs index 1c5e48dc..484d813b 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/struct_simple.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/struct_simple.g.cs @@ -99,6 +99,30 @@ public async Task> PlainToShadowAsync(Pocos.Motor pl return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Motor plain, Pocos.Motor latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (plain.isRunning != isRunning.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -300,6 +324,32 @@ public async Task> PlainToShadowAsync(Pocos.Vehicle return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Vehicle plain, Pocos.Vehicle latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (await m.DetectsAnyChangeAsync(plain.m, latest.m)) + somethingChanged = true; + if (plain.displacement != displacement.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values.g.cs index 61e65441..07bef654 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values.g.cs @@ -115,6 +115,30 @@ public async Task> PlainToShadowAsync(Pocos.NamedVal return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.NamedValuesNamespace.using_type_named_values plain, Pocos.NamedValuesNamespace.using_type_named_values latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.LColors != LColors.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values_literals.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values_literals.g.cs index 362d5e12..1882feab 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values_literals.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_named_values_literals.g.cs @@ -117,6 +117,30 @@ public async Task> PlainToShadowAsync(Pocos.Simatic. return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Simatic.Ax.StateFramework.using_type_named_values plain, Pocos.Simatic.Ax.StateFramework.using_type_named_values latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.LColors != LColors.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_with_enum.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_with_enum.g.cs index 66b3e97d..f9309083 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_with_enum.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/type_with_enum.g.cs @@ -140,6 +140,32 @@ public async Task> PlainToShadowAsync(Pocos.Simatic. return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.Simatic.Ax.StateFramework.CompareGuardLint plain, Pocos.Simatic.Ax.StateFramework.CompareGuardLint latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.CompareToValue != CompareToValue.LastValue) + somethingChanged = true; + if (plain.Condition != (Simatic.Ax.StateFramework.Condition)latest.Condition) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_name_attributes.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_name_attributes.g.cs index 43cbee46..27eeec36 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_name_attributes.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_name_attributes.g.cs @@ -102,6 +102,30 @@ public async Task> PlainToShadowAsync(Pocos.TypeWith return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.TypeWithNameAttributes.Motor plain, Pocos.TypeWithNameAttributes.Motor latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (plain.isRunning != isRunning.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -303,6 +327,32 @@ public async Task> PlainToShadowAsync(Pocos.TypeWith return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.TypeWithNameAttributes.Vehicle plain, Pocos.TypeWithNameAttributes.Vehicle latest = null) + { + var somethingChanged = false; + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + return await Task.Run(async () => + { + if (await m.DetectsAnyChangeAsync(plain.m, latest.m)) + somethingChanged = true; + if (plain.displacement != displacement.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -497,6 +547,30 @@ public async Task> PlainToShadowAsync(Pocos.TypeWith return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.TypeWithNameAttributes.NoAccessModifierClass plain, Pocos.TypeWithNameAttributes.NoAccessModifierClass latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.SomeClassVariable != SomeClassVariable.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_property_attributes.g.cs b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_property_attributes.g.cs index 10ed7fce..ec546675 100644 --- a/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_property_attributes.g.cs +++ b/src/AXSharp.compiler/tests/AXSharp.Compiler.CsTests/samples/units/expected/.g/Onliners/types_with_property_attributes.g.cs @@ -117,6 +117,30 @@ public async Task> PlainToShadowAsync(Pocos.TypesWit return this.RetrievePrimitives(); } + /// + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + public async Task DetectsAnyChangeAsync(Pocos.TypesWithPropertyAttributes.SomeAddedProperties plain, Pocos.TypesWithPropertyAttributes.SomeAddedProperties latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Counter != Counter.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/AXSharp.connectors/src/AXSharp.Connector/ITwinObject.cs b/src/AXSharp.connectors/src/AXSharp.Connector/ITwinObject.cs index cd2f0efd..8ecab943 100644 --- a/src/AXSharp.connectors/src/AXSharp.Connector/ITwinObject.cs +++ b/src/AXSharp.connectors/src/AXSharp.Connector/ITwinObject.cs @@ -98,4 +98,11 @@ public interface ITwinObject : ITwinElement /// /// POCO object to be written to the shadows of this object. Task PlainToShadow(T plain); + + + /// + ///Compares if the current plain object has changed from the previous object.This method is used by the framework to determine if the object has changed and needs to be updated. + ///[!NOTE] Any member in the hierarchy that is ignored by the compilers (e.g. when CompilerOmitAttribute is used) will not be compared, and therefore will not be detected as changed. + /// + Task AnyChangeAsync(T plain); } \ No newline at end of file diff --git a/src/AXSharp.connectors/src/AXSharp.Connector/RootTwinObject.cs b/src/AXSharp.connectors/src/AXSharp.Connector/RootTwinObject.cs index ace80645..b8184ea8 100644 --- a/src/AXSharp.connectors/src/AXSharp.Connector/RootTwinObject.cs +++ b/src/AXSharp.connectors/src/AXSharp.Connector/RootTwinObject.cs @@ -158,6 +158,11 @@ public Task PlainToShadow(T plain) throw new NotImplementedException(); } + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } + public object OnlineToPlain() { throw new NotImplementedException(); diff --git a/src/AXSharp.connectors/src/AXSharp.Connector/TwinObjectExtensions.cs b/src/AXSharp.connectors/src/AXSharp.Connector/TwinObjectExtensions.cs index 47433ec8..ca8f5142 100644 --- a/src/AXSharp.connectors/src/AXSharp.Connector/TwinObjectExtensions.cs +++ b/src/AXSharp.connectors/src/AXSharp.Connector/TwinObjectExtensions.cs @@ -29,6 +29,8 @@ public static class TwinObjectExtensions public static readonly string PlainToShadowMethodName = nameof(ITwinObject.PlainToShadow); + public static readonly string HasChangedMethodName = nameof(ITwinObject.AnyChangeAsync); + /// /// Makes readonly for this application. /// diff --git a/src/AXSharp.connectors/src/AXSharp.TIA.Connector/TIATwinObject.cs b/src/AXSharp.connectors/src/AXSharp.TIA.Connector/TIATwinObject.cs index d9504306..76ccc72c 100644 --- a/src/AXSharp.connectors/src/AXSharp.TIA.Connector/TIATwinObject.cs +++ b/src/AXSharp.connectors/src/AXSharp.TIA.Connector/TIATwinObject.cs @@ -117,4 +117,9 @@ public Task PlainToShadow(T plain) { throw new NotImplementedException(); } + + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/src/AXSharp.connectors/tests/AXSharp.Connector.Sax.WebAPITests/WebApiConnector/WebApiConnectorFactoryTests.cs b/src/AXSharp.connectors/tests/AXSharp.Connector.Sax.WebAPITests/WebApiConnector/WebApiConnectorFactoryTests.cs index ad33c7b9..af7456ad 100644 --- a/src/AXSharp.connectors/tests/AXSharp.Connector.Sax.WebAPITests/WebApiConnector/WebApiConnectorFactoryTests.cs +++ b/src/AXSharp.connectors/tests/AXSharp.Connector.Sax.WebAPITests/WebApiConnector/WebApiConnectorFactoryTests.cs @@ -117,6 +117,11 @@ public Task PlainToShadow(T plain) { throw new NotImplementedException(); } + + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } } diff --git a/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/Identity/TwinIdentityProviderTests.cs b/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/Identity/TwinIdentityProviderTests.cs index a8d2f69e..41adbc74 100644 --- a/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/Identity/TwinIdentityProviderTests.cs +++ b/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/Identity/TwinIdentityProviderTests.cs @@ -228,6 +228,11 @@ public Task PlainToShadow(T plain) throw new NotImplementedException(); } + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } + public object OnlineToPlain() { throw new NotImplementedException(); @@ -360,6 +365,11 @@ public Task PlainToShadow(T plain) throw new NotImplementedException(); } + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } + public object OnlineToPlain() { throw new NotImplementedException(); diff --git a/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/StringInterpolator/StringInterpolatorTests.cs b/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/StringInterpolator/StringInterpolatorTests.cs index 9d2232e9..f3b1091a 100644 --- a/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/StringInterpolator/StringInterpolatorTests.cs +++ b/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/StringInterpolator/StringInterpolatorTests.cs @@ -171,6 +171,11 @@ public Task PlainToShadow(T plain) throw new NotImplementedException(); } + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } + public object OnlineToPlain() { throw new NotImplementedException(); @@ -293,6 +298,11 @@ public Task PlainToShadow(T plain) throw new NotImplementedException(); } + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } + public object OnlineToPlain() { throw new NotImplementedException(); @@ -442,6 +452,11 @@ public Task PlainToShadow(T plain) throw new NotImplementedException(); } + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } + public object OnlineToPlain() { throw new NotImplementedException(); diff --git a/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/ValueTypes/TestTwinObject.cs b/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/ValueTypes/TestTwinObject.cs index b0043e88..440a0097 100644 --- a/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/ValueTypes/TestTwinObject.cs +++ b/src/AXSharp.connectors/tests/AXSharp.ConnectorLegacyTests/ValueTypes/TestTwinObject.cs @@ -78,6 +78,11 @@ public Task PlainToShadow(T plain) throw new NotImplementedException(); } + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } + public object OnlineToPlain() { throw new NotImplementedException(); diff --git a/src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/IPlainExtensionsTests.cs b/src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/IPlainExtensionsTests.cs index 5f3ebbfd..339f2b16 100644 --- a/src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/IPlainExtensionsTests.cs +++ b/src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/IPlainExtensionsTests.cs @@ -311,6 +311,11 @@ public async virtual Task PlainToShadow(T plain) await this.PlainToShadowAsync((dynamic)plain); } + public Task AnyChangeAsync(T1 plain) + { + throw new NotImplementedException(); + } + public async Task> PlainToShadowAsync(Pocos.all_primitives plain) { myBOOL.Shadow = plain.myBOOL; diff --git a/src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/TwinObjectExtensionsTests.cs b/src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/TwinObjectExtensionsTests.cs index 4ddfa15d..a36fe57d 100644 --- a/src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/TwinObjectExtensionsTests.cs +++ b/src/AXSharp.connectors/tests/AXSharp.ConnectorTests/AXSharp.ConnectorTests/TwinObjectExtensionsTests.cs @@ -467,6 +467,11 @@ public Task PlainToShadow(T plain) throw new NotImplementedException(); } + public Task AnyChangeAsync(T plain) + { + throw new NotImplementedException(); + } + public MyTestPoco CreateEmptyPoco() { return new MyTestPoco(); diff --git a/src/AXSharp.connectors/tests/ax-test-project/apax-lock.json b/src/AXSharp.connectors/tests/ax-test-project/apax-lock.json new file mode 100644 index 00000000..09150896 --- /dev/null +++ b/src/AXSharp.connectors/tests/ax-test-project/apax-lock.json @@ -0,0 +1,693 @@ +{ + "name": "ax_test_project", + "version": "0.0.0", + "lockFileVersion": "2", + "installStrategy": "strict", + "root": { + "name": "ax_test_project", + "version": "0.0.0", + "devDependencies": { + "@ax/sdk": "2311.0.1" + } + }, + "packages": { + "@ax/sdk": { + "name": "@ax/sdk", + "version": "2311.0.1", + "integrity": "sha512-uPAnfHnc9Tl7ugVFjA3Qc7K1CNwEF7CPfMRdZS/hO2aNeMXLlfxOc/Mm1R5hP8pF+XQgjhyvwm/Zy/e1rghKWQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdk/-/sdk-2311.0.1.tgz", + "dependencies": { + "@ax/axunitst": "4.1.8", + "@ax/axunitst-ls-contrib": "4.1.8", + "@ax/mod": "1.0.4", + "@ax/mon": "1.0.4", + "@ax/sdb": "1.0.4", + "@ax/sld": "2.0.5", + "@ax/st": "2311.0.1", + "@ax/target-llvm": "6.0.146", + "@ax/target-mc7plus": "6.0.146", + "@ax/simatic-pragma-stc-plugin": "2.0.12", + "@ax/trace": "2.7.0", + "@ax/diagnostic-buffer": "1.2.0", + "@ax/performance-info": "1.1.0", + "@ax/plc-info": "2.3.0", + "@ax/certificate-management": "1.1.0" + } + }, + "@ax/axunitst": { + "name": "@ax/axunitst", + "version": "4.1.8", + "integrity": "sha512-Ax4b503soS4RrfokQg5NbhqFOSJ7cKIzK8bNwtobWHy9asUPUbuwQhsILGETFh+T7cw8FGzFZ/VzKOL6tkhq8A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst/-/axunitst-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-library": "4.1.8", + "@ax/axunitst-runner": "4.1.8", + "@ax/axunitst-generator": "4.1.8", + "@ax/axunitst-llvm-runner-gen": "4.1.8", + "@ax/axunitst-docs": "4.1.8", + "@ax/build-native": "16.0.3" + } + }, + "@ax/axunitst-ls-contrib": { + "name": "@ax/axunitst-ls-contrib", + "version": "4.1.8", + "integrity": "sha512-dCrf/Ou/NT0zFh6wVXSxYphHOjLoUgOBJWDIBVzBpRDbhCebA/BuHLmVVGMllujkMreMlGRITjjquuqILquOAA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-ls-contrib/-/axunitst-ls-contrib-4.1.8.tgz", + "dependencies": {} + }, + "@ax/mod": { + "name": "@ax/mod", + "version": "1.0.4", + "integrity": "sha512-AU/OiEf3J9/wo+kSDYLjIRd19ajOpgASs5J2MHOVlP8eOaupZ1pAkIIUvXBcBuS8M42l5kXEw7G18dTcW9j1ng==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod/-/mod-1.0.4.tgz", + "dependencies": { + "@ax/mod-win-x64": "1.0.4", + "@ax/mod-linux-x64": "1.0.4" + } + }, + "@ax/mon": { + "name": "@ax/mon", + "version": "1.0.4", + "integrity": "sha512-HBFdgbTqHtXwq/42nyTnEupX3/WT+ltPFlumVhksd7+Oh9oR2HUSWf5t/GkfjR7LY7W32h5Gb7wpnHNU6Qm7cA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon/-/mon-1.0.4.tgz", + "dependencies": { + "@ax/mon-win-x64": "1.0.4", + "@ax/mon-linux-x64": "1.0.4" + } + }, + "@ax/sdb": { + "name": "@ax/sdb", + "version": "1.0.4", + "integrity": "sha512-9GZRZE5TX7wCJBzabtohFP+L9CzVgn+wIYRJyYhmuX1Y6dMF8+rgChTcc1vjq8bQHFx2ovkt57xvoFoEbs/Wag==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb/-/sdb-1.0.4.tgz", + "dependencies": { + "@ax/sdb-win-x64": "1.0.4", + "@ax/sdb-linux-x64": "1.0.4" + } + }, + "@ax/sld": { + "name": "@ax/sld", + "version": "2.0.5", + "integrity": "sha512-upa0HyRVdYyzNu6j7E+gTAnpzP2mfZxvo+0jbm8H6Ci9ergL56SHaCVBC35PnociMZpdZ5d1/LTy6f8lwpDxXA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld/-/sld-2.0.5.tgz", + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/st": { + "name": "@ax/st", + "version": "2311.0.1", + "integrity": "sha512-n4Lqd2Gom1otRVGBu0hpYnT4dIvb0PVdcqo/3qVgMGKNjsMnKJAk9hKfnmcBhpHHt5U2IOIaiPgI3EuOEjL3LA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st/-/st-2311.0.1.tgz", + "dependencies": { + "@ax/stc": "6.0.146", + "@ax/apax-build": "0.7.0", + "@ax/st-ls": "3.0.113" + } + }, + "@ax/target-llvm": { + "name": "@ax/target-llvm", + "version": "6.0.146", + "integrity": "sha512-HiaiuX/O6nOUOX+xTcaMIHGLdAY4+KQW7Xwj39XCKLC/M54bhqiz2XOpde0g3jeUVuBeimf8UdTD3+MTva6l0A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm/-/target-llvm-6.0.146.tgz", + "dependencies": { + "@ax/target-llvm-win-x64": "6.0.146", + "@ax/target-llvm-linux-x64": "6.0.146" + } + }, + "@ax/target-mc7plus": { + "name": "@ax/target-mc7plus", + "version": "6.0.146", + "integrity": "sha512-WTktM/4O5XbXU+5rfpee6d02gl6AcRadFCgtkrYYD9rA4MShhPrYRREFn1dC9SfifOmWPqLX6i/qrfGMCG0n2w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus/-/target-mc7plus-6.0.146.tgz", + "dependencies": { + "@ax/target-mc7plus-win-x64": "6.0.146", + "@ax/target-mc7plus-linux-x64": "6.0.146" + } + }, + "@ax/simatic-pragma-stc-plugin": { + "name": "@ax/simatic-pragma-stc-plugin", + "version": "2.0.12", + "integrity": "sha512-KLo6lEPU5NfahK6Rr9MBlItSMU4VO+vePUGhk5nooM/1TZYtekJnLE4xRoZLeiMk+MA6glodTw6YkPzl7p7z4A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/simatic-pragma-stc-plugin/-/simatic-pragma-stc-plugin-2.0.12.tgz", + "dependencies": {} + }, + "@ax/trace": { + "name": "@ax/trace", + "version": "2.7.0", + "integrity": "sha512-yUmzjL5IKJ9NX5Q1THHN+LtW6llsZa+tw/jRZYQzKcxXTFJrGcCo5Qy45Dh0loxWGjZKmIe4YVG1ZwP3fdihJQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace/-/trace-2.7.0.tgz", + "dependencies": { + "@ax/trace-win-x64": "2.7.0", + "@ax/trace-linux-x64": "2.7.0" + } + }, + "@ax/diagnostic-buffer": { + "name": "@ax/diagnostic-buffer", + "version": "1.2.0", + "integrity": "sha512-Ka0t/mftRpSOMXob9/u9IDY1aSm1DyLe81vwNqJ6RzQY/h6CNpDjnRpx79pGzQiGWozlvtg/Sot0prGYPbthbg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer/-/diagnostic-buffer-1.2.0.tgz", + "dependencies": { + "@ax/diagnostic-buffer-win-x64": "1.2.0", + "@ax/diagnostic-buffer-linux-x64": "1.2.0" + } + }, + "@ax/performance-info": { + "name": "@ax/performance-info", + "version": "1.1.0", + "integrity": "sha512-vIgAbV63H9rVPYkS/Kz3AF38pMlI55oh3yReOUzEoXg8QmniOw81Ba5z//IeFpoZZyQJJG1lxtbYpVWvhCEqkA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info/-/performance-info-1.1.0.tgz", + "dependencies": { + "@ax/performance-info-win-x64": "1.1.0", + "@ax/performance-info-linux-x64": "1.1.0" + } + }, + "@ax/plc-info": { + "name": "@ax/plc-info", + "version": "2.3.0", + "integrity": "sha512-k+iOi1eUpVW5xBXRvdqS6Qj+ju2wQMsZIAZDvz32NDSv6HoAUTwMIEB5BA6xv9plRr1zi3jn99plslUshCEFPQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info/-/plc-info-2.3.0.tgz", + "dependencies": { + "@ax/plc-info-linux-x64": "2.3.0", + "@ax/plc-info-win-x64": "2.3.0" + } + }, + "@ax/certificate-management": { + "name": "@ax/certificate-management", + "version": "1.1.0", + "integrity": "sha512-u3S1uF3EC/EsxxxR3aM79QRLoH5UR2iLoGwj7DCN8CMalEalI6zyjyumm09MQ0vQc+Zje/vlyltD7OllsAqOuA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management/-/certificate-management-1.1.0.tgz", + "dependencies": { + "@ax/certificate-management-win-x64": "1.1.0", + "@ax/certificate-management-linux-x64": "1.1.0" + } + }, + "@ax/axunitst-library": { + "name": "@ax/axunitst-library", + "version": "4.1.8", + "integrity": "sha512-ue0V/EFANdrUA3j7BGr9j6TU1OFfKQBe29HN54CAHXvD1fzvr9gd+qoEHRiC41/KYVZarxi0XYcrQg4sbhh7Ew==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-library/-/axunitst-library-4.1.8.tgz", + "dependencies": { + "@ax/system-strings": "6.0.94" + } + }, + "@ax/axunitst-runner": { + "name": "@ax/axunitst-runner", + "version": "4.1.8", + "integrity": "sha512-Z0jnRjEWYVnaBIwXVHUncqp0GvwjTGMHH9avcHP5IisI9ierKrHnaJV/93mgntqgJY7BHLG8hanIoROPGc4ELA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner/-/axunitst-runner-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-runner-linux-x64": "4.1.8", + "@ax/axunitst-runner-win-x64": "4.1.8" + } + }, + "@ax/axunitst-generator": { + "name": "@ax/axunitst-generator", + "version": "4.1.8", + "integrity": "sha512-AGzftAlftnpyZ52uQOYTK06Yu6ptKh2m1uvGRCRdDz16CCAM1FIKZZsppl6fnMmZkf6MZbkTx3nbZ74Zk5c1rw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator/-/axunitst-generator-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-generator-linux-x64": "4.1.8", + "@ax/axunitst-generator-win-x64": "4.1.8" + } + }, + "@ax/axunitst-llvm-runner-gen": { + "name": "@ax/axunitst-llvm-runner-gen", + "version": "4.1.8", + "integrity": "sha512-XMmU+Qr1ElNFLJAnQ3JKh9QHr3/IPJo+KoR8C8sZqoIy/IzRCKY3IubvJ4KPGnBZzz+DI5UxIuH9bwvq5YWqIw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-llvm-runner-gen/-/axunitst-llvm-runner-gen-4.1.8.tgz", + "dependencies": {} + }, + "@ax/axunitst-docs": { + "name": "@ax/axunitst-docs", + "version": "4.1.8", + "integrity": "sha512-g4XsjaqZoJvYcz58ghirISMS/SfFl9UGNFJGr0afhLmYkqEyoLi6p9+zuLk4+SWtbMj3FNu/cc1ReSSS/GACEQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-docs/-/axunitst-docs-4.1.8.tgz", + "dependencies": {} + }, + "@ax/build-native": { + "name": "@ax/build-native", + "version": "16.0.3", + "integrity": "sha512-d7I0ICUaIwW/8v030Xw8H6fMMOD2FB9ON7pmq+XV+YXCPorTUJ7rCvq4+710B78QJn2ac+xJgpb1EhI1fiK40w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native/-/build-native-16.0.3.tgz", + "dependencies": { + "@ax/build-native-winx64": "16.0.3", + "@ax/build-native-linux": "16.0.3" + } + }, + "@ax/mod-win-x64": { + "name": "@ax/mod-win-x64", + "version": "1.0.4", + "integrity": "sha512-AQ9NUSaICMN/qPeX95SzZUj1/m4xULIltZ4V2JcMdi0VW9aoTZVPnVFHdE2gb+HwApyvrq73v9/Vcyq8cBkuKQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-win-x64/-/mod-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mod-linux-x64": { + "name": "@ax/mod-linux-x64", + "version": "1.0.4", + "integrity": "sha512-Bs+MBPyKpPJiJ3m8PvQ/DgCsH2I2YG4Vcm1Q6DfCzozpSp2RrRO6a+5vxLrpCzgQhzSjS+2PWvgXoikMPV7v1Q==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-linux-x64/-/mod-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mon-win-x64": { + "name": "@ax/mon-win-x64", + "version": "1.0.4", + "integrity": "sha512-YT5sAL/40uPQV5KXCbddHChKY9obwBlesqWkJJwCQjvY+cSHMLort+VPaKdrNJdb1Z07zH7vnizIkgeYRpu0tw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-win-x64/-/mon-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mon-linux-x64": { + "name": "@ax/mon-linux-x64", + "version": "1.0.4", + "integrity": "sha512-KHwaqwdFffRF4jK2v3AZJh92Fl6ZKwGdw/wK8Xgy/FzIi/JbRHN7q20gTdafHqBUJa8GPDWMSgMmTXd+S2usyQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-linux-x64/-/mon-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/sdb-win-x64": { + "name": "@ax/sdb-win-x64", + "version": "1.0.4", + "integrity": "sha512-w3LFsmmAESRCjphKgjLGT+m4Ac9xWQnXjntM35pbQ0Tof/emgLFpi6LS/UBjexyCkxCts1rOKTMWKM1rXMStwg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-win-x64/-/sdb-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/sdb-linux-x64": { + "name": "@ax/sdb-linux-x64", + "version": "1.0.4", + "integrity": "sha512-du8fDAPlfMH4bmleJatxusTkMCmWAJh/9hNZUi7XOweWf2v4/aXx0gcddSS9HPnLfpGCgVIP/YYDhcr+j7PqpQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-linux-x64/-/sdb-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/stc": { + "name": "@ax/stc", + "version": "6.0.146", + "integrity": "sha512-eYeRbTi6UsM3Np3rWJYfZ4p5m/5Md4AcarrvALXzaG5hP2a/08L306gYQhadsOEOVsBpMHlT9GtvV1vovjjctA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc/-/stc-6.0.146.tgz", + "dependencies": { + "@ax/stc-win-x64": "6.0.146", + "@ax/stc-linux-x64": "6.0.146" + } + }, + "@ax/apax-build": { + "name": "@ax/apax-build", + "version": "0.7.0", + "integrity": "sha512-OkmqLq6SI0gv9x/7FLFmABuJYylHHyOzZ4Kvmfys2RGiP06/WbOpycmuqYBneK1zAe3KoBu8ZmelPdXbxcK4+w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/apax-build/-/apax-build-0.7.0.tgz", + "dependencies": {} + }, + "@ax/st-ls": { + "name": "@ax/st-ls", + "version": "3.0.113", + "integrity": "sha512-NhPfgwF8MQiUoyAr5rZm6cb5UhAHQ3sVvpFZ3+FdXMAMxxPe9i9/NQijKqSga9JJ4HHpUcizYVoOWc2XXA++zw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls/-/st-ls-3.0.113.tgz", + "dependencies": { + "@ax/st-ls-win-x64": "3.0.113", + "@ax/st-ls-linux-x64": "3.0.113" + } + }, + "@ax/target-llvm-win-x64": { + "name": "@ax/target-llvm-win-x64", + "version": "6.0.146", + "integrity": "sha512-V6h9Gtricl+K8M+gYF0EtWhBcoMeLgfFqARCO6nATelKkTdnJmvzsrr3CYe6nk6KQSk2r2l2U7yiVwyXHs4mOQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-win-x64/-/target-llvm-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-llvm-linux-x64": { + "name": "@ax/target-llvm-linux-x64", + "version": "6.0.146", + "integrity": "sha512-8WMgh5PeM+Uof7nXQsqk3JEPdXOlK1ljtyNOcOfxlZAcDlHiKTKADMLzO3VFTJkxp6txsRXnSpLlVLsZxknl9g==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-linux-x64/-/target-llvm-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-mc7plus-win-x64": { + "name": "@ax/target-mc7plus-win-x64", + "version": "6.0.146", + "integrity": "sha512-06rOSJS1OI6+ApsFoe3sK0jjq3ZTt96sewg7GvEXztGTE/GTINWbbHqzr4TMCV9Fixk8hYWIiW5OAFG/kKDzfA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-win-x64/-/target-mc7plus-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-mc7plus-linux-x64": { + "name": "@ax/target-mc7plus-linux-x64", + "version": "6.0.146", + "integrity": "sha512-CGmwLBrT1ZRw9f6L1FylbVHV7l2BP8drp/NJKRAApNBtYuVE5U4H2kndizUKYLR4wbidt6Amu602ncvcJBUKNw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-linux-x64/-/target-mc7plus-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/trace-win-x64": { + "name": "@ax/trace-win-x64", + "version": "2.7.0", + "integrity": "sha512-hQeCiax20UPrSQIOMqSJg6OWdavunL9h6Irnlrgk4ht4hMZrDEWPnuIBfPNG2tAp3780GtefEl8b8QSk5h7jxQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace-win-x64/-/trace-win-x64-2.7.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/trace-linux-x64": { + "name": "@ax/trace-linux-x64", + "version": "2.7.0", + "integrity": "sha512-LPfdNIbp9+7BuMFL/TtpQXGHrUx/+C1tTFC3YSWscP7TcHzDLWF3yBjqXHaNN01SmCi44S4AwJ9Q2E66QJ0Rtg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace-linux-x64/-/trace-linux-x64-2.7.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/diagnostic-buffer-win-x64": { + "name": "@ax/diagnostic-buffer-win-x64", + "version": "1.2.0", + "integrity": "sha512-s5TfWFlmB7ibgm9L5TRN7k1hJCkzCNBlNh08GT3uWtmq8pFg5BrYsYVWZe+GRUT1YEcP+0f9oA8Nnj5n1vM+sg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer-win-x64/-/diagnostic-buffer-win-x64-1.2.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/diagnostic-buffer-linux-x64": { + "name": "@ax/diagnostic-buffer-linux-x64", + "version": "1.2.0", + "integrity": "sha512-aRm3Qvy4eBwSFBk5990uBfFRVa9E+fKGDJ69ufPL8U4Vw1/ma/cyFHVc8Zqv4ITO8673IClurfWsVIh6Gk4KCw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer-linux-x64/-/diagnostic-buffer-linux-x64-1.2.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/performance-info-win-x64": { + "name": "@ax/performance-info-win-x64", + "version": "1.1.0", + "integrity": "sha512-yMfgZm2erMxxU3LJytyJKWWA9PN/vIXhZjXPhEpUXn+M+ojg+pXiRy+oLj5Z0Xo8NYd/bz780m/buAaIPMe2Iw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info-win-x64/-/performance-info-win-x64-1.1.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/performance-info-linux-x64": { + "name": "@ax/performance-info-linux-x64", + "version": "1.1.0", + "integrity": "sha512-5rFgfDdfijFVIFRfoQXv4MS/jgrk3Oe8sKJVRFluTs8hkMLg0AlWvVe171YbFOO1D3VI8O1yG8KFu3AKwF3bjw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info-linux-x64/-/performance-info-linux-x64-1.1.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/plc-info-linux-x64": { + "name": "@ax/plc-info-linux-x64", + "version": "2.3.0", + "integrity": "sha512-EUD170olqPo0aSOx/5auP8inlKNON0bstMSjtQDc/bqjXcKRxL6K6sg/JnierRO7OiJ5iXcTLIGO3cOBeXeAAw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info-linux-x64/-/plc-info-linux-x64-2.3.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/plc-info-win-x64": { + "name": "@ax/plc-info-win-x64", + "version": "2.3.0", + "integrity": "sha512-10M6F6HQV/nMk9n9pR17xvkx93O1ALOQTlLl3IMFzH9O/DXPSVzb4r3Q7KuVXd7OBpoWzt8Ab/ZvFzp98VXTGw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info-win-x64/-/plc-info-win-x64-2.3.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/certificate-management-win-x64": { + "name": "@ax/certificate-management-win-x64", + "version": "1.1.0", + "integrity": "sha512-iOQqNG3LHJ2m7WVgxFYhHThFJ5UblUGhcDKKxCJqAuGl9v+BPXq3v/8hWKzTqoeQanHNPCSG3+YCKivPFRDEMA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management-win-x64/-/certificate-management-win-x64-1.1.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/certificate-management-linux-x64": { + "name": "@ax/certificate-management-linux-x64", + "version": "1.1.0", + "integrity": "sha512-U+ZfWotWeBjRRfHab2VgeRWtIvm5uh/IGtAkV1ZBebmjejuwgGwZdlfWa6g0pIccX330V6Jl2y+6jCUHjW1wUQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management-linux-x64/-/certificate-management-linux-x64-1.1.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/system-strings": { + "name": "@ax/system-strings", + "version": "6.0.94", + "integrity": "sha512-iGh5v//U+az23N1SG+rgPassm7mUV6MSdLnE+6a7g1u7e6lHbrsnAbfKqIk7UNHEFFfp52WK1k5B6Igo0s3/1A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-strings/-/system-strings-6.0.94.tgz", + "dependencies": { + "@ax/system-math": "6.0.94", + "@ax/system-datetime": "6.0.94" + } + }, + "@ax/axunitst-runner-linux-x64": { + "name": "@ax/axunitst-runner-linux-x64", + "version": "4.1.8", + "integrity": "sha512-lGNvjBfJeKxmj+uChBH6W4OMSd5Ek515q0WImnd/qiJ4eAsOUMikynFfq9ToY49upVZGOvrkiGFrT9zBTJA8tQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner-linux-x64/-/axunitst-runner-linux-x64-4.1.8.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-runner-win-x64": { + "name": "@ax/axunitst-runner-win-x64", + "version": "4.1.8", + "integrity": "sha512-W7Q9o75ALr3yXCbzMv89vSxQgo8EVnRO8TsNkCetkcf8op/ib2W+4Xh+m/P5X2JgIyVTDmqOPnYu5kHnAXhCzA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner-win-x64/-/axunitst-runner-win-x64-4.1.8.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-generator-linux-x64": { + "name": "@ax/axunitst-generator-linux-x64", + "version": "4.1.8", + "integrity": "sha512-pJyNwfYK1LljgFrXD21iGExOhvp4LkBSPKbakLVQGzZFmHpERNrxe3vcsQRZJQip2gGXNTMdnyWRWLQXJ80c2w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator-linux-x64/-/axunitst-generator-linux-x64-4.1.8.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-generator-win-x64": { + "name": "@ax/axunitst-generator-win-x64", + "version": "4.1.8", + "integrity": "sha512-IFDotU7DIugAxkkyQPBK7SJAFGfNMHxXHK7QWIKZ3z4a3qLSVzTBZkOWJqo0xPy/3vaPjh/PjfFJs85M0iqOgg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator-win-x64/-/axunitst-generator-win-x64-4.1.8.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/build-native-winx64": { + "name": "@ax/build-native-winx64", + "version": "16.0.3", + "integrity": "sha512-M1qk2yNNsGzz6NXKB0miyfOO4bpYkVcfnGhkHirXcJSLFnWDSx7hnRi0yhLp6jny99RkXEcRn9Cwx8lqynmUDg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-winx64/-/build-native-winx64-16.0.3.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/build-native-linux": { + "name": "@ax/build-native-linux", + "version": "16.0.3", + "integrity": "sha512-CfqbzR+wPnocP0+pDpb3cYBxdefkS6WvHbGaDNGAoCkK3Y8WnNfWbxXr37e5XIi7iPMZ8BONWaRFIN5h4RMeOA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-linux/-/build-native-linux-16.0.3.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/stc-win-x64": { + "name": "@ax/stc-win-x64", + "version": "6.0.146", + "integrity": "sha512-4hTgmIG54MaWhgxBV8gygU19yilVLfieizhUb08aRXz2o1+YKqd6ifgz1NBAT9RVOgnMj0IJcUynuLo998i1zg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-win-x64/-/stc-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/st-docs": "6.0.146" + } + }, + "@ax/stc-linux-x64": { + "name": "@ax/stc-linux-x64", + "version": "6.0.146", + "integrity": "sha512-Cy8psrCe2TB+bCZrCzU4qtPxf0UWzCpdmxOCBC4fEVKnKW6MaBOBt85PAbz6MtAriH4boJY9gMMuPspWlKavPA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-linux-x64/-/stc-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/st-docs": "6.0.146" + } + }, + "@ax/st-ls-win-x64": { + "name": "@ax/st-ls-win-x64", + "version": "3.0.113", + "integrity": "sha512-dPj6b2aRhnelCe0BpIcLMLvHbUj2zhfQOtu4jzdZFDPhKICdB9+fTebuYRmP2vna4ogTke22e6f2buwR6VO1Vw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls-win-x64/-/st-ls-win-x64-3.0.113.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/st-ls-linux-x64": { + "name": "@ax/st-ls-linux-x64", + "version": "3.0.113", + "integrity": "sha512-/QUsNMJrMPRVcCrCD7gkw/xl0VvZ8YEJXxQMWGwkWol3JgxiPjWW/fb7EqpzDU+ij45xy85rBdx29MMHQ3Of9Q==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls-linux-x64/-/st-ls-linux-x64-3.0.113.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/system-math": { + "name": "@ax/system-math", + "version": "6.0.94", + "integrity": "sha512-lmkqZnJRT6zjAaVEKgWDwB1J7st+rgj/lfJc+6PZ/zgiRxoJ/s7BSTl/6YQ6k12RskKrA4E5VvLiqJhaNd3ssw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-math/-/system-math-6.0.94.tgz", + "dependencies": {} + }, + "@ax/system-datetime": { + "name": "@ax/system-datetime", + "version": "6.0.94", + "integrity": "sha512-8xn57nA5NfZ6ImTxmFGvzFp7wLL38JdUgjsuEg+xbzs29e8ftvbTCNqaWMVdX05N4QNAqohq2BlEkIyFtDH8Qg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-datetime/-/system-datetime-6.0.94.tgz", + "dependencies": {} + }, + "@ax/st-docs": { + "name": "@ax/st-docs", + "version": "6.0.146", + "integrity": "sha512-KUs6JC/dWedgnaxH7UrqAOuJm6rKS4gzXTLguqXbtWHKdDKOceIw1yODyjty4iuOm6TkDm2UX4ya6QFC84eBHA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-docs/-/st-docs-6.0.146.tgz", + "dependencies": {} + } + }, + "workspaces": {} +} diff --git a/src/AXSharp.connectors/tests/ax-test-project/apax.yml b/src/AXSharp.connectors/tests/ax-test-project/apax.yml index cfc184c1..ee264b0f 100644 --- a/src/AXSharp.connectors/tests/ax-test-project/apax.yml +++ b/src/AXSharp.connectors/tests/ax-test-project/apax.yml @@ -3,16 +3,16 @@ version: 0.0.0 type: app targets: - "1500" - - axunit-llvm + - llvm - plcsim - swcpu devDependencies: - "@ax/sdk": ^4.0.8 - "@ax/stc": ^5.4.89 - "@ax/sld": ^2.0.5 + "@ax/sdk": 2311.0.1 + # "@ax/stc": ^5.4.89 + #"@ax/sld": ^2.0.5 scripts: postbuild: dotnet run --project ..//..//..//AXSharp.compiler//src//ixc//AXSharp.ixc.csproj --framework net7.0 installStrategy: strict -apaxVersion: 3.0.0 +apaxVersion: 3.1.0 diff --git a/src/apax/apax.yml b/src/apax/apax.yml index 418ec1a8..fa5557ce 100644 --- a/src/apax/apax.yml +++ b/src/apax/apax.yml @@ -7,4 +7,4 @@ targets: devDependencies: "@ax/stc": 5.3.28 installStrategy: strict -apaxVersion: 3.0.0 +apaxVersion: 3.1.0 diff --git a/src/sanbox/integration/ix-integration-blazor/Program.cs b/src/sanbox/integration/ix-integration-blazor/Program.cs index 0e1de5e6..58ce687f 100644 --- a/src/sanbox/integration/ix-integration-blazor/Program.cs +++ b/src/sanbox/integration/ix-integration-blazor/Program.cs @@ -39,7 +39,7 @@ public static void Main(string[] args) App = app; Entry.Plc.Connector.BuildAndStart().ReadWriteCycleDelay = 10; - + Entry.Plc.Connector.BuildAndStart().SubscriptionMode = ReadSubscriptionMode.Polling; Entry.Plc.Connector.ExceptionBehaviour = CommExceptionBehaviour.Ignore; //Entry.Plc.Connector.Translator.SetLocalizationResource(Entry.Plc.GetType(), "Properties.PlcStringResources"); diff --git a/src/sanbox/integration/ix-integration-plc/apax-lock.json b/src/sanbox/integration/ix-integration-plc/apax-lock.json index 0e66dbb5..2993d760 100644 --- a/src/sanbox/integration/ix-integration-plc/apax-lock.json +++ b/src/sanbox/integration/ix-integration-plc/apax-lock.json @@ -1,394 +1,693 @@ { - "@ax/apax-build": { - "version": "0.5.0", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/apax-build/-/apax-build-0.5.0.tgz", - "integrity": "sha512-6p9iZQfpmngx38r4p6XaVVPeEQzTt3UJcywsRSeVBnES6tx1pTVLM20K0RczqRYZmXbyNpz9effPxpvj5L/jKA==", - "dependencies": { - "@ax/third-party-licenses-apax-build": "0.5.0" + "name": "ix-integration-plc", + "version": "0.0.0", + "lockFileVersion": "2", + "installStrategy": "strict", + "root": { + "name": "ix-integration-plc", + "version": "0.0.0", + "devDependencies": { + "@ax/sdk": "2311.0.1" } }, - "@ax/axunit": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit/-/axunit-3.0.4.tgz", - "integrity": "sha512-IZQmxF+zdUbpe5gLWl59XMecoNXnLoc31lzEUNdS3FdXz6sQ8K1Kbt2QCy6dtkdDzUJmk2ualIdqiEah2z0irA==", - "dependencies": { - "@ax/axunit-docs": "3.0.4", - "@ax/axunit-library": "3.0.4", - "@ax/axunit-llvm-runner-gen": "3.0.4", - "@ax/axunit-runner-llvm": "3.0.4", - "@ax/axunit-runner-mc7plus": "3.0.4", - "@ax/build-native": "10.1.1", - "@ax/target-axunit": "3.0.4" + "packages": { + "@ax/sdk": { + "name": "@ax/sdk", + "version": "2311.0.1", + "integrity": "sha512-uPAnfHnc9Tl7ugVFjA3Qc7K1CNwEF7CPfMRdZS/hO2aNeMXLlfxOc/Mm1R5hP8pF+XQgjhyvwm/Zy/e1rghKWQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdk/-/sdk-2311.0.1.tgz", + "dependencies": { + "@ax/axunitst": "4.1.8", + "@ax/axunitst-ls-contrib": "4.1.8", + "@ax/mod": "1.0.4", + "@ax/mon": "1.0.4", + "@ax/sdb": "1.0.4", + "@ax/sld": "2.0.5", + "@ax/st": "2311.0.1", + "@ax/target-llvm": "6.0.146", + "@ax/target-mc7plus": "6.0.146", + "@ax/simatic-pragma-stc-plugin": "2.0.12", + "@ax/trace": "2.7.0", + "@ax/diagnostic-buffer": "1.2.0", + "@ax/performance-info": "1.1.0", + "@ax/plc-info": "2.3.0", + "@ax/certificate-management": "1.1.0" + } + }, + "@ax/axunitst": { + "name": "@ax/axunitst", + "version": "4.1.8", + "integrity": "sha512-Ax4b503soS4RrfokQg5NbhqFOSJ7cKIzK8bNwtobWHy9asUPUbuwQhsILGETFh+T7cw8FGzFZ/VzKOL6tkhq8A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst/-/axunitst-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-library": "4.1.8", + "@ax/axunitst-runner": "4.1.8", + "@ax/axunitst-generator": "4.1.8", + "@ax/axunitst-llvm-runner-gen": "4.1.8", + "@ax/axunitst-docs": "4.1.8", + "@ax/build-native": "16.0.3" + } + }, + "@ax/axunitst-ls-contrib": { + "name": "@ax/axunitst-ls-contrib", + "version": "4.1.8", + "integrity": "sha512-dCrf/Ou/NT0zFh6wVXSxYphHOjLoUgOBJWDIBVzBpRDbhCebA/BuHLmVVGMllujkMreMlGRITjjquuqILquOAA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-ls-contrib/-/axunitst-ls-contrib-4.1.8.tgz", + "dependencies": {} + }, + "@ax/mod": { + "name": "@ax/mod", + "version": "1.0.4", + "integrity": "sha512-AU/OiEf3J9/wo+kSDYLjIRd19ajOpgASs5J2MHOVlP8eOaupZ1pAkIIUvXBcBuS8M42l5kXEw7G18dTcW9j1ng==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod/-/mod-1.0.4.tgz", + "dependencies": { + "@ax/mod-win-x64": "1.0.4", + "@ax/mod-linux-x64": "1.0.4" + } + }, + "@ax/mon": { + "name": "@ax/mon", + "version": "1.0.4", + "integrity": "sha512-HBFdgbTqHtXwq/42nyTnEupX3/WT+ltPFlumVhksd7+Oh9oR2HUSWf5t/GkfjR7LY7W32h5Gb7wpnHNU6Qm7cA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon/-/mon-1.0.4.tgz", + "dependencies": { + "@ax/mon-win-x64": "1.0.4", + "@ax/mon-linux-x64": "1.0.4" + } + }, + "@ax/sdb": { + "name": "@ax/sdb", + "version": "1.0.4", + "integrity": "sha512-9GZRZE5TX7wCJBzabtohFP+L9CzVgn+wIYRJyYhmuX1Y6dMF8+rgChTcc1vjq8bQHFx2ovkt57xvoFoEbs/Wag==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb/-/sdb-1.0.4.tgz", + "dependencies": { + "@ax/sdb-win-x64": "1.0.4", + "@ax/sdb-linux-x64": "1.0.4" + } + }, + "@ax/sld": { + "name": "@ax/sld", + "version": "2.0.5", + "integrity": "sha512-upa0HyRVdYyzNu6j7E+gTAnpzP2mfZxvo+0jbm8H6Ci9ergL56SHaCVBC35PnociMZpdZ5d1/LTy6f8lwpDxXA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld/-/sld-2.0.5.tgz", + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/st": { + "name": "@ax/st", + "version": "2311.0.1", + "integrity": "sha512-n4Lqd2Gom1otRVGBu0hpYnT4dIvb0PVdcqo/3qVgMGKNjsMnKJAk9hKfnmcBhpHHt5U2IOIaiPgI3EuOEjL3LA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st/-/st-2311.0.1.tgz", + "dependencies": { + "@ax/stc": "6.0.146", + "@ax/apax-build": "0.7.0", + "@ax/st-ls": "3.0.113" + } + }, + "@ax/target-llvm": { + "name": "@ax/target-llvm", + "version": "6.0.146", + "integrity": "sha512-HiaiuX/O6nOUOX+xTcaMIHGLdAY4+KQW7Xwj39XCKLC/M54bhqiz2XOpde0g3jeUVuBeimf8UdTD3+MTva6l0A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm/-/target-llvm-6.0.146.tgz", + "dependencies": { + "@ax/target-llvm-win-x64": "6.0.146", + "@ax/target-llvm-linux-x64": "6.0.146" + } + }, + "@ax/target-mc7plus": { + "name": "@ax/target-mc7plus", + "version": "6.0.146", + "integrity": "sha512-WTktM/4O5XbXU+5rfpee6d02gl6AcRadFCgtkrYYD9rA4MShhPrYRREFn1dC9SfifOmWPqLX6i/qrfGMCG0n2w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus/-/target-mc7plus-6.0.146.tgz", + "dependencies": { + "@ax/target-mc7plus-win-x64": "6.0.146", + "@ax/target-mc7plus-linux-x64": "6.0.146" + } + }, + "@ax/simatic-pragma-stc-plugin": { + "name": "@ax/simatic-pragma-stc-plugin", + "version": "2.0.12", + "integrity": "sha512-KLo6lEPU5NfahK6Rr9MBlItSMU4VO+vePUGhk5nooM/1TZYtekJnLE4xRoZLeiMk+MA6glodTw6YkPzl7p7z4A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/simatic-pragma-stc-plugin/-/simatic-pragma-stc-plugin-2.0.12.tgz", + "dependencies": {} + }, + "@ax/trace": { + "name": "@ax/trace", + "version": "2.7.0", + "integrity": "sha512-yUmzjL5IKJ9NX5Q1THHN+LtW6llsZa+tw/jRZYQzKcxXTFJrGcCo5Qy45Dh0loxWGjZKmIe4YVG1ZwP3fdihJQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace/-/trace-2.7.0.tgz", + "dependencies": { + "@ax/trace-win-x64": "2.7.0", + "@ax/trace-linux-x64": "2.7.0" + } + }, + "@ax/diagnostic-buffer": { + "name": "@ax/diagnostic-buffer", + "version": "1.2.0", + "integrity": "sha512-Ka0t/mftRpSOMXob9/u9IDY1aSm1DyLe81vwNqJ6RzQY/h6CNpDjnRpx79pGzQiGWozlvtg/Sot0prGYPbthbg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer/-/diagnostic-buffer-1.2.0.tgz", + "dependencies": { + "@ax/diagnostic-buffer-win-x64": "1.2.0", + "@ax/diagnostic-buffer-linux-x64": "1.2.0" + } + }, + "@ax/performance-info": { + "name": "@ax/performance-info", + "version": "1.1.0", + "integrity": "sha512-vIgAbV63H9rVPYkS/Kz3AF38pMlI55oh3yReOUzEoXg8QmniOw81Ba5z//IeFpoZZyQJJG1lxtbYpVWvhCEqkA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info/-/performance-info-1.1.0.tgz", + "dependencies": { + "@ax/performance-info-win-x64": "1.1.0", + "@ax/performance-info-linux-x64": "1.1.0" + } + }, + "@ax/plc-info": { + "name": "@ax/plc-info", + "version": "2.3.0", + "integrity": "sha512-k+iOi1eUpVW5xBXRvdqS6Qj+ju2wQMsZIAZDvz32NDSv6HoAUTwMIEB5BA6xv9plRr1zi3jn99plslUshCEFPQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info/-/plc-info-2.3.0.tgz", + "dependencies": { + "@ax/plc-info-linux-x64": "2.3.0", + "@ax/plc-info-win-x64": "2.3.0" + } + }, + "@ax/certificate-management": { + "name": "@ax/certificate-management", + "version": "1.1.0", + "integrity": "sha512-u3S1uF3EC/EsxxxR3aM79QRLoH5UR2iLoGwj7DCN8CMalEalI6zyjyumm09MQ0vQc+Zje/vlyltD7OllsAqOuA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management/-/certificate-management-1.1.0.tgz", + "dependencies": { + "@ax/certificate-management-win-x64": "1.1.0", + "@ax/certificate-management-linux-x64": "1.1.0" + } + }, + "@ax/axunitst-library": { + "name": "@ax/axunitst-library", + "version": "4.1.8", + "integrity": "sha512-ue0V/EFANdrUA3j7BGr9j6TU1OFfKQBe29HN54CAHXvD1fzvr9gd+qoEHRiC41/KYVZarxi0XYcrQg4sbhh7Ew==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-library/-/axunitst-library-4.1.8.tgz", + "dependencies": { + "@ax/system-strings": "6.0.94" + } + }, + "@ax/axunitst-runner": { + "name": "@ax/axunitst-runner", + "version": "4.1.8", + "integrity": "sha512-Z0jnRjEWYVnaBIwXVHUncqp0GvwjTGMHH9avcHP5IisI9ierKrHnaJV/93mgntqgJY7BHLG8hanIoROPGc4ELA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner/-/axunitst-runner-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-runner-linux-x64": "4.1.8", + "@ax/axunitst-runner-win-x64": "4.1.8" + } + }, + "@ax/axunitst-generator": { + "name": "@ax/axunitst-generator", + "version": "4.1.8", + "integrity": "sha512-AGzftAlftnpyZ52uQOYTK06Yu6ptKh2m1uvGRCRdDz16CCAM1FIKZZsppl6fnMmZkf6MZbkTx3nbZ74Zk5c1rw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator/-/axunitst-generator-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-generator-linux-x64": "4.1.8", + "@ax/axunitst-generator-win-x64": "4.1.8" + } + }, + "@ax/axunitst-llvm-runner-gen": { + "name": "@ax/axunitst-llvm-runner-gen", + "version": "4.1.8", + "integrity": "sha512-XMmU+Qr1ElNFLJAnQ3JKh9QHr3/IPJo+KoR8C8sZqoIy/IzRCKY3IubvJ4KPGnBZzz+DI5UxIuH9bwvq5YWqIw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-llvm-runner-gen/-/axunitst-llvm-runner-gen-4.1.8.tgz", + "dependencies": {} + }, + "@ax/axunitst-docs": { + "name": "@ax/axunitst-docs", + "version": "4.1.8", + "integrity": "sha512-g4XsjaqZoJvYcz58ghirISMS/SfFl9UGNFJGr0afhLmYkqEyoLi6p9+zuLk4+SWtbMj3FNu/cc1ReSSS/GACEQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-docs/-/axunitst-docs-4.1.8.tgz", + "dependencies": {} + }, + "@ax/build-native": { + "name": "@ax/build-native", + "version": "16.0.3", + "integrity": "sha512-d7I0ICUaIwW/8v030Xw8H6fMMOD2FB9ON7pmq+XV+YXCPorTUJ7rCvq4+710B78QJn2ac+xJgpb1EhI1fiK40w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native/-/build-native-16.0.3.tgz", + "dependencies": { + "@ax/build-native-winx64": "16.0.3", + "@ax/build-native-linux": "16.0.3" + } + }, + "@ax/mod-win-x64": { + "name": "@ax/mod-win-x64", + "version": "1.0.4", + "integrity": "sha512-AQ9NUSaICMN/qPeX95SzZUj1/m4xULIltZ4V2JcMdi0VW9aoTZVPnVFHdE2gb+HwApyvrq73v9/Vcyq8cBkuKQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-win-x64/-/mod-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mod-linux-x64": { + "name": "@ax/mod-linux-x64", + "version": "1.0.4", + "integrity": "sha512-Bs+MBPyKpPJiJ3m8PvQ/DgCsH2I2YG4Vcm1Q6DfCzozpSp2RrRO6a+5vxLrpCzgQhzSjS+2PWvgXoikMPV7v1Q==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-linux-x64/-/mod-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mon-win-x64": { + "name": "@ax/mon-win-x64", + "version": "1.0.4", + "integrity": "sha512-YT5sAL/40uPQV5KXCbddHChKY9obwBlesqWkJJwCQjvY+cSHMLort+VPaKdrNJdb1Z07zH7vnizIkgeYRpu0tw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-win-x64/-/mon-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mon-linux-x64": { + "name": "@ax/mon-linux-x64", + "version": "1.0.4", + "integrity": "sha512-KHwaqwdFffRF4jK2v3AZJh92Fl6ZKwGdw/wK8Xgy/FzIi/JbRHN7q20gTdafHqBUJa8GPDWMSgMmTXd+S2usyQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-linux-x64/-/mon-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/sdb-win-x64": { + "name": "@ax/sdb-win-x64", + "version": "1.0.4", + "integrity": "sha512-w3LFsmmAESRCjphKgjLGT+m4Ac9xWQnXjntM35pbQ0Tof/emgLFpi6LS/UBjexyCkxCts1rOKTMWKM1rXMStwg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-win-x64/-/sdb-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/sdb-linux-x64": { + "name": "@ax/sdb-linux-x64", + "version": "1.0.4", + "integrity": "sha512-du8fDAPlfMH4bmleJatxusTkMCmWAJh/9hNZUi7XOweWf2v4/aXx0gcddSS9HPnLfpGCgVIP/YYDhcr+j7PqpQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-linux-x64/-/sdb-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/stc": { + "name": "@ax/stc", + "version": "6.0.146", + "integrity": "sha512-eYeRbTi6UsM3Np3rWJYfZ4p5m/5Md4AcarrvALXzaG5hP2a/08L306gYQhadsOEOVsBpMHlT9GtvV1vovjjctA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc/-/stc-6.0.146.tgz", + "dependencies": { + "@ax/stc-win-x64": "6.0.146", + "@ax/stc-linux-x64": "6.0.146" + } + }, + "@ax/apax-build": { + "name": "@ax/apax-build", + "version": "0.7.0", + "integrity": "sha512-OkmqLq6SI0gv9x/7FLFmABuJYylHHyOzZ4Kvmfys2RGiP06/WbOpycmuqYBneK1zAe3KoBu8ZmelPdXbxcK4+w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/apax-build/-/apax-build-0.7.0.tgz", + "dependencies": {} + }, + "@ax/st-ls": { + "name": "@ax/st-ls", + "version": "3.0.113", + "integrity": "sha512-NhPfgwF8MQiUoyAr5rZm6cb5UhAHQ3sVvpFZ3+FdXMAMxxPe9i9/NQijKqSga9JJ4HHpUcizYVoOWc2XXA++zw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls/-/st-ls-3.0.113.tgz", + "dependencies": { + "@ax/st-ls-win-x64": "3.0.113", + "@ax/st-ls-linux-x64": "3.0.113" + } + }, + "@ax/target-llvm-win-x64": { + "name": "@ax/target-llvm-win-x64", + "version": "6.0.146", + "integrity": "sha512-V6h9Gtricl+K8M+gYF0EtWhBcoMeLgfFqARCO6nATelKkTdnJmvzsrr3CYe6nk6KQSk2r2l2U7yiVwyXHs4mOQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-win-x64/-/target-llvm-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-llvm-linux-x64": { + "name": "@ax/target-llvm-linux-x64", + "version": "6.0.146", + "integrity": "sha512-8WMgh5PeM+Uof7nXQsqk3JEPdXOlK1ljtyNOcOfxlZAcDlHiKTKADMLzO3VFTJkxp6txsRXnSpLlVLsZxknl9g==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-linux-x64/-/target-llvm-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-mc7plus-win-x64": { + "name": "@ax/target-mc7plus-win-x64", + "version": "6.0.146", + "integrity": "sha512-06rOSJS1OI6+ApsFoe3sK0jjq3ZTt96sewg7GvEXztGTE/GTINWbbHqzr4TMCV9Fixk8hYWIiW5OAFG/kKDzfA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-win-x64/-/target-mc7plus-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-mc7plus-linux-x64": { + "name": "@ax/target-mc7plus-linux-x64", + "version": "6.0.146", + "integrity": "sha512-CGmwLBrT1ZRw9f6L1FylbVHV7l2BP8drp/NJKRAApNBtYuVE5U4H2kndizUKYLR4wbidt6Amu602ncvcJBUKNw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-linux-x64/-/target-mc7plus-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/trace-win-x64": { + "name": "@ax/trace-win-x64", + "version": "2.7.0", + "integrity": "sha512-hQeCiax20UPrSQIOMqSJg6OWdavunL9h6Irnlrgk4ht4hMZrDEWPnuIBfPNG2tAp3780GtefEl8b8QSk5h7jxQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace-win-x64/-/trace-win-x64-2.7.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/trace-linux-x64": { + "name": "@ax/trace-linux-x64", + "version": "2.7.0", + "integrity": "sha512-LPfdNIbp9+7BuMFL/TtpQXGHrUx/+C1tTFC3YSWscP7TcHzDLWF3yBjqXHaNN01SmCi44S4AwJ9Q2E66QJ0Rtg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace-linux-x64/-/trace-linux-x64-2.7.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/diagnostic-buffer-win-x64": { + "name": "@ax/diagnostic-buffer-win-x64", + "version": "1.2.0", + "integrity": "sha512-s5TfWFlmB7ibgm9L5TRN7k1hJCkzCNBlNh08GT3uWtmq8pFg5BrYsYVWZe+GRUT1YEcP+0f9oA8Nnj5n1vM+sg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer-win-x64/-/diagnostic-buffer-win-x64-1.2.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/diagnostic-buffer-linux-x64": { + "name": "@ax/diagnostic-buffer-linux-x64", + "version": "1.2.0", + "integrity": "sha512-aRm3Qvy4eBwSFBk5990uBfFRVa9E+fKGDJ69ufPL8U4Vw1/ma/cyFHVc8Zqv4ITO8673IClurfWsVIh6Gk4KCw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer-linux-x64/-/diagnostic-buffer-linux-x64-1.2.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/performance-info-win-x64": { + "name": "@ax/performance-info-win-x64", + "version": "1.1.0", + "integrity": "sha512-yMfgZm2erMxxU3LJytyJKWWA9PN/vIXhZjXPhEpUXn+M+ojg+pXiRy+oLj5Z0Xo8NYd/bz780m/buAaIPMe2Iw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info-win-x64/-/performance-info-win-x64-1.1.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/performance-info-linux-x64": { + "name": "@ax/performance-info-linux-x64", + "version": "1.1.0", + "integrity": "sha512-5rFgfDdfijFVIFRfoQXv4MS/jgrk3Oe8sKJVRFluTs8hkMLg0AlWvVe171YbFOO1D3VI8O1yG8KFu3AKwF3bjw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info-linux-x64/-/performance-info-linux-x64-1.1.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/plc-info-linux-x64": { + "name": "@ax/plc-info-linux-x64", + "version": "2.3.0", + "integrity": "sha512-EUD170olqPo0aSOx/5auP8inlKNON0bstMSjtQDc/bqjXcKRxL6K6sg/JnierRO7OiJ5iXcTLIGO3cOBeXeAAw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info-linux-x64/-/plc-info-linux-x64-2.3.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/plc-info-win-x64": { + "name": "@ax/plc-info-win-x64", + "version": "2.3.0", + "integrity": "sha512-10M6F6HQV/nMk9n9pR17xvkx93O1ALOQTlLl3IMFzH9O/DXPSVzb4r3Q7KuVXd7OBpoWzt8Ab/ZvFzp98VXTGw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info-win-x64/-/plc-info-win-x64-2.3.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/certificate-management-win-x64": { + "name": "@ax/certificate-management-win-x64", + "version": "1.1.0", + "integrity": "sha512-iOQqNG3LHJ2m7WVgxFYhHThFJ5UblUGhcDKKxCJqAuGl9v+BPXq3v/8hWKzTqoeQanHNPCSG3+YCKivPFRDEMA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management-win-x64/-/certificate-management-win-x64-1.1.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/certificate-management-linux-x64": { + "name": "@ax/certificate-management-linux-x64", + "version": "1.1.0", + "integrity": "sha512-U+ZfWotWeBjRRfHab2VgeRWtIvm5uh/IGtAkV1ZBebmjejuwgGwZdlfWa6g0pIccX330V6Jl2y+6jCUHjW1wUQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management-linux-x64/-/certificate-management-linux-x64-1.1.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/stc-win-x64": { + "name": "@ax/stc-win-x64", + "version": "6.0.146", + "integrity": "sha512-4hTgmIG54MaWhgxBV8gygU19yilVLfieizhUb08aRXz2o1+YKqd6ifgz1NBAT9RVOgnMj0IJcUynuLo998i1zg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-win-x64/-/stc-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/st-docs": "6.0.146" + } + }, + "@ax/stc-linux-x64": { + "name": "@ax/stc-linux-x64", + "version": "6.0.146", + "integrity": "sha512-Cy8psrCe2TB+bCZrCzU4qtPxf0UWzCpdmxOCBC4fEVKnKW6MaBOBt85PAbz6MtAriH4boJY9gMMuPspWlKavPA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-linux-x64/-/stc-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/st-docs": "6.0.146" + } + }, + "@ax/st-ls-win-x64": { + "name": "@ax/st-ls-win-x64", + "version": "3.0.113", + "integrity": "sha512-dPj6b2aRhnelCe0BpIcLMLvHbUj2zhfQOtu4jzdZFDPhKICdB9+fTebuYRmP2vna4ogTke22e6f2buwR6VO1Vw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls-win-x64/-/st-ls-win-x64-3.0.113.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/st-ls-linux-x64": { + "name": "@ax/st-ls-linux-x64", + "version": "3.0.113", + "integrity": "sha512-/QUsNMJrMPRVcCrCD7gkw/xl0VvZ8YEJXxQMWGwkWol3JgxiPjWW/fb7EqpzDU+ij45xy85rBdx29MMHQ3Of9Q==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls-linux-x64/-/st-ls-linux-x64-3.0.113.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/system-strings": { + "name": "@ax/system-strings", + "version": "6.0.94", + "integrity": "sha512-iGh5v//U+az23N1SG+rgPassm7mUV6MSdLnE+6a7g1u7e6lHbrsnAbfKqIk7UNHEFFfp52WK1k5B6Igo0s3/1A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-strings/-/system-strings-6.0.94.tgz", + "dependencies": { + "@ax/system-math": "6.0.94", + "@ax/system-datetime": "6.0.94" + } + }, + "@ax/axunitst-runner-linux-x64": { + "name": "@ax/axunitst-runner-linux-x64", + "version": "4.1.8", + "integrity": "sha512-lGNvjBfJeKxmj+uChBH6W4OMSd5Ek515q0WImnd/qiJ4eAsOUMikynFfq9ToY49upVZGOvrkiGFrT9zBTJA8tQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner-linux-x64/-/axunitst-runner-linux-x64-4.1.8.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-runner-win-x64": { + "name": "@ax/axunitst-runner-win-x64", + "version": "4.1.8", + "integrity": "sha512-W7Q9o75ALr3yXCbzMv89vSxQgo8EVnRO8TsNkCetkcf8op/ib2W+4Xh+m/P5X2JgIyVTDmqOPnYu5kHnAXhCzA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner-win-x64/-/axunitst-runner-win-x64-4.1.8.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-generator-linux-x64": { + "name": "@ax/axunitst-generator-linux-x64", + "version": "4.1.8", + "integrity": "sha512-pJyNwfYK1LljgFrXD21iGExOhvp4LkBSPKbakLVQGzZFmHpERNrxe3vcsQRZJQip2gGXNTMdnyWRWLQXJ80c2w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator-linux-x64/-/axunitst-generator-linux-x64-4.1.8.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-generator-win-x64": { + "name": "@ax/axunitst-generator-win-x64", + "version": "4.1.8", + "integrity": "sha512-IFDotU7DIugAxkkyQPBK7SJAFGfNMHxXHK7QWIKZ3z4a3qLSVzTBZkOWJqo0xPy/3vaPjh/PjfFJs85M0iqOgg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator-win-x64/-/axunitst-generator-win-x64-4.1.8.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/build-native-winx64": { + "name": "@ax/build-native-winx64", + "version": "16.0.3", + "integrity": "sha512-M1qk2yNNsGzz6NXKB0miyfOO4bpYkVcfnGhkHirXcJSLFnWDSx7hnRi0yhLp6jny99RkXEcRn9Cwx8lqynmUDg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-winx64/-/build-native-winx64-16.0.3.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/build-native-linux": { + "name": "@ax/build-native-linux", + "version": "16.0.3", + "integrity": "sha512-CfqbzR+wPnocP0+pDpb3cYBxdefkS6WvHbGaDNGAoCkK3Y8WnNfWbxXr37e5XIi7iPMZ8BONWaRFIN5h4RMeOA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-linux/-/build-native-linux-16.0.3.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/system-math": { + "name": "@ax/system-math", + "version": "6.0.94", + "integrity": "sha512-lmkqZnJRT6zjAaVEKgWDwB1J7st+rgj/lfJc+6PZ/zgiRxoJ/s7BSTl/6YQ6k12RskKrA4E5VvLiqJhaNd3ssw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-math/-/system-math-6.0.94.tgz", + "dependencies": {} + }, + "@ax/system-datetime": { + "name": "@ax/system-datetime", + "version": "6.0.94", + "integrity": "sha512-8xn57nA5NfZ6ImTxmFGvzFp7wLL38JdUgjsuEg+xbzs29e8ftvbTCNqaWMVdX05N4QNAqohq2BlEkIyFtDH8Qg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-datetime/-/system-datetime-6.0.94.tgz", + "dependencies": {} + }, + "@ax/st-docs": { + "name": "@ax/st-docs", + "version": "6.0.146", + "integrity": "sha512-KUs6JC/dWedgnaxH7UrqAOuJm6rKS4gzXTLguqXbtWHKdDKOceIw1yODyjty4iuOm6TkDm2UX4ya6QFC84eBHA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-docs/-/st-docs-6.0.146.tgz", + "dependencies": {} } }, - "@ax/axunit-docs": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-docs/-/axunit-docs-3.0.4.tgz", - "integrity": "sha512-OJs1QMe0HLcUDG51YqMgTT8MySG5/zPUuHYDwxtoww2dTPm+vTSb6q1xNqDla0f/I44L6NlgIQdIa1HkbFb19A==" - }, - "@ax/axunit-library": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-library/-/axunit-library-3.0.4.tgz", - "integrity": "sha512-uth9hMlmtJZRmbXnmK36liH9W/VKvgxc17wKwRlWm6r00ZFg7bLtMm6Px9nw6WOjP7NfNY6g3l75oEXw7RjT2w==" - }, - "@ax/axunit-llvm-runner-gen": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-llvm-runner-gen/-/axunit-llvm-runner-gen-3.0.4.tgz", - "integrity": "sha512-qS464W4wDa6MLx23VDzOlZ29yAznnZDcpOjOP6pQQh58xU9Br4FdKKIfwTIEwAuGbloBuqLAwJ454fMZ6HqA7w==" - }, - "@ax/axunit-runner-llvm": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-llvm/-/axunit-runner-llvm-3.0.4.tgz", - "integrity": "sha512-peY1mXoZHzqKoKXoi7nKFNaiBcU8gNAFSG+RvktGIgfVms6VoFpB/94p+8iWwKx17VV28b6scgpTzqs7DUn2iQ==", - "dependencies": { - "@ax/axunit-runner-llvm-linux-x64": "3.0.4", - "@ax/axunit-runner-llvm-win-x64": "3.0.4" - } - }, - "@ax/axunit-runner-llvm-linux-x64": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-llvm-linux-x64/-/axunit-runner-llvm-linux-x64-3.0.4.tgz", - "integrity": "sha512-u0y4g9B1evdlanEhWmlv86icHQKLZeeLcVObZMNU/vtIaFpIxYFRzbrgCa7tp8QVXIt87Yqr/vHK79hI7YcL4Q==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ] - }, - "@ax/axunit-runner-llvm-win-x64": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-llvm-win-x64/-/axunit-runner-llvm-win-x64-3.0.4.tgz", - "integrity": "sha512-ahAkzPXl7iNk4xz1w6uGAknbtqZjjYpcaMJiUCDOLg3gtqtuMnlrZ1fNPBq8WoZkajLTAx4NEzDYhIb5h1/IyQ==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] - }, - "@ax/axunit-runner-mc7plus": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-mc7plus/-/axunit-runner-mc7plus-3.0.4.tgz", - "integrity": "sha512-gACvi9nSKfdcZmFtZ7CO5nOW/AEB5JNSqOP+VN2tPMTIuzV+2LRDwThTcnkqnK8zz2Hon8LcumYrA9oqnFHD/w==", - "dependencies": { - "@ax/axunit-runner-mc7plus-win-x64": "3.0.4" - } - }, - "@ax/axunit-runner-mc7plus-win-x64": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunit-runner-mc7plus-win-x64/-/axunit-runner-mc7plus-win-x64-3.0.4.tgz", - "integrity": "sha512-DFw9qx9MQLmiWEdLn5vrqePAuOL8z1sHh5pn98V5sclVWZWyNl7pKEF3AEpddQnQuCK127/OV8HQ8/myelezyg==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] - }, - "@ax/build-native": { - "version": "10.1.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native/-/build-native-10.1.1.tgz", - "integrity": "sha512-C1Pwo0dMa21gV1CbqT9umaurHPY4otd8dvlx7zVOlXfEmbgACort5u3K7TeWMNSLdsuBvfkivxrZNWsOkHTtAQ==", - "dependencies": { - "@ax/build-native-linux": "10.1.1", - "@ax/build-native-winx64": "10.1.1", - "@ax/third-party-licenses-build-native": "10.1.1" - } - }, - "@ax/build-native-linux": { - "version": "10.1.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-linux/-/build-native-linux-10.1.1.tgz", - "integrity": "sha512-dNNWZGLl8+CtHvojcU+7c3bLFKehkzulrpDdmxzRGq2cb1GwokoNPUBRqB0yQtbW0pTJkXvUAuI9qf8T48PTew==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ], - "dependencies": { - "@ax/third-party-licenses-build-native": "10.1.1" - } - }, - "@ax/build-native-winx64": { - "version": "10.1.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-winx64/-/build-native-winx64-10.1.1.tgz", - "integrity": "sha512-kZnFeTxt+GoVeo+IXTqlGMRLt5iwwtSdpXpyPdyM5DAOAafU2pyBrl7ZkR8SOtwbTG7eXxGrHo5w/rMmhHLZkA==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ], - "dependencies": { - "@ax/third-party-licenses-build-native": "10.1.1" - } - }, - "@ax/mod": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod/-/mod-0.18.1.tgz", - "integrity": "sha512-cNma7brtKzOZINEHNd/zOPuYrTn5XRScCbaiWfolJyHYAnGdfKiW+JDzfpJZYbWZaO3a8ajj/2kK0+nI/gijeA==", - "dependencies": { - "@ax/mod-linux-x64": "0.18.1", - "@ax/mod-win-x64": "0.18.1" - } - }, - "@ax/mod-linux-x64": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-linux-x64/-/mod-linux-x64-0.18.1.tgz", - "integrity": "sha512-/756Kd9z2WHScRty97KpcHuHGllI4iM+E79TtKjEryI7nRcp0bVDZ9CDWdr+uecacl9xe5o9CelLJOoOPWpphw==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ] - }, - "@ax/mod-win-x64": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-win-x64/-/mod-win-x64-0.18.1.tgz", - "integrity": "sha512-H2dv+aLK/kxrJbOCoq0Qsb91YhIEver53FXcB3X4KjD+skzWqCBk4Xo327IUUv29TAqX+k+fZ2WC/HbtVxkDLw==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] - }, - "@ax/mon": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon/-/mon-0.18.1.tgz", - "integrity": "sha512-kvuLbaAAOCLH+8eZVIJUnJ0uCo0SorsY++1wqfIo/LMuN0bsIeNaK3mmsNoWqzttn2PTfOOjP+AbAQscpgdsCw==", - "dependencies": { - "@ax/mon-linux-x64": "0.18.1", - "@ax/mon-win-x64": "0.18.1" - } - }, - "@ax/mon-linux-x64": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-linux-x64/-/mon-linux-x64-0.18.1.tgz", - "integrity": "sha512-wdXeWa9t5mI3YEX60t9G01Mj3tKQ7ILK2buPnpfyJm2K5rCXgBPEtRGWIiJwG5xXWCDcPrWQZ/OFGdT8a9PHRQ==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ] - }, - "@ax/mon-win-x64": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-win-x64/-/mon-win-x64-0.18.1.tgz", - "integrity": "sha512-pHVXpJLWTUVF1xk8j6WiUOym/fbSPp2XLdURadg3hTvs16w/CqVvMIPiKqQXET7/wFHY1GuS8BdIBcOYzfGEGQ==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] - }, - "@ax/sdb": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb/-/sdb-0.18.1.tgz", - "integrity": "sha512-+RWa7f+ECaY0HilsNQkPoLsAtk2A1HH+JNdXyJerqcQngayeUTaqEBUY3oWihjhHHFz8n/LFvSoENmCPDzFEQg==", - "dependencies": { - "@ax/sdb-linux-x64": "0.18.1", - "@ax/sdb-win-x64": "0.18.1" - } - }, - "@ax/sdb-linux-x64": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-linux-x64/-/sdb-linux-x64-0.18.1.tgz", - "integrity": "sha512-bqrmoRO4QktpMqGr3Ht0mwM9h359CDxUDFY374YWMO4DXB+/ukDRti8ZZTaxZoYXtsKAEurwsLo9KAGKPkT+rg==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ] - }, - "@ax/sdb-win-x64": { - "version": "0.18.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-win-x64/-/sdb-win-x64-0.18.1.tgz", - "integrity": "sha512-P+1hP8R0Ix3q/HV1gZFW8fPQhEXPVRSI9G5Tp2jRp/EFublpLPLkY1v87mQpeOp6+2WAn0g6CkA32lF6YGBfZQ==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] - }, - "@ax/sdk": { - "version": "3.0.8", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdk/-/sdk-3.0.8.tgz", - "integrity": "sha512-KXqkjIPnOceu9DJjjIXYhDx/FLNcsgpFmsGLtoz2N5fgOxEFZdIuLk0C1Mpdlylks8KG53t1XMKjplXQ6mjBPQ==", - "dependencies": { - "@ax/axunit": "3.0.4", - "@ax/mod": "0.18.1", - "@ax/mon": "0.18.1", - "@ax/sdb": "0.18.1", - "@ax/sld": "0.13.3", - "@ax/st": "3.0.8", - "@ax/target-llvm": "4.2.19", - "@ax/target-mc7plus": "4.2.19" - } - }, - "@ax/sld": { - "version": "0.14.2", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld/-/sld-0.14.2.tgz", - "integrity": "sha512-ayAGEmZT65iPIaFjK51hv0Z5X4yEI30v/z3KdAx2hwGpiS1X3lgsvv2BJkUjQ1gxyHd0a7xH/OefRyklW+AM8w==", - "dependencies": { - "@ax/sld-linux-x64": "0.14.2", - "@ax/sld-win-x64": "0.14.2" - } - }, - "@ax/sld-linux-x64": { - "version": "0.14.2", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld-linux-x64/-/sld-linux-x64-0.14.2.tgz", - "integrity": "sha512-a9MeYi6yuBd0KXQLdTCOwypxHGWPegg/PmNdKenBNyply4DSvu2eU+vyFlX7eJVUtsb7a8wEuIswhU8P0aVRvw==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ] - }, - "@ax/sld-win-x64": { - "version": "0.14.2", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld-win-x64/-/sld-win-x64-0.14.2.tgz", - "integrity": "sha512-vS2yzuANRIKmXX+nhsLsfWRqR9H388/r4Ix4RJ0ZzMiDSUXQJ7AAYlIwj1SdN+tvR69xJ9k9+Glt+cMgdb0zSA==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] - }, - "@ax/st": { - "version": "3.0.8", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/st/-/st-3.0.8.tgz", - "integrity": "sha512-XKix8Gv11Jckm4KPTI2+xT08Oa3C+EMPsafaURyuWN+xGKPFORGlAFwwsoEel6fPmnOzl1Mns79RL4g4o64Ujg==", - "dependencies": { - "@ax/apax-build": "0.5.0", - "@ax/stc": "4.2.19" - } - }, - "@ax/st-docs": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-docs/-/st-docs-4.2.19.tgz", - "integrity": "sha512-cq97rFqA5GNZBY6cRe1DdeK7wFcd2iprpqXSsCUBl6q4DdjQJ2N8X7iefE1tShqo0mhppDXw13NAdLwPoOW+jg==" - }, - "@ax/stc": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc/-/stc-4.2.19.tgz", - "integrity": "sha512-4FnHt1v+Py3gUC8EMcpUyM7jSrSLGqIkWd8HNYR6pnR306tfUAmHbVgHaJMONvy36UNFr2MtVeF7eTExRPyPcg==", - "dependencies": { - "@ax/stc-linux-x64": "4.2.19", - "@ax/stc-win-x64": "4.2.19" - } - }, - "@ax/stc-linux-x64": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-linux-x64/-/stc-linux-x64-4.2.19.tgz", - "integrity": "sha512-YhropZVFunzsSvdbHjMRrEoO0REHrfszyglBibM2GDUkveVZcgs2FhUaqz5a2tdFrs3eTMxwQpVTTEi6iL07KQ==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ], - "dependencies": { - "@ax/st-docs": "4.2.19" - } - }, - "@ax/stc-win-x64": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-win-x64/-/stc-win-x64-4.2.19.tgz", - "integrity": "sha512-ZrWaXdTqzQV0OD9PWmShCHnXhVL9MUK5HDLok4CuxWJhkpKHentuDqOgcUrYnQaPh1L8muHAsbRjTIR9FDg1xw==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ], - "dependencies": { - "@ax/st-docs": "4.2.19" - } - }, - "@ax/target-axunit": { - "version": "3.0.4", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-axunit/-/target-axunit-3.0.4.tgz", - "integrity": "sha512-BtiD4hwPqQOfJhAZRHb3cb+D4llu3UGuXgV+orI6dpE3QkZ3/vIkXuUDO4HS44q1dTd9kKhZ7fGMyMFfUounXw==" - }, - "@ax/target-llvm": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm/-/target-llvm-4.2.19.tgz", - "integrity": "sha512-GRn9UO0KX6BHm0W/7XBksHlWSiP1EP63L1OwgydgmlM/7DgCZu4icNGsgLcpR8CynbqkyJv9vraDgpEwJACJYg==", - "dependencies": { - "@ax/target-llvm-linux-x64": "4.2.19", - "@ax/target-llvm-win-x64": "4.2.19" - } - }, - "@ax/target-llvm-linux-x64": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-linux-x64/-/target-llvm-linux-x64-4.2.19.tgz", - "integrity": "sha512-1Bckp7uV3LY7E+TuI677GSOUOaFAU5DRpduIgnlxjW2SUR2rrUqSoBUA34wiC3vS866lkk8w9B7MMNIIGTwERg==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ] - }, - "@ax/target-llvm-win-x64": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-win-x64/-/target-llvm-win-x64-4.2.19.tgz", - "integrity": "sha512-0D1DbembzBKhiAlszV4t58NYUM2ojHFx2rEU+OkvZZ7xmGFuqCg4A/NODXK1haHktxjuitdC67u4JgRWCdwTDA==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] - }, - "@ax/target-mc7plus": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus/-/target-mc7plus-4.2.19.tgz", - "integrity": "sha512-NINzj044PCJAlkcVCOKv8IsISqvIcLLqEeyeXF3fg7LQGSTE3x7bjb7lwhW2XfKASzdc3v3KRDWTYev7Rop5iA==", - "dependencies": { - "@ax/target-mc7plus-linux-x64": "4.2.19", - "@ax/target-mc7plus-win-x64": "4.2.19" - } - }, - "@ax/target-mc7plus-linux-x64": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-linux-x64/-/target-mc7plus-linux-x64-4.2.19.tgz", - "integrity": "sha512-YQYJ+Wjsj1fTgtfNsSYLE1Lu+eP3Hw7Vxm2XTGvBb3CIFzgGi/rHMZDwth9quB/h89nbjv16i6uIGSxDh1vo4g==", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ] - }, - "@ax/target-mc7plus-win-x64": { - "version": "4.2.19", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-win-x64/-/target-mc7plus-win-x64-4.2.19.tgz", - "integrity": "sha512-4I/HBegyUcvyfrUUd/D8SgPaXwbDfBBA5NUtt4YwSGlExohJ/lSV/2NCkoPd1q1n7MQssFOzUjXBGVZK5JPgzg==", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ] - }, - "@ax/third-party-licenses-apax-build": { - "version": "0.5.0", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/third-party-licenses-apax-build/-/third-party-licenses-apax-build-0.5.0.tgz", - "integrity": "sha512-9okNwDaHttbFwcP1Ln/mFN8ARYL1g+ShCtcMm4OE/BYN98nzoTZBEaUdsdbhju4sL4bD6qDBPVvj9o/cwPIL7Q==" - }, - "@ax/third-party-licenses-build-native": { - "version": "10.1.1", - "resolved": "https://registry.simatic-ax.siemens.io/@ax/third-party-licenses-build-native/-/third-party-licenses-build-native-10.1.1.tgz", - "integrity": "sha512-Da+AT0KujH3K9bKf4K4rqPA3Z+a/WDkw9p6328AlrSqgBIUFyUZzOM3eVOwhhjKCnmNAVSmtSp0r7crDFGICTw==" - } + "workspaces": {} } diff --git a/src/sanbox/integration/ix-integration-plc/apax.yml b/src/sanbox/integration/ix-integration-plc/apax.yml index 57469f43..0e67268d 100644 --- a/src/sanbox/integration/ix-integration-plc/apax.yml +++ b/src/sanbox/integration/ix-integration-plc/apax.yml @@ -3,38 +3,43 @@ version: 0.0.0 type: app targets: - "1500" - - axunit-llvm + - llvm - plcsim devDependencies: - "@ax/sdk": 3.0.8 - "@ax/sld": ^0.14.2 + "@ax/sdk": 2311.0.1 variables: - APAX_BUILD_ARGS: [ -d ] + APAX_BUILD_ARGS: [ -d ] scripts: - ixc: dotnet run --project ..\\..\\..\\AXSharp.compiler\\src\\ixc\\AXSharp.ixc.csproj --framework net7.0 - ixd: dotnet run --project ..\\..\\..\\AXSharp.compiler\\src\\ixr\\AXSharp.ixr.csproj --framework net7.0 - postbuild: + ixc: dotnet run --project + ..\\..\\..\\AXSharp.compiler\\src\\ixc\\AXSharp.ixc.csproj --framework + net7.0 + ixd: dotnet run --project + ..\\..\\..\\AXSharp.compiler\\src\\ixr\\AXSharp.ixr.csproj --framework + net7.0 + postbuild: - apax ixc - apax ixd - download: - - apax sld --accept-security-disclaimer -t $AXTARGET -i $AXTARGETPLATFORMINPUT -r --default-server-interface - check+download: | - if [ $AXTARGET ]; then - if [ $AXTARGETPLATFORMINPUT ]; then - if ping -n 1 $AXTARGET &> /dev/null; then - echo "Downloading from:" $AXTARGETPLATFORMINPUT "=>" $AXTARGET - apax download - else - echo "Target with IP address:" $AXTARGET "is not accessible. No download is going to be performed!!!" - fi - else - echo "Environment variable AXTARGETPLATFORMINPUT not defined!!!" - fi - else - echo "Environment variable AXTARGET not defined!!!" - fi - do-it-all: - - apax install - - apax build - - apax check+download - + download: + - apax sld --accept-security-disclaimer -t $AXTARGET -i + $AXTARGETPLATFORMINPUT -r --default-server-interface + check+download: | + if [ $AXTARGET ]; then + if [ $AXTARGETPLATFORMINPUT ]; then + if ping -n 1 $AXTARGET &> /dev/null; then + echo "Downloading from:" $AXTARGETPLATFORMINPUT "=>" $AXTARGET + apax download + else + echo "Target with IP address:" $AXTARGET "is not accessible. No download is going to be performed!!!" + fi + else + echo "Environment variable AXTARGETPLATFORMINPUT not defined!!!" + fi + else + echo "Environment variable AXTARGET not defined!!!" + fi + do-it-all: + - apax install + - apax build + - apax check+download +installStrategy: strict +apaxVersion: 3.1.0 diff --git a/src/sanbox/integration/ix-integration-plc/build.ps1 b/src/sanbox/integration/ix-integration-plc/build.ps1 index 4f3f2ef2..ff6ffd85 100644 --- a/src/sanbox/integration/ix-integration-plc/build.ps1 +++ b/src/sanbox/integration/ix-integration-plc/build.ps1 @@ -2,4 +2,4 @@ dotnet run --project ..\..\..\AXSharp.compiler\src\ixc\AXSharp.ixc.csproj --fram $targetIP = [Environment]::GetEnvironmentVariable('AXTARGET') $targetInput = [Environment]::GetEnvironmentVariable('AXTARGETPLATFORMINPUT') apax build -apax sld --accept-security-disclaimer -t $targetIP -i $targetInput -r --default-server-interface \ No newline at end of file +apax sld load --accept-security-disclaimer -t $targetIP -i $targetInput -r \ No newline at end of file diff --git a/src/tests.integrations/integrated/src/ax/apax-lock.json b/src/tests.integrations/integrated/src/ax/apax-lock.json new file mode 100644 index 00000000..86dd5fa5 --- /dev/null +++ b/src/tests.integrations/integrated/src/ax/apax-lock.json @@ -0,0 +1,693 @@ +{ + "name": "integrated", + "version": "0.0.0", + "lockFileVersion": "2", + "installStrategy": "strict", + "root": { + "name": "integrated", + "version": "0.0.0", + "devDependencies": { + "@ax/sdk": "^2311.0.1" + } + }, + "packages": { + "@ax/sdk": { + "name": "@ax/sdk", + "version": "2311.0.1", + "integrity": "sha512-uPAnfHnc9Tl7ugVFjA3Qc7K1CNwEF7CPfMRdZS/hO2aNeMXLlfxOc/Mm1R5hP8pF+XQgjhyvwm/Zy/e1rghKWQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdk/-/sdk-2311.0.1.tgz", + "dependencies": { + "@ax/axunitst": "4.1.8", + "@ax/axunitst-ls-contrib": "4.1.8", + "@ax/mod": "1.0.4", + "@ax/mon": "1.0.4", + "@ax/sdb": "1.0.4", + "@ax/sld": "2.0.5", + "@ax/st": "2311.0.1", + "@ax/target-llvm": "6.0.146", + "@ax/target-mc7plus": "6.0.146", + "@ax/simatic-pragma-stc-plugin": "2.0.12", + "@ax/trace": "2.7.0", + "@ax/diagnostic-buffer": "1.2.0", + "@ax/performance-info": "1.1.0", + "@ax/plc-info": "2.3.0", + "@ax/certificate-management": "1.1.0" + } + }, + "@ax/axunitst": { + "name": "@ax/axunitst", + "version": "4.1.8", + "integrity": "sha512-Ax4b503soS4RrfokQg5NbhqFOSJ7cKIzK8bNwtobWHy9asUPUbuwQhsILGETFh+T7cw8FGzFZ/VzKOL6tkhq8A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst/-/axunitst-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-library": "4.1.8", + "@ax/axunitst-runner": "4.1.8", + "@ax/axunitst-generator": "4.1.8", + "@ax/axunitst-llvm-runner-gen": "4.1.8", + "@ax/axunitst-docs": "4.1.8", + "@ax/build-native": "16.0.3" + } + }, + "@ax/axunitst-ls-contrib": { + "name": "@ax/axunitst-ls-contrib", + "version": "4.1.8", + "integrity": "sha512-dCrf/Ou/NT0zFh6wVXSxYphHOjLoUgOBJWDIBVzBpRDbhCebA/BuHLmVVGMllujkMreMlGRITjjquuqILquOAA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-ls-contrib/-/axunitst-ls-contrib-4.1.8.tgz", + "dependencies": {} + }, + "@ax/mod": { + "name": "@ax/mod", + "version": "1.0.4", + "integrity": "sha512-AU/OiEf3J9/wo+kSDYLjIRd19ajOpgASs5J2MHOVlP8eOaupZ1pAkIIUvXBcBuS8M42l5kXEw7G18dTcW9j1ng==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod/-/mod-1.0.4.tgz", + "dependencies": { + "@ax/mod-win-x64": "1.0.4", + "@ax/mod-linux-x64": "1.0.4" + } + }, + "@ax/mon": { + "name": "@ax/mon", + "version": "1.0.4", + "integrity": "sha512-HBFdgbTqHtXwq/42nyTnEupX3/WT+ltPFlumVhksd7+Oh9oR2HUSWf5t/GkfjR7LY7W32h5Gb7wpnHNU6Qm7cA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon/-/mon-1.0.4.tgz", + "dependencies": { + "@ax/mon-win-x64": "1.0.4", + "@ax/mon-linux-x64": "1.0.4" + } + }, + "@ax/sdb": { + "name": "@ax/sdb", + "version": "1.0.4", + "integrity": "sha512-9GZRZE5TX7wCJBzabtohFP+L9CzVgn+wIYRJyYhmuX1Y6dMF8+rgChTcc1vjq8bQHFx2ovkt57xvoFoEbs/Wag==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb/-/sdb-1.0.4.tgz", + "dependencies": { + "@ax/sdb-win-x64": "1.0.4", + "@ax/sdb-linux-x64": "1.0.4" + } + }, + "@ax/sld": { + "name": "@ax/sld", + "version": "2.0.5", + "integrity": "sha512-upa0HyRVdYyzNu6j7E+gTAnpzP2mfZxvo+0jbm8H6Ci9ergL56SHaCVBC35PnociMZpdZ5d1/LTy6f8lwpDxXA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sld/-/sld-2.0.5.tgz", + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/st": { + "name": "@ax/st", + "version": "2311.0.1", + "integrity": "sha512-n4Lqd2Gom1otRVGBu0hpYnT4dIvb0PVdcqo/3qVgMGKNjsMnKJAk9hKfnmcBhpHHt5U2IOIaiPgI3EuOEjL3LA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st/-/st-2311.0.1.tgz", + "dependencies": { + "@ax/stc": "6.0.146", + "@ax/apax-build": "0.7.0", + "@ax/st-ls": "3.0.113" + } + }, + "@ax/target-llvm": { + "name": "@ax/target-llvm", + "version": "6.0.146", + "integrity": "sha512-HiaiuX/O6nOUOX+xTcaMIHGLdAY4+KQW7Xwj39XCKLC/M54bhqiz2XOpde0g3jeUVuBeimf8UdTD3+MTva6l0A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm/-/target-llvm-6.0.146.tgz", + "dependencies": { + "@ax/target-llvm-win-x64": "6.0.146", + "@ax/target-llvm-linux-x64": "6.0.146" + } + }, + "@ax/target-mc7plus": { + "name": "@ax/target-mc7plus", + "version": "6.0.146", + "integrity": "sha512-WTktM/4O5XbXU+5rfpee6d02gl6AcRadFCgtkrYYD9rA4MShhPrYRREFn1dC9SfifOmWPqLX6i/qrfGMCG0n2w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus/-/target-mc7plus-6.0.146.tgz", + "dependencies": { + "@ax/target-mc7plus-win-x64": "6.0.146", + "@ax/target-mc7plus-linux-x64": "6.0.146" + } + }, + "@ax/simatic-pragma-stc-plugin": { + "name": "@ax/simatic-pragma-stc-plugin", + "version": "2.0.12", + "integrity": "sha512-KLo6lEPU5NfahK6Rr9MBlItSMU4VO+vePUGhk5nooM/1TZYtekJnLE4xRoZLeiMk+MA6glodTw6YkPzl7p7z4A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/simatic-pragma-stc-plugin/-/simatic-pragma-stc-plugin-2.0.12.tgz", + "dependencies": {} + }, + "@ax/trace": { + "name": "@ax/trace", + "version": "2.7.0", + "integrity": "sha512-yUmzjL5IKJ9NX5Q1THHN+LtW6llsZa+tw/jRZYQzKcxXTFJrGcCo5Qy45Dh0loxWGjZKmIe4YVG1ZwP3fdihJQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace/-/trace-2.7.0.tgz", + "dependencies": { + "@ax/trace-win-x64": "2.7.0", + "@ax/trace-linux-x64": "2.7.0" + } + }, + "@ax/diagnostic-buffer": { + "name": "@ax/diagnostic-buffer", + "version": "1.2.0", + "integrity": "sha512-Ka0t/mftRpSOMXob9/u9IDY1aSm1DyLe81vwNqJ6RzQY/h6CNpDjnRpx79pGzQiGWozlvtg/Sot0prGYPbthbg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer/-/diagnostic-buffer-1.2.0.tgz", + "dependencies": { + "@ax/diagnostic-buffer-win-x64": "1.2.0", + "@ax/diagnostic-buffer-linux-x64": "1.2.0" + } + }, + "@ax/performance-info": { + "name": "@ax/performance-info", + "version": "1.1.0", + "integrity": "sha512-vIgAbV63H9rVPYkS/Kz3AF38pMlI55oh3yReOUzEoXg8QmniOw81Ba5z//IeFpoZZyQJJG1lxtbYpVWvhCEqkA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info/-/performance-info-1.1.0.tgz", + "dependencies": { + "@ax/performance-info-win-x64": "1.1.0", + "@ax/performance-info-linux-x64": "1.1.0" + } + }, + "@ax/plc-info": { + "name": "@ax/plc-info", + "version": "2.3.0", + "integrity": "sha512-k+iOi1eUpVW5xBXRvdqS6Qj+ju2wQMsZIAZDvz32NDSv6HoAUTwMIEB5BA6xv9plRr1zi3jn99plslUshCEFPQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info/-/plc-info-2.3.0.tgz", + "dependencies": { + "@ax/plc-info-linux-x64": "2.3.0", + "@ax/plc-info-win-x64": "2.3.0" + } + }, + "@ax/certificate-management": { + "name": "@ax/certificate-management", + "version": "1.1.0", + "integrity": "sha512-u3S1uF3EC/EsxxxR3aM79QRLoH5UR2iLoGwj7DCN8CMalEalI6zyjyumm09MQ0vQc+Zje/vlyltD7OllsAqOuA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management/-/certificate-management-1.1.0.tgz", + "dependencies": { + "@ax/certificate-management-win-x64": "1.1.0", + "@ax/certificate-management-linux-x64": "1.1.0" + } + }, + "@ax/axunitst-library": { + "name": "@ax/axunitst-library", + "version": "4.1.8", + "integrity": "sha512-ue0V/EFANdrUA3j7BGr9j6TU1OFfKQBe29HN54CAHXvD1fzvr9gd+qoEHRiC41/KYVZarxi0XYcrQg4sbhh7Ew==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-library/-/axunitst-library-4.1.8.tgz", + "dependencies": { + "@ax/system-strings": "6.0.94" + } + }, + "@ax/axunitst-runner": { + "name": "@ax/axunitst-runner", + "version": "4.1.8", + "integrity": "sha512-Z0jnRjEWYVnaBIwXVHUncqp0GvwjTGMHH9avcHP5IisI9ierKrHnaJV/93mgntqgJY7BHLG8hanIoROPGc4ELA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner/-/axunitst-runner-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-runner-linux-x64": "4.1.8", + "@ax/axunitst-runner-win-x64": "4.1.8" + } + }, + "@ax/axunitst-generator": { + "name": "@ax/axunitst-generator", + "version": "4.1.8", + "integrity": "sha512-AGzftAlftnpyZ52uQOYTK06Yu6ptKh2m1uvGRCRdDz16CCAM1FIKZZsppl6fnMmZkf6MZbkTx3nbZ74Zk5c1rw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator/-/axunitst-generator-4.1.8.tgz", + "dependencies": { + "@ax/axunitst-generator-linux-x64": "4.1.8", + "@ax/axunitst-generator-win-x64": "4.1.8" + } + }, + "@ax/axunitst-llvm-runner-gen": { + "name": "@ax/axunitst-llvm-runner-gen", + "version": "4.1.8", + "integrity": "sha512-XMmU+Qr1ElNFLJAnQ3JKh9QHr3/IPJo+KoR8C8sZqoIy/IzRCKY3IubvJ4KPGnBZzz+DI5UxIuH9bwvq5YWqIw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-llvm-runner-gen/-/axunitst-llvm-runner-gen-4.1.8.tgz", + "dependencies": {} + }, + "@ax/axunitst-docs": { + "name": "@ax/axunitst-docs", + "version": "4.1.8", + "integrity": "sha512-g4XsjaqZoJvYcz58ghirISMS/SfFl9UGNFJGr0afhLmYkqEyoLi6p9+zuLk4+SWtbMj3FNu/cc1ReSSS/GACEQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-docs/-/axunitst-docs-4.1.8.tgz", + "dependencies": {} + }, + "@ax/build-native": { + "name": "@ax/build-native", + "version": "16.0.3", + "integrity": "sha512-d7I0ICUaIwW/8v030Xw8H6fMMOD2FB9ON7pmq+XV+YXCPorTUJ7rCvq4+710B78QJn2ac+xJgpb1EhI1fiK40w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native/-/build-native-16.0.3.tgz", + "dependencies": { + "@ax/build-native-winx64": "16.0.3", + "@ax/build-native-linux": "16.0.3" + } + }, + "@ax/mod-win-x64": { + "name": "@ax/mod-win-x64", + "version": "1.0.4", + "integrity": "sha512-AQ9NUSaICMN/qPeX95SzZUj1/m4xULIltZ4V2JcMdi0VW9aoTZVPnVFHdE2gb+HwApyvrq73v9/Vcyq8cBkuKQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-win-x64/-/mod-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mod-linux-x64": { + "name": "@ax/mod-linux-x64", + "version": "1.0.4", + "integrity": "sha512-Bs+MBPyKpPJiJ3m8PvQ/DgCsH2I2YG4Vcm1Q6DfCzozpSp2RrRO6a+5vxLrpCzgQhzSjS+2PWvgXoikMPV7v1Q==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mod-linux-x64/-/mod-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mon-win-x64": { + "name": "@ax/mon-win-x64", + "version": "1.0.4", + "integrity": "sha512-YT5sAL/40uPQV5KXCbddHChKY9obwBlesqWkJJwCQjvY+cSHMLort+VPaKdrNJdb1Z07zH7vnizIkgeYRpu0tw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-win-x64/-/mon-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/mon-linux-x64": { + "name": "@ax/mon-linux-x64", + "version": "1.0.4", + "integrity": "sha512-KHwaqwdFffRF4jK2v3AZJh92Fl6ZKwGdw/wK8Xgy/FzIi/JbRHN7q20gTdafHqBUJa8GPDWMSgMmTXd+S2usyQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/mon-linux-x64/-/mon-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/sdb-win-x64": { + "name": "@ax/sdb-win-x64", + "version": "1.0.4", + "integrity": "sha512-w3LFsmmAESRCjphKgjLGT+m4Ac9xWQnXjntM35pbQ0Tof/emgLFpi6LS/UBjexyCkxCts1rOKTMWKM1rXMStwg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-win-x64/-/sdb-win-x64-1.0.4.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/sdb-linux-x64": { + "name": "@ax/sdb-linux-x64", + "version": "1.0.4", + "integrity": "sha512-du8fDAPlfMH4bmleJatxusTkMCmWAJh/9hNZUi7XOweWf2v4/aXx0gcddSS9HPnLfpGCgVIP/YYDhcr+j7PqpQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/sdb-linux-x64/-/sdb-linux-x64-1.0.4.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/stc": { + "name": "@ax/stc", + "version": "6.0.146", + "integrity": "sha512-eYeRbTi6UsM3Np3rWJYfZ4p5m/5Md4AcarrvALXzaG5hP2a/08L306gYQhadsOEOVsBpMHlT9GtvV1vovjjctA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc/-/stc-6.0.146.tgz", + "dependencies": { + "@ax/stc-win-x64": "6.0.146", + "@ax/stc-linux-x64": "6.0.146" + } + }, + "@ax/apax-build": { + "name": "@ax/apax-build", + "version": "0.7.0", + "integrity": "sha512-OkmqLq6SI0gv9x/7FLFmABuJYylHHyOzZ4Kvmfys2RGiP06/WbOpycmuqYBneK1zAe3KoBu8ZmelPdXbxcK4+w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/apax-build/-/apax-build-0.7.0.tgz", + "dependencies": {} + }, + "@ax/st-ls": { + "name": "@ax/st-ls", + "version": "3.0.113", + "integrity": "sha512-NhPfgwF8MQiUoyAr5rZm6cb5UhAHQ3sVvpFZ3+FdXMAMxxPe9i9/NQijKqSga9JJ4HHpUcizYVoOWc2XXA++zw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls/-/st-ls-3.0.113.tgz", + "dependencies": { + "@ax/st-ls-win-x64": "3.0.113", + "@ax/st-ls-linux-x64": "3.0.113" + } + }, + "@ax/target-llvm-win-x64": { + "name": "@ax/target-llvm-win-x64", + "version": "6.0.146", + "integrity": "sha512-V6h9Gtricl+K8M+gYF0EtWhBcoMeLgfFqARCO6nATelKkTdnJmvzsrr3CYe6nk6KQSk2r2l2U7yiVwyXHs4mOQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-win-x64/-/target-llvm-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-llvm-linux-x64": { + "name": "@ax/target-llvm-linux-x64", + "version": "6.0.146", + "integrity": "sha512-8WMgh5PeM+Uof7nXQsqk3JEPdXOlK1ljtyNOcOfxlZAcDlHiKTKADMLzO3VFTJkxp6txsRXnSpLlVLsZxknl9g==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-llvm-linux-x64/-/target-llvm-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-mc7plus-win-x64": { + "name": "@ax/target-mc7plus-win-x64", + "version": "6.0.146", + "integrity": "sha512-06rOSJS1OI6+ApsFoe3sK0jjq3ZTt96sewg7GvEXztGTE/GTINWbbHqzr4TMCV9Fixk8hYWIiW5OAFG/kKDzfA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-win-x64/-/target-mc7plus-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/target-mc7plus-linux-x64": { + "name": "@ax/target-mc7plus-linux-x64", + "version": "6.0.146", + "integrity": "sha512-CGmwLBrT1ZRw9f6L1FylbVHV7l2BP8drp/NJKRAApNBtYuVE5U4H2kndizUKYLR4wbidt6Amu602ncvcJBUKNw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/target-mc7plus-linux-x64/-/target-mc7plus-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/trace-win-x64": { + "name": "@ax/trace-win-x64", + "version": "2.7.0", + "integrity": "sha512-hQeCiax20UPrSQIOMqSJg6OWdavunL9h6Irnlrgk4ht4hMZrDEWPnuIBfPNG2tAp3780GtefEl8b8QSk5h7jxQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace-win-x64/-/trace-win-x64-2.7.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/trace-linux-x64": { + "name": "@ax/trace-linux-x64", + "version": "2.7.0", + "integrity": "sha512-LPfdNIbp9+7BuMFL/TtpQXGHrUx/+C1tTFC3YSWscP7TcHzDLWF3yBjqXHaNN01SmCi44S4AwJ9Q2E66QJ0Rtg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/trace-linux-x64/-/trace-linux-x64-2.7.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/diagnostic-buffer-win-x64": { + "name": "@ax/diagnostic-buffer-win-x64", + "version": "1.2.0", + "integrity": "sha512-s5TfWFlmB7ibgm9L5TRN7k1hJCkzCNBlNh08GT3uWtmq8pFg5BrYsYVWZe+GRUT1YEcP+0f9oA8Nnj5n1vM+sg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer-win-x64/-/diagnostic-buffer-win-x64-1.2.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/diagnostic-buffer-linux-x64": { + "name": "@ax/diagnostic-buffer-linux-x64", + "version": "1.2.0", + "integrity": "sha512-aRm3Qvy4eBwSFBk5990uBfFRVa9E+fKGDJ69ufPL8U4Vw1/ma/cyFHVc8Zqv4ITO8673IClurfWsVIh6Gk4KCw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/diagnostic-buffer-linux-x64/-/diagnostic-buffer-linux-x64-1.2.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/performance-info-win-x64": { + "name": "@ax/performance-info-win-x64", + "version": "1.1.0", + "integrity": "sha512-yMfgZm2erMxxU3LJytyJKWWA9PN/vIXhZjXPhEpUXn+M+ojg+pXiRy+oLj5Z0Xo8NYd/bz780m/buAaIPMe2Iw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info-win-x64/-/performance-info-win-x64-1.1.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/performance-info-linux-x64": { + "name": "@ax/performance-info-linux-x64", + "version": "1.1.0", + "integrity": "sha512-5rFgfDdfijFVIFRfoQXv4MS/jgrk3Oe8sKJVRFluTs8hkMLg0AlWvVe171YbFOO1D3VI8O1yG8KFu3AKwF3bjw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/performance-info-linux-x64/-/performance-info-linux-x64-1.1.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/plc-info-linux-x64": { + "name": "@ax/plc-info-linux-x64", + "version": "2.3.0", + "integrity": "sha512-EUD170olqPo0aSOx/5auP8inlKNON0bstMSjtQDc/bqjXcKRxL6K6sg/JnierRO7OiJ5iXcTLIGO3cOBeXeAAw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info-linux-x64/-/plc-info-linux-x64-2.3.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/plc-info-win-x64": { + "name": "@ax/plc-info-win-x64", + "version": "2.3.0", + "integrity": "sha512-10M6F6HQV/nMk9n9pR17xvkx93O1ALOQTlLl3IMFzH9O/DXPSVzb4r3Q7KuVXd7OBpoWzt8Ab/ZvFzp98VXTGw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/plc-info-win-x64/-/plc-info-win-x64-2.3.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/certificate-management-win-x64": { + "name": "@ax/certificate-management-win-x64", + "version": "1.1.0", + "integrity": "sha512-iOQqNG3LHJ2m7WVgxFYhHThFJ5UblUGhcDKKxCJqAuGl9v+BPXq3v/8hWKzTqoeQanHNPCSG3+YCKivPFRDEMA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management-win-x64/-/certificate-management-win-x64-1.1.0.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/certificate-management-linux-x64": { + "name": "@ax/certificate-management-linux-x64", + "version": "1.1.0", + "integrity": "sha512-U+ZfWotWeBjRRfHab2VgeRWtIvm5uh/IGtAkV1ZBebmjejuwgGwZdlfWa6g0pIccX330V6Jl2y+6jCUHjW1wUQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/certificate-management-linux-x64/-/certificate-management-linux-x64-1.1.0.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/stc-win-x64": { + "name": "@ax/stc-win-x64", + "version": "6.0.146", + "integrity": "sha512-4hTgmIG54MaWhgxBV8gygU19yilVLfieizhUb08aRXz2o1+YKqd6ifgz1NBAT9RVOgnMj0IJcUynuLo998i1zg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-win-x64/-/stc-win-x64-6.0.146.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/st-docs": "6.0.146" + } + }, + "@ax/stc-linux-x64": { + "name": "@ax/stc-linux-x64", + "version": "6.0.146", + "integrity": "sha512-Cy8psrCe2TB+bCZrCzU4qtPxf0UWzCpdmxOCBC4fEVKnKW6MaBOBt85PAbz6MtAriH4boJY9gMMuPspWlKavPA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/stc-linux-x64/-/stc-linux-x64-6.0.146.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": { + "@ax/st-docs": "6.0.146" + } + }, + "@ax/st-ls-win-x64": { + "name": "@ax/st-ls-win-x64", + "version": "3.0.113", + "integrity": "sha512-dPj6b2aRhnelCe0BpIcLMLvHbUj2zhfQOtu4jzdZFDPhKICdB9+fTebuYRmP2vna4ogTke22e6f2buwR6VO1Vw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls-win-x64/-/st-ls-win-x64-3.0.113.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/st-ls-linux-x64": { + "name": "@ax/st-ls-linux-x64", + "version": "3.0.113", + "integrity": "sha512-/QUsNMJrMPRVcCrCD7gkw/xl0VvZ8YEJXxQMWGwkWol3JgxiPjWW/fb7EqpzDU+ij45xy85rBdx29MMHQ3Of9Q==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-ls-linux-x64/-/st-ls-linux-x64-3.0.113.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/system-strings": { + "name": "@ax/system-strings", + "version": "6.0.94", + "integrity": "sha512-iGh5v//U+az23N1SG+rgPassm7mUV6MSdLnE+6a7g1u7e6lHbrsnAbfKqIk7UNHEFFfp52WK1k5B6Igo0s3/1A==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-strings/-/system-strings-6.0.94.tgz", + "dependencies": { + "@ax/system-math": "6.0.94", + "@ax/system-datetime": "6.0.94" + } + }, + "@ax/axunitst-runner-linux-x64": { + "name": "@ax/axunitst-runner-linux-x64", + "version": "4.1.8", + "integrity": "sha512-lGNvjBfJeKxmj+uChBH6W4OMSd5Ek515q0WImnd/qiJ4eAsOUMikynFfq9ToY49upVZGOvrkiGFrT9zBTJA8tQ==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner-linux-x64/-/axunitst-runner-linux-x64-4.1.8.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-runner-win-x64": { + "name": "@ax/axunitst-runner-win-x64", + "version": "4.1.8", + "integrity": "sha512-W7Q9o75ALr3yXCbzMv89vSxQgo8EVnRO8TsNkCetkcf8op/ib2W+4Xh+m/P5X2JgIyVTDmqOPnYu5kHnAXhCzA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-runner-win-x64/-/axunitst-runner-win-x64-4.1.8.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-generator-linux-x64": { + "name": "@ax/axunitst-generator-linux-x64", + "version": "4.1.8", + "integrity": "sha512-pJyNwfYK1LljgFrXD21iGExOhvp4LkBSPKbakLVQGzZFmHpERNrxe3vcsQRZJQip2gGXNTMdnyWRWLQXJ80c2w==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator-linux-x64/-/axunitst-generator-linux-x64-4.1.8.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/axunitst-generator-win-x64": { + "name": "@ax/axunitst-generator-win-x64", + "version": "4.1.8", + "integrity": "sha512-IFDotU7DIugAxkkyQPBK7SJAFGfNMHxXHK7QWIKZ3z4a3qLSVzTBZkOWJqo0xPy/3vaPjh/PjfFJs85M0iqOgg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/axunitst-generator-win-x64/-/axunitst-generator-win-x64-4.1.8.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/build-native-winx64": { + "name": "@ax/build-native-winx64", + "version": "16.0.3", + "integrity": "sha512-M1qk2yNNsGzz6NXKB0miyfOO4bpYkVcfnGhkHirXcJSLFnWDSx7hnRi0yhLp6jny99RkXEcRn9Cwx8lqynmUDg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-winx64/-/build-native-winx64-16.0.3.tgz", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/build-native-linux": { + "name": "@ax/build-native-linux", + "version": "16.0.3", + "integrity": "sha512-CfqbzR+wPnocP0+pDpb3cYBxdefkS6WvHbGaDNGAoCkK3Y8WnNfWbxXr37e5XIi7iPMZ8BONWaRFIN5h4RMeOA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/build-native-linux/-/build-native-linux-16.0.3.tgz", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "dependencies": {} + }, + "@ax/st-docs": { + "name": "@ax/st-docs", + "version": "6.0.146", + "integrity": "sha512-KUs6JC/dWedgnaxH7UrqAOuJm6rKS4gzXTLguqXbtWHKdDKOceIw1yODyjty4iuOm6TkDm2UX4ya6QFC84eBHA==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/st-docs/-/st-docs-6.0.146.tgz", + "dependencies": {} + }, + "@ax/system-math": { + "name": "@ax/system-math", + "version": "6.0.94", + "integrity": "sha512-lmkqZnJRT6zjAaVEKgWDwB1J7st+rgj/lfJc+6PZ/zgiRxoJ/s7BSTl/6YQ6k12RskKrA4E5VvLiqJhaNd3ssw==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-math/-/system-math-6.0.94.tgz", + "dependencies": {} + }, + "@ax/system-datetime": { + "name": "@ax/system-datetime", + "version": "6.0.94", + "integrity": "sha512-8xn57nA5NfZ6ImTxmFGvzFp7wLL38JdUgjsuEg+xbzs29e8ftvbTCNqaWMVdX05N4QNAqohq2BlEkIyFtDH8Qg==", + "resolved": "https://registry.simatic-ax.siemens.io/@ax/system-datetime/-/system-datetime-6.0.94.tgz", + "dependencies": {} + } + }, + "workspaces": {} +} diff --git a/src/tests.integrations/integrated/src/ax/apax.yml b/src/tests.integrations/integrated/src/ax/apax.yml index 6ae03eb8..465d7bc7 100644 --- a/src/tests.integrations/integrated/src/ax/apax.yml +++ b/src/tests.integrations/integrated/src/ax/apax.yml @@ -3,14 +3,11 @@ version: 0.0.0 type: app targets: - "1500" - - axunit-llvm + - llvm - plcsim - swcpu devDependencies: - "@ax/sdk": ^4.0.8 - "@ax/sld": ^2.0.5 - "@ax/stc": ^5.4.89 - + "@ax/sdk": ^2311.0.1 variables: APAX_BUILD_ARGS: [ -d ] scripts: @@ -29,4 +26,4 @@ scripts: - apax sld load --accept-security-disclaimer -t $AXTARGET -i $AXTARGETPLATFORMINPUT -r installStrategy: strict -apaxVersion: 3.0.0 +apaxVersion: 3.1.0 diff --git a/src/tests.integrations/integrated/src/ax/src/configuration.st b/src/tests.integrations/integrated/src/ax/src/configuration.st index 2ca6497b..085a978e 100644 --- a/src/tests.integrations/integrated/src/ax/src/configuration.st +++ b/src/tests.integrations/integrated/src/ax/src/configuration.st @@ -79,6 +79,9 @@ CONFIGURATION MyConfiguration {S7.extern=ReadWrite} StartPolling_ConcurentOverload : RealMonsterData.RealMonster; + {S7.extern=ReadWrite} + ChangeDetections : RealMonsterData.RealMonster; + {S7.extern=ReadWrite} GH_ISSUE_183 : GH_ISSUE_183.GH_ISSUE_183_1; END_VAR diff --git a/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/configuration.g.cs b/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/configuration.g.cs index 7f738fa1..6d068621 100644 --- a/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/configuration.g.cs +++ b/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/configuration.g.cs @@ -71,6 +71,8 @@ public partial class integratedTwinController : ITwinController public RealMonsterData.RealMonster StartPolling_ConcurentOverload { get; } + public RealMonsterData.RealMonster ChangeDetections { get; } + public GH_ISSUE_183.GH_ISSUE_183_1 GH_ISSUE_183 { get; } public integratedTwinController(AXSharp.Connector.ConnectorAdapter adapter, object[] parameters) @@ -107,6 +109,7 @@ public integratedTwinController(AXSharp.Connector.ConnectorAdapter adapter, obje p_plain_shadow = new all_primitives(this.Connector, "", "p_plain_shadow"); StartPolling_should_update_cyclic_property = new RealMonsterData.RealMonster(this.Connector, "", "StartPolling_should_update_cyclic_property"); StartPolling_ConcurentOverload = new RealMonsterData.RealMonster(this.Connector, "", "StartPolling_ConcurentOverload"); + ChangeDetections = new RealMonsterData.RealMonster(this.Connector, "", "ChangeDetections"); GH_ISSUE_183 = new GH_ISSUE_183.GH_ISSUE_183_1(this.Connector, "", "GH_ISSUE_183"); } @@ -144,6 +147,7 @@ public integratedTwinController(AXSharp.Connector.ConnectorAdapter adapter) p_plain_shadow = new all_primitives(this.Connector, "", "p_plain_shadow"); StartPolling_should_update_cyclic_property = new RealMonsterData.RealMonster(this.Connector, "", "StartPolling_should_update_cyclic_property"); StartPolling_ConcurentOverload = new RealMonsterData.RealMonster(this.Connector, "", "StartPolling_ConcurentOverload"); + ChangeDetections = new RealMonsterData.RealMonster(this.Connector, "", "ChangeDetections"); GH_ISSUE_183 = new GH_ISSUE_183.GH_ISSUE_183_1(this.Connector, "", "GH_ISSUE_183"); } } @@ -234,6 +238,23 @@ public async Task> PlainToShadowAsync(Pocos.Pokus pl return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.Pokus plain, Pocos.Pokus latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -405,6 +426,23 @@ public async Task> PlainToShadowAsync(Pocos.Nested p return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.Nested plain, Pocos.Nested latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/all_primitives.g.cs b/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/all_primitives.g.cs index 0f3a9dbd..4cc1225e 100644 --- a/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/all_primitives.g.cs +++ b/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/all_primitives.g.cs @@ -436,6 +436,69 @@ public async Task> PlainToShadowAsync(Pocos.all_prim return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.all_primitives plain, Pocos.all_primitives latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.myBOOL != myBOOL.LastValue) + somethingChanged = true; + if (plain.myBYTE != myBYTE.LastValue) + somethingChanged = true; + if (plain.myWORD != myWORD.LastValue) + somethingChanged = true; + if (plain.myDWORD != myDWORD.LastValue) + somethingChanged = true; + if (plain.myLWORD != myLWORD.LastValue) + somethingChanged = true; + if (plain.mySINT != mySINT.LastValue) + somethingChanged = true; + if (plain.myINT != myINT.LastValue) + somethingChanged = true; + if (plain.myDINT != myDINT.LastValue) + somethingChanged = true; + if (plain.myLINT != myLINT.LastValue) + somethingChanged = true; + if (plain.myUSINT != myUSINT.LastValue) + somethingChanged = true; + if (plain.myUINT != myUINT.LastValue) + somethingChanged = true; + if (plain.myUDINT != myUDINT.LastValue) + somethingChanged = true; + if (plain.myULINT != myULINT.LastValue) + somethingChanged = true; + if (plain.myREAL != myREAL.LastValue) + somethingChanged = true; + if (plain.myLREAL != myLREAL.LastValue) + somethingChanged = true; + if (plain.myTIME != myTIME.LastValue) + somethingChanged = true; + if (plain.myLTIME != myLTIME.LastValue) + somethingChanged = true; + if (plain.myDATE != myDATE.LastValue) + somethingChanged = true; + if (plain.myTIME_OF_DAY != myTIME_OF_DAY.LastValue) + somethingChanged = true; + if (plain.myDATE_AND_TIME != myDATE_AND_TIME.LastValue) + somethingChanged = true; + if (plain.mySTRING != mySTRING.LastValue) + somethingChanged = true; + if (plain.myWSTRING != myWSTRING.LastValue) + somethingChanged = true; + if (plain.myEnum != (myEnum)latest.myEnum) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/moster.g.cs b/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/moster.g.cs index f2c97c0e..1d36ab00 100644 --- a/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/moster.g.cs +++ b/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/moster.g.cs @@ -204,6 +204,43 @@ public async Task> PlainToShadowAsync(Pocos.MonsterD return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.MonsterData.MonsterBase plain, Pocos.MonsterData.MonsterBase latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Description != Description.LastValue) + somethingChanged = true; + if (plain.Id != Id.LastValue) + somethingChanged = true; + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest.ArrayOfBytes.Length; i760901_3001_mimi++) + { + if (latest.ArrayOfBytes.ElementAt(i760901_3001_mimi) != plain.ArrayOfBytes[i760901_3001_mimi]) + somethingChanged = true; + } + + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest.ArrayOfDrives.Length; i760901_3001_mimi++) + { + if (await ArrayOfDrives.ElementAt(i760901_3001_mimi).DetectsAnyChangeAsync(plain.ArrayOfDrives[i760901_3001_mimi], latest.ArrayOfDrives[i760901_3001_mimi])) + somethingChanged = true; + } + + if (await DriveBase_tobeignoredbypocooperations.DetectsAnyChangeAsync(plain.DriveBase_tobeignoredbypocooperations, latest.DriveBase_tobeignoredbypocooperations)) + somethingChanged = true; + if (plain.Description_tobeignoredbypocooperations != Description_tobeignoredbypocooperations.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -404,6 +441,27 @@ public async Task> PlainToShadowAsync(Pocos.MonsterD return this.RetrievePrimitives(); } + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public new async Task DetectsAnyChangeAsync(Pocos.MonsterData.Monster plain, Pocos.MonsterData.Monster latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + if (await DriveA.DetectsAnyChangeAsync(plain.DriveA, latest.DriveA)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -561,6 +619,31 @@ public async Task> PlainToShadowAsync(Pocos.MonsterD return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.MonsterData.DriveBase plain, Pocos.MonsterData.DriveBase latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Position != Position.LastValue) + somethingChanged = true; + if (plain.Velo != Velo.LastValue) + somethingChanged = true; + if (plain.Acc != Acc.LastValue) + somethingChanged = true; + if (plain.Dcc != Dcc.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/realmonster.g.cs b/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/realmonster.g.cs index a0319ad0..ce765757 100644 --- a/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/realmonster.g.cs +++ b/src/tests.integrations/integrated/src/integrated.twin/.g/Onliners/dataswapping/realmonster.g.cs @@ -211,6 +211,45 @@ public async Task> PlainToShadowAsync(Pocos.RealMons return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.RealMonsterData.RealMonsterBase plain, Pocos.RealMonsterData.RealMonsterBase latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Description != Description.LastValue) + somethingChanged = true; + if (plain.Id != Id.LastValue) + somethingChanged = true; + if (plain.TestDate != TestDate.LastValue) + somethingChanged = true; + if (plain.TestDateTime != TestDateTime.LastValue) + somethingChanged = true; + if (plain.TestTimeSpan != TestTimeSpan.LastValue) + somethingChanged = true; + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest.ArrayOfBytes.Length; i760901_3001_mimi++) + { + if (latest.ArrayOfBytes.ElementAt(i760901_3001_mimi) != plain.ArrayOfBytes[i760901_3001_mimi]) + somethingChanged = true; + } + + for (int i760901_3001_mimi = 0; i760901_3001_mimi < latest.ArrayOfDrives.Length; i760901_3001_mimi++) + { + if (await ArrayOfDrives.ElementAt(i760901_3001_mimi).DetectsAnyChangeAsync(plain.ArrayOfDrives[i760901_3001_mimi], latest.ArrayOfDrives[i760901_3001_mimi])) + somethingChanged = true; + } + + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -411,6 +450,27 @@ public async Task> PlainToShadowAsync(Pocos.RealMons return this.RetrievePrimitives(); } + public async override Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public new async Task DetectsAnyChangeAsync(Pocos.RealMonsterData.RealMonster plain, Pocos.RealMonsterData.RealMonster latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (await base.DetectsAnyChangeAsync(plain)) + return true; + if (await DriveA.DetectsAnyChangeAsync(plain.DriveA, latest.DriveA)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public new void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -589,6 +649,33 @@ public async Task> PlainToShadowAsync(Pocos.RealMons return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.RealMonsterData.DriveBaseNested plain, Pocos.RealMonsterData.DriveBaseNested latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Position != Position.LastValue) + somethingChanged = true; + if (plain.Velo != Velo.LastValue) + somethingChanged = true; + if (plain.Acc != Acc.LastValue) + somethingChanged = true; + if (plain.Dcc != Dcc.LastValue) + somethingChanged = true; + if (await NestedLevelOne.DetectsAnyChangeAsync(plain.NestedLevelOne, latest.NestedLevelOne)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -841,6 +928,33 @@ public async Task> PlainToShadowAsync(Pocos.RealMons return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.RealMonsterData.NestedLevelOne plain, Pocos.RealMonsterData.NestedLevelOne latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Position != Position.LastValue) + somethingChanged = true; + if (plain.Velo != Velo.LastValue) + somethingChanged = true; + if (plain.Acc != Acc.LastValue) + somethingChanged = true; + if (plain.Dcc != Dcc.LastValue) + somethingChanged = true; + if (await NestedLevelTwo.DetectsAnyChangeAsync(plain.NestedLevelTwo, latest.NestedLevelTwo)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1093,6 +1207,33 @@ public async Task> PlainToShadowAsync(Pocos.RealMons return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.RealMonsterData.NestedLevelTwo plain, Pocos.RealMonsterData.NestedLevelTwo latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Position != Position.LastValue) + somethingChanged = true; + if (plain.Velo != Velo.LastValue) + somethingChanged = true; + if (plain.Acc != Acc.LastValue) + somethingChanged = true; + if (plain.Dcc != Dcc.LastValue) + somethingChanged = true; + if (await NestedLevelThree.DetectsAnyChangeAsync(plain.NestedLevelThree, latest.NestedLevelThree)) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); @@ -1324,6 +1465,31 @@ public async Task> PlainToShadowAsync(Pocos.RealMons return this.RetrievePrimitives(); } + public async virtual Task AnyChangeAsync(T plain) + { + return await this.DetectsAnyChangeAsync((dynamic)plain); + } + + public async Task DetectsAnyChangeAsync(Pocos.RealMonsterData.NestedLevelThree plain, Pocos.RealMonsterData.NestedLevelThree latest = null) + { + if (latest == null) + latest = await this._OnlineToPlainNoacAsync(); + var somethingChanged = false; + return await Task.Run(async () => + { + if (plain.Position != Position.LastValue) + somethingChanged = true; + if (plain.Velo != Velo.LastValue) + somethingChanged = true; + if (plain.Acc != Acc.LastValue) + somethingChanged = true; + if (plain.Dcc != Dcc.LastValue) + somethingChanged = true; + plain = latest; + return somethingChanged; + }); + } + public void Poll() { this.RetrievePrimitives().ToList().ForEach(x => x.Poll()); diff --git a/src/tests.integrations/integrated/src/integrated.twin/.g/POCO/configuration.g.cs b/src/tests.integrations/integrated/src/integrated.twin/.g/POCO/configuration.g.cs index 12b25fe7..3b41e0e6 100644 --- a/src/tests.integrations/integrated/src/integrated.twin/.g/POCO/configuration.g.cs +++ b/src/tests.integrations/integrated/src/integrated.twin/.g/POCO/configuration.g.cs @@ -37,6 +37,7 @@ public partial class integratedTwinController public all_primitives p_plain_shadow { get; set; } = new all_primitives(); public RealMonsterData.RealMonster StartPolling_should_update_cyclic_property { get; set; } = new RealMonsterData.RealMonster(); public RealMonsterData.RealMonster StartPolling_ConcurentOverload { get; set; } = new RealMonsterData.RealMonster(); + public RealMonsterData.RealMonster ChangeDetections { get; set; } = new RealMonsterData.RealMonster(); public GH_ISSUE_183.GH_ISSUE_183_1 GH_ISSUE_183 { get; set; } = new GH_ISSUE_183.GH_ISSUE_183_1(); } diff --git a/src/tests.integrations/integrated/tests/integrated.tests/ChangeDetectionTests.cs b/src/tests.integrations/integrated/tests/integrated.tests/ChangeDetectionTests.cs new file mode 100644 index 00000000..f985af58 --- /dev/null +++ b/src/tests.integrations/integrated/tests/integrated.tests/ChangeDetectionTests.cs @@ -0,0 +1,162 @@ +using AXSharp.Connector; +namespace integrated.tests +{ + public class ChangeDetectionTests + { + + public ChangeDetectionTests() + { +#if NET6_0 + Task.Delay(250).Wait(); +#endif + +#if NET7_0 + Task.Delay(500).Wait(); +#endif + +#if NET8_0 + Task.Delay(750).Wait(); +#endif + } + + [Fact] + public async Task AnyChangeAsync_should_detect_change_on_a_complex_structure() + { + var monster = Entry.Plc.ChangeDetections; + await monster.DriveA.Acc.SetAsync(0.0d); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.AnyChangeAsync(plain); + Assert.False(actual); + await monster.DriveA.Acc.SetAsync(0.5d); + await monster.ReadAsync(); + actual = await monster.AnyChangeAsync(plain); + Assert.True(actual); + } + + [Fact] + public async Task AnyChangeAsync_should_not_detect_change_on_a_complex_structure() + { + var monster = Entry.Plc.ChangeDetections; + await monster.DriveA.Acc.SetAsync(0.0d); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.AnyChangeAsync(plain); + Assert.False(actual); + await monster.DriveA.Acc.SetAsync(0.0d); + await monster.ReadAsync(); + actual = await monster.AnyChangeAsync(plain); + Assert.False(actual); + } + + [Fact] + public async Task DetectsAnyChangeAsync_should_detect_change_on_a_complex_structure() + { + var monster = Entry.Plc.ChangeDetections; + await monster.DriveA.Acc.SetAsync(0.0d); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + await monster.DriveA.Acc.SetAsync(0.5d); + await monster.ReadAsync(); + actual = await monster.DetectsAnyChangeAsync(plain); + Assert.True(actual); + } + + [Fact] + public async Task DetectsAnyChangeAsync_should_detect_change_on_a_complex_structure_on_array_primitive_type() + { + var monster = Entry.Plc.ChangeDetections; + await monster.ArrayOfBytes[0].SetAsync(0x00); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + await monster.ArrayOfBytes[0].SetAsync(0x01); + await monster.ReadAsync(); + actual = await monster.DetectsAnyChangeAsync(plain); + Assert.True(actual); + } + + [Fact] + public async Task DetectsAnyChangeAsync_should_detect_change_on_a_complex_structure_on_array_complex_type() + { + var monster = Entry.Plc.ChangeDetections; + await monster.ArrayOfDrives[0].Acc.SetAsync(0x00); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + await monster.ArrayOfDrives[0].Acc.SetAsync(0x01); + await monster.ReadAsync(); + actual = await monster.DetectsAnyChangeAsync(plain); + Assert.True(actual); + } + + [Fact] + public async Task DetectsAnyChangeAsync_should_detect_change_on_a_complex_structure_on_a_primitive_type() + { + var monster = Entry.Plc.ChangeDetections; + await monster.Description.SetAsync(""); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + await monster.Description.SetAsync("Hello"); + await monster.ReadAsync(); + actual = await monster.DetectsAnyChangeAsync(plain); + Assert.True(actual); + } + + [Fact] + public async Task DetectsAnyChangeAsync_should_not_detect_change_on_a_complex_structure() + { + var monster = Entry.Plc.ChangeDetections; + await monster.DriveA.Acc.SetAsync(0.0d); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + await monster.DriveA.Acc.SetAsync(0.0d); + await monster.ReadAsync(); + actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + } + + [Fact] + public async Task DetectsAnyChangeAsync_should_not_detect_change_on_a_complex_structure_on_array_primitive_type() + { + var monster = Entry.Plc.ChangeDetections; + await monster.ArrayOfBytes[0].SetAsync(0x00); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + await monster.ArrayOfBytes[0].SetAsync(0x00); + await monster.ReadAsync(); + actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + } + + [Fact] + public async Task DetectsAnyChangeAsync_should_not_detect_change_on_a_complex_structure_on_array_complex_type() + { + var monster = Entry.Plc.ChangeDetections; + await monster.ArrayOfDrives[0].Acc.SetAsync(0x00); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + await monster.ArrayOfDrives[0].Acc.SetAsync(0x00); + await monster.ReadAsync(); + actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + } + + [Fact] + public async Task DetectsAnyChangeAsync_should_not_detect_change_on_a_complex_structure_on_a_primitive_type() + { + var monster = Entry.Plc.ChangeDetections; + await monster.Description.SetAsync(""); + var plain = await monster.OnlineToPlainAsync(); + bool actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + await monster.Description.SetAsync(""); + await monster.ReadAsync(); + actual = await monster.DetectsAnyChangeAsync(plain); + Assert.False(actual); + } + } +} \ No newline at end of file diff --git a/src/tests.integrations/integrated/tests/integrated.tests/PlainersSwappingTests.cs b/src/tests.integrations/integrated/tests/integrated.tests/PlainersSwappingTests.cs index ac802b01..f257c187 100644 --- a/src/tests.integrations/integrated/tests/integrated.tests/PlainersSwappingTests.cs +++ b/src/tests.integrations/integrated/tests/integrated.tests/PlainersSwappingTests.cs @@ -13,6 +13,10 @@ public PlainersSwappingTests() #if NET7_0 Task.Delay(500).Wait(); #endif + +#if NET8_0 + Task.Delay(750).Wait(); +#endif } [Fact]