dbctx 1.0.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/app/assemble.d.mts +5 -0
  2. package/dist/app/assemble.d.mts.map +1 -0
  3. package/dist/app/assemble.mjs +161 -0
  4. package/dist/app/config.d.mts +9 -0
  5. package/dist/app/config.d.mts.map +1 -0
  6. package/dist/app/config.mjs +49 -0
  7. package/dist/app/db.d.mts +9 -0
  8. package/dist/app/db.d.mts.map +1 -0
  9. package/dist/app/db.mjs +181 -0
  10. package/dist/app/detect.d.mts +11 -0
  11. package/dist/app/detect.d.mts.map +1 -0
  12. package/dist/app/detect.mjs +105 -0
  13. package/dist/app/index.d.mts +3 -0
  14. package/dist/app/index.d.mts.map +1 -0
  15. package/dist/app/index.mjs +81 -0
  16. package/dist/app/open-url.d.mts +4 -0
  17. package/dist/app/open-url.d.mts.map +1 -0
  18. package/dist/app/open-url.mjs +27 -0
  19. package/dist/app/session.d.mts +8 -0
  20. package/dist/app/session.d.mts.map +1 -0
  21. package/dist/app/session.mjs +155 -0
  22. package/dist/app/ssh.d.mts +3 -0
  23. package/dist/app/ssh.d.mts.map +1 -0
  24. package/dist/app/ssh.mjs +207 -0
  25. package/dist/db/analyze.d.mts +1 -1
  26. package/dist/db/analyze.d.mts.map +1 -1
  27. package/dist/db/analyze.mjs +1 -1
  28. package/dist/db/attributes.d.mts +3 -3
  29. package/dist/db/attributes.d.mts.map +1 -1
  30. package/dist/db/attributes.mjs +2 -2
  31. package/dist/db/enums.d.mts +1 -1
  32. package/dist/db/enums.d.mts.map +1 -1
  33. package/dist/db/enums.mjs +2 -2
  34. package/dist/db/file-stats.d.mts +1 -1
  35. package/dist/db/file-stats.d.mts.map +1 -1
  36. package/dist/db/file-stats.mjs +1 -1
  37. package/dist/db/foreign-keys.d.mts +2 -2
  38. package/dist/db/foreign-keys.d.mts.map +1 -1
  39. package/dist/db/foreign-keys.mjs +1 -1
  40. package/dist/db/index.d.mts +9 -9
  41. package/dist/db/index.d.mts.map +1 -1
  42. package/dist/db/index.mjs +10 -10
  43. package/dist/db/indexes.d.mts +1 -1
  44. package/dist/db/indexes.d.mts.map +1 -1
  45. package/dist/db/indexes.mjs +1 -1
  46. package/dist/db/relations.d.mts +2 -2
  47. package/dist/db/relations.d.mts.map +1 -1
  48. package/dist/db/relations.mjs +2 -2
  49. package/dist/db/stats.d.mts +1 -1
  50. package/dist/db/stats.d.mts.map +1 -1
  51. package/dist/db/stats.mjs +2 -2
  52. package/dist/db/version.d.mts +2 -1
  53. package/dist/db/version.d.mts.map +1 -1
  54. package/dist/db/version.mjs +9 -1
  55. package/dist/index.d.mts +4 -3
  56. package/dist/index.d.mts.map +1 -1
  57. package/dist/index.mjs +105 -51
  58. package/dist/lib/trpc-url.d.mts +2 -0
  59. package/dist/lib/trpc-url.d.mts.map +1 -0
  60. package/dist/lib/trpc-url.mjs +6 -0
  61. package/dist/lib/trpc.d.mts +7 -0
  62. package/dist/lib/trpc.d.mts.map +1 -0
  63. package/dist/lib/trpc.mjs +37 -0
  64. package/dist/lib/trpc.react.d.mts +4 -0
  65. package/dist/lib/trpc.react.d.mts.map +1 -0
  66. package/dist/lib/trpc.react.mjs +3 -0
  67. package/dist/lib/version.d.mts +2 -0
  68. package/dist/lib/version.d.mts.map +1 -0
  69. package/dist/lib/version.mjs +5 -0
  70. package/dist/providers/TrpcProvider.d.ts +9 -0
  71. package/dist/providers/TrpcProvider.d.ts.map +1 -0
  72. package/dist/providers/TrpcProvider.js +41 -0
  73. package/dist/schemas/index.d.mts +106 -1
  74. package/dist/schemas/index.d.mts.map +1 -1
  75. package/dist/schemas/index.mjs +27 -2
  76. package/dist/store.d.mts +64 -0
  77. package/dist/store.d.mts.map +1 -0
  78. package/dist/store.mjs +68 -0
  79. package/dist/{App.d.ts → types/connection.d.mts} +3 -9
  80. package/dist/types/connection.d.mts.map +1 -0
  81. package/dist/types/connection.mjs +2 -0
  82. package/dist/ui/App.d.ts +10 -0
  83. package/dist/ui/App.d.ts.map +1 -0
  84. package/dist/ui/App.js +13 -0
  85. package/dist/ui/components/DB.d.ts +10 -0
  86. package/dist/ui/components/DB.d.ts.map +1 -0
  87. package/dist/ui/components/DB.js +22 -0
  88. package/dist/{components → ui/components}/Error.d.ts +1 -1
  89. package/dist/ui/components/Error.d.ts.map +1 -0
  90. package/dist/ui/components/Error.js +6 -0
  91. package/dist/ui/components/Gate.d.ts +10 -0
  92. package/dist/ui/components/Gate.d.ts.map +1 -0
  93. package/dist/ui/components/Gate.js +15 -0
  94. package/dist/ui/components/Introspect.d.ts +10 -0
  95. package/dist/ui/components/Introspect.d.ts.map +1 -0
  96. package/dist/ui/components/Introspect.js +66 -0
  97. package/dist/ui/components/PasswordInput.d.ts +7 -0
  98. package/dist/ui/components/PasswordInput.d.ts.map +1 -0
  99. package/dist/ui/components/PasswordInput.js +32 -0
  100. package/dist/ui/components/SSH.d.ts +10 -0
  101. package/dist/ui/components/SSH.d.ts.map +1 -0
  102. package/dist/ui/components/SSH.js +22 -0
  103. package/dist/ui/components/Session.d.ts +10 -0
  104. package/dist/ui/components/Session.d.ts.map +1 -0
  105. package/dist/ui/components/Session.js +47 -0
  106. package/dist/ui/components/Spinner.d.ts +3 -0
  107. package/dist/ui/components/Spinner.d.ts.map +1 -0
  108. package/dist/ui/components/Spinner.js +18 -0
  109. package/dist/ui/components/Splash.d.ts +3 -0
  110. package/dist/ui/components/Splash.d.ts.map +1 -0
  111. package/dist/ui/components/Splash.js +13 -0
  112. package/dist/validatePaths.d.mts +1 -1
  113. package/dist/validatePaths.d.mts.map +1 -1
  114. package/dist/validatePaths.mjs +17 -11
  115. package/package.json +22 -2
  116. package/dist/App.d.ts.map +0 -1
  117. package/dist/App.js +0 -9
  118. package/dist/components/Error.d.ts.map +0 -1
  119. package/dist/components/Error.js +0 -6
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { useState, useEffect } from 'react';
4
+ import { observer } from 'mobx-react-lite';
5
+ import { Spinner } from './Spinner.js';
6
+ const PHASE_TEXTS = [
7
+ 'fetching tables / views',
8
+ 'analyzing tables',
9
+ 'fetching columns',
10
+ 'fetching indexes',
11
+ 'fetching foreign key references',
12
+ 'fetching statistics',
13
+ 'fetching enums',
14
+ ];
15
+ const PHASE_INTERVAL = 1500;
16
+ const CountsLine = observer(({ store }) => {
17
+ const { counts } = store.steps.introspection;
18
+ const parts = [
19
+ counts.tables > 0 ? `${counts.tables} tables` : null,
20
+ counts.views > 0 ? `${counts.views} views` : null,
21
+ counts.analyzed > 0 ? `${counts.analyzed} analyzed` : null,
22
+ counts.columns > 0 ? `${counts.columns} columns` : null,
23
+ counts.indexes > 0 ? `${counts.indexes} indexes` : null,
24
+ counts.foreignKeys > 0 ? `${counts.foreignKeys} fk refs` : null,
25
+ counts.enums > 0 ? `${counts.enums} enums` : null,
26
+ ].filter(Boolean);
27
+ if (parts.length === 0) {
28
+ return null;
29
+ }
30
+ return (_jsxs(Box, { children: [_jsx(Text, { children: ' ' }), _jsx(Text, { color: "gray", children: parts.join(' · ') })] }));
31
+ });
32
+ export const Introspect = observer(({ store }) => {
33
+ const intro = store.steps.introspection;
34
+ const [phase, setPhase] = useState(0);
35
+ useEffect(() => {
36
+ if (intro.state !== 'fetching') {
37
+ return;
38
+ }
39
+ const phaseId = setInterval(() => {
40
+ setPhase((prev) => (prev + 1) % PHASE_TEXTS.length);
41
+ }, PHASE_INTERVAL);
42
+ return () => {
43
+ clearInterval(phaseId);
44
+ };
45
+ }, [intro.state]);
46
+ if (intro.state === 'idle') {
47
+ return null;
48
+ }
49
+ if (intro.state === 'error') {
50
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "red", children: "\u25CF" }), _jsx(Text, { children: " " }), _jsxs(Text, { color: "red", children: ["Error: ", intro.error] })] }));
51
+ }
52
+ if (intro.state === 'done') {
53
+ const { counts } = intro;
54
+ const parts = [
55
+ counts.tables > 0 ? `${counts.tables} tables` : null,
56
+ counts.views > 0 ? `${counts.views} views` : null,
57
+ counts.columns > 0 ? `${counts.columns} columns` : null,
58
+ counts.indexes > 0 ? `${counts.indexes} indexes` : null,
59
+ counts.foreignKeys > 0 ? `${counts.foreignKeys} fk refs` : null,
60
+ counts.enums > 0 ? `${counts.enums} enums` : null,
61
+ ].filter(Boolean);
62
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "\u25CF" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "INTROSPECTION: " }), _jsxs(Text, { color: "green", children: ["introspected ", parts.join(' · ')] })] }), intro.fileStatsSkipped ? (_jsxs(Box, { children: [_jsx(Text, { children: ' ' }), _jsx(Text, { color: "gray", children: "file stats skipped (insufficient privileges)" })] })) : null] }));
63
+ }
64
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Spinner, {}), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "INTROSPECTION: " }), _jsxs(Text, { children: [PHASE_TEXTS[phase], "..."] })] }), _jsx(CountsLine, { store: store })] }));
65
+ });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50cm9zcGVjdC5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInVpL2NvbXBvbmVudHMvSW50cm9zcGVjdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sS0FBSyxDQUFDO0FBRTlCLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXJDLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLHlCQUF5QjtJQUN6QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixpQ0FBaUM7SUFDakMscUJBQXFCO0lBQ3JCLGdCQUFnQjtDQUNWLENBQUM7QUFFWCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFNNUIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQW1CLEVBQWEsRUFBRTtJQUNqRSxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDM0MsTUFBTSxLQUFLLEdBQUc7UUFDVixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDcEQsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQ2pELE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUMxRCxNQUFNLENBQUMsT0FBTyxH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LEtBQUMsSUFBSSxJQUFDLElBQUksc0NBQXVCLEVBQ2pDLE1BQUMsSUFBSSxlQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUNsQyxFQUNOLEtBQUMsVUFBVSxJQUFDLEtBQUssRUFBRSxLQUFLLEdBQUksSUFDMUIsQ0FDVCxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5cbmNvbnN0IFBIQVNFX1RFWFRTID0gW1xuICAgICdmZXRjaGluZyB0YWJsZXMgLyB2aWV3cycsXG4gICAgJ2FuYWx5emluZyB0YWJsZXMnLFxuICAgICdmZXRjaGluZyBjb2x1bW5zJyxcbiAgICAnZmV0Y2hpbmcgaW5kZXhlcycsXG4gICAgJ2ZldGNoaW5nIGZvcmVpZ24ga2V5IHJlZmVyZW5jZXMnLFxuICAgICdmZXRjaGluZyBzdGF0aXN0aWNzJyxcbiAgICAnZmV0Y2hpbmcgZW51bXMnLFxuXSBhcyBjb25zdDtcblxuY29uc3QgUEhBU0VfSU5URVJWQUwgPSAxNTAwO1xuXG50eXBlIFRJbnRyb3NwZWN0UHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IENvdW50c0xpbmUgPSBvYnNlcnZlcigoe3N0b3JlfTogVEludHJvc3BlY3RQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3Qge2NvdW50c30gPSBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uO1xuICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgICBjb3VudHMudGFibGVzID4gMCA/IGAke2NvdW50cy50YWJsZXN9IHRhYmxlc2AgOiBudWxsLFxuICAgICAgICBjb3VudHMudmlld3MgPiAwID8gYCR7Y291bnRzLnZpZXdzfSB2aWV3c2AgOiBudWxsLFxuICAgICAgICBjb3VudHMuYW5hbHl6ZWQgPiAwID8gYCR7Y291bnRzLmFuYWx5emVkfSBhbmFseXplZGAgOiBudWxsLFxuICAgICAgICBjb3VudHMuY29sdW1ucyA+IDAgPyBgJHtjb3VudHMuY29sdW1uc30gY29sdW1uc2AgOiBudWxsLFxuICAgICAgICBjb3VudHMuaW5kZXhlcyA+IDAgPyBgJHtjb3VudHMuaW5kZXhlc30gaW5kZXhlc2AgOiBudWxsLFxuICAgICAgICBjb3VudHMuZm9yZWlnbktleXMgPiAwID8gYCR7Y291bnRzLmZvcmVpZ25LZXlzfSBmayByZWZzYCA6IG51bGwsXG4gICAgICAgIGNvdW50cy5lbnVtcyA+IDAgPyBgJHtjb3VudHMuZW51bXN9IGVudW1zYCA6IG51bGwsXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8VGV4dD57JyAgJ308L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj57cGFydHMuam9pbignIMK3ICcpfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgSW50cm9zcGVjdCA9IG9ic2VydmVyKCh7c3RvcmV9OiBUSW50cm9zcGVjdFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBpbnRybyA9IHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb247XG4gICAgY29uc3QgW3BoYXNlLCBzZXRQaGFzZV0gPSB1c2VTdGF0ZSgwKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnRyby5zdGF0ZSAhPT0gJ2ZldGNoaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGhhc2VJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldFBoYXNlKChwcmV2KSA9PiAocHJldiArIDEpICUgUEhBU0VfVEVYVFMubGVuZ3RoKTtcbiAgICAgICAgfSwgUEhBU0VfSU5URVJWQUwpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHBoYXNlSWQpO1xuICAgICAgICB9O1xuICAgIH0sIFtpbnRyby5zdGF0ZV0pO1xuXG4gICAgaWYgKGludHJvLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGludHJvLnN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+4pePPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5FcnJvcjoge2ludHJvLmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnRyby5zdGF0ZSA9PT0gJ2RvbmUnKSB7XG4gICAgICAgIGNvbnN0IHtjb3VudHN9ID0gaW50cm87XG4gICAgICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgICAgICAgY291bnRzLnRhYmxlcyA+IDAgPyBgJHtjb3VudHMudGFibGVzfSB0YWJsZXNgIDogbnVsbCxcbiAgICAgICAgICAgIGNvdW50cy52aWV3cyA+IDAgPyBgJHtjb3VudHMudmlld3N9IHZpZXdzYCA6IG51bGwsXG4gICAgICAgICAgICBjb3VudHMuY29sdW1ucyA+IDAgPyBgJHtjb3VudHMuY29sdW1uc30gY29sdW1uc2AgOiBudWxsLFxuICAgICAgICAgICAgY291bnRzLmluZGV4ZXMgPiAwID8gYCR7Y291bnRzLmluZGV4ZXN9IGluZGV4ZXNgIDogbnVsbCxcbiAgICAgICAgICAgIGNvdW50cy5mb3JlaWduS2V5cyA+IDAgPyBgJHtjb3VudHMuZm9yZWlnbktleXN9IGZrIHJlZnNgIDogbnVsbCxcbiAgICAgICAgICAgIGNvdW50cy5lbnVtcyA+IDAgPyBgJHtjb3VudHMuZW51bXN9IGVudW1zYCA6IG51bGwsXG4gICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+4pePPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPklOVFJPU1BFQ1RJT046IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPmludHJvc3BlY3RlZCB7cGFydHMuam9pbignIMK3ICcpfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICB7aW50cm8uZmlsZVN0YXRzU2tpcHBlZCA/IChcbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PnsnICAnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc3RhdHMgc2tpcHBlZCAoaW5zdWZmaWNpZW50IHByaXZpbGVnZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPklOVFJPU1BFQ1RJT046IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD57UEhBU0VfVEVYVFNbcGhhc2VdfS4uLjwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPENvdW50c0xpbmUgc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iXX0=
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from 'react';
2
+ type TPasswordInputProps = {
3
+ readonly onSubmit: (value: string) => void;
4
+ };
5
+ export declare const PasswordInput: ({ onSubmit }: TPasswordInputProps) => ReactNode;
6
+ export {};
7
+ //# sourceMappingURL=PasswordInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordInput.d.ts","sourceRoot":"./src/","sources":["ui/components/PasswordInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAKrC,KAAK,mBAAmB,GAAG;IACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,cAAY,mBAAmB,KAAG,SAsC/D,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text, useInput } from 'ink';
3
+ import { useState, useEffect } from 'react';
4
+ const CURSOR_INTERVAL = 500;
5
+ export const PasswordInput = ({ onSubmit }) => {
6
+ const [value, setValue] = useState('');
7
+ const [cursorVisible, setCursorVisible] = useState(true);
8
+ useEffect(() => {
9
+ const id = setInterval(() => {
10
+ setCursorVisible((prev) => !prev);
11
+ }, CURSOR_INTERVAL);
12
+ return () => {
13
+ clearInterval(id);
14
+ };
15
+ }, []);
16
+ useInput((input, key) => {
17
+ if (key.return) {
18
+ onSubmit(value);
19
+ return;
20
+ }
21
+ if (key.backspace || key.delete) {
22
+ setValue((prev) => prev.slice(0, -1));
23
+ return;
24
+ }
25
+ if (key.ctrl || key.meta || key.escape || key.tab) {
26
+ return;
27
+ }
28
+ setValue((prev) => prev + input);
29
+ });
30
+ return (_jsxs(Text, { children: ['*'.repeat(value.length), cursorVisible ? '█' : ' '] }));
31
+ };
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFzc3dvcmRJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInVpL2NvbXBvbmVudHMvUGFzc3dvcmRJbnB1dC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLE1BQU0sS0FBSyxDQUFDO0FBRW5DLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQU01QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxFQUFDLFFBQVEsRUFBc0IsRUFBYSxFQUFFO0lBQ3hFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekQsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNYLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXBCLE9BQU8sR0FBRyxFQUFFO1lBQ1IsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQztJQUNOLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVQLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoRCxPQUFPO1FBQ1gsQ0FBQztRQUVELFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUNILE1BQUMsSUFBSSxlQUNBLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUN4QixhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUN2QixDQUNWLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RleHQsIHVzZUlucHV0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IENVUlNPUl9JTlRFUlZBTCA9IDUwMDtcblxudHlwZSBUUGFzc3dvcmRJbnB1dFByb3BzID0ge1xuICAgIHJlYWRvbmx5IG9uU3VibWl0OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBQYXNzd29yZElucHV0ID0gKHtvblN1Ym1pdH06IFRQYXNzd29yZElucHV0UHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtjdXJzb3JWaXNpYmxlLCBzZXRDdXJzb3JWaXNpYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRDdXJzb3JWaXNpYmxlKChwcmV2KSA9PiAhcHJldik7XG4gICAgICAgIH0sIENVUlNPUl9JTlRFUlZBTCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHVzZUlucHV0KChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkucmV0dXJuKSB7XG4gICAgICAgICAgICBvblN1Ym1pdCh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5LmJhY2tzcGFjZSB8fCBrZXkuZGVsZXRlKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZSgocHJldikgPT4gcHJldi5zbGljZSgwLCAtMSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleS5jdHJsIHx8IGtleS5tZXRhIHx8IGtleS5lc2NhcGUgfHwga2V5LnRhYikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VmFsdWUoKHByZXYpID0+IHByZXYgKyBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHsnKicucmVwZWF0KHZhbHVlLmxlbmd0aCl9XG4gICAgICAgICAgICB7Y3Vyc29yVmlzaWJsZSA/ICfilognIDogJyAnfVxuICAgICAgICA8L1RleHQ+XG4gICAgKTtcbn07XG4iXX0=
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { TStore } from '../../store.mjs';
3
+ type TSSHProps = {
4
+ store: TStore;
5
+ };
6
+ export declare const SSH: (({ store }: TSSHProps) => ReactNode) & {
7
+ displayName: string;
8
+ };
9
+ export {};
10
+ //# sourceMappingURL=SSH.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SSH.d.ts","sourceRoot":"./src/","sources":["ui/components/SSH.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAGrC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAI5C,KAAK,SAAS,GAAG;IACb,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,GAAG,eAAsB,SAAS,KAAG,SAAS;;CAqEzD,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { observer } from 'mobx-react-lite';
4
+ import { runInAction } from 'mobx';
5
+ import { Spinner } from './Spinner.js';
6
+ import { PasswordInput } from './PasswordInput.js';
7
+ export const SSH = observer(({ store }) => {
8
+ const ssh = store.steps.sshConnection;
9
+ if (!ssh.enabled || ssh.state === 'idle') {
10
+ return null;
11
+ }
12
+ const portSuffix = ssh.pickedPort === 22 ? '' : `:${ssh.pickedPort}`;
13
+ const target = `${ssh.pickedUsername}@${ssh.pickedHostname}${portSuffix}`;
14
+ return (_jsxs(Box, { children: [ssh.state === 'connecting' ? (_jsx(Spinner, {})) : ssh.state === 'connected' ? (_jsx(Text, { color: "green", children: "\u25CF" })) : ssh.state === 'need-password' ? (_jsx(Text, { color: "gray", children: "\u25CF" })) : (_jsx(Text, { color: "red", children: "\u25CF" })), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "SSH: " }), ssh.state === 'connecting' ? (_jsxs(Text, { children: ["connecting to ", target] })) : ssh.state === 'need-password' ? (_jsxs(_Fragment, { children: [ssh.wrongAttempt ? (_jsx(Text, { color: "red", children: ssh.passwordPromptType === 'passphrase'
15
+ ? 'Wrong passphrase. '
16
+ : 'Wrong password. ' })) : null, ssh.passwordPromptType === 'passphrase' ? (_jsxs(Text, { children: ["Enter passphrase for key", ' ', _jsx(Text, { color: "cyan", children: ssh.pickedKeyPath }), ': '] })) : (_jsxs(Text, { children: ["Enter password for", ' ', _jsx(Text, { color: "cyan", children: target }), ': '] })), _jsx(PasswordInput, { onSubmit: (value) => {
17
+ runInAction(() => {
18
+ store.steps.sshConnection.password = value;
19
+ });
20
+ } }, ssh.promptCount)] })) : ssh.state === 'connected' ? (_jsxs(Text, { color: "green", children: ["connected to ", target] })) : ssh.state === 'error' ? (_jsxs(Text, { color: "red", children: ["Error: ", ssh.error, " \u2014 ", target] })) : (_jsx(Text, { color: "red", children: "closed" }))] }));
21
+ });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1NILmpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsidWkvY29tcG9uZW50cy9TU0gudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLEtBQUssQ0FBQztBQUU5QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVqQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQU1qRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQVksRUFBYSxFQUFFO0lBQzFELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO0lBRXRDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsSUFBSSxHQUFHLENBQUMsY0FBYyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBRTFFLE9BQU8sQ0FDSCxNQUFDLEdBQUcsZUFDQyxHQUFHLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FDMUIsS0FBQyxPQUFPLEtBQUcsQ0FDZCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDNUIsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE9BQU8sdUJBQVMsQ0FDL0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQ2hDLEtBQUMsSUFBSSxJQUFDLEtBQUssRUFBQyxNQUFNLHVCQUFTLENBQzlCLENBQUMsQ0FBQyxDQUFDLENBQ0EsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLEtBQUssdUJBQVMsQ0FDN0IsRUFFRCxLQUFDLElBQUksb0JBQVMsRUFDZCxLQUFDLElBQUksSUFBQyxJQUFJLDRCQUFhLEVBRXRCLEdBQUcsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUMxQixNQUFDLElBQUksaUNBQWdCLE1BQU0sSUFBUSxDQUN0QyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FDaEMsOEJBQ0ssR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FDaEIsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLEtBQUssWUFDWixHQUFHLENBQUMsa0JBQWtCLEtBQUssWUFBWTs0QkFDcEMsQ0FBQyxDQUFDLG9CQUFvQjs0QkFDdEIsQ0FBQyxDQUFDLGtCQUFrQixHQUNyQixDQUNWLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDUCxHQUFHLENBQUMsa0JBQWtCLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUN2QyxNQUFDLElBQUksMkNBQ3dCLEdBQUcsRUFDNUIsS0FBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE1BQU0sWUFBRSxHQUFHLENBQUMsYUFBYSxHQUFRLEVBQzVDLElBQUksSUFDRixDQUNWLENBQUMsQ0FBQyxDQUFDLENBQ0EsTUFBQyxJQUFJLHFDQUNrQixHQUFHLEVBQ3RCLEtBQUMsSUFBSSxJQUFDLEtBQUssRUFBQyxNQUFNLFlBQUUsTUFBTSxHQUFRLEVBQ2pDLElBQUksSUFDRixDQUNWLEVBQ0QsS0FBQyxhQUFhLElBQ1YsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7NEJBQ2hCLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0NBQ2IsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs0QkFDL0MsQ0FBQyxDQUFDLENBQUM7d0JBQ1AsQ0FBQyxJQUNJLEdBQUcsQ0FBQyxXQUFXLENBQ3RCLElBQ0gsQ0FDTixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDNUIsTUFBQyxJQUFJLElBQUMsS0FBSyxFQUFDLE9BQU8sOEJBQWUsTUFBTSxJQUFRLENBQ25ELENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN4QixNQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsS0FBSyx3QkFDTCxHQUFHLENBQUMsS0FBSyxjQUFLLE1BQU0sSUFDekIsQ0FDVixDQUFDLENBQUMsQ0FBQyxDQUNBLEtBQUMsSUFBSSxJQUFDLEtBQUssRUFBQyxLQUFLLHVCQUFjLENBQ2xDLElBQ0MsQ0FDVCxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5pbXBvcnQge1Bhc3N3b3JkSW5wdXR9IGZyb20gJy4vUGFzc3dvcmRJbnB1dC5qcyc7XG5cbnR5cGUgVFNTSFByb3BzID0ge1xuICAgIHN0b3JlOiBUU3RvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgU1NIID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRTU0hQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3Qgc3NoID0gc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbjtcblxuICAgIGlmICghc3NoLmVuYWJsZWQgfHwgc3NoLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcG9ydFN1ZmZpeCA9IHNzaC5waWNrZWRQb3J0ID09PSAyMiA/ICcnIDogYDoke3NzaC5waWNrZWRQb3J0fWA7XG4gICAgY29uc3QgdGFyZ2V0ID0gYCR7c3NoLnBpY2tlZFVzZXJuYW1lfUAke3NzaC5waWNrZWRIb3N0bmFtZX0ke3BvcnRTdWZmaXh9YDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICB7c3NoLnN0YXRlID09PSAnY29ubmVjdGluZycgPyAoXG4gICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICkgOiBzc2guc3RhdGUgPT09ICdjb25uZWN0ZWQnID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj7il488L1RleHQ+XG4gICAgICAgICAgICApIDogc3NoLnN0YXRlID09PSAnbmVlZC1wYXNzd29yZCcgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+4pePPC9UZXh0PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPuKXjzwvVGV4dD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBib2xkPlNTSDogPC9UZXh0PlxuXG4gICAgICAgICAgICB7c3NoLnN0YXRlID09PSAnY29ubmVjdGluZycgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQ+Y29ubmVjdGluZyB0byB7dGFyZ2V0fTwvVGV4dD5cbiAgICAgICAgICAgICkgOiBzc2guc3RhdGUgPT09ICduZWVkLXBhc3N3b3JkJyA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7c3NoLndyb25nQXR0ZW1wdCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3NzaC5wYXNzd29yZFByb21wdFR5cGUgPT09ICdwYXNzcGhyYXNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdXcm9uZyBwYXNzcGhyYXNlLiAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1dyb25nIHBhc3N3b3JkLiAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAge3NzaC5wYXNzd29yZFByb21wdFR5cGUgPT09ICdwYXNzcGhyYXNlJyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyIHBhc3NwaHJhc2UgZm9yIGtleXsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJjeWFuXCI+e3NzaC5waWNrZWRLZXlQYXRofTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JzogJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyIHBhc3N3b3JkIGZvcnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJjeWFuXCI+e3RhcmdldH08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyc6ICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxQYXNzd29yZElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBhc3N3b3JkID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtzc2gucHJvbXB0Q291bnR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogc3NoLnN0YXRlID09PSAnY29ubmVjdGVkJyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+Y29ubmVjdGVkIHRvIHt0YXJnZXR9PC9UZXh0PlxuICAgICAgICAgICAgKSA6IHNzaC5zdGF0ZSA9PT0gJ2Vycm9yJyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlxuICAgICAgICAgICAgICAgICAgICBFcnJvcjoge3NzaC5lcnJvcn0g4oCUIHt0YXJnZXR9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPmNsb3NlZDwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { TStore } from '../../store.mjs';
3
+ type TSessionProps = {
4
+ readonly store: TStore;
5
+ };
6
+ export declare const Account: (({ store }: TSessionProps) => ReactNode) & {
7
+ displayName: string;
8
+ };
9
+ export {};
10
+ //# sourceMappingURL=Session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"./src/","sources":["ui/components/Session.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAGrC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAI5C,KAAK,aAAa,GAAG;IACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC;AAMF,eAAO,MAAM,OAAO,eAAsB,aAAa,KAAG,SAAS;;CA6GjE,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { useState, useEffect } from 'react';
4
+ import { observer } from 'mobx-react-lite';
5
+ import { openSessionURL, shouldOpenBrowser } from '../../app/open-url.mjs';
6
+ import { Spinner } from './Spinner.js';
7
+ const terminalLink = (url) => `${url}`;
8
+ const canOpen = shouldOpenBrowser();
9
+ export const Account = observer(({ store }) => {
10
+ const account = store.steps.account;
11
+ const [dotVisible, setDotVisible] = useState(true);
12
+ const [opened, setOpened] = useState(false);
13
+ useEffect(() => {
14
+ if (account.state !== 'waiting') {
15
+ return;
16
+ }
17
+ const id = setInterval(() => {
18
+ setDotVisible((prev) => !prev);
19
+ }, 750);
20
+ return () => {
21
+ clearInterval(id);
22
+ };
23
+ }, [account.state]);
24
+ useInput((_input, key) => {
25
+ if (key.return && account.url) {
26
+ setOpened(true);
27
+ openSessionURL(account.url);
28
+ }
29
+ }, { isActive: account.state === 'waiting' && canOpen });
30
+ if (account.state === 'idle') {
31
+ return null;
32
+ }
33
+ if (account.state === 'error') {
34
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "red", children: "\u25CF" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT: " }), _jsx(Text, { color: "red", children: account.error })] }));
35
+ }
36
+ if (account.state === 'connected') {
37
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "\u25CF" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT: " }), _jsx(Text, { children: "connected to account " }), _jsx(Text, { bold: true, children: account.email })] }));
38
+ }
39
+ if (account.state === 'fetching-account') {
40
+ return (_jsxs(Box, { children: [_jsx(Spinner, {}), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT: " }), _jsx(Text, { children: "connecting..." })] }));
41
+ }
42
+ if (account.state === 'waiting') {
43
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "gray", children: dotVisible ? '●' : ' ' }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT" })] }), _jsxs(Box, { borderStyle: "single", paddingX: 2, paddingY: 1, marginLeft: 1, borderDimColor: true, width: 92, flexDirection: "column", children: [_jsxs(Text, { bold: true, children: ["Login to your dbctx.io account", '\n'] }), _jsx(Text, { color: 'cyan', children: terminalLink(account.url) }), canOpen ? (_jsxs(Text, { color: "gray", children: ["Press Enter to ", opened ? 're-open' : 'open', " in browser"] })) : null, _jsx(Text, { children: '\n\n' }), _jsxs(Box, { children: [_jsx(Spinner, {}), _jsx(Text, { dimColor: true, children: " Waiting for login ..." })] })] })] }));
44
+ }
45
+ return (_jsxs(Box, { children: [_jsx(Spinner, {}), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "ACCOUNT: " }), _jsx(Text, { children: "creating..." })] }));
46
+ });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInVpL2NvbXBvbmVudHMvU2Vzc2lvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxNQUFNLEtBQUssQ0FBQztBQUV4QyxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFNckMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFFdkQsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQWdCLEVBQWEsRUFBRTtJQUNsRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNwQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ1gsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUN4QixhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFD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QyxNQUFNLGdDQUNFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLG1CQUV4QyxDQUNWLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDUixLQUFDLElBQUksY0FBRSxNQUFNLEdBQVEsRUFDckIsTUFBQyxHQUFHLGVBQ0EsS0FBQyxPQUFPLEtBQUcsRUFDWCxLQUFDLElBQUksSUFBQyxRQUFRLDZDQUE4QixJQUMxQyxJQUNKLElBQ0osQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU8sQ0FDSCxNQUFDLEdBQUcsZUFDQSxLQUFDLE9BQU8sS0FBRyxFQUNYLEtBQUMsSUFBSSxvQkFBUyxFQUNkLEtBQUMsSUFBSSxJQUFDLElBQUksZ0NBQWlCLEVBQzNCLEtBQUMsSUFBSSw4QkFBbUIsSUFDdEIsQ0FDVCxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JveCwgVGV4dCwgdXNlSW5wdXR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtvcGVuU2Vzc2lvblVSTCwgc2hvdWxkT3BlbkJyb3dzZXJ9IGZyb20gJy4uLy4uL2FwcC9vcGVuLXVybC5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG50eXBlIFRTZXNzaW9uUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IHRlcm1pbmFsTGluayA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiBgJHt1cmx9YDtcblxuY29uc3QgY2FuT3BlbiA9IHNob3VsZE9wZW5Ccm93c2VyKCk7XG5cbmV4cG9ydCBjb25zdCBBY2NvdW50ID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRTZXNzaW9uUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IGFjY291bnQgPSBzdG9yZS5zdGVwcy5hY2NvdW50O1xuICAgIGNvbnN0IFtkb3RWaXNpYmxlLCBzZXREb3RWaXNpYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFtvcGVuZWQsIHNldE9wZW5lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYWNjb3VudC5zdGF0ZSAhPT0gJ3dhaXRpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldERvdFZpc2libGUoKHByZXYpID0+ICFwcmV2KTtcbiAgICAgICAgfSwgNzUwKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW2FjY291bnQuc3RhdGVdKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuICYmIGFjY291bnQudXJsKSB7XG4gICAgICAgICAgICAgICAgc2V0T3BlbmVkKHRydWUpO1xuICAgICAgICAgICAgICAgIG9wZW5TZXNzaW9uVVJMKGFjY291bnQudXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge2lzQWN0aXZlOiBhY2NvdW50LnN0YXRlID09PSAnd2FpdGluZycgJiYgY2FuT3Blbn0sXG4gICAgKTtcblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnQuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj7il488L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPnthY2NvdW50LmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+4pePPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5BQ0NPVU5UOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+Y29ubmVjdGVkIHRvIGFjY291bnQgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+e2FjY291bnQuZW1haWx9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnQuc3RhdGUgPT09ICdmZXRjaGluZy1hY2NvdW50Jykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5BQ0NPVU5UOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+Y29ubmVjdGluZy4uLjwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnd2FpdGluZycpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPntkb3RWaXNpYmxlID8gJ+KXjycgOiAnICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdD17MX1cbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGltQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezkyfVxuICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TG9naW4gdG8geW91ciBkYmN0eC5pbyBhY2NvdW50eydcXG4nfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9eydjeWFuJ30+e3Rlcm1pbmFsTGluayhhY2NvdW50LnVybCEpfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2Nhbk9wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzcyBFbnRlciB0byB7b3BlbmVkID8gJ3JlLW9wZW4nIDogJ29wZW4nfSBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PnsnXFxuXFxuJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+IFdhaXRpbmcgZm9yIGxvZ2luIC4uLjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ6IDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PmNyZWF0aW5nLi4uPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import type { ReactNode } from 'react';
2
+ export declare const Spinner: () => ReactNode;
3
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"./src/","sources":["ui/components/Spinner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAOrC,eAAO,MAAM,OAAO,QAAO,SAc1B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text } from 'ink';
3
+ import { useState, useEffect } from 'react';
4
+ const SPINNER_FRAMES = ['·', '✻', '✽', '✶', '\u2733\uFE0E', '✢'];
5
+ const SPINNER_INTERVAL = 200;
6
+ export const Spinner = () => {
7
+ const [frame, setFrame] = useState(0);
8
+ useEffect(() => {
9
+ const id = setInterval(() => {
10
+ setFrame((prev) => (prev + 1) % SPINNER_FRAMES.length);
11
+ }, SPINNER_INTERVAL);
12
+ return () => {
13
+ clearInterval(id);
14
+ };
15
+ }, []);
16
+ return _jsx(Text, { color: "cyan", children: SPINNER_FRAMES[frame] });
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3Bpbm5lci5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInVpL2NvbXBvbmVudHMvU3Bpbm5lci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFFekIsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBVSxDQUFDO0FBRTFFLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBRTdCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFjLEVBQUU7SUFDbkMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNYLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFckIsT0FBTyxHQUFHLEVBQUU7WUFDUixhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsT0FBTyxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBUSxDQUFDO0FBQzdELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBTUElOTkVSX0ZSQU1FUyA9IFsnwrcnLCAn4py7JywgJ+KcvScsICfinLYnLCAnXFx1MjczM1xcdUZFMEUnLCAn4pyiJ10gYXMgY29uc3Q7XG5cbmNvbnN0IFNQSU5ORVJfSU5URVJWQUwgPSAyMDA7XG5cbmV4cG9ydCBjb25zdCBTcGlubmVyID0gKCk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgW2ZyYW1lLCBzZXRGcmFtZV0gPSB1c2VTdGF0ZSgwKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgc2V0RnJhbWUoKHByZXYpID0+IChwcmV2ICsgMSkgJSBTUElOTkVSX0ZSQU1FUy5sZW5ndGgpO1xuICAgICAgICB9LCBTUElOTkVSX0lOVEVSVkFMKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIDxUZXh0IGNvbG9yPVwiY3lhblwiPntTUElOTkVSX0ZSQU1FU1tmcmFtZV19PC9UZXh0Pjtcbn07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import type { ReactNode } from 'react';
2
+ export declare const Splash: () => ReactNode;
3
+ //# sourceMappingURL=Splash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Splash.d.ts","sourceRoot":"./src/","sources":["ui/components/Splash.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAIrC,eAAO,MAAM,MAAM,QAAO,SA4BzB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import dedent from 'dedent';
4
+ import { CLIENT_VERSION } from '../../lib/version.mjs';
5
+ export const Splash = () => {
6
+ return (_jsxs(Box, { flexDirection: 'row', marginY: 1, children: [_jsx(Box, { paddingX: 2, children: _jsx(Text, { children: dedent `
7
+ ▛▀▖▛▀▖▞▀▖▀▛▘▌ ▌
8
+ ▌ ▌▙▄▘▌ ▌ ▝▞
9
+ ▌ ▌▌ ▌▌ ▖ ▌ ▞▝▖
10
+ ▀▀ ▀▀ ▝▀ ▘ ▘ ▘
11
+ ` }) }), _jsx(Box, { width: 42, alignItems: 'center', flexDirection: 'column', children: _jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { children: [_jsx(Text, { color: 'cyan', children: "dbctx.io" }), _jsx(Text, { dimColor: true, children: ` — v${CLIENT_VERSION}` })] }), _jsx(Text, { children: 'AI Enriched Database Docs for Humans & Coding Agents.' })] }) })] }));
12
+ };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BsYXNoLmpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsidWkvY29tcG9uZW50cy9TcGxhc2gudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLEtBQUssQ0FBQztBQUU5QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFjLEVBQUU7SUFDbEMsT0FBTyxDQUNILE1BQUMsR0FBRyxJQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsYUFDakMsS0FBQyxHQUFHLElBQUMsUUFBUSxFQUFFLENBQUMsWUFDWixLQUFDLElBQUksY0FDQSxNQUFNLENBQUE7Ozs7O3FCQUtOLEdBQ0UsR0FDTCxFQUNOLEtBQUMsR0FBRyxJQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxZQUN6RCxNQUFDLEdBQUcsSUFBQyxhQUFhLEVBQUUsUUFBUSxhQUN4QixNQUFDLElBQUksZUFDRCxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsTUFBTSx5QkFBaUIsRUFDcEMsS0FBQyxJQUFJLElBQUMsUUFBUSxrQkFBRSxPQUFPLGNBQWMsRUFBRSxHQUFRLElBQzVDLEVBQ1AsS0FBQyxJQUFJLGNBRUcsdURBQXVELEdBRXhELElBQ0wsR0FDSixJQUNKLENBQ1QsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGRlZGVudCBmcm9tICdkZWRlbnQnO1xuaW1wb3J0IHtDTElFTlRfVkVSU0lPTn0gZnJvbSAnLi4vLi4vbGliL3ZlcnNpb24ubWpzJztcblxuZXhwb3J0IGNvbnN0IFNwbGFzaCA9ICgpOiBSZWFjdE5vZGUgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj17J3Jvdyd9IG1hcmdpblk9ezF9PlxuICAgICAgICAgICAgPEJveCBwYWRkaW5nWD17Mn0+XG4gICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIHtkZWRlbnRgXG4gICAgICAgICAgICAgICAgICAgICAgICDilpviloDilpbilpviloDilpbilp7iloDilpbiloDilpvilpjilowg4paMXG4gICAgICAgICAgICAgICAgICAgICAgICDilowg4paM4paZ4paE4paY4paMICAg4paMIOKWneKWnlxuICAgICAgICAgICAgICAgICAgICAgICAg4paMIOKWjOKWjCDilozilowg4paWIOKWjCDilp7ilp3ilpZcbiAgICAgICAgICAgICAgICAgICAgICAgIOKWgOKWgCDiloDiloAg4pad4paAICDilpgg4paYIOKWmFxuICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17NDJ9IGFsaWduSXRlbXM9eydjZW50ZXInfSBmbGV4RGlyZWN0aW9uPXsnY29sdW1uJ30+XG4gICAgICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPXsnY29sdW1uJ30+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9eydjeWFuJ30+ZGJjdHguaW88L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57YCDigJQgdiR7Q0xJRU5UX1ZFUlNJT059YH08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FJIEVucmljaGVkIERhdGFiYXNlIERvY3MgZm9yIEh1bWFucyAmIENvZGluZyBBZ2VudHMuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn07XG4iXX0=
@@ -1,4 +1,4 @@
1
- type TPathOptionKey = "sslcert" | "sslkey" | "sslrootcert" | "sshPrivateKey";
1
+ type TPathOptionKey = 'sslcert' | 'sslkey' | 'sslrootcert' | 'sshKey';
2
2
  export type TPathValidationError = {
3
3
  option: string;
4
4
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"validatePaths.d.mts","sourceRoot":"./src/","sources":["validatePaths.mts"],"names":[],"mappings":"AAQA,KAAK,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAyBF,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,EACjF,SAAS,CAAC,KACX;IAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;CAmC1F,CAAC"}
1
+ {"version":3,"file":"validatePaths.d.mts","sourceRoot":"./src/","sources":["validatePaths.mts"],"names":[],"mappings":"AAQA,KAAK,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEtE,MAAM,MAAM,oBAAoB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAwBF,eAAO,MAAM,mBAAmB,GAC5B,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,EAEjD,SAAS,CAAC,KACX;IACC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;CA0C1D,CAAC"}
@@ -1,7 +1,7 @@
1
- import { existsSync } from "node:fs";
2
- import { homedir } from "node:os";
3
- import { resolve } from "node:path";
4
- const expandTilde = (path) => path.startsWith("~/") || path === "~"
1
+ import { existsSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { resolve } from 'node:path';
4
+ const expandTilde = (path) => path.startsWith('~/') || path === '~'
5
5
  ? path.replace(/^~/, homedir())
6
6
  : path;
7
7
  const normalizePath = (path) => resolve(expandTilde(path));
@@ -12,13 +12,18 @@ const validatePathExists = (path) => {
12
12
  : { valid: false, error: `Path does not exist: ${path}` };
13
13
  };
14
14
  const PATH_OPTION_LABELS = {
15
- sslcert: "--sslcert",
16
- sslkey: "--sslkey",
17
- sslrootcert: "--sslrootcert",
18
- sshPrivateKey: "--ssh-private-key",
15
+ sslcert: '--sslcert',
16
+ sslkey: '--sslkey',
17
+ sslrootcert: '--sslrootcert',
18
+ sshKey: '--ssh-key',
19
19
  };
20
20
  export const validatePathOptions = (options) => {
21
- const pathKeys = ["sslcert", "sslkey", "sslrootcert", "sshPrivateKey"];
21
+ const pathKeys = [
22
+ 'sslcert',
23
+ 'sslkey',
24
+ 'sslrootcert',
25
+ 'sshKey',
26
+ ];
22
27
  const results = pathKeys
23
28
  .filter((key) => options[key] !== undefined)
24
29
  .map((key) => {
@@ -41,8 +46,9 @@ export const validatePathOptions = (options) => {
41
46
  .filter((r) => r.result.valid)
42
47
  .reduce((acc, r) => ({
43
48
  ...acc,
44
- [r.key]: r.result.expandedPath,
49
+ [r.key]: r.result
50
+ .expandedPath,
45
51
  }), {});
46
52
  return { errors, expandedPaths };
47
53
  };
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQYXRocy5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJ2YWxpZGF0ZVBhdGhzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQWNwQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEdBQUc7SUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFZixNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQzNDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUUvQixNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBWSxFQUF5QixFQUFFO0lBQy9ELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV6QyxPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDM0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7UUFDL0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsd0JBQXdCLElBQUksRUFBRSxFQUFFLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBbUM7SUFDdkQsT0FBTyxFQUFFLFdBQVc7SUFDcEIsTUFBTSxFQUFFLFVBQVU7SUFDbEIsV0FBVyxFQUFFLGVBQWU7SUFDNUIsYUFBYSxFQUFFLG1CQUFtQjtDQUNyQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FDL0IsT0FBVSxFQUNnRixFQUFFO0lBQzVGLE1BQU0sUUFBUSxHQUFxQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXpGLE1BQU0sT0FBTyxHQUFHLFFBQVE7U0FDbkIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDO1NBQzNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ1QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBVyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhDLE9BQU87WUFDSCxHQUFHO1lBQ0gsSUFBSTtZQUNKLE1BQU07U0FDVCxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFFUCxNQUFNLE1BQU0sR0FBRyxPQUFPO1NBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDVCxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDWixLQUFLLEVBQUcsQ0FBQyxDQUFDLE1BQTBDLENBQUMsS0FBSztLQUM3RCxDQUFDLENBQUMsQ0FBQztJQUVSLE1BQU0sYUFBYSxHQUFHLE9BQU87U0FDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUM3QixNQUFNLENBQ0gsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsR0FBRyxHQUFHO1FBQ04sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUcsQ0FBQyxDQUFDLE1BQWdELENBQUMsWUFBWTtLQUM1RSxDQUFDLEVBQ0YsRUFBNkMsQ0FDaEQsQ0FBQztJQUVOLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDckMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbnR5cGUgVFBhdGhWYWxpZGF0aW9uUmVzdWx0ID1cbiAgICB8IHsgdmFsaWQ6IHRydWU7IGV4cGFuZGVkUGF0aDogc3RyaW5nIH1cbiAgICB8IHsgdmFsaWQ6IGZhbHNlOyBlcnJvcjogc3RyaW5nIH07XG5cbnR5cGUgVFBhdGhPcHRpb25LZXkgPSBcInNzbGNlcnRcIiB8IFwic3Nsa2V5XCIgfCBcInNzbHJvb3RjZXJ0XCIgfCBcInNzaFByaXZhdGVLZXlcIjtcblxuZXhwb3J0IHR5cGUgVFBhdGhWYWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgb3B0aW9uOiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGVycm9yOiBzdHJpbmc7XG59O1xuXG5jb25zdCBleHBhbmRUaWxkZSA9IChwYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICBwYXRoLnN0YXJ0c1dpdGgoXCJ+L1wiKSB8fCBwYXRoID09PSBcIn5cIlxuICAgICAgICA/IHBhdGgucmVwbGFjZSgvXn4vLCBob21lZGlyKCkpXG4gICAgICAgIDogcGF0aDtcblxuY29uc3Qgbm9ybWFsaXplUGF0aCA9IChwYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICByZXNvbHZlKGV4cGFuZFRpbGRlKHBhdGgpKTtcblxuY29uc3QgdmFsaWRhdGVQYXRoRXhpc3RzID0gKHBhdGg6IHN0cmluZyk6IFRQYXRoVmFsaWRhdGlvblJlc3VsdCA9PiB7XG4gICAgY29uc3QgZXhwYW5kZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRoKTtcblxuICAgIHJldHVybiBleGlzdHNTeW5jKGV4cGFuZGVkUGF0aClcbiAgICAgICAgPyB7IHZhbGlkOiB0cnVlLCBleHBhbmRlZFBhdGggfVxuICAgICAgICA6IHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogYFBhdGggZG9lcyBub3QgZXhpc3Q6ICR7cGF0aH1gIH07XG59O1xuXG5jb25zdCBQQVRIX09QVElPTl9MQUJFTFM6IFJlY29yZDxUUGF0aE9wdGlvbktleSwgc3RyaW5nPiA9IHtcbiAgICBzc2xjZXJ0OiBcIi0tc3NsY2VydFwiLFxuICAgIHNzbGtleTogXCItLXNzbGtleVwiLFxuICAgIHNzbHJvb3RjZXJ0OiBcIi0tc3Nscm9vdGNlcnRcIixcbiAgICBzc2hQcml2YXRlS2V5OiBcIi0tc3NoLXByaXZhdGUta2V5XCIsXG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQYXRoT3B0aW9ucyA9IDxUIGV4dGVuZHMgUGFydGlhbDxSZWNvcmQ8VFBhdGhPcHRpb25LZXksIHN0cmluZz4+PihcbiAgICBvcHRpb25zOiBUXG4pOiB7IGVycm9yczogVFBhdGhWYWxpZGF0aW9uRXJyb3JbXTsgZXhwYW5kZWRQYXRoczogUGFydGlhbDxSZWNvcmQ8VFBhdGhPcHRpb25LZXksIHN0cmluZz4+IH0gPT4ge1xuICAgIGNvbnN0IHBhdGhLZXlzOiBUUGF0aE9wdGlvbktleVtdID0gW1wic3NsY2VydFwiLCBcInNzbGtleVwiLCBcInNzbHJvb3RjZXJ0XCIsIFwic3NoUHJpdmF0ZUtleVwiXTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBwYXRoS2V5c1xuICAgICAgICAuZmlsdGVyKChrZXkpID0+IG9wdGlvbnNba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBvcHRpb25zW2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVQYXRoRXhpc3RzKHBhdGgpO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgY29uc3QgZXJyb3JzID0gcmVzdWx0c1xuICAgICAgICAuZmlsdGVyKChyKSA9PiAhci5yZXN1bHQudmFsaWQpXG4gICAgICAgIC5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgICBvcHRpb246IFBBVEhfT1BUSU9OX0xBQkVMU1tyLmtleV0sXG4gICAgICAgICAgICBwYXRoOiByLnBhdGgsXG4gICAgICAgICAgICBlcnJvcjogKHIucmVzdWx0IGFzIHsgdmFsaWQ6IGZhbHNlOyBlcnJvcjogc3RyaW5nIH0pLmVycm9yLFxuICAgICAgICB9KSk7XG5cbiAgICBjb25zdCBleHBhbmRlZFBhdGhzID0gcmVzdWx0c1xuICAgICAgICAuZmlsdGVyKChyKSA9PiByLnJlc3VsdC52YWxpZClcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIHIpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgIFtyLmtleV06IChyLnJlc3VsdCBhcyB7IHZhbGlkOiB0cnVlOyBleHBhbmRlZFBhdGg6IHN0cmluZyB9KS5leHBhbmRlZFBhdGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9IGFzIFBhcnRpYWw8UmVjb3JkPFRQYXRoT3B0aW9uS2V5LCBzdHJpbmc+PlxuICAgICAgICApO1xuXG4gICAgcmV0dXJuIHsgZXJyb3JzLCBleHBhbmRlZFBhdGhzIH07XG59O1xuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQYXRocy5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJ2YWxpZGF0ZVBhdGhzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQWNsQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEdBQUc7SUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFZixNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRTNFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFZLEVBQXlCLEVBQUU7SUFDL0QsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpDLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQztRQUMzQixDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBQztRQUM3QixDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUFtQztJQUN2RCxPQUFPLEVBQUUsV0FBVztJQUNwQixNQUFNLEVBQUUsVUFBVTtJQUNsQixXQUFXLEVBQUUsZUFBZTtJQUM1QixNQUFNLEVBQUUsV0FBVztDQUN0QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FHL0IsT0FBVSxFQUlaLEVBQUU7SUFDQSxNQUFNLFFBQVEsR0FBcUI7UUFDL0IsU0FBUztRQUNULFFBQVE7UUFDUixhQUFhO1FBQ2IsUUFBUTtLQUNYLENBQUM7SUFFRixNQUFNLE9BQU8sR0FBRyxRQUFRO1NBQ25CLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQztTQUMzQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNULE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQVcsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4QyxPQUFPO1lBQ0gsR0FBRztZQUNILElBQUk7WUFDSixNQUFNO1NBQ1QsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0lBRVAsTUFBTSxNQUFNLEdBQUcsT0FBTztTQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDakMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1FBQ1osS0FBSyxFQUFHLENBQUMsQ0FBQyxNQUF3QyxDQUFDLEtBQUs7S0FDM0QsQ0FBQyxDQUFDLENBQUM7SUFFUixNQUFNLGFBQWEsR0FBRyxPQUFPO1NBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDN0IsTUFBTSxDQUNILENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNULEdBQUcsR0FBRztRQUNOLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBQyxNQUE4QzthQUNyRCxZQUFZO0tBQ3BCLENBQUMsRUFDRixFQUE2QyxDQUNoRCxDQUFDO0lBRU4sT0FBTyxFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtob21lZGlyfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7cmVzb2x2ZX0gZnJvbSAnbm9kZTpwYXRoJztcblxudHlwZSBUUGF0aFZhbGlkYXRpb25SZXN1bHQgPVxuICAgIHwge3ZhbGlkOiB0cnVlOyBleHBhbmRlZFBhdGg6IHN0cmluZ31cbiAgICB8IHt2YWxpZDogZmFsc2U7IGVycm9yOiBzdHJpbmd9O1xuXG50eXBlIFRQYXRoT3B0aW9uS2V5ID0gJ3NzbGNlcnQnIHwgJ3NzbGtleScgfCAnc3Nscm9vdGNlcnQnIHwgJ3NzaEtleSc7XG5cbmV4cG9ydCB0eXBlIFRQYXRoVmFsaWRhdGlvbkVycm9yID0ge1xuICAgIG9wdGlvbjogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBlcnJvcjogc3RyaW5nO1xufTtcblxuY29uc3QgZXhwYW5kVGlsZGUgPSAocGF0aDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgcGF0aC5zdGFydHNXaXRoKCd+LycpIHx8IHBhdGggPT09ICd+J1xuICAgICAgICA/IHBhdGgucmVwbGFjZSgvXn4vLCBob21lZGlyKCkpXG4gICAgICAgIDogcGF0aDtcblxuY29uc3Qgbm9ybWFsaXplUGF0aCA9IChwYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4gcmVzb2x2ZShleHBhbmRUaWxkZShwYXRoKSk7XG5cbmNvbnN0IHZhbGlkYXRlUGF0aEV4aXN0cyA9IChwYXRoOiBzdHJpbmcpOiBUUGF0aFZhbGlkYXRpb25SZXN1bHQgPT4ge1xuICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCk7XG5cbiAgICByZXR1cm4gZXhpc3RzU3luYyhleHBhbmRlZFBhdGgpXG4gICAgICAgID8ge3ZhbGlkOiB0cnVlLCBleHBhbmRlZFBhdGh9XG4gICAgICAgIDoge3ZhbGlkOiBmYWxzZSwgZXJyb3I6IGBQYXRoIGRvZXMgbm90IGV4aXN0OiAke3BhdGh9YH07XG59O1xuXG5jb25zdCBQQVRIX09QVElPTl9MQUJFTFM6IFJlY29yZDxUUGF0aE9wdGlvbktleSwgc3RyaW5nPiA9IHtcbiAgICBzc2xjZXJ0OiAnLS1zc2xjZXJ0JyxcbiAgICBzc2xrZXk6ICctLXNzbGtleScsXG4gICAgc3Nscm9vdGNlcnQ6ICctLXNzbHJvb3RjZXJ0JyxcbiAgICBzc2hLZXk6ICctLXNzaC1rZXknLFxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGF0aE9wdGlvbnMgPSA8XG4gICAgVCBleHRlbmRzIFBhcnRpYWw8UmVjb3JkPFRQYXRoT3B0aW9uS2V5LCBzdHJpbmc+Pixcbj4oXG4gICAgb3B0aW9uczogVCxcbik6IHtcbiAgICBlcnJvcnM6IFRQYXRoVmFsaWRhdGlvbkVycm9yW107XG4gICAgZXhwYW5kZWRQYXRoczogUGFydGlhbDxSZWNvcmQ8VFBhdGhPcHRpb25LZXksIHN0cmluZz4+O1xufSA9PiB7XG4gICAgY29uc3QgcGF0aEtleXM6IFRQYXRoT3B0aW9uS2V5W10gPSBbXG4gICAgICAgICdzc2xjZXJ0JyxcbiAgICAgICAgJ3NzbGtleScsXG4gICAgICAgICdzc2xyb290Y2VydCcsXG4gICAgICAgICdzc2hLZXknLFxuICAgIF07XG5cbiAgICBjb25zdCByZXN1bHRzID0gcGF0aEtleXNcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBvcHRpb25zW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gb3B0aW9uc1trZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUGF0aEV4aXN0cyhwYXRoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgIGNvbnN0IGVycm9ycyA9IHJlc3VsdHNcbiAgICAgICAgLmZpbHRlcigocikgPT4gIXIucmVzdWx0LnZhbGlkKVxuICAgICAgICAubWFwKChyKSA9PiAoe1xuICAgICAgICAgICAgb3B0aW9uOiBQQVRIX09QVElPTl9MQUJFTFNbci5rZXldLFxuICAgICAgICAgICAgcGF0aDogci5wYXRoLFxuICAgICAgICAgICAgZXJyb3I6IChyLnJlc3VsdCBhcyB7dmFsaWQ6IGZhbHNlOyBlcnJvcjogc3RyaW5nfSkuZXJyb3IsXG4gICAgICAgIH0pKTtcblxuICAgIGNvbnN0IGV4cGFuZGVkUGF0aHMgPSByZXN1bHRzXG4gICAgICAgIC5maWx0ZXIoKHIpID0+IHIucmVzdWx0LnZhbGlkKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgcikgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgW3Iua2V5XTogKHIucmVzdWx0IGFzIHt2YWxpZDogdHJ1ZTsgZXhwYW5kZWRQYXRoOiBzdHJpbmd9KVxuICAgICAgICAgICAgICAgICAgICAuZXhwYW5kZWRQYXRoLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fSBhcyBQYXJ0aWFsPFJlY29yZDxUUGF0aE9wdGlvbktleSwgc3RyaW5nPj4sXG4gICAgICAgICk7XG5cbiAgICByZXR1cm4ge2Vycm9ycywgZXhwYW5kZWRQYXRoc307XG59O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dbctx",
3
- "version": "1.0.3",
3
+ "version": "1.3.0",
4
4
  "description": "dbctx CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -14,12 +14,29 @@
14
14
  "url": "https://airstate.dev"
15
15
  },
16
16
  "license": "UNLICENSED",
17
+ "imports": {
18
+ "#client/*": "./dist/*"
19
+ },
17
20
  "dependencies": {
21
+ "@tanstack/react-query": "5.90.20",
22
+ "@trpc/client": "11.8.1",
23
+ "@trpc/react-query": "11.8.1",
24
+ "@trpc/server": "11.8.1",
18
25
  "commander": "14.0.3",
26
+ "dedent": "1.7.1",
19
27
  "es-toolkit": "1.44.0",
28
+ "eventsource": "4.1.0",
20
29
  "ink": "6.6.0",
30
+ "mobx": "6.15.0",
31
+ "mobx-react-lite": "4.1.1",
32
+ "open": "11.0.0",
33
+ "p-queue": "8.0.1",
21
34
  "pg": "8.18.0",
22
35
  "react": "19.2.4",
36
+ "scope-utilities": "2.2.1",
37
+ "ssh-config": "5.0.4",
38
+ "ssh2": "1.17.0",
39
+ "uuidv7": "1.0.2",
23
40
  "winston": "3.19.0",
24
41
  "zod": "4.3.6"
25
42
  },
@@ -27,9 +44,12 @@
27
44
  "@types/node": "24.0.0",
28
45
  "@types/pg": "8.16.0",
29
46
  "@types/react": "19.2.10",
47
+ "@types/ssh2": "1.15.5",
30
48
  "concurrently": "9.2.1",
31
49
  "cross-env": "7.0.3",
32
- "typescript": "5.9.3"
50
+ "prettier": "3.8.1",
51
+ "typescript": "5.9.3",
52
+ "@dbctx/core": "1.0.5"
33
53
  },
34
54
  "volta": {
35
55
  "node": "24.0.0"
package/dist/App.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"./src/","sources":["App.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,KAAK,SAAS,GAAG;IACb,MAAM,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAEF,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,GAAG,SAAS,CAmBpD"}
package/dist/App.js DELETED
@@ -1,9 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Text, Box } from "ink";
3
- export function App({ config }) {
4
- const connectionTarget = config.connectionString
5
- ? config.connectionString.replace(/:[^:@]+@/, ":***@") // mask password
6
- : `${config.hostname}:${config.port}/${config.database}`;
7
- return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: "dbctx" }), _jsx(Text, { dimColor: true, children: " - AI generated docs from your application database" })] }), _jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "Connecting to: " }), _jsx(Text, { color: "yellow", children: connectionTarget })] })] }));
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwLmpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiQXBwLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUM7QUF3QmhDLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQWE7SUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCO1FBQzVDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxnQkFBZ0I7UUFDdkUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU3RCxPQUFPLENBQ0gsTUFBQyxHQUFHLElBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUUsQ0FBQyxhQUNsQyxNQUFDLEdBQUcsSUFBQyxZQUFZLEVBQUUsQ0FBQyxhQUNoQixLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLElBQUksNEJBRWhCLEVBQ1AsS0FBQyxJQUFJLElBQUMsUUFBUSwwRUFBMkQsSUFDdkUsRUFDTixNQUFDLEdBQUcsZUFDQSxLQUFDLElBQUksSUFBQyxRQUFRLHNDQUF1QixFQUNyQyxLQUFDLElBQUksSUFBQyxLQUFLLEVBQUMsUUFBUSxZQUFFLGdCQUFnQixHQUFRLElBQzVDLElBQ0osQ0FDVCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHQsIEJveCB9IGZyb20gXCJpbmtcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IFRTU0xNb2RlIH0gZnJvbSBcIi4vaW5kZXgubWpzXCI7XG5cbmV4cG9ydCB0eXBlIFRDb25uZWN0aW9uQ29uZmlnID0ge1xuICAgIGNvbm5lY3Rpb25TdHJpbmc/OiBzdHJpbmc7XG4gICAgaG9zdG5hbWU/OiBzdHJpbmc7XG4gICAgcG9ydD86IG51bWJlcjtcbiAgICBkYXRhYmFzZT86IHN0cmluZztcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBzc2xtb2RlPzogVFNTTE1vZGU7XG4gICAgc3NsY2VydD86IHN0cmluZztcbiAgICBzc2xrZXk/OiBzdHJpbmc7XG4gICAgc3Nscm9vdGNlcnQ/OiBzdHJpbmc7XG4gICAgc3NoSG9zdD86IHN0cmluZztcbiAgICBzc2hQb3J0PzogbnVtYmVyO1xuICAgIHNzaFVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHNzaFByaXZhdGVLZXk/OiBzdHJpbmc7XG59O1xuXG50eXBlIFRBcHBQcm9wcyA9IHtcbiAgICBjb25maWc6IFRDb25uZWN0aW9uQ29uZmlnO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFwcCh7IGNvbmZpZyB9OiBUQXBwUHJvcHMpOiBSZWFjdE5vZGUge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25UYXJnZXQgPSBjb25maWcuY29ubmVjdGlvblN0cmluZ1xuICAgICAgICA/IGNvbmZpZy5jb25uZWN0aW9uU3RyaW5nLnJlcGxhY2UoLzpbXjpAXStALywgXCI6KioqQFwiKSAvLyBtYXNrIHBhc3N3b3JkXG4gICAgICAgIDogYCR7Y29uZmlnLmhvc3RuYW1lfToke2NvbmZpZy5wb3J0fS8ke2NvbmZpZy5kYXRhYmFzZX1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgcGFkZGluZz17MX0+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJjeWFuXCIgYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgZGJjdHhcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+IC0gQUkgZ2VuZXJhdGVkIGRvY3MgZnJvbSB5b3VyIGFwcGxpY2F0aW9uIGRhdGFiYXNlPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPkNvbm5lY3RpbmcgdG86IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPntjb25uZWN0aW9uVGFyZ2V0fTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"Error.d.ts","sourceRoot":"./src/","sources":["components/Error.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,UAAU;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,SAAS,CAQxD"}
@@ -1,6 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Text, Box } from "ink";
3
- export function Error({ message }) {
4
- return (_jsx(Box, { children: _jsxs(Text, { color: "red", bold: true, children: ["Error: ", message] }) }));
5
- }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3IuanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL0Vycm9yLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFPaEMsTUFBTSxVQUFVLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBYztJQUN6QyxPQUFPLENBQ0gsS0FBQyxHQUFHLGNBQ0EsTUFBQyxJQUFJLElBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxJQUFJLDhCQUNWLE9BQU8sSUFDWixHQUNMLENBQ1QsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXh0LCBCb3ggfSBmcm9tIFwiaW5rXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgRXJyb3JQcm9wcyB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXJyb3IoeyBtZXNzYWdlIH06IEVycm9yUHJvcHMpOiBSZWFjdE5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiIGJvbGQ+XG4gICAgICAgICAgICAgICAgRXJyb3I6IHttZXNzYWdlfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIl19