diff --git a/.github/workflows/publish-nuget.yml b/.github/workflows/publish-nuget.yml index a92871e..3a745c6 100644 --- a/.github/workflows/publish-nuget.yml +++ b/.github/workflows/publish-nuget.yml @@ -32,12 +32,14 @@ jobs: run: | dotnet restore ./src/Blazor.SourceGenerators/Blazor.SourceGenerators.csproj dotnet restore ./src/Blazor.LocalStorage.WebAssembly/Blazor.LocalStorage.WebAssembly.csproj + dotnet restore ./src/Blazor.LocalStorage.Server/Blazor.LocalStorage.Server.csproj - name: Build run: | dotnet build ./src/Blazor.SourceGenerators/Blazor.SourceGenerators.csproj --configuration Release --no-restore dotnet build ./src/Blazor.LocalStorage.WebAssembly/Blazor.LocalStorage.WebAssembly.csproj --configuration Release --no-restore - + dotnet build ./src/Blazor.LocalStorage.Server/Blazor.LocalStorage.Server.csproj --configuration Release --no-restore + - name: Test run: dotnet test @@ -45,19 +47,26 @@ jobs: run: | dotnet pack ./src/Blazor.SourceGenerators/Blazor.SourceGenerators.csproj --output packages dotnet pack ./src/Blazor.LocalStorage.WebAssembly/Blazor.LocalStorage.WebAssembly.csproj --output packages + dotnet pack ./src/Blazor.LocalStorage.Server/Blazor.LocalStorage.Server.csproj --output packages - name: Publish package run: | nuget push **\*.nupkg -Source 'https://api.nuget.org/v3/index.json' -NoSymbols -NonInteractive -ApiKey ${{secrets.NUGET_API_KEY}} - - name: Upload abstractions package + - name: Upload source generators package uses: actions/upload-artifact@v2 with: name: Blazor.SourceGenerators.${{ steps.regex-match.outputs.match }}.nupkg path: packages/ - - name: Upload client package + - name: Upload localStorage WebAssembly package uses: actions/upload-artifact@v2 with: name: Blazor.LocalStorage.WebAssembly.${{ steps.regex-match.outputs.match }}.nupkg path: packages/ + + - name: Upload localStorage Server package + uses: actions/upload-artifact@v2 + with: + name: Blazor.LocalStorage.Server.${{ steps.regex-match.outputs.match }}.nupkg + path: packages/ \ No newline at end of file diff --git a/blazorators.sln b/blazorators.sln index aa57585..3674951 100644 --- a/blazorators.sln +++ b/blazorators.sln @@ -28,6 +28,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor.ExampleConsumer", "s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor.LocalStorage.WebAssembly", "src\Blazor.LocalStorage.WebAssembly\Blazor.LocalStorage.WebAssembly.csproj", "{2F4EE253-7D56-4853-ADA7-4F2F6280C2D2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blazor.LocalStorage.Server", "src\Blazor.LocalStorage.Server\Blazor.LocalStorage.Server.csproj", "{9AA2BB50-9F1A-43D0-BB6B-C3C4E9765BE1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -50,6 +52,10 @@ Global {2F4EE253-7D56-4853-ADA7-4F2F6280C2D2}.Debug|Any CPU.Build.0 = Debug|Any CPU {2F4EE253-7D56-4853-ADA7-4F2F6280C2D2}.Release|Any CPU.ActiveCfg = Release|Any CPU {2F4EE253-7D56-4853-ADA7-4F2F6280C2D2}.Release|Any CPU.Build.0 = Release|Any CPU + {9AA2BB50-9F1A-43D0-BB6B-C3C4E9765BE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9AA2BB50-9F1A-43D0-BB6B-C3C4E9765BE1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9AA2BB50-9F1A-43D0-BB6B-C3C4E9765BE1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9AA2BB50-9F1A-43D0-BB6B-C3C4E9765BE1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -59,6 +65,7 @@ Global {A84D365E-4FC5-46DB-B25E-D1BB5D3A8C4A} = {A644CEC3-BD94-4EB6-9BF0-86B562806BF9} {72914F05-4DF1-491C-B2E5-EFE9BB12FCC2} = {91A35318-B03F-4D41-AE18-2C21B9D9C3F3} {2F4EE253-7D56-4853-ADA7-4F2F6280C2D2} = {537EB83C-6982-40B0-801A-479DF3B17DBE} + {9AA2BB50-9F1A-43D0-BB6B-C3C4E9765BE1} = {537EB83C-6982-40B0-801A-479DF3B17DBE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3F86284A-32D2-4F79-B23C-7A0CB8775971} diff --git a/src/Blazor.LocalStorage.Server/Blazor.LocalStorage.Server.csproj b/src/Blazor.LocalStorage.Server/Blazor.LocalStorage.Server.csproj new file mode 100644 index 0000000..f1291dc --- /dev/null +++ b/src/Blazor.LocalStorage.Server/Blazor.LocalStorage.Server.csproj @@ -0,0 +1,77 @@ + + + + net6.0 + enable + true + Source generated JavaScript interop for the browser's localStorage API compatible with Blazor Server. + Copyright © David Pine. All rights reserved. Licensed under the MIT License. + en-US + $([System.DateTime]::Now.ToString(yyyyMMdd)) + $(ClientOfficialVersion) + $(ClientPreviewVersion) + nightly-$(CurrentDate) + preview + $(ClientVersion) + $(ClientVersion)-$(VersionSuffix) + $(ClientVersion) + David Pine + true + Blazor.LocalStorage.Server + A C# source-generated class library implementation of the native browser's localStorage API available as IJSRuntime extension methods. + Blazor.LocalStorage.Server + dotnet;dotnetcore;csharp;blazor;generators;sourcegen;roslyn; + + https://github.com/IEvangelist/blazorators + true + true + false + true + AnyCPU + External + Product + embedded + false + false + Blazor.LocalStorage.Server + NU5125;NU5039 + true + https://github.com/IEvangelist/blazorators + LICENSE + git + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + true + README.md + true + logo.png + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + diff --git a/src/Blazor.LocalStorage.Server/LocalStorageExtensions.cs b/src/Blazor.LocalStorage.Server/LocalStorageExtensions.cs new file mode 100644 index 0000000..1c68c28 --- /dev/null +++ b/src/Blazor.LocalStorage.Server/LocalStorageExtensions.cs @@ -0,0 +1,17 @@ +// Copyright (c) David Pine. All rights reserved. +// Licensed under the MIT License. + +namespace Microsoft.JSInterop; + +/// +/// Source generated extension methods on the implementation. +/// +[JSAutoInterop( + TypeName = "Storage", + PathFromWindow = "window.localStorage", + HostingModel = BlazorHostingModel.Server, + OnlyGeneratePureJS = true, + Url = "https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage")] +public static partial class LocalStorageExtensions +{ +} diff --git a/src/Blazor.LocalStorage.WebAssembly/Blazor.LocalStorage.WebAssembly.csproj b/src/Blazor.LocalStorage.WebAssembly/Blazor.LocalStorage.WebAssembly.csproj index b5672ed..a505fae 100644 --- a/src/Blazor.LocalStorage.WebAssembly/Blazor.LocalStorage.WebAssembly.csproj +++ b/src/Blazor.LocalStorage.WebAssembly/Blazor.LocalStorage.WebAssembly.csproj @@ -4,7 +4,7 @@ net6.0 enable true - Source generated JavaScript interop for the browser's localStorage API compatibel with WebAssembly. + Source generated JavaScript interop for the browser's localStorage API compatible with Blazor WebAssembly. Copyright © David Pine. All rights reserved. Licensed under the MIT License. en-US $([System.DateTime]::Now.ToString(yyyyMMdd)) diff --git a/src/Blazor.LocalStorage.WebAssembly/ServiceCollectionExtensions.cs b/src/Blazor.LocalStorage.WebAssembly/ServiceCollectionExtensions.cs index 0838436..d6c6e57 100644 --- a/src/Blazor.LocalStorage.WebAssembly/ServiceCollectionExtensions.cs +++ b/src/Blazor.LocalStorage.WebAssembly/ServiceCollectionExtensions.cs @@ -15,7 +15,16 @@ public static class ServiceCollectionExtensions /// Adds the ability to either @inject /// (or [Inject]) the IJSInProcessRuntime type. /// + [Obsolete("Call AddInProcessJavaScript instead.")] public static IServiceCollection AddWebAssemblyLocalStorage( + this IServiceCollection services) => + services.AddInProcessJavaScript(); + + /// + /// Adds the ability to either @inject + /// (or [Inject]) the IJSInProcessRuntime type. + /// + public static IServiceCollection AddInProcessJavaScript( this IServiceCollection services) => services.AddScoped( serviceProvider => diff --git a/src/Blazor.SourceGenerators/CSharp/CSharpExtensionObject.cs b/src/Blazor.SourceGenerators/CSharp/CSharpExtensionObject.cs index bb5c697..982d7b0 100644 --- a/src/Blazor.SourceGenerators/CSharp/CSharpExtensionObject.cs +++ b/src/Blazor.SourceGenerators/CSharp/CSharpExtensionObject.cs @@ -218,6 +218,12 @@ static StringBuilder AppendTripleSlashComments( var jsMethodName = method.RawName.LowerCaseFirstLetter(); var func = $"{options.PathFromWindow}.{jsMethodName}"; + + // TODO: Bug, fix URL + // For example: + // https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage/getItem + // should be: + // https://developer.mozilla.org/en-US/docs/Web/API/Storage/getItem builder.Append($" /// Source generated extension method implementation of {func}.\r\n"); if (options.Url is { Length: > 0 } url) {