return
cd D:\dr\gh\ews-javascript-api\src\js

$content = Get-Content ..\..\errors.txt
$lines = $content | ?{$_.contains("TS2304")}
$dupli = $content | ?{$_.contains("TS2300")}
$ts2305 = $content | ?{$_.contains("TS2305")}
$NoTS7017 = $content |?{!$_.contains("TS7017")}


#src/js/Attributes/RequiredServerVersionAttribute.ts(3,11): error TS2304: Cannot find name 'ExchangeVersion'.
$fixes = @()
$lines |%{if($_ -match '(\A(?<file>.*)\()([^'']+).* (.(?<target>.*)[^.]+)') {
        $fix = "" | select FileToFix,Symbol
        $fix.FileToFix = $matches.file
        $fix.Symbol = $matches.target
        if(!$fix.FileToFix.EndsWith(".d.ts")){
            $fixes += $fix
        }
    }
}
#$fixes
#| ?{$_.filetofix.contains("AddressEntityCollection")}
$fixes  | group filetofix |  %{ ############## - use this to fix TS2304
        #Write-Verbose $_.name.Replace("src/js/","") -Verbose
        $filetofix = dir $_.name.Replace("src/js/","").replace("/","\") -ErrorAction SilentlyContinue        
        if($filetofix -eq $null){
            $filetofix = dir $_.name.Replace("test/","../../test/").replace("/","\") -ErrorAction SilentlyContinue 
        }
        if($filetofix -ne $null){
            $insercontent = @()
            $_.group | select -Unique -Property symbol | %{      
            
            #Write-Verbose $_.symbol -Verbose
            $symfile = dir ($_.symbol + ".ts") -Recurse
            if($symfile){
                
                #Write-Verbose $uri1 -Verbose
                #Write-Verbose $uri2 -Verbose
               $uri1 = New-Object System.Uri -ArgumentList $filetofix.FullName
               $uri2 = New-Object System.Uri -ArgumentList $symfile.FullName
               $importfile = $uri1.MakeRelative($uri2).replace(".ts","")
               if(!$importfile.StartsWith(".")){$importfile = "./" + $importfile}
               $importstatement = "import {" + $_.symbol + "} from """ + $importfile + """;"
               Write-Verbose ($filetofix.FullName + " | " + $importstatement) -Verbose
               $insercontent += $importstatement
            }
            else
            {
                Write-Verbose ($filetofix.FullName + " | " +  $_.symbol) -Verbose
            }
        }
        #$_.group.count        
        #$insercontent

        $filecontent = Get-Content $filetofix.FullName
        $filecontent = $insercontent + $filecontent
        $filecontent | Set-Content -Path $filetofix 
        #$filecontent
    }
}






$fixes = @(); $NoTS7017 |%{if($_ -match '(\A(?<file>.*)\()([^'']+).* (.(?<target>.*)[^.]+)') {
        $fix = "" | select FileToFix,Symbol
        $fix.FileToFix = $matches.file
        $fix.Symbol = $matches.target
        $fixes += $fix
    }
}


return;$fixes[0] | %{
    #Write-Verbose $_.FileToFix.Replace("src/js/","").Replace("/","\") -Verbose
    $filetofix = dir $_.FileToFix.Replace("src/js/","").replace("/","\") -ErrorAction SilentlyContinue
    if($filetofix){
        Write-Verbose $_.symbol -Verbose
        $symfile = dir ($_.symbol + ".ts") -Recurse
        if($symfile){
            Write-Verbose $uri1 -Verbose
            Write-Verbose $uri2 -Verbose
           $uri1 = New-Object System.Uri -ArgumentList $filetofix.FullName
           $uri2 = New-Object System.Uri -ArgumentList $symfile.FullName
           $importfile = $uri1.MakeRelative($uri2)
           $importstatement = "import " + $_.symbol + " = require(""" + $importfile + """);"
           Write-Verbose $importstatement -Verbose

        }
    }
}






return;$ff = $fixes  | group filetofix |  %{ ##########   checking if already fixed by using import statement search
        #Write-Verbose $_.name.Replace("src/js/","") -Verbose
        $filetofix = dir $_.name.Replace("src/js/","").replace("/","\") -ErrorAction SilentlyContinue        
        if($filetofix){
            $insercontent = @()
            $_.group | select -Unique -Property symbol | %{      
            
            #Write-Verbose $_.symbol -Verbose
            $symfile = dir ($_.symbol + ".ts") -Recurse
            if($symfile){
                
                #Write-Verbose $uri1 -Verbose
                #Write-Verbose $uri2 -Verbose
               $uri1 = New-Object System.Uri -ArgumentList $filetofix.FullName
               $uri2 = New-Object System.Uri -ArgumentList $symfile.FullName
               $importfile = $uri1.MakeRelative($uri2).replace(".ts","")
               if(!$importfile.StartsWith(".")){$importfile = "./" + $importfile}
               $importstatement = "import " + $_.symbol + " = require(""" + $importfile + """);"
               Write-Verbose ($filetofix.FullName + " | " + $importstatement) -Verbose
               $insercontent += $importstatement
            }
            else
            {
                Write-Verbose ($filetofix.FullName + " | " +  $_.symbol) -Verbose
            }
        }
        #$_.group.count        
        #$insercontent
        $alreadyfixed = $filetofix | Select-String -SimpleMatch $importstatement
        $alreadyfixed
        #$filecontent = Get-Content $filetofix.FullName
        #$filecontent = $insercontent + $filecontent
        #$filecontent | Set-Content -Path $filetofix 
        #$filecontent

        
    }
}

$ff












return 
############# fix to copy ts file

$matches = dir *.ts -Recurse | Select-String -SimpleMatch "<copyright file=" #| %{$_.FileName}

$matches | %{
    $path = $_.Path;
    $file = dir (Join-Path "..\..\..\ews-javascriptapi_generatedTSFiles\" $_.Filename) -ErrorAction SilentlyContinue
    #if(!$file){
    #    #$path.Replace("D:\dr\gh\ews-javascript-api\src\js\","").Replace($_.Filename,""); 
    #    $target = $path.Replace("D:\dr\gh\ews-javascript-api\src\js\","D:\dr\gh\ews-javascriptapi_generatedTSFiles\copied\");
    #    $targetpath = $target.Replace($_.Filename,"");
    #    $targetpath
    #    md $targetpath
    #    copy $path $target -Force
    #}
    #if($file)
    #{
    #    copy $file $path -Force
    #}

    if(!$file){
        $_.FileName
    }
}


$matches1 = dir *.ts -Recurse | Select-String -SimpleMatch "<copyright file=" #| %{$_.FileName}


$files | %{
    $path = $_.FullName;
    $file = dir (Join-Path "..\..\..\ews-javascriptapi_generatedTSFiles\" ($_.Name.replace("SearchFilter.",""))) -ErrorAction SilentlyContinue
    #if(!$file){
    #    #$path.Replace("D:\dr\gh\ews-javascript-api\src\js\","").Replace($_.Filename,""); 
    #    $target = $path.Replace("D:\dr\gh\ews-javascript-api\src\js\","D:\dr\gh\ews-javascriptapi_generatedTSFiles\copied\");
    #    $targetpath = $target.Replace($_.Filename,"");
    #    $targetpath
    #    md $targetpath
    #    copy $path $target -Force
    #}
    if($file)
    {
        #Remove-Item ($file.BaseName + ".js") -Verbose
        copy $file $path -Force -Verbose

    }
}




###################### bulk check missing export=

$aa = dir *.ts -Recurse | Select-String -SimpleMatch "//module Microsoft.Exchange.WebServices.Data {" -Context 3,0

$aa | %{
    $m = $_
    $s = $m.Context.PreContext | ?{$_.contains("export")}
    if(!$s){
        $m.Filename
    }
}



return




 "pattern to detect modulename -"
  if("var EwsUtilities = require(`"./EwsUtilities`");" -match '\(\".\/((?<module>.*)\")' ){$Matches}
 
 regex for module line
 if("var EwsUtilities = require(`"./EwsUtilities`");" -match '.*(var).*(require).*\(\".\/(?<moduleName>.*)\"\);' ){$Matches}
 if("var EwsUtilities = require(`"../asda/dasdada/dasda/ServiceObjectInfo`");" -match '.*(var).*(require).*\(.*\/(?<moduleName>.*)\"\);' ){$Matches} # refined 

 $f = dir *.js -Recurse

 $ews = $f | Select-String -Pattern  '.*(var).*(require).*\(\".\/(?<moduleName>.*)\"\);'

 $util = dir ewsutilities.js -Recurse |  Select-String -Pattern  '.*(var).*(require).*\(.*\/(?<moduleName>.*)\"\);'

 $util | %{
    $moduleName = $_.Matches | %{$_.Groups["moduleName"]}
    Write-Verbose $moduleName -Verbose
    
 }


 cd D:\dr\gh\ews-javascript-api\build\output\node\src\
[Collections.Generic.List[String]]$looping  = @()
[Collections.Generic.List[String]]$done  = @()
 function subm ($f, $indent = 0, $x = $f){
    $indention = "`t" * $indent 
        $match = dir ($f + ".js") -Recurse |  Select-String -Pattern  '.*(var).*(require).*\(.*\/(?<moduleName>.*)\"\);'
        if($match)
        {
            $moduleNames = $match | %{$_.Matches | %{$_.Groups["moduleName"].Value}}
            $moduleNames | ?{!$global:done.Contains($_)} | %{
                if($_ -like $x){
                    Write-Warning "$indention file $f - chained to $_"
                    Write-Warning "$indention found loop - $($f<#$match.Filename | select -Unique#>) "
                    #$global:looping.Contains($f)
                    if(!$global:looping.Contains($f)){$global:looping.Add($f)}
                    
                }
                elseif(!$global:looping.contains($_)){
                    $global:looping;                
                    Write-Verbose "$indention file $f - chained to $_" -Verbose
                    $indent++      
                    if($_ -ne $x){$global:done.Add($_)}
                    subm $_ $indent $x
                    $indent--
                }
                else{
                    Write-Verbose "$indention skipped $f" -Verbose
                }
            }

        }
}
$looping.Clear()
$done.Clear()
subm "AttachmentsPropertyDefinition" 0

   $moduleName = $util | %{$_.Matches | %{$_.Groups["moduleName"].Value.ToString()}}

 Write-Verbose $moduleName -Verbose





 d:
cd\
cd .\dr\gh\ews-javascript-api
cd .\src\js
$ts = dir *.ts -Exclude *.d.ts -Recurse
$ts.Count
dir *.ts | measure
dir *.ts -Recurse | measure
$ts | %{$_.name}
$ts | %{$_.fullname}
$ts | %{$_.fullname.replace(".ts",".js")}
$ts | %{$_.fullname.replace(".ts",".js") | Test-Path}
$ts | %{$_.fullname.replace(".ts",".js") | Test-Path} | ?{!$_}
$ts | %{$_.fullname.replace(".ts",".js") | del -Confirm}
$ts | %{$_.fullname.replace(".ts",".js") | del}












script to fix throw not implemented error ro something traceable.
return;
$fs = dir *.ts -Recurse | Select-String -pattern "{ throw new Error(`"Not implemented.`");" -SimpleMatch | %{$_.path} | select -Unique

foreach($f in $fs){
    $c = Get-Content $f
    $fn = ([System.IO.FileInfo]$f).Name
    $fp = $f.Replace("\src\","\test\src\")
    $path = ([System.IO.FileInfo]$fp).DirectoryName
    mkdir $path -ErrorAction SilentlyContinue

    if($c){
        $c.Where({$_.contains("{ throw new Error(`"Not implemented.`");")}) | %{
            $l = $_.replace("/","").trim();
            Write-Verbose ("$fn - " + $l.Substring(0,$l.indexof("("))) -Verbose; 
            $c[$c.IndexOf($_)] = $_.replace("{ throw new Error(`"Not implemented.`");", "{ throw new Error(`"$fn - " + $l.Substring(0,$l.indexof("(")) + " : Not implemented.`");") 
        }
        #$c
        #$c | Set-Content $fp -Force
        $c | Set-Content $f -Force
        Start-Sleep -Milliseconds 200
        Write-Verbose $fp -Verbose
    }
}



return
# import module = require -> to -> import {module} from file

#if('import SortDirection = require("../../src/js/Enumerations/SortDirection");'  -match'^import\W(?<module>\w*)\s*=.*\((?<target>.*)\).*'){$Matches;$Matches["target"].Length}
$pattern = '^import\W(?<module>\w*)\s*=.*\((?<target>.*)\).*'
$alltsFiles = dir *.ts -Recurse | Select-String -Pattern $pattern
$groups = $alltsFiles | group path
foreach($group in $groups){
    $content = Get-Content $group.Name -Raw
    if($content){
        #$lines = $group.Group.Line | %{ if($_ -match $pattern){ "Import {$($Matches['module'])} from $($Matches['target']);" }}
        foreach($grp in $group.Group){
            $line = $grp.Line
            $replace = "import {$($grp.Matches[0].Groups["module"].Value)} from $($grp.Matches[0].Groups["target"].Value);"
            $content = $content.Replace($line,$replace)
        }
    }
    Write-Verbose $group.Name -Verbose
    $content | Set-Content -Path $group.Name -Encoding UTF8
}



return
#$filetofix = dir .\ExchangeWebService.ts
$uri1 = New-Object System.Uri -ArgumentList $filetofix.FullName
if($filetofix -ne $null){
    $insercontent = @()
    $allfiles = dir *.ts -Recurse;
    $allfiles | ?{!$_.FullName.EndsWith(".d.ts")} | ?{!$_.BaseName.endsWith("Attribute")} | sort BaseName | %{      
            
        #Write-Verbose $_.symbol -Verbose
        $symfile = $_.BaseName # dir ($_ + ".ts") -Recurse
        if($symfile){
                
            #Write-Verbose $uri1 -Verbose
            #Write-Verbose $uri2 -Verbose
            #$uri2 = New-Object System.Uri -ArgumentList $symfile.FullName
            $importfile = $_.FullName.Replace("\","/").Replace("D:/dr/lgh/ews-javascript-api/src/js",".") #  $uri1.MakeRelative($uri2).replace(".ts","")
            #if(!$importfile.StartsWith(".")){$importfile = "./" + $importfile}
            $importstatement = "// import {" + $symfile + "} from """ + $importfile.Replace(".ts","") + """;"
            $importstatement += "`r`n// export {" + $symfile + "}"
            #Write-Verbose ($filetofix.FullName + " | " + $importstatement) -Verbose
            #Write-Verbose ($importstatement) -Verbose
            $insercontent += $importstatement
        }
        else
        {
            Write-Verbose ($filetofix.FullName + " | " +  $_.symbol) -Verbose
        }
    }
}


$exports = "export {"
$allfiles.BaseName | %{$exports += "`r`n// $_,"}
$exports += "`r`n};"

$moduleNames = @()
$allthrows = @()
function searchdependencyportstatus($f){
    $match = dir ($f + ".ts") -Recurse |  Select-String -Pattern  '(import).*\".*\/(?<moduleName>.*)\"\;'
        if($match)
        {
            $moduleNames = $match | %{$_.Matches | %{$_.Groups["moduleName"].Value}}
            $moduleNames | %{
                if($global:moduleNames -notcontains $_){
                    $global:moduleNames += $_
                    Write-Host $_ -ForegroundColor Red
                    $m2 = dir ($_ + ".ts") -Recurse |  Select-String -Pattern  '^\s+\w.*throw new Error.*Not implemented.*'
                    $global:allthrows += $m2
                    write-host "---------------------------------------------------" -ForegroundColor Yellow
                    #$list
                    searchdependencyportstatus $_
                }
                #else{"skipping $_"}
            }

        }
}
searchdependencyportstatus "Attachment"

function findChildClass($f){
    $match = dir "*.ts" -Recurse |  Select-String -Pattern  '(import).*\".*\/(?<moduleName>.*)\"\;'
        if($match)
        {
            $moduleNames = $match | %{$_.Matches | %{$_.Groups["moduleName"].Value}}
            $moduleNames | %{
                if($global:moduleNames -notcontains $_){
                    $global:moduleNames += $_
                    Write-Host $_ -ForegroundColor Red
                    $m2 = dir ($_ + ".ts") -Recurse |  Select-String -Pattern  '^\s+\w.*throw new Error.*Not implemented.*'
                    $global:allthrows += $m2
                    write-host "---------------------------------------------------" -ForegroundColor Yellow
                    #$list
                    searchdependencyportstatus $_
                }
                #else{"skipping $_"}
            }

        }
}
searchdependencyportstatus "Attachment"