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)
{