src/cmdlets/common/GraphUriCompletionHelper.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# Copyright 2018, Adam Edwards # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. . (import-script ArgumentCompletionHelper) enum GraphUriCompletionType { AnyUri LocationOrMethodUri LocationUri } ScriptClass GraphUriCompletionHelper { static { $base = $::.ArgumentCompletionHelper function __initialize() { $this.base |=> __RegisterArgumentCompleterScriptBlock $this.AnyUriArgumentCompleter ([GraphUriCompletionType]::AnyUri) $this.base |=> __RegisterArgumentCompleterScriptBlock $this.LocationOrMethodUriArgumentCompleter ([GraphUriCompletionType]::LocationOrMethodUri) $this.base |=> __RegisterArgumentCompleterScriptBlock $this.LocationUriArgumentCompleter ([GraphUriCompletionType]::LocationUri) } $LocationUriArgumentCompleter = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) $::.GraphUriCompletionHelper |=> __UriArgumentCompleter $commandName $parameterName $wordToComplete $commandAst $fakeBoundParameter $false $false } $LocationOrMethodUriArgumentCompleter = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) $::.GraphUriCompletionHelper |=> __UriArgumentCompleter $commandName $parameterName $wordToComplete $commandAst $fakeBoundParameter $true $false } $AnyUriArgumentCompleter = { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) $::.GraphUriCompletionHelper |=> __UriArgumentCompleter $commandName $parameterName $wordToComplete $commandAst $fakeBoundParameter $true $true } function __UriArgumentCompleter($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter, $nonlocatable, $includeVirtual) { $graphUri = $::.GraphUtilities |=> ToGraphRelativeUri $wordToComplete __GetUriCompletions $graphUri $nonLocatable $includeVirtual } function __GetUriCompletions([uri] $targetUri, [bool] $nonLocatable=$false, [bool] $includeVirtual=$false) { $uriString = $targetUri.tostring() $lastWord = $uriString -split '/' | select -last 1 $parentUri = '/' + $uriString.substring(0, $uriString.length - $lastword.length).trimend('/').trimstart('/') $candidates = Get-GraphUri $parentUri -children -includevirtualchildren:$includeVirtual -LocatableChildren:(!$nonLocatable) -ignoremissingmetadata | select -expandproperty graphuri | select -expandproperty originalstring | foreach { $_ -split '/' | select -last 1 } $completions = if ( $candidates ) { $this.base |=> FindMatchesStartingWith $lastword $candidates } $prefixableParentUri = $parentUri.trimend('/') $completions | foreach { $prefixableParentUri, $_ -join '/' } } } } $::.GraphUriCompletionHelper |=> __initialize |