DSH-Arch-Setup/plugins/dsh-touched-git/scripts/install-editor-extensions.mjs
Шурупов Илья Викторович cf9443753e Add one-command Arch DSH setup
Package the portable DSH profiles, local plugins, desktop integration, Firefox wrapper, and ownership-aware installer lifecycle. Bundle checksum-pinned OpenVSCode, editor extensions, translation assets, and cloudflared so unreliable upstream artifact downloads cannot break a clean installation.
2026-09-12 19:13:36 +03:00

29 lines
1.4 KiB
JavaScript

import { execFile } from 'node:child_process'
import { mkdir, readFile } from 'node:fs/promises'
import { homedir } from 'node:os'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
import { promisify } from 'node:util'
const execute = promisify(execFile)
const pluginDirectory = dirname(dirname(fileURLToPath(import.meta.url)))
export async function installEditorExtensions(sourceDirectories = ['editor-preferences', 'editor-file-bridge']) {
const extensionsDirectory = join(process.env.DSH_HOME?.trim() || join(homedir(), '.dsh'), 'touched-git', 'editor', 'extensions')
for (const sourceDirectory of sourceDirectories) {
const sourcePath = join(pluginDirectory, sourceDirectory)
const manifest = JSON.parse(await readFile(join(sourcePath, 'package.json'), 'utf8'))
const archive = join(pluginDirectory, 'runtime', `${manifest.name}.vsix`)
await mkdir(dirname(archive), { recursive: true })
await execute('python3', [join(pluginDirectory, 'scripts', 'package-editor-preferences.py'), sourcePath, archive])
const result = await execute(join(pluginDirectory, 'runtime', 'current', 'bin', 'openvscode-server'), [
'--extensions-dir', extensionsDirectory,
'--install-extension', archive,
'--force',
])
process.stdout.write(result.stdout)
process.stderr.write(result.stderr)
}
}
if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) await installEditorExtensions()