scripts/validate-analytics-engine-sql.ts
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bun
import {
lintAnalyticsEngineSql,
prepareAnalyticsEngineSqlForLiveValidation,
validateAnalyticsEngineSqlLive,
} from '../supabase/functions/_backend/utils/analyticsEngineSqlLint.ts'
import { collectAnalyticsEngineSqlFixtures } from '../tests/helpers/collectAnalyticsEngineSqlFixtures.ts'
const accountId = process.env.CF_ACCOUNT_ANALYTICS_ID
const token = process.env.CF_ANALYTICS_TOKEN
if (!accountId || !token) {
console.error('Missing CF_ACCOUNT_ANALYTICS_ID or CF_ANALYTICS_TOKEN')
process.exit(1)
}
const fixtures = await collectAnalyticsEngineSqlFixtures()
const lintFailures = fixtures.flatMap((fixture) => {
return lintAnalyticsEngineSql(fixture.query).map(issue => `${fixture.name}: ${issue.rule} - ${issue.message}`)
})
if (lintFailures.length > 0) {
console.error('Static Analytics Engine SQL lint failures:')
for (const failure of lintFailures)
console.error(`- ${failure}`)
process.exit(1)
}
const liveFailures: string[] = []
for (const fixture of fixtures) {
const prepared = prepareAnalyticsEngineSqlForLiveValidation(fixture.query)
if (!prepared)
continue
const result = await validateAnalyticsEngineSqlLive(accountId, token, fixture.query, prepared)
if (!result.ok)
liveFailures.push(`${fixture.name} (${result.status}): ${result.body.trim()}`)
}
if (liveFailures.length > 0) {
console.error('Live Analytics Engine SQL validation failures:')
for (const failure of liveFailures)
console.error(`- ${failure}`)
process.exit(1)
}
console.log(`Validated ${fixtures.length} Analytics Engine SQL queries against Cloudflare`)