@electric-sql/client
Version:
Postgres everywhere - your data, in sync, wherever you need it.
82 lines (72 loc) • 1.9 kB
JavaScript
import { execFileSync } from 'node:child_process'
import {
analyzeTypeScriptClient,
filterFindingsToChangedFiles,
filterFindingsToChangedLines,
formatAnalysisResult,
loadChangedLines,
} from './lib/shape-stream-static-analysis.mjs'
const args = process.argv.slice(2)
const failOnFindings = args.includes(`--fail-on-findings`)
const json = args.includes(`--json`)
const explicitRangeIndex = args.findIndex((arg) => arg === `--range`)
const explicitRange =
explicitRangeIndex >= 0 ? args[explicitRangeIndex + 1] : undefined
const explicitScopeIndex = args.findIndex((arg) => arg === `--scope`)
const scope = explicitScopeIndex >= 0 ? args[explicitScopeIndex + 1] : `file`
const result = analyzeTypeScriptClient()
const range = explicitRange ?? getDefaultRange()
const changedLines = loadChangedLines(range, [
result.clientFile,
result.stateMachineFile,
])
const findings =
scope === `line`
? filterFindingsToChangedLines(result.findings, changedLines)
: filterFindingsToChangedFiles(result.findings, changedLines)
if (json) {
console.log(
JSON.stringify(
{
range,
scope,
findings,
},
null,
2
)
)
} else {
console.log(`Range: ${range}`)
console.log(`Scope: ${scope}`)
if (scope === `line`) {
console.log(formatAnalysisResult(result, { changedLines }))
} else {
console.log(
formatAnalysisResult({
...result,
findings,
})
)
}
}
if (failOnFindings && findings.length > 0) {
process.exitCode = 1
}
function getDefaultRange() {
try {
const mergeBase = execFileSync(
`git`,
[`merge-base`, `origin/main`, `HEAD`],
{
encoding: `utf8`,
stdio: [`ignore`, `pipe`, `ignore`],
}
).trim()
if (mergeBase.length > 0) {
return `${mergeBase}...HEAD`
}
} catch {}
return `HEAD~1..HEAD`
}