chore: import upstream snapshot with attribution
This commit is contained in:
Executable
+73
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { spawnSync } from 'node:child_process'
|
||||
import { accessSync, constants, existsSync, realpathSync, statSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
|
||||
const scriptPath = realpathSync(import.meta.filename)
|
||||
const scriptDir = path.dirname(scriptPath)
|
||||
const repoRoot = path.resolve(scriptDir, '..', '..')
|
||||
const cliEntry =
|
||||
process.env.ORCA_DEV_CLI_ENTRY_PATH ?? path.join(repoRoot, 'out', 'cli', 'index.js')
|
||||
|
||||
if (!existsSync(cliEntry)) {
|
||||
console.error("orca-dev: CLI not built yet. Run 'pnpm run build:cli' first.")
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
process.env.ORCA_USER_DATA_PATH = process.env.ORCA_DEV_USER_DATA_PATH ?? getDefaultDevUserDataPath()
|
||||
|
||||
const electronExecutable = getElectronExecutable()
|
||||
if (!process.env.ORCA_APP_EXECUTABLE && isRunnableFile(electronExecutable)) {
|
||||
process.env.ORCA_APP_EXECUTABLE = electronExecutable
|
||||
process.env.ORCA_APP_EXECUTABLE_NEEDS_APP_ROOT = '1'
|
||||
}
|
||||
|
||||
const result = spawnSync(process.execPath, [cliEntry, ...process.argv.slice(2)], {
|
||||
stdio: 'inherit',
|
||||
env: process.env
|
||||
})
|
||||
|
||||
if (result.signal) {
|
||||
process.kill(process.pid, result.signal)
|
||||
}
|
||||
process.exit(result.status ?? (result.error ? 1 : 0))
|
||||
|
||||
function getDefaultDevUserDataPath() {
|
||||
if (process.platform === 'darwin') {
|
||||
return path.join(process.env.HOME ?? '', 'Library', 'Application Support', 'orca-dev')
|
||||
}
|
||||
if (process.platform === 'win32') {
|
||||
return path.join(
|
||||
process.env.APPDATA ?? path.join(process.env.USERPROFILE ?? '', 'AppData', 'Roaming'),
|
||||
'orca-dev'
|
||||
)
|
||||
}
|
||||
return path.join(
|
||||
process.env.XDG_CONFIG_HOME ?? path.join(process.env.HOME ?? '', '.config'),
|
||||
'orca-dev'
|
||||
)
|
||||
}
|
||||
|
||||
function getElectronExecutable() {
|
||||
if (process.platform === 'win32') {
|
||||
return path.join(repoRoot, 'node_modules', 'electron', 'dist', 'electron.exe')
|
||||
}
|
||||
return path.join(repoRoot, 'node_modules', '.bin', 'electron')
|
||||
}
|
||||
|
||||
function isRunnableFile(candidate) {
|
||||
try {
|
||||
const stats = statSync(candidate)
|
||||
if (!stats.isFile()) {
|
||||
return false
|
||||
}
|
||||
if (process.platform === 'win32') {
|
||||
return true
|
||||
}
|
||||
accessSync(candidate, constants.X_OK)
|
||||
return true
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user