Add upload scripts for PowerShell and NodeJS.
This commit is contained in:
72
bin/Upload-JMESPath.ps1
Executable file
72
bin/Upload-JMESPath.ps1
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env pwsh
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Position=0, HelpMessage='API base URL')]
|
||||
[string]$ApiUrl,
|
||||
|
||||
[Parameter(HelpMessage='API key for authentication')]
|
||||
[string]$ApiKey,
|
||||
|
||||
[Parameter(HelpMessage='Path to JSON file; default: read from stdin')]
|
||||
[string]$JsonFile = '-',
|
||||
|
||||
[Parameter(HelpMessage='Show help')]
|
||||
[switch]$Help
|
||||
)
|
||||
|
||||
function Show-Usage {
|
||||
$usage = @"
|
||||
Usage: Upload-JMESPath.ps1 [-ApiUrl <url>] [-ApiKey <key>] [-JsonFile <file>]
|
||||
|
||||
Parameters:
|
||||
-ApiUrl <url> The base URL of the JMESPath Playground API (default: http://localhost:3000 or $env:JMESPATH_PLAYGROUND_API_URL)
|
||||
-ApiKey <key> The API key for authentication (can also be set via JMESPATH_PLAYGROUND_API_KEY)
|
||||
-JsonFile <file> The JSON file to upload (default: stdin if not specified)
|
||||
-Help Show this help message and exit
|
||||
"@
|
||||
Write-Output $usage
|
||||
}
|
||||
|
||||
if ($Help) { Show-Usage; exit 0 }
|
||||
|
||||
# Apply environment defaults when parameters are not provided
|
||||
if (-not $ApiUrl) {
|
||||
if ($env:JMESPATH_PLAYGROUND_API_URL) { $ApiUrl = $env:JMESPATH_PLAYGROUND_API_URL } else { $ApiUrl = 'http://localhost:3000' }
|
||||
}
|
||||
if (-not $ApiKey) {
|
||||
$ApiKey = $env:JMESPATH_PLAYGROUND_API_KEY
|
||||
}
|
||||
|
||||
# Read JSON body from file or stdin
|
||||
try {
|
||||
if ($JsonFile -eq '-' -or [string]::IsNullOrEmpty($JsonFile)) {
|
||||
$Body = [Console]::In.ReadToEnd()
|
||||
} else {
|
||||
if (-not (Test-Path -Path $JsonFile)) {
|
||||
Write-Error "JSON file not found: $JsonFile"
|
||||
exit 2
|
||||
}
|
||||
$Body = Get-Content -Raw -Path $JsonFile
|
||||
}
|
||||
} catch {
|
||||
Write-Error "Failed to read JSON input: $($_.Exception.Message)"
|
||||
exit 2
|
||||
}
|
||||
|
||||
# Prepare headers
|
||||
$Headers = @{ 'Accept' = 'application/json' }
|
||||
if (-not [string]::IsNullOrEmpty($ApiKey)) { $Headers['X-API-Key'] = $ApiKey }
|
||||
|
||||
# POST to API
|
||||
$Uri = "$ApiUrl/api/v1/upload"
|
||||
try {
|
||||
$response = Invoke-RestMethod -Uri $Uri -Method Post -Headers $Headers -ContentType 'application/json' -Body $Body -ErrorAction Stop
|
||||
if ($null -ne $response) {
|
||||
$response | ConvertTo-Json -Depth 10
|
||||
} else {
|
||||
Write-Output "Upload completed."
|
||||
}
|
||||
} catch {
|
||||
Write-Error "Upload failed: $($_.Exception.Message)"
|
||||
exit 3
|
||||
}
|
||||
Reference in New Issue
Block a user