140 lines
4.7 KiB
TypeScript
140 lines
4.7 KiB
TypeScript
import fs from "fs"
|
|
import path from "path"
|
|
|
|
export type Version = {
|
|
id: string,
|
|
// This can be the image ID, or a function that takes the version ID and returns the image ID.
|
|
// By default it uses the canonicalImageIDLookup.
|
|
containerImageID?: string | ((id: string) => string),
|
|
// If defined, this will increase the timeout for tests using this version
|
|
timeoutSecs?: number,
|
|
transports: Array<(string | { name: string, onlyDial: boolean })>,
|
|
secureChannels: string[],
|
|
muxers: string[]
|
|
}
|
|
|
|
function canonicalImagePath(id: string): string {
|
|
// Split by implementation and version
|
|
const [impl, version] = id.split("-v")
|
|
// Drop the patch version
|
|
const [major, minor, patch] = version.split(".")
|
|
let versionFolder = `v${major}.${minor}`
|
|
if (major === "0" && minor === "0") {
|
|
// We're still in the 0.0.x phase, so we use the patch version
|
|
versionFolder = `v0.0.${patch}`
|
|
}
|
|
// Read the image ID from the JSON file on the filesystem
|
|
return `./impl/${impl}/${versionFolder}/image.json`
|
|
}
|
|
|
|
// Loads the container image id for the given version id. Expects the form of
|
|
// "<impl>-vX.Y.Z" or "<impl>vX.Y" and the image id to be in the file
|
|
// "./impl/<impl>/vX.Y/image.json" or "./impl/<impl>/v0.0.Z/image.json"
|
|
function canonicalImageIDLookup(id: string): string {
|
|
const imageIDJSON = fs.readFileSync(canonicalImagePath(id), "utf8")
|
|
const imageID = JSON.parse(imageIDJSON).imageID
|
|
return imageID
|
|
}
|
|
|
|
// Loads the container image id for the given browser version id. Expects the
|
|
// form of "<browser>-<impl>-vX.Y.Z" or "<impl>vX.Y" and the image id to be in the file
|
|
// "./impl/<impl>/vX.Y/<browser>-image.json" or "./impl/<impl>/v0.0.Z/<browser>-image.json"
|
|
function browserImageIDLookup(id: string): string {
|
|
const [browser, ...rest] = id.split("-")
|
|
const parentDir = path.dirname(canonicalImagePath(rest.join("-")))
|
|
|
|
// Read the image ID from the JSON file on the filesystem
|
|
const imageIDJSON = fs.readFileSync(path.join(parentDir, `${browser}-image.json`), "utf8")
|
|
const imageID = JSON.parse(imageIDJSON).imageID
|
|
return imageID
|
|
}
|
|
|
|
export const versions: Array<Version> = [
|
|
{
|
|
id: "rust-v0.51",
|
|
transports: ["ws", "tcp", "quic-v1", "webrtc-direct"],
|
|
secureChannels: ["tls", "noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "rust-v0.52",
|
|
transports: ["ws", "tcp", "quic-v1", "webrtc-direct"],
|
|
secureChannels: ["tls", "noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "rust-chromium-v0.52",
|
|
transports: [{ name: "webtransport", onlyDial: true }],
|
|
secureChannels: [],
|
|
muxers: [],
|
|
},
|
|
{
|
|
id: "js-v0.45",
|
|
transports: ["tcp", "ws", { name: "wss", onlyDial: true }],
|
|
secureChannels: ["noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "js-v0.46",
|
|
transports: ["tcp", "ws", { name: "wss", onlyDial: true }],
|
|
secureChannels: ["noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "chromium-js-v0.46",
|
|
containerImageID: browserImageIDLookup,
|
|
transports: [{ name: "webtransport", onlyDial: true }, { name: "wss", onlyDial: true }, { name: "webrtc-direct", onlyDial: true }, "webrtc"],
|
|
secureChannels: ["noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "firefox-js-v0.46",
|
|
containerImageID: browserImageIDLookup,
|
|
transports: [{ name: "wss", onlyDial: true }, { name: "webrtc-direct", onlyDial: true }, "webrtc"],
|
|
secureChannels: ["noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "go-v0.31",
|
|
transports: ["tcp", "ws", "quic-v1", "webtransport"],
|
|
secureChannels: ["tls", "noise"],
|
|
muxers: ["yamux"],
|
|
},
|
|
{
|
|
id: "go-v0.30",
|
|
transports: ["tcp", "ws", "quic-v1", "webtransport"],
|
|
secureChannels: ["tls", "noise"],
|
|
muxers: ["yamux"],
|
|
},
|
|
{
|
|
id: "go-v0.29",
|
|
transports: ["tcp", "ws", "quic", "quic-v1", "webtransport"],
|
|
secureChannels: ["tls", "noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "nim-v1.0",
|
|
transports: ["tcp", "ws"],
|
|
secureChannels: ["noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "zig-v0.0.1",
|
|
transports: ["quic-v1"],
|
|
secureChannels: [],
|
|
muxers: [],
|
|
},
|
|
{
|
|
id: "java-v0.0.1",
|
|
transports: ["tcp"],
|
|
secureChannels: ["tls", "noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
{
|
|
id: "java-v0.6",
|
|
transports: ["tcp"],
|
|
secureChannels: ["tls", "noise"],
|
|
muxers: ["mplex", "yamux"],
|
|
},
|
|
].map((v: Version) => (typeof v.containerImageID === "undefined" ? ({ ...v, containerImageID: canonicalImageIDLookup }) : v))
|