Files
sh f65c2da587 nodejs: lazy per-backend libsimplex download (#7543)
* ci: drop dlltool from nodejs libs release

* nodejs: download libsimplex into the user cache

* nodejs: load libsimplex at runtime per backend

* support bot: select db backend with --db

* python: match backend switch error text

* nodejs: download prebuilt add-on at runtime

* ci: build nodejs add-on for libs release

* calculator bot: load libs and add-on in image

* support bot: document add-on override

* nodejs: keep worker test output free of colors

* nodejs: verify sha-256 of downloaded assets

* python: pin core libs release with sha-256

* ci: add packages release script

* ci: release nodejs add-on and open release PR

* ci: publish packages after release PR

* nodejs: keep npm from building the add-on

* calculator bot: build the add-on in the image

* ci: merge package release workflows

* ci: open release PR when publishing fails

* ci: build the add-on with node-addon-api only

* ci: skip publishing in a called packages workflow

* ci: update package release actions to Node 24

* nodejs: fix receive test timeout

* ci: test packages on pull requests

* nodejs: reuse the database in the close stress test

* ci: keep failed package tests from hanging

* ci: skip preset server tests

* ci: plan package builds from the changes

* ci: test packages with a given libsimplex

* ci: test packages with libsimplex of core changes
2026-10-14 09:53:53 +01:00

43 lines
1.4 KiB
JavaScript

#!/usr/bin/env node
import {parseArgs} from "util"
import type {Backend} from "./core"
import {resolveAddonPath, resolveLibsDir} from "./libs"
const USAGE = "usage: simplex-chat install [--backend sqlite|postgres]"
const EXIT_INSTALL_FAILED = 1
const EXIT_USAGE = 2
export function parseInstallArgs(argv: string[]): Backend {
const {positionals, values: {backend = "sqlite"}} = parseArgs({args: argv, allowPositionals: true, options: {backend: {type: "string"}}})
if (positionals.length !== 1 || positionals[0] !== "install") throw new Error("expected command: install")
if (backend !== "sqlite" && backend !== "postgres") throw new Error(`invalid backend: ${backend}`)
return backend
}
export async function main(argv: string[]): Promise<number> {
if (argv.includes("-h") || argv.includes("--help")) {
console.log(USAGE)
return 0
}
let backend: Backend
try {
backend = parseInstallArgs(argv)
} catch (e) {
console.error(`${(e as Error).message}\n${USAGE}`)
return EXIT_USAGE
}
try {
const [dir, addon] = await Promise.all([resolveLibsDir(backend), resolveAddonPath()])
console.log(`libsimplex installed at: ${dir}`)
console.log(`Node.js add-on installed at: ${addon}`)
return 0
} catch (e) {
console.error(`install failed: ${(e as Error).message}`)
return EXIT_INSTALL_FAILED
}
}
if (require.main === module) {
main(process.argv.slice(2)).then(code => { process.exitCode = code })
}