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.
29 lines
1.4 KiB
JavaScript
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()
|