├── .gitignore ├── AspNetMonsters.Blazor.Geolocation.sln ├── AspNetMonsters.Blazor.Geolocation ├── AspNetMonsters.Blazor.Geolocation.csproj ├── Location.cs ├── LocationService.cs ├── package-lock.json ├── package.json ├── src │ └── Location.ts ├── tsconfig.json └── wwwroot │ ├── Location.js │ └── Location.js.map ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # MSTest test Results 33 | [Tt]est[Rr]esult*/ 34 | [Bb]uild[Ll]og.* 35 | 36 | # NUNIT 37 | *.VisualState.xml 38 | TestResult.xml 39 | 40 | # Build Results of an ATL Project 41 | [Dd]ebugPS/ 42 | [Rr]eleasePS/ 43 | dlldata.c 44 | 45 | # .NET Core 46 | project.lock.json 47 | project.fragment.lock.json 48 | artifacts/ 49 | **/Properties/launchSettings.json 50 | 51 | *_i.c 52 | *_p.c 53 | *_i.h 54 | *.ilk 55 | *.meta 56 | *.obj 57 | *.pch 58 | *.pdb 59 | *.pgc 60 | *.pgd 61 | *.rsp 62 | *.sbr 63 | *.tlb 64 | *.tli 65 | *.tlh 66 | *.tmp 67 | *.tmp_proj 68 | *.log 69 | *.vspscc 70 | *.vssscc 71 | .builds 72 | *.pidb 73 | *.svclog 74 | *.scc 75 | 76 | # Chutzpah Test files 77 | _Chutzpah* 78 | 79 | # Visual C++ cache files 80 | ipch/ 81 | *.aps 82 | *.ncb 83 | *.opendb 84 | *.opensdf 85 | *.sdf 86 | *.cachefile 87 | *.VC.db 88 | *.VC.VC.opendb 89 | 90 | # Visual Studio profiler 91 | *.psess 92 | *.vsp 93 | *.vspx 94 | *.sap 95 | 96 | # TFS 2012 Local Workspace 97 | $tf/ 98 | 99 | # Guidance Automation Toolkit 100 | *.gpState 101 | 102 | # ReSharper is a .NET coding add-in 103 | _ReSharper*/ 104 | *.[Rr]e[Ss]harper 105 | *.DotSettings.user 106 | 107 | # JustCode is a .NET coding add-in 108 | .JustCode 109 | 110 | # TeamCity is a build add-in 111 | _TeamCity* 112 | 113 | # DotCover is a Code Coverage Tool 114 | *.dotCover 115 | 116 | # Visual Studio code coverage results 117 | *.coverage 118 | *.coveragexml 119 | 120 | # NCrunch 121 | _NCrunch_* 122 | .*crunch*.local.xml 123 | nCrunchTemp_* 124 | 125 | # MightyMoose 126 | *.mm.* 127 | AutoTest.Net/ 128 | 129 | # Web workbench (sass) 130 | .sass-cache/ 131 | 132 | # Installshield output folder 133 | [Ee]xpress/ 134 | 135 | # DocProject is a documentation generator add-in 136 | DocProject/buildhelp/ 137 | DocProject/Help/*.HxT 138 | DocProject/Help/*.HxC 139 | DocProject/Help/*.hhc 140 | DocProject/Help/*.hhk 141 | DocProject/Help/*.hhp 142 | DocProject/Help/Html2 143 | DocProject/Help/html 144 | 145 | # Click-Once directory 146 | publish/ 147 | 148 | # Publish Web Output 149 | *.[Pp]ublish.xml 150 | *.azurePubxml 151 | # TODO: Comment the next line if you want to checkin your web deploy settings 152 | # but database connection strings (with potential passwords) will be unencrypted 153 | *.pubxml 154 | *.publishproj 155 | 156 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 157 | # checkin your Azure Web App publish settings, but sensitive information contained 158 | # in these scripts will be unencrypted 159 | PublishScripts/ 160 | 161 | # NuGet Packages 162 | *.nupkg 163 | # The packages folder can be ignored because of Package Restore 164 | **/packages/* 165 | # except build/, which is used as an MSBuild target. 166 | !**/packages/build/ 167 | # Uncomment if necessary however generally it will be regenerated when needed 168 | #!**/packages/repositories.config 169 | # NuGet v3's project.json files produces more ignorable files 170 | *.nuget.props 171 | *.nuget.targets 172 | 173 | # Microsoft Azure Build Output 174 | csx/ 175 | *.build.csdef 176 | 177 | # Microsoft Azure Emulator 178 | ecf/ 179 | rcf/ 180 | 181 | # Windows Store app package directories and files 182 | AppPackages/ 183 | BundleArtifacts/ 184 | Package.StoreAssociation.xml 185 | _pkginfo.txt 186 | 187 | # Visual Studio cache files 188 | # files ending in .cache can be ignored 189 | *.[Cc]ache 190 | # but keep track of directories ending in .cache 191 | !*.[Cc]ache/ 192 | 193 | # Others 194 | ClientBin/ 195 | ~$* 196 | *~ 197 | *.dbmdl 198 | *.dbproj.schemaview 199 | *.jfm 200 | *.pfx 201 | *.publishsettings 202 | orleans.codegen.cs 203 | 204 | # Since there are multiple workflows, uncomment next line to ignore bower_components 205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 206 | #bower_components/ 207 | 208 | # RIA/Silverlight projects 209 | Generated_Code/ 210 | 211 | # Backup & report files from converting an old project file 212 | # to a newer Visual Studio version. Backup files are not needed, 213 | # because we have git ;-) 214 | _UpgradeReport_Files/ 215 | Backup*/ 216 | UpgradeLog*.XML 217 | UpgradeLog*.htm 218 | 219 | # SQL Server files 220 | *.mdf 221 | *.ldf 222 | *.ndf 223 | 224 | # Business Intelligence projects 225 | *.rdl.data 226 | *.bim.layout 227 | *.bim_*.settings 228 | 229 | # Microsoft Fakes 230 | FakesAssemblies/ 231 | 232 | # GhostDoc plugin setting file 233 | *.GhostDoc.xml 234 | 235 | # Node.js Tools for Visual Studio 236 | .ntvs_analysis.dat 237 | node_modules/ 238 | 239 | # Typescript v1 declaration files 240 | typings/ 241 | 242 | # Visual Studio 6 build log 243 | *.plg 244 | 245 | # Visual Studio 6 workspace options file 246 | *.opt 247 | 248 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 249 | *.vbw 250 | 251 | # Visual Studio LightSwitch build output 252 | **/*.HTMLClient/GeneratedArtifacts 253 | **/*.DesktopClient/GeneratedArtifacts 254 | **/*.DesktopClient/ModelManifest.xml 255 | **/*.Server/GeneratedArtifacts 256 | **/*.Server/ModelManifest.xml 257 | _Pvt_Extensions 258 | 259 | # Paket dependency manager 260 | .paket/paket.exe 261 | paket-files/ 262 | 263 | # FAKE - F# Make 264 | .fake/ 265 | 266 | # JetBrains Rider 267 | .idea/ 268 | *.sln.iml 269 | 270 | # CodeRush 271 | .cr/ 272 | 273 | # Python Tools for Visual Studio (PTVS) 274 | __pycache__/ 275 | *.pyc 276 | 277 | # Cake - Uncomment if you are using it 278 | # tools/** 279 | # !tools/packages.config 280 | 281 | # Telerik's JustMock configuration file 282 | *.jmconfig 283 | 284 | # BizTalk build output 285 | *.btp.cs 286 | *.btm.cs 287 | *.odx.cs 288 | *.xsd.cs 289 | -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29311.281 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AspNetMonsters.Blazor.Geolocation", "AspNetMonsters.Blazor.Geolocation\AspNetMonsters.Blazor.Geolocation.csproj", "{E0DEC7CC-B1B4-4249-BD4A-6C45563FAD43}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {E0DEC7CC-B1B4-4249-BD4A-6C45563FAD43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {E0DEC7CC-B1B4-4249-BD4A-6C45563FAD43}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {E0DEC7CC-B1B4-4249-BD4A-6C45563FAD43}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {E0DEC7CC-B1B4-4249-BD4A-6C45563FAD43}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {356205F6-DA25-420F-8C7A-A4D9C8973C6B} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/AspNetMonsters.Blazor.Geolocation.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netstandard2.1 5 | 3.0 6 | 7 | https://github.com/AspNetMonsters/Blazor.Geolocation 8 | https://github.com/AspNetMonsters/Blazor.Geolocation/blob/master/LICENSE 9 | Simon Timms, David Paquette, James Chambers 10 | Blazor interop for the browser's Geolocation apis 11 | https://github.com/AspNetMonsters/Blazor.Geolocation 12 | Blazor Geolocation 13 | true 14 | AspNetMonsters.Blazor.Geolocation 15 | AspNetMonsters.Blazor.Geolocation 16 | 0.5.0-preview1 17 | 18 | ${DefaultItemExcludes};node_modules\** 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/Location.cs: -------------------------------------------------------------------------------- 1 | namespace AspNetMonsters.Blazor.Geolocation 2 | { 3 | public class Location 4 | { 5 | public decimal Latitude { get; set; } 6 | public decimal Longitude { get; set; } 7 | public decimal Accuracy { get; set; } 8 | 9 | public override string ToString() 10 | { 11 | return $"Location: ({Latitude}, {Longitude}) with accuracy {Accuracy}"; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/LocationService.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.JSInterop; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace AspNetMonsters.Blazor.Geolocation 8 | { 9 | public class LocationService 10 | { 11 | static IDictionary> _pendingRequests = new Dictionary>(); 12 | static IDictionary> _watches = new Dictionary>(); 13 | private readonly IJSRuntime jSRuntime; 14 | 15 | public LocationService(IJSRuntime jSRuntime) 16 | { 17 | this.jSRuntime = jSRuntime; 18 | } 19 | 20 | public async Task GetLocationAsync() 21 | { 22 | var tcs = new TaskCompletionSource(); 23 | var requestId = Guid.NewGuid(); 24 | 25 | _pendingRequests.Add(requestId, tcs); 26 | var result = await jSRuntime.InvokeAsync("AspNetMonsters.Blazor.Geolocation.GetLocation", requestId); 27 | 28 | return await tcs.Task; 29 | } 30 | 31 | public async Task WatchLocation(Action watchCallback) 32 | { 33 | var requestId = Guid.NewGuid(); 34 | _watches.Add(requestId, watchCallback); 35 | await jSRuntime.InvokeAsync("AspNetMonsters.Blazor.Geolocation.WatchLocation", requestId); 36 | } 37 | 38 | [JSInvokable] 39 | public static void ReceiveResponse( 40 | string id, 41 | double latitude, 42 | double longitude, 43 | double accuracy) 44 | { 45 | TaskCompletionSource pendingTask; 46 | var idVal = Guid.Parse(id); 47 | pendingTask = _pendingRequests.First(x => x.Key == idVal).Value; 48 | pendingTask.SetResult(new Location 49 | { 50 | Latitude = Convert.ToDecimal(latitude), 51 | Longitude = Convert.ToDecimal(longitude), 52 | Accuracy = Convert.ToDecimal(accuracy) 53 | }); 54 | } 55 | 56 | [JSInvokable] 57 | public static void ReceiveWatchResponse( 58 | string id, 59 | double latitude, 60 | double longitude, 61 | double accuracy) 62 | { 63 | Action callback; 64 | var idVal = Guid.Parse(id); 65 | callback = _watches[idVal]; 66 | callback(new Location 67 | { 68 | Latitude = Convert.ToDecimal(latitude), 69 | Longitude = Convert.ToDecimal(longitude), 70 | Accuracy = Convert.ToDecimal(accuracy) 71 | }); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aspnetmonsters-blazorgeolocation", 3 | "version": "0.4.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/emscripten": { 8 | "version": "0.0.31", 9 | "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-0.0.31.tgz", 10 | "integrity": "sha1-FggX0TJOi3BJYE05rEfYXu7t1Zc=", 11 | "dev": true, 12 | "requires": { 13 | "@types/webassembly-js-api": "*" 14 | } 15 | }, 16 | "@types/webassembly-js-api": { 17 | "version": "0.0.2", 18 | "resolved": "https://registry.npmjs.org/@types/webassembly-js-api/-/webassembly-js-api-0.0.2.tgz", 19 | "integrity": "sha1-Q6BL11+iAzITPGw5hhVr/rSjztc=", 20 | "dev": true 21 | }, 22 | "ansi-styles": { 23 | "version": "3.2.1", 24 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 25 | "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", 26 | "dev": true, 27 | "requires": { 28 | "color-convert": "^1.9.0" 29 | } 30 | }, 31 | "arr-diff": { 32 | "version": "4.0.0", 33 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 34 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", 35 | "dev": true 36 | }, 37 | "arr-flatten": { 38 | "version": "1.1.0", 39 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 40 | "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", 41 | "dev": true 42 | }, 43 | "arr-union": { 44 | "version": "3.1.0", 45 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 46 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", 47 | "dev": true 48 | }, 49 | "array-unique": { 50 | "version": "0.3.2", 51 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 52 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", 53 | "dev": true 54 | }, 55 | "assign-symbols": { 56 | "version": "1.0.0", 57 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 58 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", 59 | "dev": true 60 | }, 61 | "atob": { 62 | "version": "2.1.2", 63 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 64 | "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", 65 | "dev": true 66 | }, 67 | "base": { 68 | "version": "0.11.2", 69 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 70 | "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", 71 | "dev": true, 72 | "requires": { 73 | "cache-base": "^1.0.1", 74 | "class-utils": "^0.3.5", 75 | "component-emitter": "^1.2.1", 76 | "define-property": "^1.0.0", 77 | "isobject": "^3.0.1", 78 | "mixin-deep": "^1.2.0", 79 | "pascalcase": "^0.1.1" 80 | }, 81 | "dependencies": { 82 | "define-property": { 83 | "version": "1.0.0", 84 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 85 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 86 | "dev": true, 87 | "requires": { 88 | "is-descriptor": "^1.0.0" 89 | } 90 | }, 91 | "is-accessor-descriptor": { 92 | "version": "1.0.0", 93 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 94 | "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", 95 | "dev": true, 96 | "requires": { 97 | "kind-of": "^6.0.0" 98 | } 99 | }, 100 | "is-data-descriptor": { 101 | "version": "1.0.0", 102 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 103 | "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", 104 | "dev": true, 105 | "requires": { 106 | "kind-of": "^6.0.0" 107 | } 108 | }, 109 | "is-descriptor": { 110 | "version": "1.0.2", 111 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 112 | "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", 113 | "dev": true, 114 | "requires": { 115 | "is-accessor-descriptor": "^1.0.0", 116 | "is-data-descriptor": "^1.0.0", 117 | "kind-of": "^6.0.2" 118 | } 119 | } 120 | } 121 | }, 122 | "big.js": { 123 | "version": "3.2.0", 124 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", 125 | "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", 126 | "dev": true 127 | }, 128 | "braces": { 129 | "version": "2.3.2", 130 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 131 | "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", 132 | "dev": true, 133 | "requires": { 134 | "arr-flatten": "^1.1.0", 135 | "array-unique": "^0.3.2", 136 | "extend-shallow": "^2.0.1", 137 | "fill-range": "^4.0.0", 138 | "isobject": "^3.0.1", 139 | "repeat-element": "^1.1.2", 140 | "snapdragon": "^0.8.1", 141 | "snapdragon-node": "^2.0.1", 142 | "split-string": "^3.0.2", 143 | "to-regex": "^3.0.1" 144 | }, 145 | "dependencies": { 146 | "extend-shallow": { 147 | "version": "2.0.1", 148 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 149 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 150 | "dev": true, 151 | "requires": { 152 | "is-extendable": "^0.1.0" 153 | } 154 | } 155 | } 156 | }, 157 | "cache-base": { 158 | "version": "1.0.1", 159 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 160 | "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", 161 | "dev": true, 162 | "requires": { 163 | "collection-visit": "^1.0.0", 164 | "component-emitter": "^1.2.1", 165 | "get-value": "^2.0.6", 166 | "has-value": "^1.0.0", 167 | "isobject": "^3.0.1", 168 | "set-value": "^2.0.0", 169 | "to-object-path": "^0.3.0", 170 | "union-value": "^1.0.0", 171 | "unset-value": "^1.0.0" 172 | } 173 | }, 174 | "chalk": { 175 | "version": "2.4.1", 176 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 177 | "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", 178 | "dev": true, 179 | "requires": { 180 | "ansi-styles": "^3.2.1", 181 | "escape-string-regexp": "^1.0.5", 182 | "supports-color": "^5.3.0" 183 | } 184 | }, 185 | "class-utils": { 186 | "version": "0.3.6", 187 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 188 | "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", 189 | "dev": true, 190 | "requires": { 191 | "arr-union": "^3.1.0", 192 | "define-property": "^0.2.5", 193 | "isobject": "^3.0.0", 194 | "static-extend": "^0.1.1" 195 | }, 196 | "dependencies": { 197 | "define-property": { 198 | "version": "0.2.5", 199 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 200 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 201 | "dev": true, 202 | "requires": { 203 | "is-descriptor": "^0.1.0" 204 | } 205 | } 206 | } 207 | }, 208 | "collection-visit": { 209 | "version": "1.0.0", 210 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 211 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 212 | "dev": true, 213 | "requires": { 214 | "map-visit": "^1.0.0", 215 | "object-visit": "^1.0.0" 216 | } 217 | }, 218 | "color-convert": { 219 | "version": "1.9.3", 220 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 221 | "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", 222 | "dev": true, 223 | "requires": { 224 | "color-name": "1.1.3" 225 | } 226 | }, 227 | "color-name": { 228 | "version": "1.1.3", 229 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 230 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 231 | "dev": true 232 | }, 233 | "component-emitter": { 234 | "version": "1.2.1", 235 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 236 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 237 | "dev": true 238 | }, 239 | "copy-descriptor": { 240 | "version": "0.1.1", 241 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 242 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", 243 | "dev": true 244 | }, 245 | "core-util-is": { 246 | "version": "1.0.2", 247 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 248 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 249 | "dev": true 250 | }, 251 | "debug": { 252 | "version": "2.6.9", 253 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 254 | "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", 255 | "dev": true, 256 | "requires": { 257 | "ms": "2.0.0" 258 | } 259 | }, 260 | "decode-uri-component": { 261 | "version": "0.2.0", 262 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 263 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", 264 | "dev": true 265 | }, 266 | "define-property": { 267 | "version": "2.0.2", 268 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 269 | "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", 270 | "dev": true, 271 | "requires": { 272 | "is-descriptor": "^1.0.2", 273 | "isobject": "^3.0.1" 274 | }, 275 | "dependencies": { 276 | "is-accessor-descriptor": { 277 | "version": "1.0.0", 278 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 279 | "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", 280 | "dev": true, 281 | "requires": { 282 | "kind-of": "^6.0.0" 283 | } 284 | }, 285 | "is-data-descriptor": { 286 | "version": "1.0.0", 287 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 288 | "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", 289 | "dev": true, 290 | "requires": { 291 | "kind-of": "^6.0.0" 292 | } 293 | }, 294 | "is-descriptor": { 295 | "version": "1.0.2", 296 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 297 | "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", 298 | "dev": true, 299 | "requires": { 300 | "is-accessor-descriptor": "^1.0.0", 301 | "is-data-descriptor": "^1.0.0", 302 | "kind-of": "^6.0.2" 303 | } 304 | } 305 | } 306 | }, 307 | "emojis-list": { 308 | "version": "2.1.0", 309 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", 310 | "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", 311 | "dev": true 312 | }, 313 | "enhanced-resolve": { 314 | "version": "3.4.1", 315 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", 316 | "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", 317 | "dev": true, 318 | "requires": { 319 | "graceful-fs": "^4.1.2", 320 | "memory-fs": "^0.4.0", 321 | "object-assign": "^4.0.1", 322 | "tapable": "^0.2.7" 323 | } 324 | }, 325 | "errno": { 326 | "version": "0.1.7", 327 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", 328 | "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", 329 | "dev": true, 330 | "requires": { 331 | "prr": "~1.0.1" 332 | } 333 | }, 334 | "escape-string-regexp": { 335 | "version": "1.0.5", 336 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 337 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 338 | "dev": true 339 | }, 340 | "expand-brackets": { 341 | "version": "2.1.4", 342 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 343 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 344 | "dev": true, 345 | "requires": { 346 | "debug": "^2.3.3", 347 | "define-property": "^0.2.5", 348 | "extend-shallow": "^2.0.1", 349 | "posix-character-classes": "^0.1.0", 350 | "regex-not": "^1.0.0", 351 | "snapdragon": "^0.8.1", 352 | "to-regex": "^3.0.1" 353 | }, 354 | "dependencies": { 355 | "define-property": { 356 | "version": "0.2.5", 357 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 358 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 359 | "dev": true, 360 | "requires": { 361 | "is-descriptor": "^0.1.0" 362 | } 363 | }, 364 | "extend-shallow": { 365 | "version": "2.0.1", 366 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 367 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 368 | "dev": true, 369 | "requires": { 370 | "is-extendable": "^0.1.0" 371 | } 372 | } 373 | } 374 | }, 375 | "extend-shallow": { 376 | "version": "3.0.2", 377 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 378 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 379 | "dev": true, 380 | "requires": { 381 | "assign-symbols": "^1.0.0", 382 | "is-extendable": "^1.0.1" 383 | }, 384 | "dependencies": { 385 | "is-extendable": { 386 | "version": "1.0.1", 387 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 388 | "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", 389 | "dev": true, 390 | "requires": { 391 | "is-plain-object": "^2.0.4" 392 | } 393 | } 394 | } 395 | }, 396 | "extglob": { 397 | "version": "2.0.4", 398 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 399 | "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", 400 | "dev": true, 401 | "requires": { 402 | "array-unique": "^0.3.2", 403 | "define-property": "^1.0.0", 404 | "expand-brackets": "^2.1.4", 405 | "extend-shallow": "^2.0.1", 406 | "fragment-cache": "^0.2.1", 407 | "regex-not": "^1.0.0", 408 | "snapdragon": "^0.8.1", 409 | "to-regex": "^3.0.1" 410 | }, 411 | "dependencies": { 412 | "define-property": { 413 | "version": "1.0.0", 414 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 415 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 416 | "dev": true, 417 | "requires": { 418 | "is-descriptor": "^1.0.0" 419 | } 420 | }, 421 | "extend-shallow": { 422 | "version": "2.0.1", 423 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 424 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 425 | "dev": true, 426 | "requires": { 427 | "is-extendable": "^0.1.0" 428 | } 429 | }, 430 | "is-accessor-descriptor": { 431 | "version": "1.0.0", 432 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 433 | "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", 434 | "dev": true, 435 | "requires": { 436 | "kind-of": "^6.0.0" 437 | } 438 | }, 439 | "is-data-descriptor": { 440 | "version": "1.0.0", 441 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 442 | "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", 443 | "dev": true, 444 | "requires": { 445 | "kind-of": "^6.0.0" 446 | } 447 | }, 448 | "is-descriptor": { 449 | "version": "1.0.2", 450 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 451 | "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", 452 | "dev": true, 453 | "requires": { 454 | "is-accessor-descriptor": "^1.0.0", 455 | "is-data-descriptor": "^1.0.0", 456 | "kind-of": "^6.0.2" 457 | } 458 | } 459 | } 460 | }, 461 | "fill-range": { 462 | "version": "4.0.0", 463 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 464 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 465 | "dev": true, 466 | "requires": { 467 | "extend-shallow": "^2.0.1", 468 | "is-number": "^3.0.0", 469 | "repeat-string": "^1.6.1", 470 | "to-regex-range": "^2.1.0" 471 | }, 472 | "dependencies": { 473 | "extend-shallow": { 474 | "version": "2.0.1", 475 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 476 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 477 | "dev": true, 478 | "requires": { 479 | "is-extendable": "^0.1.0" 480 | } 481 | } 482 | } 483 | }, 484 | "for-in": { 485 | "version": "1.0.2", 486 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 487 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 488 | "dev": true 489 | }, 490 | "fragment-cache": { 491 | "version": "0.2.1", 492 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 493 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 494 | "dev": true, 495 | "requires": { 496 | "map-cache": "^0.2.2" 497 | } 498 | }, 499 | "get-value": { 500 | "version": "2.0.6", 501 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 502 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", 503 | "dev": true 504 | }, 505 | "graceful-fs": { 506 | "version": "4.1.15", 507 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 508 | "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=", 509 | "dev": true 510 | }, 511 | "has-flag": { 512 | "version": "3.0.0", 513 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 514 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 515 | "dev": true 516 | }, 517 | "has-value": { 518 | "version": "1.0.0", 519 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 520 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 521 | "dev": true, 522 | "requires": { 523 | "get-value": "^2.0.6", 524 | "has-values": "^1.0.0", 525 | "isobject": "^3.0.0" 526 | } 527 | }, 528 | "has-values": { 529 | "version": "1.0.0", 530 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 531 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 532 | "dev": true, 533 | "requires": { 534 | "is-number": "^3.0.0", 535 | "kind-of": "^4.0.0" 536 | }, 537 | "dependencies": { 538 | "kind-of": { 539 | "version": "4.0.0", 540 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 541 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 542 | "dev": true, 543 | "requires": { 544 | "is-buffer": "^1.1.5" 545 | } 546 | } 547 | } 548 | }, 549 | "inherits": { 550 | "version": "2.0.3", 551 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 552 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 553 | "dev": true 554 | }, 555 | "is-accessor-descriptor": { 556 | "version": "0.1.6", 557 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 558 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 559 | "dev": true, 560 | "requires": { 561 | "kind-of": "^3.0.2" 562 | }, 563 | "dependencies": { 564 | "kind-of": { 565 | "version": "3.2.2", 566 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 567 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 568 | "dev": true, 569 | "requires": { 570 | "is-buffer": "^1.1.5" 571 | } 572 | } 573 | } 574 | }, 575 | "is-buffer": { 576 | "version": "1.1.6", 577 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 578 | "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", 579 | "dev": true 580 | }, 581 | "is-data-descriptor": { 582 | "version": "0.1.4", 583 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 584 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 585 | "dev": true, 586 | "requires": { 587 | "kind-of": "^3.0.2" 588 | }, 589 | "dependencies": { 590 | "kind-of": { 591 | "version": "3.2.2", 592 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 593 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 594 | "dev": true, 595 | "requires": { 596 | "is-buffer": "^1.1.5" 597 | } 598 | } 599 | } 600 | }, 601 | "is-descriptor": { 602 | "version": "0.1.6", 603 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 604 | "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", 605 | "dev": true, 606 | "requires": { 607 | "is-accessor-descriptor": "^0.1.6", 608 | "is-data-descriptor": "^0.1.4", 609 | "kind-of": "^5.0.0" 610 | }, 611 | "dependencies": { 612 | "kind-of": { 613 | "version": "5.1.0", 614 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 615 | "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", 616 | "dev": true 617 | } 618 | } 619 | }, 620 | "is-extendable": { 621 | "version": "0.1.1", 622 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 623 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 624 | "dev": true 625 | }, 626 | "is-number": { 627 | "version": "3.0.0", 628 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 629 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 630 | "dev": true, 631 | "requires": { 632 | "kind-of": "^3.0.2" 633 | }, 634 | "dependencies": { 635 | "kind-of": { 636 | "version": "3.2.2", 637 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 638 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 639 | "dev": true, 640 | "requires": { 641 | "is-buffer": "^1.1.5" 642 | } 643 | } 644 | } 645 | }, 646 | "is-plain-object": { 647 | "version": "2.0.4", 648 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 649 | "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", 650 | "dev": true, 651 | "requires": { 652 | "isobject": "^3.0.1" 653 | } 654 | }, 655 | "is-windows": { 656 | "version": "1.0.2", 657 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 658 | "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", 659 | "dev": true 660 | }, 661 | "isarray": { 662 | "version": "1.0.0", 663 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 664 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 665 | "dev": true 666 | }, 667 | "isobject": { 668 | "version": "3.0.1", 669 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 670 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 671 | "dev": true 672 | }, 673 | "json5": { 674 | "version": "0.5.1", 675 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 676 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", 677 | "dev": true 678 | }, 679 | "kind-of": { 680 | "version": "6.0.2", 681 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 682 | "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", 683 | "dev": true 684 | }, 685 | "loader-utils": { 686 | "version": "1.1.0", 687 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 688 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", 689 | "dev": true, 690 | "requires": { 691 | "big.js": "^3.1.3", 692 | "emojis-list": "^2.0.0", 693 | "json5": "^0.5.0" 694 | } 695 | }, 696 | "map-cache": { 697 | "version": "0.2.2", 698 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 699 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 700 | "dev": true 701 | }, 702 | "map-visit": { 703 | "version": "1.0.0", 704 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 705 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 706 | "dev": true, 707 | "requires": { 708 | "object-visit": "^1.0.0" 709 | } 710 | }, 711 | "memory-fs": { 712 | "version": "0.4.1", 713 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", 714 | "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", 715 | "dev": true, 716 | "requires": { 717 | "errno": "^0.1.3", 718 | "readable-stream": "^2.0.1" 719 | } 720 | }, 721 | "micromatch": { 722 | "version": "3.1.10", 723 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 724 | "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", 725 | "dev": true, 726 | "requires": { 727 | "arr-diff": "^4.0.0", 728 | "array-unique": "^0.3.2", 729 | "braces": "^2.3.1", 730 | "define-property": "^2.0.2", 731 | "extend-shallow": "^3.0.2", 732 | "extglob": "^2.0.4", 733 | "fragment-cache": "^0.2.1", 734 | "kind-of": "^6.0.2", 735 | "nanomatch": "^1.2.9", 736 | "object.pick": "^1.3.0", 737 | "regex-not": "^1.0.0", 738 | "snapdragon": "^0.8.1", 739 | "to-regex": "^3.0.2" 740 | } 741 | }, 742 | "mixin-deep": { 743 | "version": "1.3.1", 744 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", 745 | "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", 746 | "dev": true, 747 | "requires": { 748 | "for-in": "^1.0.2", 749 | "is-extendable": "^1.0.1" 750 | }, 751 | "dependencies": { 752 | "is-extendable": { 753 | "version": "1.0.1", 754 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 755 | "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", 756 | "dev": true, 757 | "requires": { 758 | "is-plain-object": "^2.0.4" 759 | } 760 | } 761 | } 762 | }, 763 | "ms": { 764 | "version": "2.0.0", 765 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 766 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 767 | "dev": true 768 | }, 769 | "nanomatch": { 770 | "version": "1.2.13", 771 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 772 | "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", 773 | "dev": true, 774 | "requires": { 775 | "arr-diff": "^4.0.0", 776 | "array-unique": "^0.3.2", 777 | "define-property": "^2.0.2", 778 | "extend-shallow": "^3.0.2", 779 | "fragment-cache": "^0.2.1", 780 | "is-windows": "^1.0.2", 781 | "kind-of": "^6.0.2", 782 | "object.pick": "^1.3.0", 783 | "regex-not": "^1.0.0", 784 | "snapdragon": "^0.8.1", 785 | "to-regex": "^3.0.1" 786 | } 787 | }, 788 | "object-assign": { 789 | "version": "4.1.1", 790 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 791 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 792 | "dev": true 793 | }, 794 | "object-copy": { 795 | "version": "0.1.0", 796 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 797 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 798 | "dev": true, 799 | "requires": { 800 | "copy-descriptor": "^0.1.0", 801 | "define-property": "^0.2.5", 802 | "kind-of": "^3.0.3" 803 | }, 804 | "dependencies": { 805 | "define-property": { 806 | "version": "0.2.5", 807 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 808 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 809 | "dev": true, 810 | "requires": { 811 | "is-descriptor": "^0.1.0" 812 | } 813 | }, 814 | "kind-of": { 815 | "version": "3.2.2", 816 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 817 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 818 | "dev": true, 819 | "requires": { 820 | "is-buffer": "^1.1.5" 821 | } 822 | } 823 | } 824 | }, 825 | "object-visit": { 826 | "version": "1.0.1", 827 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 828 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 829 | "dev": true, 830 | "requires": { 831 | "isobject": "^3.0.0" 832 | } 833 | }, 834 | "object.pick": { 835 | "version": "1.3.0", 836 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 837 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 838 | "dev": true, 839 | "requires": { 840 | "isobject": "^3.0.1" 841 | } 842 | }, 843 | "pascalcase": { 844 | "version": "0.1.1", 845 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 846 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", 847 | "dev": true 848 | }, 849 | "posix-character-classes": { 850 | "version": "0.1.1", 851 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 852 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", 853 | "dev": true 854 | }, 855 | "process-nextick-args": { 856 | "version": "2.0.0", 857 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 858 | "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", 859 | "dev": true 860 | }, 861 | "prr": { 862 | "version": "1.0.1", 863 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 864 | "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", 865 | "dev": true 866 | }, 867 | "readable-stream": { 868 | "version": "2.3.6", 869 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 870 | "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", 871 | "dev": true, 872 | "requires": { 873 | "core-util-is": "~1.0.0", 874 | "inherits": "~2.0.3", 875 | "isarray": "~1.0.0", 876 | "process-nextick-args": "~2.0.0", 877 | "safe-buffer": "~5.1.1", 878 | "string_decoder": "~1.1.1", 879 | "util-deprecate": "~1.0.1" 880 | } 881 | }, 882 | "regex-not": { 883 | "version": "1.0.2", 884 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 885 | "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", 886 | "dev": true, 887 | "requires": { 888 | "extend-shallow": "^3.0.2", 889 | "safe-regex": "^1.1.0" 890 | } 891 | }, 892 | "repeat-element": { 893 | "version": "1.1.3", 894 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 895 | "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", 896 | "dev": true 897 | }, 898 | "repeat-string": { 899 | "version": "1.6.1", 900 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 901 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 902 | "dev": true 903 | }, 904 | "resolve-url": { 905 | "version": "0.2.1", 906 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 907 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", 908 | "dev": true 909 | }, 910 | "ret": { 911 | "version": "0.1.15", 912 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 913 | "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", 914 | "dev": true 915 | }, 916 | "safe-buffer": { 917 | "version": "5.1.2", 918 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 919 | "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", 920 | "dev": true 921 | }, 922 | "safe-regex": { 923 | "version": "1.1.0", 924 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 925 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 926 | "dev": true, 927 | "requires": { 928 | "ret": "~0.1.10" 929 | } 930 | }, 931 | "semver": { 932 | "version": "5.6.0", 933 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 934 | "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=", 935 | "dev": true 936 | }, 937 | "set-value": { 938 | "version": "2.0.0", 939 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", 940 | "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", 941 | "dev": true, 942 | "requires": { 943 | "extend-shallow": "^2.0.1", 944 | "is-extendable": "^0.1.1", 945 | "is-plain-object": "^2.0.3", 946 | "split-string": "^3.0.1" 947 | }, 948 | "dependencies": { 949 | "extend-shallow": { 950 | "version": "2.0.1", 951 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 952 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 953 | "dev": true, 954 | "requires": { 955 | "is-extendable": "^0.1.0" 956 | } 957 | } 958 | } 959 | }, 960 | "snapdragon": { 961 | "version": "0.8.2", 962 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 963 | "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", 964 | "dev": true, 965 | "requires": { 966 | "base": "^0.11.1", 967 | "debug": "^2.2.0", 968 | "define-property": "^0.2.5", 969 | "extend-shallow": "^2.0.1", 970 | "map-cache": "^0.2.2", 971 | "source-map": "^0.5.6", 972 | "source-map-resolve": "^0.5.0", 973 | "use": "^3.1.0" 974 | }, 975 | "dependencies": { 976 | "define-property": { 977 | "version": "0.2.5", 978 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 979 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 980 | "dev": true, 981 | "requires": { 982 | "is-descriptor": "^0.1.0" 983 | } 984 | }, 985 | "extend-shallow": { 986 | "version": "2.0.1", 987 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 988 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 989 | "dev": true, 990 | "requires": { 991 | "is-extendable": "^0.1.0" 992 | } 993 | } 994 | } 995 | }, 996 | "snapdragon-node": { 997 | "version": "2.1.1", 998 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 999 | "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", 1000 | "dev": true, 1001 | "requires": { 1002 | "define-property": "^1.0.0", 1003 | "isobject": "^3.0.0", 1004 | "snapdragon-util": "^3.0.1" 1005 | }, 1006 | "dependencies": { 1007 | "define-property": { 1008 | "version": "1.0.0", 1009 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 1010 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 1011 | "dev": true, 1012 | "requires": { 1013 | "is-descriptor": "^1.0.0" 1014 | } 1015 | }, 1016 | "is-accessor-descriptor": { 1017 | "version": "1.0.0", 1018 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1019 | "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", 1020 | "dev": true, 1021 | "requires": { 1022 | "kind-of": "^6.0.0" 1023 | } 1024 | }, 1025 | "is-data-descriptor": { 1026 | "version": "1.0.0", 1027 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1028 | "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", 1029 | "dev": true, 1030 | "requires": { 1031 | "kind-of": "^6.0.0" 1032 | } 1033 | }, 1034 | "is-descriptor": { 1035 | "version": "1.0.2", 1036 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1037 | "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", 1038 | "dev": true, 1039 | "requires": { 1040 | "is-accessor-descriptor": "^1.0.0", 1041 | "is-data-descriptor": "^1.0.0", 1042 | "kind-of": "^6.0.2" 1043 | } 1044 | } 1045 | } 1046 | }, 1047 | "snapdragon-util": { 1048 | "version": "3.0.1", 1049 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 1050 | "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", 1051 | "dev": true, 1052 | "requires": { 1053 | "kind-of": "^3.2.0" 1054 | }, 1055 | "dependencies": { 1056 | "kind-of": { 1057 | "version": "3.2.2", 1058 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1059 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1060 | "dev": true, 1061 | "requires": { 1062 | "is-buffer": "^1.1.5" 1063 | } 1064 | } 1065 | } 1066 | }, 1067 | "source-map": { 1068 | "version": "0.5.7", 1069 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1070 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1071 | "dev": true 1072 | }, 1073 | "source-map-resolve": { 1074 | "version": "0.5.2", 1075 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 1076 | "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", 1077 | "dev": true, 1078 | "requires": { 1079 | "atob": "^2.1.1", 1080 | "decode-uri-component": "^0.2.0", 1081 | "resolve-url": "^0.2.1", 1082 | "source-map-url": "^0.4.0", 1083 | "urix": "^0.1.0" 1084 | } 1085 | }, 1086 | "source-map-url": { 1087 | "version": "0.4.0", 1088 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 1089 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", 1090 | "dev": true 1091 | }, 1092 | "split-string": { 1093 | "version": "3.1.0", 1094 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 1095 | "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", 1096 | "dev": true, 1097 | "requires": { 1098 | "extend-shallow": "^3.0.0" 1099 | } 1100 | }, 1101 | "static-extend": { 1102 | "version": "0.1.2", 1103 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 1104 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 1105 | "dev": true, 1106 | "requires": { 1107 | "define-property": "^0.2.5", 1108 | "object-copy": "^0.1.0" 1109 | }, 1110 | "dependencies": { 1111 | "define-property": { 1112 | "version": "0.2.5", 1113 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1114 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1115 | "dev": true, 1116 | "requires": { 1117 | "is-descriptor": "^0.1.0" 1118 | } 1119 | } 1120 | } 1121 | }, 1122 | "string_decoder": { 1123 | "version": "1.1.1", 1124 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1125 | "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", 1126 | "dev": true, 1127 | "requires": { 1128 | "safe-buffer": "~5.1.0" 1129 | } 1130 | }, 1131 | "supports-color": { 1132 | "version": "5.5.0", 1133 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1134 | "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", 1135 | "dev": true, 1136 | "requires": { 1137 | "has-flag": "^3.0.0" 1138 | } 1139 | }, 1140 | "tapable": { 1141 | "version": "0.2.9", 1142 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", 1143 | "integrity": "sha1-ry2LvJsE907hevK02QSPgHrNGKg=", 1144 | "dev": true 1145 | }, 1146 | "to-object-path": { 1147 | "version": "0.3.0", 1148 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 1149 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 1150 | "dev": true, 1151 | "requires": { 1152 | "kind-of": "^3.0.2" 1153 | }, 1154 | "dependencies": { 1155 | "kind-of": { 1156 | "version": "3.2.2", 1157 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1158 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1159 | "dev": true, 1160 | "requires": { 1161 | "is-buffer": "^1.1.5" 1162 | } 1163 | } 1164 | } 1165 | }, 1166 | "to-regex": { 1167 | "version": "3.0.2", 1168 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 1169 | "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", 1170 | "dev": true, 1171 | "requires": { 1172 | "define-property": "^2.0.2", 1173 | "extend-shallow": "^3.0.2", 1174 | "regex-not": "^1.0.2", 1175 | "safe-regex": "^1.1.0" 1176 | } 1177 | }, 1178 | "to-regex-range": { 1179 | "version": "2.1.1", 1180 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 1181 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 1182 | "dev": true, 1183 | "requires": { 1184 | "is-number": "^3.0.0", 1185 | "repeat-string": "^1.6.1" 1186 | } 1187 | }, 1188 | "ts-loader": { 1189 | "version": "3.5.0", 1190 | "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-3.5.0.tgz", 1191 | "integrity": "sha1-FR0ATc3bTPjjgaO/nWt0wtlXqcA=", 1192 | "dev": true, 1193 | "requires": { 1194 | "chalk": "^2.3.0", 1195 | "enhanced-resolve": "^3.0.0", 1196 | "loader-utils": "^1.0.2", 1197 | "micromatch": "^3.1.4", 1198 | "semver": "^5.0.1" 1199 | } 1200 | }, 1201 | "typescript": { 1202 | "version": "2.9.2", 1203 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", 1204 | "integrity": "sha1-HL9h0F1rliaSROtqO85L2RTg8Aw=", 1205 | "dev": true 1206 | }, 1207 | "union-value": { 1208 | "version": "1.0.0", 1209 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", 1210 | "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", 1211 | "dev": true, 1212 | "requires": { 1213 | "arr-union": "^3.1.0", 1214 | "get-value": "^2.0.6", 1215 | "is-extendable": "^0.1.1", 1216 | "set-value": "^0.4.3" 1217 | }, 1218 | "dependencies": { 1219 | "extend-shallow": { 1220 | "version": "2.0.1", 1221 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1222 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1223 | "dev": true, 1224 | "requires": { 1225 | "is-extendable": "^0.1.0" 1226 | } 1227 | }, 1228 | "set-value": { 1229 | "version": "0.4.3", 1230 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", 1231 | "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", 1232 | "dev": true, 1233 | "requires": { 1234 | "extend-shallow": "^2.0.1", 1235 | "is-extendable": "^0.1.1", 1236 | "is-plain-object": "^2.0.1", 1237 | "to-object-path": "^0.3.0" 1238 | } 1239 | } 1240 | } 1241 | }, 1242 | "unset-value": { 1243 | "version": "1.0.0", 1244 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 1245 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 1246 | "dev": true, 1247 | "requires": { 1248 | "has-value": "^0.3.1", 1249 | "isobject": "^3.0.0" 1250 | }, 1251 | "dependencies": { 1252 | "has-value": { 1253 | "version": "0.3.1", 1254 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 1255 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 1256 | "dev": true, 1257 | "requires": { 1258 | "get-value": "^2.0.3", 1259 | "has-values": "^0.1.4", 1260 | "isobject": "^2.0.0" 1261 | }, 1262 | "dependencies": { 1263 | "isobject": { 1264 | "version": "2.1.0", 1265 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 1266 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 1267 | "dev": true, 1268 | "requires": { 1269 | "isarray": "1.0.0" 1270 | } 1271 | } 1272 | } 1273 | }, 1274 | "has-values": { 1275 | "version": "0.1.4", 1276 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 1277 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", 1278 | "dev": true 1279 | } 1280 | } 1281 | }, 1282 | "urix": { 1283 | "version": "0.1.0", 1284 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 1285 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", 1286 | "dev": true 1287 | }, 1288 | "use": { 1289 | "version": "3.1.1", 1290 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 1291 | "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", 1292 | "dev": true 1293 | }, 1294 | "util-deprecate": { 1295 | "version": "1.0.2", 1296 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1297 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1298 | "dev": true 1299 | } 1300 | } 1301 | } 1302 | -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aspnetmonsters-blazorgeolocation", 3 | "version": "0.4.0", 4 | "description": "", 5 | "scripts": { 6 | "build": "tsc" 7 | }, 8 | "devDependencies": { 9 | "@types/emscripten": "0.0.31", 10 | "ts-loader": "^3.2.0", 11 | "typescript": "^2.6.1" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/src/Location.ts: -------------------------------------------------------------------------------- 1 | declare var DotNet: any; 2 | 3 | class coordinate { 4 | public latitude: number = 0; 5 | public longitude: number = 0; 6 | public accuracy: number = 0; 7 | } 8 | 9 | 10 | let assemblyName = "AspNetMonsters.Blazor.Geolocation"; 11 | let namespace = "AspNetMonsters.Blazor.Geolocation"; 12 | let type = "LocationService"; 13 | async function dispatchResponse(id: string, location: coordinate) { 14 | await DotNet.invokeMethodAsync(namespace, 'ReceiveResponse', id, location.latitude, location.longitude, location.accuracy); 15 | } 16 | 17 | async function dispatchWatchResponse(id: string, location: coordinate) { 18 | await DotNet.invokeMethodAsync(namespace, 'ReceiveWatchResponse', id, location.latitude, location.longitude, location.accuracy); 19 | } 20 | 21 | window['AspNetMonsters'] = window['AspNetMonsters'] || {}; 22 | window['AspNetMonsters']['Blazor'] = window['AspNetMonsters']['Blazor'] || {}; 23 | window['AspNetMonsters']['Blazor']['Geolocation'] = window['AspNetMonsters']['Blazor']['Geolocation'] || {}; 24 | 25 | window['AspNetMonsters']['Blazor']['Geolocation']['GetLocation'] = (requestId) => { 26 | if (navigator.geolocation) { 27 | navigator.geolocation.getCurrentPosition((position) => { 28 | dispatchResponse(requestId, position.coords); 29 | }); 30 | } 31 | else { 32 | return "No location finding"; 33 | } 34 | }; 35 | 36 | window['AspNetMonsters']['Blazor']['Geolocation']['WatchLocation'] = (requestId) => { 37 | if (navigator.geolocation) { 38 | navigator.geolocation.watchPosition((position) => { 39 | dispatchWatchResponse(requestId, position.coords); 40 | }); 41 | } 42 | else { 43 | return "No location watching"; 44 | } 45 | }; -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noImplicitAny": false, 4 | "noEmitOnError": true, 5 | "removeComments": false, 6 | "sourceMap": true, 7 | "target": "es5", 8 | "lib": [ 9 | "es2015", 10 | "dom" 11 | ], 12 | "strict": true, 13 | "outDir": "./content/" 14 | }, 15 | "exclude": [ 16 | "node_modules" 17 | ], 18 | "include": [ "**/*.ts" ] 19 | } 20 | -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/wwwroot/Location.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | return new (P || (P = Promise))(function (resolve, reject) { 4 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 5 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 6 | function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } 7 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 8 | }); 9 | }; 10 | var __generator = (this && this.__generator) || function (thisArg, body) { 11 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 12 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 13 | function verb(n) { return function (v) { return step([n, v]); }; } 14 | function step(op) { 15 | if (f) throw new TypeError("Generator is already executing."); 16 | while (_) try { 17 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 18 | if (y = 0, t) op = [op[0] & 2, t.value]; 19 | switch (op[0]) { 20 | case 0: case 1: t = op; break; 21 | case 4: _.label++; return { value: op[1], done: false }; 22 | case 5: _.label++; y = op[1]; op = [0]; continue; 23 | case 7: op = _.ops.pop(); _.trys.pop(); continue; 24 | default: 25 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 26 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 27 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 28 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 29 | if (t[2]) _.ops.pop(); 30 | _.trys.pop(); continue; 31 | } 32 | op = body.call(thisArg, _); 33 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 34 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 35 | } 36 | }; 37 | var coordinate = /** @class */ (function () { 38 | function coordinate() { 39 | this.latitude = 0; 40 | this.longitude = 0; 41 | this.accuracy = 0; 42 | } 43 | return coordinate; 44 | }()); 45 | var assemblyName = "AspNetMonsters.Blazor.Geolocation"; 46 | var namespace = "AspNetMonsters.Blazor.Geolocation"; 47 | var type = "LocationService"; 48 | function dispatchResponse(id, location) { 49 | return __awaiter(this, void 0, void 0, function () { 50 | return __generator(this, function (_a) { 51 | switch (_a.label) { 52 | case 0: 53 | console.log("got location, dispatching response"); 54 | return [4 /*yield*/, DotNet.invokeMethodAsync(namespace, 'ReceiveResponse', id, location.latitude, location.longitude, location.accuracy)]; 55 | case 1: 56 | _a.sent(); 57 | return [2 /*return*/]; 58 | } 59 | }); 60 | }); 61 | } 62 | function dispatchWatchResponse(id, location) { 63 | return __awaiter(this, void 0, void 0, function () { 64 | return __generator(this, function (_a) { 65 | switch (_a.label) { 66 | case 0: return [4 /*yield*/, DotNet.invokeMethodAsync(namespace, 'ReceiveWatchResponse', id, location.latitude, location.longitude, location.accuracy)]; 67 | case 1: 68 | _a.sent(); 69 | return [2 /*return*/]; 70 | } 71 | }); 72 | }); 73 | } 74 | window['AspNetMonsters'] = window['AspNetMonsters'] || {}; 75 | window['AspNetMonsters']['Blazor'] = window['AspNetMonsters']['Blazor'] || {}; 76 | window['AspNetMonsters']['Blazor']['Geolocation'] = window['AspNetMonsters']['Blazor']['Geolocation'] || {}; 77 | window['AspNetMonsters']['Blazor']['Geolocation']['GetLocation'] = function (requestId) { 78 | if (navigator.geolocation) { 79 | navigator.geolocation.getCurrentPosition(function (position) { 80 | dispatchResponse(requestId, position.coords); 81 | }); 82 | } 83 | else { 84 | return "No location finding"; 85 | } 86 | }; 87 | window['AspNetMonsters']['Blazor']['Geolocation']['WatchLocation'] = function (requestId) { 88 | if (navigator.geolocation) { 89 | navigator.geolocation.watchPosition(function (position) { 90 | dispatchWatchResponse(requestId, position.coords); 91 | }); 92 | } 93 | else { 94 | return "No location watching"; 95 | } 96 | }; 97 | //# sourceMappingURL=Location.js.map -------------------------------------------------------------------------------- /AspNetMonsters.Blazor.Geolocation/wwwroot/Location.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Location.js","sourceRoot":"","sources":["../src/Location.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;IAAA;QACW,aAAQ,GAAW,CAAC,CAAC;QACrB,cAAS,GAAW,CAAC,CAAC;QACtB,aAAQ,GAAW,CAAC,CAAC;IAChC,CAAC;IAAD,iBAAC;AAAD,CAAC,AAJD,IAIC;AAGD,IAAI,YAAY,GAAG,mCAAmC,CAAC;AACvD,IAAI,SAAS,GAAG,mCAAmC,CAAC;AACpD,IAAI,IAAI,GAAG,iBAAiB,CAAC;AAC7B,0BAAgC,EAAU,EAAE,QAAoB;;;;;oBAC5D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;oBAClD,qBAAM,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,iBAAiB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAA;;oBAA1H,SAA0H,CAAC;;;;;CAE9H;AAED,+BAAqC,EAAU,EAAE,QAAoB;;;;wBACjE,qBAAM,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAA;;oBAA/H,SAA+H,CAAC;;;;;CACnI;AAED,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC1D,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC9E,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAE5G,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,GAAG,UAAC,SAAS;IACzE,IAAI,SAAS,CAAC,WAAW,EAAE;QACvB,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAC,QAAQ;YAC9C,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;KACN;SACI;QACD,OAAO,qBAAqB,CAAC;KAChC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,GAAG,UAAC,SAAS;IAC3E,IAAI,SAAS,CAAC,WAAW,EAAE;QACvB,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,UAAC,QAAQ;YACzC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;KACN;SACI;QACD,OAAO,sBAAsB,CAAC;KACjC;AACL,CAAC,CAAC"} -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 ASP.NET Monsters 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AspNetMonsters.Blazor.Geolocation 2 | This package provides Blazor applications with access to the browser's [Geolocation API](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) 3 | 4 | [![Build Status](https://dev.azure.com/aspnetmonsters/Blazor%20Geolocation/_apis/build/status/Blazor%20Geolocation-ASP.NET%20Core%20(.NET%20Framework)-CI)](https://dev.azure.com/aspnetmonsters/Blazor%20Geolocation/_build/latest?definitionId=4) 5 | 6 | ## Usage 7 | 1) In your Blazor app, add the `AspNetMonsters.Blazor.Geolocation` [NuGet package](https://www.nuget.org/packages/AspNetMonsters.Blazor.Geolocation/) 8 | 9 | ``` 10 | Install-Package AspNetMonsters.Blazor.Geolocation -IncludePrerelease 11 | ``` 12 | 13 | 1) In your Blazor app's `Startup.cs`, register the 'LocationService'. 14 | 15 | ``` 16 | public void ConfigureServices(IServiceCollection services) 17 | { 18 | ... 19 | services.AddSingleton(); 20 | ... 21 | } 22 | ``` 23 | 24 | 1) Now you can inject the LocationService into any Blazor page and use it like this: 25 | 26 | ``` 27 | @using AspNetMonsters.Blazor.Geolocation 28 | @inject LocationService LocationService 29 |

You are here

30 |
31 | Lat: @location?.Latitude
32 | Long: @location?.Longitude
33 | Accuracy: @location?.Accuracy
34 |
35 | 36 | @functions 37 | { 38 | Location location; 39 | 40 | protected override async Task OnInitAsync() 41 | { 42 | location = await LocationService.GetLocationAsync(); 43 | } 44 | } 45 | ``` 46 | 47 | Success! 48 | ![image](https://user-images.githubusercontent.com/2531875/37178457-c86888a0-22df-11e8-8667-d6f7eba80691.png) 49 | --------------------------------------------------------------------------------