source dump of claude code
at main 156 lines 15 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import React from 'react'; 3import { Box, render, Text } from '../ink.js'; 4import { KeybindingSetup } from '../keybindings/KeybindingProviderSetup.js'; 5import { AppStateProvider } from '../state/AppState.js'; 6import type { ConfigParseError } from '../utils/errors.js'; 7import { getBaseRenderOptions } from '../utils/renderOptions.js'; 8import { jsonStringify, writeFileSync_DEPRECATED } from '../utils/slowOperations.js'; 9import type { ThemeName } from '../utils/theme.js'; 10import { Select } from './CustomSelect/index.js'; 11import { Dialog } from './design-system/Dialog.js'; 12interface InvalidConfigHandlerProps { 13 error: ConfigParseError; 14} 15interface InvalidConfigDialogProps { 16 filePath: string; 17 errorDescription: string; 18 onExit: () => void; 19 onReset: () => void; 20} 21 22/** 23 * Dialog shown when the Claude config file contains invalid JSON 24 */ 25function InvalidConfigDialog(t0) { 26 const $ = _c(19); 27 const { 28 filePath, 29 errorDescription, 30 onExit, 31 onReset 32 } = t0; 33 let t1; 34 if ($[0] !== onExit || $[1] !== onReset) { 35 t1 = value => { 36 if (value === "exit") { 37 onExit(); 38 } else { 39 onReset(); 40 } 41 }; 42 $[0] = onExit; 43 $[1] = onReset; 44 $[2] = t1; 45 } else { 46 t1 = $[2]; 47 } 48 const handleSelect = t1; 49 let t2; 50 if ($[3] !== filePath) { 51 t2 = <Text>The configuration file at <Text bold={true}>{filePath}</Text> contains invalid JSON.</Text>; 52 $[3] = filePath; 53 $[4] = t2; 54 } else { 55 t2 = $[4]; 56 } 57 let t3; 58 if ($[5] !== errorDescription) { 59 t3 = <Text>{errorDescription}</Text>; 60 $[5] = errorDescription; 61 $[6] = t3; 62 } else { 63 t3 = $[6]; 64 } 65 let t4; 66 if ($[7] !== t2 || $[8] !== t3) { 67 t4 = <Box flexDirection="column" gap={1}>{t2}{t3}</Box>; 68 $[7] = t2; 69 $[8] = t3; 70 $[9] = t4; 71 } else { 72 t4 = $[9]; 73 } 74 let t5; 75 if ($[10] === Symbol.for("react.memo_cache_sentinel")) { 76 t5 = <Text bold={true}>Choose an option:</Text>; 77 $[10] = t5; 78 } else { 79 t5 = $[10]; 80 } 81 let t6; 82 if ($[11] === Symbol.for("react.memo_cache_sentinel")) { 83 t6 = [{ 84 label: "Exit and fix manually", 85 value: "exit" 86 }, { 87 label: "Reset with default configuration", 88 value: "reset" 89 }]; 90 $[11] = t6; 91 } else { 92 t6 = $[11]; 93 } 94 let t7; 95 if ($[12] !== handleSelect || $[13] !== onExit) { 96 t7 = <Box flexDirection="column">{t5}<Select options={t6} onChange={handleSelect} onCancel={onExit} /></Box>; 97 $[12] = handleSelect; 98 $[13] = onExit; 99 $[14] = t7; 100 } else { 101 t7 = $[14]; 102 } 103 let t8; 104 if ($[15] !== onExit || $[16] !== t4 || $[17] !== t7) { 105 t8 = <Dialog title="Configuration Error" color="error" onCancel={onExit}>{t4}{t7}</Dialog>; 106 $[15] = onExit; 107 $[16] = t4; 108 $[17] = t7; 109 $[18] = t8; 110 } else { 111 t8 = $[18]; 112 } 113 return t8; 114} 115 116/** 117 * Safe fallback theme name for error dialogs to avoid circular dependency. 118 * Uses a hardcoded dark theme that doesn't require reading from config. 119 */ 120const SAFE_ERROR_THEME_NAME: ThemeName = 'dark'; 121export async function showInvalidConfigDialog({ 122 error 123}: InvalidConfigHandlerProps): Promise<void> { 124 // Extend RenderOptions with theme property for this specific usage 125 type SafeRenderOptions = Parameters<typeof render>[1] & { 126 theme?: ThemeName; 127 }; 128 const renderOptions: SafeRenderOptions = { 129 ...getBaseRenderOptions(false), 130 // IMPORTANT: Use hardcoded theme name to avoid circular dependency with getGlobalConfig() 131 // This allows the error dialog to show even when config file has JSON syntax errors 132 theme: SAFE_ERROR_THEME_NAME 133 }; 134 await new Promise<void>(async resolve => { 135 const { 136 unmount 137 } = await render(<AppStateProvider> 138 <KeybindingSetup> 139 <InvalidConfigDialog filePath={error.filePath} errorDescription={error.message} onExit={() => { 140 unmount(); 141 void resolve(); 142 process.exit(1); 143 }} onReset={() => { 144 writeFileSync_DEPRECATED(error.filePath, jsonStringify(error.defaultConfig, null, 2), { 145 flush: false, 146 encoding: 'utf8' 147 }); 148 unmount(); 149 void resolve(); 150 process.exit(0); 151 }} /> 152 </KeybindingSetup> 153 </AppStateProvider>, renderOptions); 154 }); 155} 156//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkJveCIsInJlbmRlciIsIlRleHQiLCJLZXliaW5kaW5nU2V0dXAiLCJBcHBTdGF0ZVByb3ZpZGVyIiwiQ29uZmlnUGFyc2VFcnJvciIsImdldEJhc2VSZW5kZXJPcHRpb25zIiwianNvblN0cmluZ2lmeSIsIndyaXRlRmlsZVN5bmNfREVQUkVDQVRFRCIsIlRoZW1lTmFtZSIsIlNlbGVjdCIsIkRpYWxvZyIsIkludmFsaWRDb25maWdIYW5kbGVyUHJvcHMiLCJlcnJvciIsIkludmFsaWRDb25maWdEaWFsb2dQcm9wcyIsImZpbGVQYXRoIiwiZXJyb3JEZXNjcmlwdGlvbiIsIm9uRXhpdCIsIm9uUmVzZXQiLCJJbnZhbGlkQ29uZmlnRGlhbG9nIiwidDAiLCIkIiwiX2MiLCJ0MSIsInZhbHVlIiwiaGFuZGxlU2VsZWN0IiwidDIiLCJ0MyIsInQ0IiwidDUiLCJTeW1ib2wiLCJmb3IiLCJ0NiIsImxhYmVsIiwidDciLCJ0OCIsIlNBRkVfRVJST1JfVEhFTUVfTkFNRSIsInNob3dJbnZhbGlkQ29uZmlnRGlhbG9nIiwiUHJvbWlzZSIsIlNhZmVSZW5kZXJPcHRpb25zIiwiUGFyYW1ldGVycyIsInRoZW1lIiwicmVuZGVyT3B0aW9ucyIsInJlc29sdmUiLCJ1bm1vdW50IiwibWVzc2FnZSIsInByb2Nlc3MiLCJleGl0IiwiZGVmYXVsdENvbmZpZyIsImZsdXNoIiwiZW5jb2RpbmciXSwic291cmNlcyI6WyJJbnZhbGlkQ29uZmlnRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIHJlbmRlciwgVGV4dCB9IGZyb20gJy4uL2luay5qcydcbmltcG9ydCB7IEtleWJpbmRpbmdTZXR1cCB9IGZyb20gJy4uL2tleWJpbmRpbmdzL0tleWJpbmRpbmdQcm92aWRlclNldHVwLmpzJ1xuaW1wb3J0IHsgQXBwU3RhdGVQcm92aWRlciB9IGZyb20gJy4uL3N0YXRlL0FwcFN0YXRlLmpzJ1xuaW1wb3J0IHR5cGUgeyBDb25maWdQYXJzZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3JzLmpzJ1xuaW1wb3J0IHsgZ2V0QmFzZVJlbmRlck9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9yZW5kZXJPcHRpb25zLmpzJ1xuaW1wb3J0IHtcbiAganNvblN0cmluZ2lmeSxcbiAgd3JpdGVGaWxlU3luY19ERVBSRUNBVEVELFxufSBmcm9tICcuLi91dGlscy9zbG93T3BlcmF0aW9ucy5qcydcbmltcG9ydCB0eXBlIHsgVGhlbWVOYW1lIH0gZnJvbSAnLi4vdXRpbHMvdGhlbWUuanMnXG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tICcuL0N1c3RvbVNlbGVjdC9pbmRleC5qcydcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJy4vZGVzaWduLXN5c3RlbS9EaWFsb2cuanMnXG5cbmludGVyZmFjZSBJbnZhbGlkQ29uZmlnSGFuZGxlclByb3BzIHtcbiAgZXJyb3I6IENvbmZpZ1BhcnNlRXJyb3Jcbn1cblxuaW50ZXJmYWNlIEludmFsaWRDb25maWdEaWFsb2dQcm9wcyB7XG4gIGZpbGVQYXRoOiBzdHJpbmdcbiAgZXJyb3JEZXNjcmlwdGlvbjogc3RyaW5nXG4gIG9uRXhpdDogKCkgPT4gdm9pZFxuICBvblJlc2V0OiAoKSA9PiB2b2lkXG59XG5cbi8qKlxuICogRGlhbG9nIHNob3duIHdoZW4gdGhlIENsYXVkZSBjb25maWcgZmlsZSBjb250YWlucyBpbnZhbGlkIEpTT05cbiAqL1xuZnVuY3Rpb24gSW52YWxpZENvbmZpZ0RpYWxvZyh7XG4gIGZpbGVQYXRoLFxuICBlcnJvckRlc2NyaXB0aW9uLFxuICBvbkV4aXQsXG4gIG9uUmVzZXQsXG59OiBJbnZhbGlkQ29uZmlnRGlhbG9nUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAvLyBIYW5kbGVyIGZvciBTZWxlY3Qgb25DaGFuZ2VcbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodmFsdWUgPT09ICdleGl0Jykge1xuICAgICAgb25FeGl0KClcbiAgICB9IGVsc2Uge1xuICAgICAgb25SZXNldCgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIHRpdGxlPVwiQ29uZmlndXJhdGlvbiBFcnJvclwiIGNvbG9yPVwiZXJyb3JcIiBvbkNhbmNlbD17b25FeGl0fT5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGdhcD17MX0+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgYXQgPFRleHQgYm9sZD57ZmlsZVBhdGh9PC9UZXh0PiBjb250YWluc1xuICAgICAgICAgIGludmFsaWQgSlNPTi5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dD57ZXJyb3JEZXNjcmlwdGlvbn08L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8VGV4dCBib2xkPkNob29zZSBhbiBvcHRpb246PC9UZXh0PlxuICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgeyBsYWJlbDogJ0V4aXQgYW5kIGZpeCBtYW51YWxseScsIHZhbHVlOiAnZXhpdCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdSZXNldCB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbicsIHZhbHVlOiAncmVzZXQnIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkV4aXR9XG4gICAgICAgIC8+XG4gICAgICA8L0JveD5cbiAgICA8L0RpYWxvZz5cbiAgKVxufVxuXG4vKipcbiAqIFNhZmUgZmFsbGJhY2sgdGhlbWUgbmFtZSBmb3IgZXJyb3IgZGlhbG9ncyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICogVXNlcyBhIGhhcmRjb2RlZCBkYXJrIHRoZW1lIHRoYXQgZG9lc24ndCByZXF1aXJlIHJlYWRpbmcgZnJvbSBjb25maWcuXG4gKi9cbmNvbnN0IFNBRkVfRVJST1JfVEhFTUVfTkFNRTogVGhlbWVOYW1lID0gJ2RhcmsnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG93SW52YWxpZENvbmZpZ0RpYWxvZyh7XG4gIGVycm9yLFxufTogSW52YWxpZENvbmZpZ0hhbmRsZXJQcm9wcyk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBFeHRlbmQgUmVuZGVyT3B0aW9ucyB3aXRoIHRoZW1lIHByb3BlcnR5IGZvciB0aGlzIHNwZWNpZmljIHVzYWdlXG4gIHR5cGUgU2FmZVJlbmRlck9wdGlvbnMgPSBQYXJhbWV0ZXJzPHR5cGVvZiByZW5kZXI+WzFdICYgeyB0aGVtZT86IFRoZW1lTmFtZSB9XG5cbiAgY29uc3QgcmVuZGVyT3B0aW9uczogU2FmZVJlbmRlck9wdGlvbnMgPSB7XG4gICAgLi4uZ2V0QmFzZVJlbmRlck9wdGlvbnMoZmFsc2UpLFxuICAgIC8vIElNUE9SVEFOVDogVXNlIGhhcmRjb2RlZCB0aGVtZSBuYW1lIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBnZXRHbG9iYWxDb25maWcoKVxuICAgIC8vIFRoaXMgYWxsb3dzIHRoZSBlcnJvciBkaWFsb2cgdG8gc2hvdyBldmVuIHdoZW4gY29uZmlnIGZpbGUgaGFzIEpTT04gc3ludGF4IGVycm9yc1xuICAgIHRoZW1lOiBTQUZFX0VSUk9SX1RIRU1FX05BTUUsXG4gIH1cblxuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyByZXNvbHZlID0+IHtcbiAgICBjb25zdCB7IHVubW91bnQgfSA9IGF3YWl0IHJlbmRlcihcbiAgICAgIDxBcHBTdGF0ZVByb3ZpZGVyPlxuICAgICAgICA8S2V5YmluZGluZ1NldHVwPlxuICAgICAgICAgIDxJbnZhbGlkQ29uZmlnRGlhbG9nXG4gICAgICAgICAgICBmaWxlUGF0aD17ZXJyb3IuZmlsZVBhdGh9XG4gICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uPXtlcnJvci5tZXNzYWdlfVxuICAgICAgICAgICAgb25FeGl0PXsoKSA9PiB7XG4gICAgICAgICAgICAgIHVubW91bnQoKVxuICAgICAgICAgICAgICB2b2lkIHJlc29sdmUoKVxuICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblJlc2V0PXsoKSA9PiB7XG4gICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmNfREVQUkVDQVRFRChcbiAgICAgICAgICAgICAgICBlcnJvci5maWxlUGF0aCxcbiAgICAgICAgICAgICAgICBqc29uU3RyaW5naWZ5KGVycm9yLmRlZmF1bHRDb25maWcsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHsgZmx1c2g6IGZhbHNlLCBlbmNvZGluZzogJ3V0ZjgnIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdW5tb3VudCgpXG4gICAgICAgICAgICAgIHZvaWQgcmVzb2x2ZSgpXG4gICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0tleWJpbmRpbmdTZXR1cD5cbiAgICAgIDwvQXBwU3RhdGVQcm92aWRlcj4sXG4gICAgICByZW5kZXJPcHRpb25zLFxuICAgIClcbiAgfSlcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLEtBQUssTUFBTSxPQUFPO0FBQ3pCLFNBQVNDLEdBQUcsRUFBRUMsTUFBTSxFQUFFQyxJQUFJLFFBQVEsV0FBVztBQUM3QyxTQUFTQyxlQUFlLFFBQVEsMkNBQTJDO0FBQzNFLFNBQVNDLGdCQUFnQixRQUFRLHNCQUFzQjtBQUN2RCxjQUFjQyxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFDMUQsU0FBU0Msb0JBQW9CLFFBQVEsMkJBQTJCO0FBQ2hFLFNBQ0VDLGFBQWEsRUFDYkMsd0JBQXdCLFFBQ25CLDRCQUE0QjtBQUNuQyxjQUFjQyxTQUFTLFFBQVEsbUJBQW1CO0FBQ2xELFNBQVNDLE1B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