File size: 2,696 Bytes
6a2bc3b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #!/usr/bin/env node
import { mkdir, rm, writeFile } from 'node:fs/promises';
import { basename, dirname, join, parse, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { isMainModule } from './vsix-targets.mjs';
const SAFE_DIRECTORY_NAME = 'vscode-extension-dev';
const scriptDir = dirname(fileURLToPath(import.meta.url));
const monorepoRoot = resolve(scriptDir, '../../..');
const defaultBaseDir = join(monorepoRoot, '.tmp', SAFE_DIRECTORY_NAME);
export async function prepareDevEnvironment(baseDir = defaultBaseDir) {
const root = resolve(baseDir);
assertSafeRoot(root);
await rm(root, { recursive: true, force: true });
const paths = {
root,
userData: join(root, 'user-data'),
extensions: join(root, 'extensions'),
kimiHome: join(root, 'kimi-home'),
workspace: join(root, 'workspace'),
};
await Promise.all(
Object.values(paths)
.filter((path) => path !== root)
.map((path) => mkdir(path, { recursive: true })),
);
await writeFile(
join(paths.workspace, 'README.md'),
'# Isolated Kimi Code extension development workspace\n',
);
return paths;
}
function assertSafeRoot(root) {
const parsed = parse(root);
if (root === parsed.root || basename(root) !== SAFE_DIRECTORY_NAME) {
throw new Error(
`Refusing to reset unsafe development directory "${root}"; it must end in ${SAFE_DIRECTORY_NAME}.`,
);
}
}
function parseArguments(argv) {
let baseDir = defaultBaseDir;
let help = false;
for (let index = 0; index < argv.length; index += 1) {
const argument = argv[index];
if (argument === '--') {
continue;
} else if (argument === '--help' || argument === '-h') {
help = true;
} else if (argument === '--base-dir') {
const value = argv[++index];
if (value === undefined || value.startsWith('-')) throw new Error('--base-dir requires a value.');
baseDir = value;
} else {
throw new Error(`Unknown option: ${argument}`);
}
}
return { baseDir, help };
}
async function main() {
const options = parseArguments(process.argv.slice(2));
if (options.help) {
console.log('Usage: node scripts/prepare-dev.mjs [--base-dir <.../vscode-extension-dev>]');
return;
}
const paths = await prepareDevEnvironment(options.baseDir);
console.log(`Prepared isolated VS Code profile: ${paths.root}`);
console.log(`KIMI_CODE_HOME=${paths.kimiHome}`);
console.log(`Workspace=${paths.workspace}`);
}
if (isMainModule(import.meta.url)) {
main().catch((error) => {
console.error(`Development environment setup failed: ${error instanceof Error ? error.message : String(error)}`);
process.exitCode = 1;
});
}
|