Public/Export-BluestacksUserScript.ps1

function Export-BluestacksUserScript {
  <#
  .SYNOPSIS
    Builds a BlueStacks macro sequence and writes it to a JSON file.

  .DESCRIPTION
    Calls New-BluestacksUserScript to compile the sequence, then serialises
    the resulting event array to a BlueStacks InputMapper-compatible JSON file
    at OutputFile.

    Supports -WhatIf: when specified, a timing preview is printed but no file
    is written.

  .PARAMETER Sequence
    Array of step hashtables defining the macro. See New-BluestacksUserScript
    for the supported step types and keys.

  .PARAMETER OutputFile
    Path of the JSON file to create or overwrite.

  .PARAMETER SnippetDir
    Directory that contains snippet JSON files.
    Defaults to the module-owned 'snippets' sub-folder.

  .PARAMETER StartOffset
    Milliseconds before the very first event. Defaults to 100.

  .PARAMETER Preview
    When specified, prints a human-readable timing summary and returns the
    build result without writing any file. Equivalent to -WhatIf for
    display purposes but can be combined with it.

  .OUTPUTS
    PSCustomObject - the same build result returned by New-BluestacksUserScript.

  .EXAMPLE
    Export-BluestacksUserScript -Sequence $sequence -OutputFile '.\macro.json'

  .EXAMPLE
    Export-BluestacksUserScript -Sequence $sequence -OutputFile '.\macro.json' -WhatIf
  #>

  [CmdletBinding(SupportsShouldProcess)]
  [OutputType([PSCustomObject])]
  param(
    [Parameter(Mandatory)]
    [object[]] $Sequence,

    [Parameter(Mandatory)]
    [string] $OutputFile,

    [string] $SnippetDir  = (Get-BluestacksSnippetDirectory),
    [int]    $StartOffset = 100,
    [switch] $Preview
  )

  $build = New-BluestacksUserScript -Sequence $Sequence -SnippetDir $SnippetDir `
             -StartOffset $StartOffset -Preview:$Preview

  if ($Preview -or $WhatIfPreference) {
    Write-Host ''
    Write-Host ('Total: {0} events | duration: {1} | final cursor: {2} ms' -f
      $build.EventCount, $build.DurationLabel, $build.FinalCursor)
    Write-Host '(WhatIf: no file written)'
    return $build
  }

  $outputDir = Split-Path $OutputFile -Parent
  if ($outputDir -and -not (Test-Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir -Force | Out-Null
  }

  if ($PSCmdlet.ShouldProcess($OutputFile, 'Write BlueStacks user script JSON')) {
    $payload = [PSCustomObject]@{ Events = $build.Events } | ConvertTo-Json -Depth 5
    Set-Content -Path $OutputFile -Value $payload -Encoding UTF8
    Write-Verbose ("Wrote {0} events to '{1}' (duration: {2})" -f $build.EventCount, $OutputFile, $build.DurationLabel)
  }

  return $build
}