2022-04-28 11:31:15 +02:00
|
|
|
import { traceGlobals } from '../../trace/shared'
|
|
|
|
import { Telemetry } from '../storage'
|
2022-05-02 23:11:45 +02:00
|
|
|
// @ts-ignore JSON
|
|
|
|
import { version as nextVersion, optionalDependencies } from 'next/package.json'
|
2022-04-28 11:31:15 +02:00
|
|
|
|
|
|
|
const EVENT_PLUGIN_PRESENT = 'NEXT_SWC_LOAD_FAILURE'
|
|
|
|
export type EventSwcLoadFailure = {
|
|
|
|
eventName: string
|
|
|
|
payload: {
|
|
|
|
platform: string
|
|
|
|
arch: string
|
|
|
|
nodeVersion: string
|
|
|
|
nextVersion: string
|
2022-05-02 23:11:45 +02:00
|
|
|
wasm?: 'enabled' | 'fallback' | 'failed'
|
2022-04-28 11:31:15 +02:00
|
|
|
glibcVersion?: string
|
|
|
|
installedSwcPackages?: string
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function eventSwcLoadFailure(
|
2022-05-02 23:11:45 +02:00
|
|
|
event?: EventSwcLoadFailure['payload']
|
2022-04-28 11:31:15 +02:00
|
|
|
): Promise<void> {
|
|
|
|
const telemetry: Telemetry = traceGlobals.get('telemetry')
|
|
|
|
// can't continue if telemetry isn't set
|
|
|
|
if (!telemetry) return
|
|
|
|
|
2022-05-02 23:11:45 +02:00
|
|
|
let glibcVersion
|
|
|
|
let installedSwcPackages
|
|
|
|
|
|
|
|
try {
|
|
|
|
// @ts-ignore
|
|
|
|
glibcVersion = process.report?.getReport().header.glibcVersionRuntime
|
|
|
|
} catch (_) {}
|
|
|
|
|
|
|
|
try {
|
|
|
|
const pkgNames = Object.keys(optionalDependencies || {}).filter((pkg) =>
|
|
|
|
pkg.startsWith('@next/swc')
|
|
|
|
)
|
|
|
|
const installedPkgs = []
|
|
|
|
|
|
|
|
for (const pkg of pkgNames) {
|
|
|
|
try {
|
|
|
|
const { version } = require(`${pkg}/package.json`)
|
|
|
|
installedPkgs.push(`${pkg}@${version}`)
|
|
|
|
} catch (_) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (installedPkgs.length > 0) {
|
|
|
|
installedSwcPackages = installedPkgs.sort().join(',')
|
|
|
|
}
|
|
|
|
} catch (_) {}
|
|
|
|
|
2022-04-28 11:31:15 +02:00
|
|
|
telemetry.record({
|
|
|
|
eventName: EVENT_PLUGIN_PRESENT,
|
2022-05-02 23:11:45 +02:00
|
|
|
payload: {
|
|
|
|
nextVersion,
|
|
|
|
glibcVersion,
|
|
|
|
installedSwcPackages,
|
|
|
|
arch: process.arch,
|
|
|
|
platform: process.platform,
|
|
|
|
nodeVersion: process.versions.node,
|
|
|
|
wasm: event?.wasm,
|
|
|
|
},
|
2022-04-28 11:31:15 +02:00
|
|
|
})
|
|
|
|
// ensure this event is flushed before process exits
|
|
|
|
await telemetry.flush()
|
|
|
|
}
|