inup 1.6.6 → 1.6.7
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.
- package/README.md +16 -0
- package/dist/{interactive-ui.js → app/interactive-ui.js} +32 -21
- package/dist/{core → app}/upgrade-runner.js +12 -11
- package/dist/cli.js +12 -10
- package/dist/{services → features/audit}/background-audit.js +2 -2
- package/dist/features/{headless/vulnerability-audit.js → audit/headless-audit.js} +9 -5
- package/dist/features/audit/index.js +36 -0
- package/dist/{ui/presenters/vulnerability.js → features/audit/presenter.js} +1 -1
- package/dist/{ui/controllers → features/audit}/vulnerability-audit-controller.js +12 -6
- package/dist/{services → features/audit}/vulnerability-checker.js +11 -8
- package/dist/features/changelog/clients/github-client.js +35 -17
- package/dist/features/changelog/clients/npm-registry-client.js +16 -2
- package/dist/features/changelog/index.js +1 -1
- package/dist/features/changelog/services/package-metadata-service.js +6 -2
- package/dist/features/changelog/services/release-notes-service.js +6 -10
- package/dist/features/changelog/types.js +3 -0
- package/dist/features/debug/index.js +3 -4
- package/dist/features/debug/{services/perf-logger.js → perf-logger.js} +1 -1
- package/dist/features/debug/types.js +3 -0
- package/dist/features/headless/headless-runner.js +11 -11
- package/dist/features/headless/index.js +1 -4
- package/dist/features/headless/report.js +2 -0
- package/dist/features/interactive/controllers/index.js +6 -0
- package/dist/{ui → features/interactive}/controllers/package-info-modal-controller.js +3 -3
- package/dist/features/interactive/index.js +21 -0
- package/dist/{ui → features/interactive}/input-handler.js +3 -3
- package/dist/{ui → features/interactive}/modal/layout.js +2 -2
- package/dist/{ui/renderer/package-list.js → features/interactive/modal/package-info-sections/index.js} +3 -3
- package/dist/{ui → features/interactive}/modal/package-info-sections/sections.js +53 -22
- package/dist/{ui → features/interactive}/modal/package-info-sections/text.js +5 -5
- package/dist/{ui → features/interactive}/modal/package-info.js +31 -13
- package/dist/features/interactive/modal/types.js +3 -0
- package/dist/{ui → features/interactive}/presenters/health.js +2 -2
- package/dist/{ui → features/interactive}/renderer/index.js +0 -1
- package/dist/{types.js → features/interactive/renderer/package-list/index.js} +3 -4
- package/dist/{ui → features/interactive}/renderer/package-list/interface.js +9 -10
- package/dist/{ui → features/interactive}/renderer/package-list/rows.js +24 -17
- package/dist/features/{debug → interactive}/renderer/performance-modal.js +1 -1
- package/dist/{ui/utils/version.js → features/interactive/renderer/version-format.js} +6 -10
- package/dist/{ui → features/interactive}/session/index.js +2 -1
- package/dist/{ui → features/interactive}/session/interactive-session.js +39 -19
- package/dist/{ui → features/interactive}/session/selection-state-builder.js +20 -5
- package/dist/{ui → features/interactive}/state/filter-manager.js +2 -2
- package/dist/{ui → features/interactive}/state/state-manager.js +6 -4
- package/dist/{ui → features/interactive}/state/theme-manager.js +8 -4
- package/dist/{ui → features/interactive}/themes-colors.js +5 -2
- package/dist/features/upgrade/index.js +8 -0
- package/dist/{core → features/upgrade}/package-detector.js +74 -33
- package/dist/{core → features/upgrade}/upgrader.js +72 -14
- package/dist/index.js +2 -2
- package/dist/{config → shared/config}/package-meta.js +1 -1
- package/dist/{config → shared/config}/project-config.js +4 -1
- package/dist/{utils/config.js → shared/config/user-config.js} +3 -3
- package/dist/{ui/modal/package-info-sections.js → shared/fs/index.js} +4 -3
- package/dist/{utils/filesystem → shared/fs}/paths.js +3 -3
- package/dist/{utils/filesystem → shared/fs}/scan.js +5 -2
- package/dist/{services → shared}/http/etag-store.js +56 -4
- package/dist/{utils → shared}/local-env.js +1 -1
- package/dist/{services/package-manager-detector.js → shared/package-manager.js} +1 -1
- package/dist/shared/pnpm-catalogs.js +138 -0
- package/dist/{services → shared/registry}/npm-registry.js +48 -29
- package/dist/shared/registry/registry-config.js +76 -0
- package/dist/{services → shared/registry}/version-checker.js +24 -25
- package/dist/{ui/utils → shared/terminal}/index.js +4 -6
- package/dist/{ui/utils → shared/terminal}/terminal-input.js +2 -1
- package/dist/shared/terminal/text.js +48 -0
- package/dist/shared/types/index.js +20 -0
- package/dist/{utils/version.js → shared/versions.js} +12 -1
- package/package.json +15 -6
- package/dist/core/index.js +0 -23
- package/dist/features/changelog/types/changelog.types.js +0 -3
- package/dist/features/debug/types/debug.types.js +0 -3
- package/dist/services/index.js +0 -25
- package/dist/ui/controllers/index.js +0 -8
- package/dist/ui/index.js +0 -27
- package/dist/ui/presenters/index.js +0 -11
- package/dist/ui/utils/text.js +0 -76
- package/dist/utils/filesystem.js +0 -20
- package/dist/utils/index.js +0 -34
- /package/dist/{ui/modal → features/audit}/types.js +0 -0
- /package/dist/features/debug/{services/performance-tracker.js → performance-tracker.js} +0 -0
- /package/dist/{ui → features/interactive}/keymap.js +0 -0
- /package/dist/{ui → features/interactive}/modal/index.js +0 -0
- /package/dist/{ui → features/interactive}/modal/package-info-sections/release-notes.js +0 -0
- /package/dist/{ui → features/interactive}/modal/theme-selector.js +0 -0
- /package/dist/{ui → features/interactive}/renderer/confirmation.js +0 -0
- /package/dist/{ui → features/interactive}/renderer/help-modal.js +0 -0
- /package/dist/{ui → features/interactive}/session/action-dispatcher.js +0 -0
- /package/dist/{ui → features/interactive}/state/index.js +0 -0
- /package/dist/{ui → features/interactive}/state/modal-manager.js +0 -0
- /package/dist/{ui → features/interactive}/state/navigation-manager.js +0 -0
- /package/dist/{ui → features/interactive}/themes.js +0 -0
- /package/dist/{config → shared/config}/constants.js +0 -0
- /package/dist/{config → shared/config}/index.js +0 -0
- /package/dist/{utils → shared}/debug-logger.js +0 -0
- /package/dist/{utils → shared}/engines.js +0 -0
- /package/dist/{utils → shared}/exec.js +0 -0
- /package/dist/{utils/filesystem → shared/fs}/io.js +0 -0
- /package/dist/{utils → shared}/git.js +0 -0
- /package/dist/{services → shared}/http/adaptive-controller.js +0 -0
- /package/dist/{services → shared}/http/inflight.js +0 -0
- /package/dist/{services → shared}/http/resizable-semaphore.js +0 -0
- /package/dist/{services → shared}/http/retry.js +0 -0
- /package/dist/{utils → shared}/manifest.js +0 -0
- /package/dist/{utils → shared/terminal}/color.js +0 -0
- /package/dist/{ui/utils → shared/terminal}/cursor.js +0 -0
- /package/dist/{types → shared/types}/domain.js +0 -0
- /package/dist/{types → shared/types}/streaming.js +0 -0
- /package/dist/{types → shared/types}/ui.js +0 -0
|
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.renderInterface = renderInterface;
|
|
7
7
|
exports.renderPackagesTable = renderPackagesTable;
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const
|
|
9
|
+
const version_format_1 = require("../version-format");
|
|
10
10
|
const themes_colors_1 = require("../../themes-colors");
|
|
11
|
-
const config_1 = require("
|
|
11
|
+
const config_1 = require("../../../../shared/config");
|
|
12
12
|
const rows_1 = require("./rows");
|
|
13
13
|
const keymap_1 = require("../../keymap");
|
|
14
14
|
function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _forceFullRender, renderableItems, activeFilterLabel, packageManager, filterMode, filterQuery, totalPackagesBeforeFilter, terminalWidth = 80, loadingProgress, auditProgress, options = {}, notice) {
|
|
@@ -31,7 +31,7 @@ function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _for
|
|
|
31
31
|
(0, themes_colors_1.getThemeColor)('textSecondary')(' - ') +
|
|
32
32
|
(0, themes_colors_1.getThemeColor)('primary')(activeFilterLabel)
|
|
33
33
|
: headerLine;
|
|
34
|
-
const headerPadding = Math.max(0, terminalWidth -
|
|
34
|
+
const headerPadding = Math.max(0, terminalWidth - version_format_1.VersionUtils.getVisualLength(fullHeaderLine));
|
|
35
35
|
output.push(fullHeaderLine + ' '.repeat(headerPadding));
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
@@ -41,7 +41,7 @@ function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _for
|
|
|
41
41
|
(0, themes_colors_1.getThemeColor)('textSecondary')(' - ') +
|
|
42
42
|
(0, themes_colors_1.getThemeColor)('primary')(activeFilterLabel)
|
|
43
43
|
: headerLine;
|
|
44
|
-
const headerPadding = Math.max(0, terminalWidth -
|
|
44
|
+
const headerPadding = Math.max(0, terminalWidth - version_format_1.VersionUtils.getVisualLength(fullHeaderLine));
|
|
45
45
|
output.push(fullHeaderLine + ' '.repeat(headerPadding));
|
|
46
46
|
}
|
|
47
47
|
output.push('');
|
|
@@ -50,7 +50,7 @@ function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _for
|
|
|
50
50
|
chalk_1.default.bold.white('Search: ') +
|
|
51
51
|
(0, themes_colors_1.getThemeColor)('primary')(filterQuery || '') +
|
|
52
52
|
(0, themes_colors_1.getThemeColor)('border')('█');
|
|
53
|
-
const padding = Math.max(0, terminalWidth -
|
|
53
|
+
const padding = Math.max(0, terminalWidth - version_format_1.VersionUtils.getVisualLength(filterDisplay));
|
|
54
54
|
output.push(filterDisplay + ' '.repeat(padding));
|
|
55
55
|
}
|
|
56
56
|
else if (filterQuery) {
|
|
@@ -58,7 +58,7 @@ function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _for
|
|
|
58
58
|
chalk_1.default.bold.white('Search: ') +
|
|
59
59
|
(0, themes_colors_1.getThemeColor)('primary')(filterQuery) +
|
|
60
60
|
(0, themes_colors_1.getThemeColor)('textSecondary')(' (press / to edit)');
|
|
61
|
-
const padding = Math.max(0, terminalWidth -
|
|
61
|
+
const padding = Math.max(0, terminalWidth - version_format_1.VersionUtils.getVisualLength(filterDisplay));
|
|
62
62
|
output.push(filterDisplay + ' '.repeat(padding));
|
|
63
63
|
}
|
|
64
64
|
else {
|
|
@@ -107,8 +107,7 @@ function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _for
|
|
|
107
107
|
const matchCount = totalVisualItems > maxVisibleItems
|
|
108
108
|
? (0, themes_colors_1.getThemeColor)('textSecondary')(`Showing ${chalk_1.default.white(startItem)}-${chalk_1.default.white(endItem)} of ${chalk_1.default.white(totalPackages)} matches`)
|
|
109
109
|
: (0, themes_colors_1.getThemeColor)('textSecondary')(`Showing all ${chalk_1.default.white(totalPackages)} matches`);
|
|
110
|
-
statusLine =
|
|
111
|
-
matchCount + ' ' + chalk_1.default.bold.white('Esc ') + chalk_1.default.gray('Clear filter');
|
|
110
|
+
statusLine = matchCount + ' ' + chalk_1.default.bold.white('Esc ') + chalk_1.default.gray('Clear filter');
|
|
112
111
|
}
|
|
113
112
|
else {
|
|
114
113
|
if (totalVisualItems > maxVisibleItems) {
|
|
@@ -136,7 +135,7 @@ function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _for
|
|
|
136
135
|
// single render so the layout height stays constant.
|
|
137
136
|
const statusContent = notice ? (0, themes_colors_1.getThemeColor)('warning')(notice) : statusLine;
|
|
138
137
|
const statusLineFull = ' ' + statusContent;
|
|
139
|
-
const statusPadding = Math.max(0, terminalWidth -
|
|
138
|
+
const statusPadding = Math.max(0, terminalWidth - version_format_1.VersionUtils.getVisualLength(statusLineFull));
|
|
140
139
|
output.push(statusLineFull + ' '.repeat(statusPadding));
|
|
141
140
|
output.push('');
|
|
142
141
|
if (renderableItems && renderableItems.length > 0) {
|
|
@@ -166,7 +165,7 @@ function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _for
|
|
|
166
165
|
const loadingLine = ' ' +
|
|
167
166
|
(0, themes_colors_1.getThemeColor)('textSecondary')(loadingLabel) +
|
|
168
167
|
(failedLabel ? chalk_1.default.yellow(failedLabel) : '');
|
|
169
|
-
const loadingPadding = Math.max(0, terminalWidth -
|
|
168
|
+
const loadingPadding = Math.max(0, terminalWidth - version_format_1.VersionUtils.getVisualLength(loadingLine));
|
|
170
169
|
output.push(loadingLine + ' '.repeat(loadingPadding));
|
|
171
170
|
}
|
|
172
171
|
return output.map((line) => (0, rows_1.padLineToWidth)(line, terminalWidth));
|
|
@@ -8,12 +8,12 @@ exports.renderPackageLine = renderPackageLine;
|
|
|
8
8
|
exports.renderSectionHeader = renderSectionHeader;
|
|
9
9
|
exports.renderSpacer = renderSpacer;
|
|
10
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
-
const
|
|
11
|
+
const version_format_1 = require("../version-format");
|
|
12
12
|
const themes_colors_1 = require("../../themes-colors");
|
|
13
|
-
const
|
|
13
|
+
const audit_1 = require("../../../audit");
|
|
14
14
|
const health_1 = require("../../presenters/health");
|
|
15
15
|
function padLineToWidth(line, terminalWidth) {
|
|
16
|
-
const padding = Math.max(0, terminalWidth -
|
|
16
|
+
const padding = Math.max(0, terminalWidth - version_format_1.VersionUtils.getVisualLength(line));
|
|
17
17
|
return line + ' '.repeat(padding);
|
|
18
18
|
}
|
|
19
19
|
function getTypeBadge(type) {
|
|
@@ -29,6 +29,10 @@ function getTypeBadge(type) {
|
|
|
29
29
|
return '';
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
/** Marks entries whose range lives in a pnpm catalog (pnpm-workspace.yaml), not a package.json. */
|
|
33
|
+
function getCatalogBadge(catalog) {
|
|
34
|
+
return catalog ? (0, themes_colors_1.getThemeColor)('textSecondary')('[C]') : '';
|
|
35
|
+
}
|
|
32
36
|
function renderPackageLine(state, _index, isCurrentRow, terminalWidth = 80, options = {}) {
|
|
33
37
|
const prefix = isCurrentRow ? (0, themes_colors_1.getThemeColor)('success')('❯ ') : ' ';
|
|
34
38
|
let packageName;
|
|
@@ -74,7 +78,7 @@ function renderPackageLine(state, _index, isCurrentRow, terminalWidth = 80, opti
|
|
|
74
78
|
}
|
|
75
79
|
else if (state.hasRangeUpdate) {
|
|
76
80
|
rangeDot = isRangeSelected ? (0, themes_colors_1.getThemeColor)('dot')('●') : (0, themes_colors_1.getThemeColor)('dotEmpty')('○');
|
|
77
|
-
const rangeVersionWithPrefix =
|
|
81
|
+
const rangeVersionWithPrefix = version_format_1.VersionUtils.applyVersionPrefix(state.currentVersionSpecifier, state.rangeVersion);
|
|
78
82
|
rangeVersionText = (0, themes_colors_1.getThemeColor)('versionRange')(rangeVersionWithPrefix);
|
|
79
83
|
}
|
|
80
84
|
else {
|
|
@@ -93,7 +97,7 @@ function renderPackageLine(state, _index, isCurrentRow, terminalWidth = 80, opti
|
|
|
93
97
|
}
|
|
94
98
|
else if (state.hasMajorUpdate) {
|
|
95
99
|
latestDot = isLatestSelected ? (0, themes_colors_1.getThemeColor)('dot')('●') : (0, themes_colors_1.getThemeColor)('dotEmpty')('○');
|
|
96
|
-
const latestVersionWithPrefix =
|
|
100
|
+
const latestVersionWithPrefix = version_format_1.VersionUtils.applyVersionPrefix(state.currentVersionSpecifier, state.latestVersion);
|
|
97
101
|
latestVersionText = (0, themes_colors_1.getThemeColor)('versionLatest')(latestVersionWithPrefix);
|
|
98
102
|
}
|
|
99
103
|
else {
|
|
@@ -110,30 +114,33 @@ function renderPackageLine(state, _index, isCurrentRow, terminalWidth = 80, opti
|
|
|
110
114
|
const prefixWidth = 2;
|
|
111
115
|
const availableForPackageName = terminalWidth - prefixWidth - otherColumnsWidth - 1;
|
|
112
116
|
const packageNameWidth = Math.min(maxPackageNameWidth, Math.max(minPackageNameWidth, availableForPackageName));
|
|
113
|
-
|
|
114
|
-
|
|
117
|
+
// Trailing badges each occupy 3 columns: the dep-type marker ([D]/[P]/[O])
|
|
118
|
+
// and the pnpm-catalog marker ([C]); both may be present at once.
|
|
119
|
+
const badgeWidth = (state.type === 'dependencies' ? 0 : 3) + (state.catalog ? 3 : 0);
|
|
120
|
+
const truncatedName = version_format_1.VersionUtils.truncateMiddle(state.name, packageNameWidth - 1 - badgeWidth);
|
|
115
121
|
const shouldShowDashes = (paddingAmount) => paddingAmount > 2;
|
|
116
122
|
const dashColor = isCurrentRow ? chalk_1.default.white : chalk_1.default.gray;
|
|
117
123
|
const displayName = truncatedName !== state.name ? truncatedName : packageName;
|
|
118
124
|
const typeBadge = getTypeBadge(state.type);
|
|
119
|
-
const shouldShowVulnerability = (0,
|
|
120
|
-
const vulnBadge = shouldShowVulnerability ? (0,
|
|
121
|
-
const vulnBadgeWidth = vulnBadge ?
|
|
125
|
+
const shouldShowVulnerability = (0, audit_1.shouldDisplayVulnerabilityForDependency)(state.type, options);
|
|
126
|
+
const vulnBadge = shouldShowVulnerability ? (0, audit_1.getVulnerabilityBadge)(state.vulnerability) : '';
|
|
127
|
+
const vulnBadgeWidth = vulnBadge ? version_format_1.VersionUtils.getVisualLength(vulnBadge) + 1 : 0;
|
|
122
128
|
// Deprecation / engines-incompatibility marker (independent of dep type).
|
|
123
129
|
const healthBadge = (0, health_1.getHealthBadge)(state);
|
|
124
|
-
const healthBadgeWidth = healthBadge ?
|
|
125
|
-
const nameLength =
|
|
130
|
+
const healthBadgeWidth = healthBadge ? version_format_1.VersionUtils.getVisualLength(healthBadge) + 1 : 0;
|
|
131
|
+
const nameLength = version_format_1.VersionUtils.getVisualLength(truncatedName);
|
|
126
132
|
const namePadding = Math.max(0, packageNameWidth - nameLength - 1 - badgeWidth - vulnBadgeWidth - healthBadgeWidth);
|
|
127
133
|
const nameDashes = shouldShowDashes(namePadding)
|
|
128
134
|
? dashColor('-').repeat(namePadding)
|
|
129
135
|
: ' '.repeat(namePadding);
|
|
130
136
|
const vulnSuffix = vulnBadge ? ` ${vulnBadge}` : '';
|
|
131
137
|
const healthSuffix = healthBadge ? ` ${healthBadge}` : '';
|
|
132
|
-
const
|
|
133
|
-
|
|
138
|
+
const trailingBadges = `${getCatalogBadge(state.catalog)}${typeBadge}`;
|
|
139
|
+
const packageNameSection = trailingBadges
|
|
140
|
+
? `${displayName} ${nameDashes}${vulnSuffix}${healthSuffix}${trailingBadges}`
|
|
134
141
|
: `${displayName} ${nameDashes}${vulnSuffix}${healthSuffix}`;
|
|
135
142
|
const currentSection = `${currentDot} ${currentVersion}`;
|
|
136
|
-
const currentSectionLength =
|
|
143
|
+
const currentSectionLength = version_format_1.VersionUtils.getVisualLength(currentSection) + 1;
|
|
137
144
|
const currentPadding = Math.max(0, currentColumnWidth - currentSectionLength);
|
|
138
145
|
const currentPaddingText = shouldShowDashes(currentPadding)
|
|
139
146
|
? dashColor('-').repeat(currentPadding)
|
|
@@ -142,7 +149,7 @@ function renderPackageLine(state, _index, isCurrentRow, terminalWidth = 80, opti
|
|
|
142
149
|
let rangeSection = '';
|
|
143
150
|
if (isPending || isFailed || state.hasRangeUpdate) {
|
|
144
151
|
rangeSection = `${rangeDot} ${rangeVersionText}`;
|
|
145
|
-
const rangeSectionLength =
|
|
152
|
+
const rangeSectionLength = version_format_1.VersionUtils.getVisualLength(rangeSection) + 1;
|
|
146
153
|
const rangePadding = Math.max(0, rangeColumnWidth - rangeSectionLength);
|
|
147
154
|
const rangePaddingText = shouldShowDashes(rangePadding)
|
|
148
155
|
? dashColor('-').repeat(rangePadding)
|
|
@@ -155,7 +162,7 @@ function renderPackageLine(state, _index, isCurrentRow, terminalWidth = 80, opti
|
|
|
155
162
|
let latestSection = '';
|
|
156
163
|
if (isPending || isFailed || state.hasMajorUpdate) {
|
|
157
164
|
latestSection = `${latestDot} ${latestVersionText}`;
|
|
158
|
-
const latestSectionLength =
|
|
165
|
+
const latestSectionLength = version_format_1.VersionUtils.getVisualLength(latestSection) + 1;
|
|
159
166
|
const latestPadding = Math.max(0, latestColumnWidth - latestSectionLength);
|
|
160
167
|
const latestPaddingText = shouldShowDashes(latestPadding)
|
|
161
168
|
? dashColor('-').repeat(latestPadding)
|
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.renderPerformanceModal = renderPerformanceModal;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const modal_1 = require("
|
|
8
|
+
const modal_1 = require("../modal");
|
|
9
9
|
function formatMs(value) {
|
|
10
10
|
if (value === undefined || value === null)
|
|
11
11
|
return chalk_1.default.gray('—');
|
|
@@ -3,19 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.VersionUtils = exports.getVisualLength = exports.stripAnsi = void 0;
|
|
7
|
-
exports.applyVersionPrefix = applyVersionPrefix;
|
|
6
|
+
exports.VersionUtils = exports.applyVersionPrefix = exports.getVisualLength = exports.stripAnsi = void 0;
|
|
8
7
|
exports.truncateMiddle = truncateMiddle;
|
|
9
8
|
exports.formatVersionDiff = formatVersionDiff;
|
|
10
9
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
-
const text_1 = require("
|
|
10
|
+
const text_1 = require("../../../shared/terminal/text");
|
|
12
11
|
Object.defineProperty(exports, "stripAnsi", { enumerable: true, get: function () { return text_1.stripAnsi; } });
|
|
13
12
|
Object.defineProperty(exports, "getVisualLength", { enumerable: true, get: function () { return text_1.getVisualLength; } });
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const prefix = prefixMatch ? prefixMatch[1] : '';
|
|
17
|
-
return prefix + targetVersion;
|
|
18
|
-
}
|
|
13
|
+
const versions_1 = require("../../../shared/versions");
|
|
14
|
+
Object.defineProperty(exports, "applyVersionPrefix", { enumerable: true, get: function () { return versions_1.applyVersionPrefix; } });
|
|
19
15
|
function truncateMiddle(str, maxLength) {
|
|
20
16
|
const visualLength = (0, text_1.getVisualLength)(str);
|
|
21
17
|
if (visualLength <= maxLength) {
|
|
@@ -67,10 +63,10 @@ function formatVersionDiff(current, target, colorFn) {
|
|
|
67
63
|
return result.join('');
|
|
68
64
|
}
|
|
69
65
|
exports.VersionUtils = {
|
|
70
|
-
applyVersionPrefix,
|
|
66
|
+
applyVersionPrefix: versions_1.applyVersionPrefix,
|
|
71
67
|
truncateMiddle,
|
|
72
68
|
formatVersionDiff,
|
|
73
69
|
stripAnsi: text_1.stripAnsi,
|
|
74
70
|
getVisualLength: text_1.getVisualLength,
|
|
75
71
|
};
|
|
76
|
-
//# sourceMappingURL=version.js.map
|
|
72
|
+
//# sourceMappingURL=version-format.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.dispatchAction = exports.deduplicatePackages = exports.createUpgradeChoices = exports.createPendingSelectionStates = exports.createSelectionStates = exports.runInteractiveSession = void 0;
|
|
3
|
+
exports.dispatchAction = exports.selectionKey = exports.deduplicatePackages = exports.createUpgradeChoices = exports.createPendingSelectionStates = exports.createSelectionStates = exports.runInteractiveSession = void 0;
|
|
4
4
|
var interactive_session_1 = require("./interactive-session");
|
|
5
5
|
Object.defineProperty(exports, "runInteractiveSession", { enumerable: true, get: function () { return interactive_session_1.runInteractiveSession; } });
|
|
6
6
|
var selection_state_builder_1 = require("./selection-state-builder");
|
|
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "createSelectionStates", { enumerable: true, get:
|
|
|
8
8
|
Object.defineProperty(exports, "createPendingSelectionStates", { enumerable: true, get: function () { return selection_state_builder_1.createPendingSelectionStates; } });
|
|
9
9
|
Object.defineProperty(exports, "createUpgradeChoices", { enumerable: true, get: function () { return selection_state_builder_1.createUpgradeChoices; } });
|
|
10
10
|
Object.defineProperty(exports, "deduplicatePackages", { enumerable: true, get: function () { return selection_state_builder_1.deduplicatePackages; } });
|
|
11
|
+
Object.defineProperty(exports, "selectionKey", { enumerable: true, get: function () { return selection_state_builder_1.selectionKey; } });
|
|
11
12
|
var action_dispatcher_1 = require("./action-dispatcher");
|
|
12
13
|
Object.defineProperty(exports, "dispatchAction", { enumerable: true, get: function () { return action_dispatcher_1.dispatchAction; } });
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -5,12 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.runInteractiveSession = runInteractiveSession;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const state_1 = require("../state");
|
|
9
|
+
const input_handler_1 = require("../input-handler");
|
|
10
|
+
const terminal_1 = require("../../../shared/terminal");
|
|
11
|
+
const cursor_1 = require("../../../shared/terminal/cursor");
|
|
10
12
|
const themes_colors_1 = require("../themes-colors");
|
|
11
|
-
const debug_1 = require("../../
|
|
13
|
+
const debug_1 = require("../../debug");
|
|
14
|
+
const performance_modal_1 = require("../renderer/performance-modal");
|
|
12
15
|
const help_modal_1 = require("../renderer/help-modal");
|
|
13
|
-
const
|
|
16
|
+
const user_config_1 = require("../../../shared/config/user-config");
|
|
14
17
|
const action_dispatcher_1 = require("./action-dispatcher");
|
|
15
18
|
function getTerminalHeight() {
|
|
16
19
|
if (process.stdout.isTTY && typeof process.stdout.rows === 'number' && process.stdout.rows > 0) {
|
|
@@ -21,7 +24,7 @@ function getTerminalHeight() {
|
|
|
21
24
|
async function runInteractiveSession(selectionStates, packageManager, renderer, packageInfoModalController, vulnerabilityAuditController, options, onRefreshViewReady, loadingProgress, attachRefresh) {
|
|
22
25
|
return new Promise((resolve) => {
|
|
23
26
|
const states = selectionStates;
|
|
24
|
-
const stateManager = new
|
|
27
|
+
const stateManager = new state_1.StateManager(0, getTerminalHeight(), user_config_1.configManager.getFilters() ?? undefined);
|
|
25
28
|
let isResolved = false;
|
|
26
29
|
let ownsAlternateScreen = false;
|
|
27
30
|
const vulnerabilityDisplayOptions = options;
|
|
@@ -32,17 +35,21 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
32
35
|
let previousModalViewportLineCount = null;
|
|
33
36
|
stateManager.setRenderableItems([]);
|
|
34
37
|
const claimInteractiveScreen = () => {
|
|
38
|
+
// Claimed exactly once per session; the guard is a safety net in case a
|
|
39
|
+
// future caller re-claims.
|
|
40
|
+
/* v8 ignore start */
|
|
35
41
|
if (ownsAlternateScreen)
|
|
36
42
|
return;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
/* v8 ignore stop */
|
|
44
|
+
terminal_1.ConsoleUtils.clearProgress();
|
|
45
|
+
terminal_1.CursorUtils.enterAlternateScreen();
|
|
46
|
+
terminal_1.CursorUtils.clearScreen();
|
|
40
47
|
ownsAlternateScreen = true;
|
|
41
48
|
};
|
|
42
49
|
const releaseInteractiveScreen = () => {
|
|
43
50
|
if (!ownsAlternateScreen)
|
|
44
51
|
return;
|
|
45
|
-
|
|
52
|
+
terminal_1.CursorUtils.exitAlternateScreen();
|
|
46
53
|
ownsAlternateScreen = false;
|
|
47
54
|
};
|
|
48
55
|
const resetAnsiPattern = /\x1b\[(?:0|49)m/g;
|
|
@@ -74,8 +81,12 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
74
81
|
};
|
|
75
82
|
const applyBackgroundToLine = (line, bgCode) => `${bgCode}${line.replace(resetAnsiPattern, (match) => `${match}${bgCode}`)}${(0, themes_colors_1.getTerminalResetCode)()}`;
|
|
76
83
|
const writeFrame = (lines, bgCode) => {
|
|
84
|
+
// Viewports are always padded to the terminal height, so an empty frame
|
|
85
|
+
// cannot occur today; guard kept so a future caller cannot emit garbage.
|
|
86
|
+
/* v8 ignore start */
|
|
77
87
|
if (lines.length === 0)
|
|
78
88
|
return;
|
|
89
|
+
/* v8 ignore stop */
|
|
79
90
|
process.stdout.write(lines.map((line) => applyBackgroundToLine(line, bgCode)).join('\n'));
|
|
80
91
|
};
|
|
81
92
|
const renderViewport = (lines, terminalWidth, terminalHeight, bgCode) => {
|
|
@@ -89,8 +100,8 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
89
100
|
const viewportLineCount = buildModalHeaderLines(shortcutLabel).length + modalLines.length;
|
|
90
101
|
const shouldClearBeforeRender = previousViewportMode !== mode || previousModalViewportLineCount !== viewportLineCount;
|
|
91
102
|
if (shouldClearBeforeRender) {
|
|
92
|
-
|
|
93
|
-
|
|
103
|
+
terminal_1.CursorUtils.clearScreen();
|
|
104
|
+
terminal_1.CursorUtils.hide();
|
|
94
105
|
}
|
|
95
106
|
renderViewport([...buildModalHeaderLines(shortcutLabel), ...modalLines], terminalWidth, terminalHeight, bgCode);
|
|
96
107
|
previousViewportMode = mode;
|
|
@@ -104,11 +115,11 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
104
115
|
const bgCode = (0, themes_colors_1.getTerminalBgColorCode)();
|
|
105
116
|
process.stdout.write(bgCode);
|
|
106
117
|
if (uiState.forceFullRender) {
|
|
107
|
-
|
|
108
|
-
|
|
118
|
+
terminal_1.CursorUtils.clearScreen();
|
|
119
|
+
terminal_1.CursorUtils.hide();
|
|
109
120
|
}
|
|
110
121
|
else {
|
|
111
|
-
|
|
122
|
+
terminal_1.CursorUtils.moveToHome();
|
|
112
123
|
}
|
|
113
124
|
if (uiState.showThemeModal) {
|
|
114
125
|
const terminalWidth = process.stdout.columns || 80;
|
|
@@ -135,7 +146,7 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
135
146
|
const terminalWidth = process.stdout.columns || 80;
|
|
136
147
|
const terminalHeight = getTerminalHeight();
|
|
137
148
|
const snapshot = (0, debug_1.getPerformanceTracker)().snapshot();
|
|
138
|
-
const result = (0,
|
|
149
|
+
const result = (0, performance_modal_1.renderPerformanceModal)(snapshot, terminalWidth, Math.max(8, terminalHeight - 4), uiState.debugModalScrollOffset);
|
|
139
150
|
debugModalMaxScrollOffset = result.maxScrollOffset;
|
|
140
151
|
stateManager.clampDebugModalScrollOffset(debugModalMaxScrollOffset);
|
|
141
152
|
const debugHints = [
|
|
@@ -187,6 +198,9 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
187
198
|
};
|
|
188
199
|
// Safety net: restore terminal if the process exits without going through finalizeSelection.
|
|
189
200
|
// Only synchronous writes work in an 'exit' handler, but that's all we need here.
|
|
201
|
+
// Coverage: the body only runs during a real process 'exit' event, which
|
|
202
|
+
// cannot be fired safely inside the test process.
|
|
203
|
+
/* v8 ignore start */
|
|
190
204
|
const emergencyCleanup = () => {
|
|
191
205
|
if (ownsAlternateScreen) {
|
|
192
206
|
process.stdout.write(cursor_1.RAW_EXIT_ALT_SCREEN);
|
|
@@ -196,10 +210,11 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
196
210
|
process.stdin.setRawMode(false);
|
|
197
211
|
}
|
|
198
212
|
};
|
|
213
|
+
/* v8 ignore stop */
|
|
199
214
|
process.on('exit', emergencyCleanup);
|
|
200
215
|
let cleanupInteractiveSession = () => {
|
|
201
216
|
process.stdout.write((0, themes_colors_1.getTerminalResetCode)());
|
|
202
|
-
|
|
217
|
+
terminal_1.CursorUtils.show();
|
|
203
218
|
process.stdin.off('keypress', keypressHandler);
|
|
204
219
|
process.stdin.pause();
|
|
205
220
|
process.off('SIGWINCH', handleResize);
|
|
@@ -209,7 +224,7 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
209
224
|
onRefreshViewReady?.(undefined);
|
|
210
225
|
packageInfoModalController.cancel();
|
|
211
226
|
// Remember the view filters for next launch (best-effort, never throws).
|
|
212
|
-
|
|
227
|
+
user_config_1.configManager.setFilters(stateManager.getFilterSnapshot());
|
|
213
228
|
releaseInteractiveScreen();
|
|
214
229
|
cleanupInteractiveSession();
|
|
215
230
|
process.off('exit', emergencyCleanup);
|
|
@@ -221,7 +236,7 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
221
236
|
const handleCancel = () => {
|
|
222
237
|
finalizeSelection(states.map((s) => ({ ...s, selectedOption: 'none' })));
|
|
223
238
|
};
|
|
224
|
-
const inputHandler = new
|
|
239
|
+
const inputHandler = new input_handler_1.InputHandler(stateManager, (action) => (0, action_dispatcher_1.dispatchAction)(action, {
|
|
225
240
|
stateManager,
|
|
226
241
|
states,
|
|
227
242
|
vulnerabilityDisplayOptions,
|
|
@@ -249,18 +264,23 @@ async function runInteractiveSession(selectionStates, packageManager, renderer,
|
|
|
249
264
|
renderInterface();
|
|
250
265
|
}
|
|
251
266
|
});
|
|
252
|
-
const keypressSession =
|
|
267
|
+
const keypressSession = terminal_1.TerminalInput.startKeypressSession(keypressHandler);
|
|
253
268
|
const previousCleanup = cleanupInteractiveSession;
|
|
254
269
|
cleanupInteractiveSession = () => {
|
|
255
270
|
keypressSession.close();
|
|
256
271
|
previousCleanup();
|
|
257
272
|
};
|
|
258
273
|
process.on('SIGWINCH', handleResize);
|
|
274
|
+
// The state manager was constructed with getTerminalHeight() in this same
|
|
275
|
+
// tick, so the height cannot have changed yet; kept as a safety net for a
|
|
276
|
+
// future async gap between construction and startup.
|
|
277
|
+
/* v8 ignore start */
|
|
259
278
|
const currentHeight = getTerminalHeight();
|
|
260
279
|
if (stateManager.updateTerminalHeight(currentHeight)) {
|
|
261
280
|
const initialFiltered = stateManager.getFilteredStates(states, vulnerabilityDisplayOptions);
|
|
262
281
|
stateManager.resetForResize(initialFiltered.length);
|
|
263
282
|
}
|
|
283
|
+
/* v8 ignore stop */
|
|
264
284
|
renderInterface();
|
|
265
285
|
vulnerabilityAuditController.enqueueStates(states, () => {
|
|
266
286
|
if (!isResolved)
|
|
@@ -33,16 +33,26 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.selectionKey = selectionKey;
|
|
36
37
|
exports.deduplicatePackages = deduplicatePackages;
|
|
37
38
|
exports.createSelectionStates = createSelectionStates;
|
|
38
39
|
exports.createPendingSelectionStates = createPendingSelectionStates;
|
|
39
40
|
exports.createUpgradeChoices = createUpgradeChoices;
|
|
40
41
|
const semver = __importStar(require("semver"));
|
|
41
|
-
const
|
|
42
|
+
const versions_1 = require("../../../shared/versions");
|
|
43
|
+
/**
|
|
44
|
+
* Identity of a selectable row. Catalog entries carry the catalog name so a
|
|
45
|
+
* pnpm catalog entry never merges with a direct dependency that happens to have
|
|
46
|
+
* the same name/range/type — they are written to different files.
|
|
47
|
+
*/
|
|
48
|
+
function selectionKey(name, versionSpecifier, type, catalog) {
|
|
49
|
+
const base = `${name}@${versionSpecifier}@${type}`;
|
|
50
|
+
return catalog ? `${base}@catalog:${catalog}` : base;
|
|
51
|
+
}
|
|
42
52
|
function deduplicatePackages(packages) {
|
|
43
53
|
const uniquePackages = new Map();
|
|
44
54
|
for (const pkg of packages) {
|
|
45
|
-
const key =
|
|
55
|
+
const key = selectionKey(pkg.name, pkg.currentVersion, pkg.type, pkg.catalog);
|
|
46
56
|
if (!uniquePackages.has(key)) {
|
|
47
57
|
uniquePackages.set(key, {
|
|
48
58
|
pkg,
|
|
@@ -70,7 +80,7 @@ function createSelectionStates(packages, getCachedSummary, previousSelections, i
|
|
|
70
80
|
const currentClean = semver.coerce(pkg.currentVersion)?.version || pkg.currentVersion;
|
|
71
81
|
const rangeClean = semver.coerce(pkg.rangeVersion)?.version || pkg.rangeVersion;
|
|
72
82
|
const latestClean = semver.coerce(pkg.latestVersion)?.version || pkg.latestVersion;
|
|
73
|
-
const key =
|
|
83
|
+
const key = selectionKey(pkg.name, pkg.currentVersion, pkg.type, pkg.catalog);
|
|
74
84
|
const previousSelection = previousSelections?.get(key) || 'none';
|
|
75
85
|
return {
|
|
76
86
|
name: pkg.name,
|
|
@@ -85,6 +95,9 @@ function createSelectionStates(packages, getCachedSummary, previousSelections, i
|
|
|
85
95
|
hasRangeUpdate: pkg.hasRangeUpdate,
|
|
86
96
|
hasMajorUpdate: pkg.hasMajorUpdate,
|
|
87
97
|
type: pkg.type,
|
|
98
|
+
catalog: pkg.catalog,
|
|
99
|
+
catalogEntries: pkg.catalogEntries,
|
|
100
|
+
catalogReferencedBy: pkg.catalogReferencedBy,
|
|
88
101
|
deprecated: pkg.deprecated,
|
|
89
102
|
enginesNode: pkg.enginesNode,
|
|
90
103
|
vulnerability: getCachedSummary(pkg.name, pkg.currentVersion, pkg.type),
|
|
@@ -103,7 +116,7 @@ function createPendingSelectionStates(packages, getCachedSummary, previousSelect
|
|
|
103
116
|
})));
|
|
104
117
|
return Array.from(uniquePackages.values()).map(({ pkg, packageJsonPaths }) => {
|
|
105
118
|
const currentClean = semver.coerce(pkg.currentVersion)?.version || pkg.currentVersion;
|
|
106
|
-
const key =
|
|
119
|
+
const key = selectionKey(pkg.name, pkg.currentVersion, pkg.type, pkg.catalog);
|
|
107
120
|
const previousSelection = previousSelections?.get(key) || 'none';
|
|
108
121
|
return {
|
|
109
122
|
name: pkg.name,
|
|
@@ -118,6 +131,7 @@ function createPendingSelectionStates(packages, getCachedSummary, previousSelect
|
|
|
118
131
|
hasRangeUpdate: false,
|
|
119
132
|
hasMajorUpdate: false,
|
|
120
133
|
type: pkg.type,
|
|
134
|
+
catalog: pkg.catalog,
|
|
121
135
|
vulnerability: getCachedSummary(pkg.name, pkg.currentVersion, pkg.type),
|
|
122
136
|
};
|
|
123
137
|
});
|
|
@@ -131,7 +145,7 @@ function createUpgradeChoices(selectedStates, saveExact = false) {
|
|
|
131
145
|
// Preserve the original range prefix (^/~) by default; --save-exact writes the bare version.
|
|
132
146
|
const targetVersionWithPrefix = saveExact
|
|
133
147
|
? targetVersion
|
|
134
|
-
: (0,
|
|
148
|
+
: (0, versions_1.applyVersionPrefix)(state.currentVersionSpecifier, targetVersion);
|
|
135
149
|
const pathsToUpdate = state.packageJsonPaths || [state.packageJsonPath];
|
|
136
150
|
pathsToUpdate.forEach((packageJsonPath) => {
|
|
137
151
|
choices.push({
|
|
@@ -141,6 +155,7 @@ function createUpgradeChoices(selectedStates, saveExact = false) {
|
|
|
141
155
|
upgradeType: state.selectedOption,
|
|
142
156
|
targetVersion: targetVersionWithPrefix,
|
|
143
157
|
currentVersionSpecifier: state.currentVersionSpecifier,
|
|
158
|
+
catalog: state.catalog,
|
|
144
159
|
});
|
|
145
160
|
});
|
|
146
161
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FilterManager = void 0;
|
|
4
|
-
const
|
|
4
|
+
const audit_1 = require("../../audit");
|
|
5
5
|
class FilterManager {
|
|
6
6
|
state;
|
|
7
7
|
constructor(initial) {
|
|
@@ -118,7 +118,7 @@ class FilterManager {
|
|
|
118
118
|
});
|
|
119
119
|
// Apply vulnerability filter
|
|
120
120
|
if (this.state.showOnlyVulnerable) {
|
|
121
|
-
filtered = filtered.filter((state) => (0,
|
|
121
|
+
filtered = filtered.filter((state) => (0, audit_1.shouldDisplayVulnerabilityForDependency)(state.type, options) &&
|
|
122
122
|
!!state.vulnerability &&
|
|
123
123
|
state.vulnerability.count > 0);
|
|
124
124
|
}
|
|
@@ -114,8 +114,9 @@ class StateManager {
|
|
|
114
114
|
else if (currentState.selectedOption === 'range') {
|
|
115
115
|
currentState.selectedOption = 'none';
|
|
116
116
|
}
|
|
117
|
-
else
|
|
118
|
-
//
|
|
117
|
+
else {
|
|
118
|
+
// selectedOption === 'none' (the union has exactly three members):
|
|
119
|
+
// wrap around to the last available option.
|
|
119
120
|
if (currentState.hasMajorUpdate) {
|
|
120
121
|
currentState.selectedOption = 'latest';
|
|
121
122
|
}
|
|
@@ -143,8 +144,9 @@ class StateManager {
|
|
|
143
144
|
currentState.selectedOption = 'none';
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
|
-
else
|
|
147
|
-
//
|
|
147
|
+
else {
|
|
148
|
+
// selectedOption === 'latest' (the union has exactly three members):
|
|
149
|
+
// wrap around to none.
|
|
148
150
|
currentState.selectedOption = 'none';
|
|
149
151
|
}
|
|
150
152
|
}
|
|
@@ -4,14 +4,14 @@ exports.ThemeManager = void 0;
|
|
|
4
4
|
exports.getThemeColors = getThemeColors;
|
|
5
5
|
exports.getCurrentThemeName = getCurrentThemeName;
|
|
6
6
|
const themes_1 = require("../themes");
|
|
7
|
-
const
|
|
7
|
+
const user_config_1 = require("../../../shared/config/user-config");
|
|
8
8
|
// Global theme state for renderers to access
|
|
9
9
|
let globalCurrentTheme = themes_1.defaultTheme;
|
|
10
10
|
class ThemeManager {
|
|
11
11
|
state;
|
|
12
12
|
constructor() {
|
|
13
13
|
// Load saved theme from config, fallback to default
|
|
14
|
-
const savedTheme =
|
|
14
|
+
const savedTheme = user_config_1.configManager.getTheme();
|
|
15
15
|
const initialTheme = savedTheme && themes_1.themeNames.includes(savedTheme) ? savedTheme : themes_1.defaultTheme;
|
|
16
16
|
this.state = {
|
|
17
17
|
showThemeModal: false,
|
|
@@ -55,7 +55,7 @@ class ThemeManager {
|
|
|
55
55
|
this.state.currentTheme = this.state.previewTheme;
|
|
56
56
|
globalCurrentTheme = this.state.currentTheme;
|
|
57
57
|
// Save theme to config
|
|
58
|
-
|
|
58
|
+
user_config_1.configManager.setTheme(this.state.currentTheme);
|
|
59
59
|
this.closeThemeModal();
|
|
60
60
|
}
|
|
61
61
|
setTheme(themeName) {
|
|
@@ -64,7 +64,7 @@ class ThemeManager {
|
|
|
64
64
|
this.state.previewTheme = themeName;
|
|
65
65
|
globalCurrentTheme = themeName;
|
|
66
66
|
// Save theme to config
|
|
67
|
-
|
|
67
|
+
user_config_1.configManager.setTheme(themeName);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
toggleThemeModal() {
|
|
@@ -79,7 +79,11 @@ class ThemeManager {
|
|
|
79
79
|
exports.ThemeManager = ThemeManager;
|
|
80
80
|
// Helper function for renderers to get current theme colors
|
|
81
81
|
function getThemeColors() {
|
|
82
|
+
// Every setter validates against themeNames, so the fallback cannot trigger
|
|
83
|
+
// today; kept in case a future writer skips validation.
|
|
84
|
+
/* v8 ignore start */
|
|
82
85
|
return themes_1.themes[globalCurrentTheme]?.colors || themes_1.themes[themes_1.defaultTheme].colors;
|
|
86
|
+
/* v8 ignore stop */
|
|
83
87
|
}
|
|
84
88
|
// Helper function to get current theme name
|
|
85
89
|
function getCurrentThemeName() {
|
|
@@ -11,7 +11,7 @@ exports.getTerminalResetCode = getTerminalResetCode;
|
|
|
11
11
|
exports.coloredInupLogo = coloredInupLogo;
|
|
12
12
|
const chalk_1 = __importDefault(require("chalk"));
|
|
13
13
|
const theme_manager_1 = require("./state/theme-manager");
|
|
14
|
-
const config_1 = require("
|
|
14
|
+
const config_1 = require("../../shared/config");
|
|
15
15
|
// Centralized theme color definitions - single source of truth
|
|
16
16
|
const themeColorDefinitions = {
|
|
17
17
|
default: {
|
|
@@ -179,7 +179,10 @@ function hexToRgb(hex) {
|
|
|
179
179
|
g: parseInt(result[2], 16),
|
|
180
180
|
b: parseInt(result[3], 16),
|
|
181
181
|
}
|
|
182
|
-
:
|
|
182
|
+
: // Unreachable with the theme definitions in this file (all valid hex);
|
|
183
|
+
// black is the safe answer if a malformed value ever slips in.
|
|
184
|
+
/* v8 ignore next */
|
|
185
|
+
{ r: 0, g: 0, b: 0 };
|
|
183
186
|
}
|
|
184
187
|
/**
|
|
185
188
|
* Get ANSI escape code to set terminal background color.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PackageUpgrader = exports.PackageDetector = void 0;
|
|
4
|
+
var package_detector_1 = require("./package-detector");
|
|
5
|
+
Object.defineProperty(exports, "PackageDetector", { enumerable: true, get: function () { return package_detector_1.PackageDetector; } });
|
|
6
|
+
var upgrader_1 = require("./upgrader");
|
|
7
|
+
Object.defineProperty(exports, "PackageUpgrader", { enumerable: true, get: function () { return upgrader_1.PackageUpgrader; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|