inup 1.5.4 → 1.5.6

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 (65) hide show
  1. package/README.md +24 -10
  2. package/dist/cli.js +20 -22
  3. package/dist/config/constants.js +4 -2
  4. package/dist/config/package-meta.js +10 -0
  5. package/dist/config/project-config.js +6 -1
  6. package/dist/core/package-detector.js +8 -4
  7. package/dist/core/upgrade-runner.js +7 -10
  8. package/dist/core/upgrader.js +6 -8
  9. package/dist/features/changelog/clients/github-client.js +5 -6
  10. package/dist/features/changelog/services/changelog-service.js +2 -4
  11. package/dist/features/changelog/services/package-metadata-service.js +6 -11
  12. package/dist/features/changelog/services/release-notes-service.js +4 -2
  13. package/dist/features/debug/services/performance-tracker.js +6 -8
  14. package/dist/index.js +1 -2
  15. package/dist/interactive-ui.js +30 -587
  16. package/dist/services/background-audit.js +3 -5
  17. package/dist/services/cache-manager.js +5 -7
  18. package/dist/services/http/inflight.js +22 -0
  19. package/dist/services/http/retry.js +30 -0
  20. package/dist/services/jsdelivr/client.js +191 -0
  21. package/dist/services/jsdelivr/manifest.js +136 -0
  22. package/dist/services/jsdelivr-registry.js +6 -392
  23. package/dist/services/npm-registry.js +12 -81
  24. package/dist/services/persistent-cache.js +8 -13
  25. package/dist/types/domain.js +3 -0
  26. package/dist/types/streaming.js +3 -0
  27. package/dist/types/ui.js +3 -0
  28. package/dist/types.js +17 -0
  29. package/dist/ui/controllers/package-info-modal-controller.js +22 -31
  30. package/dist/ui/controllers/vulnerability-audit-controller.js +17 -8
  31. package/dist/ui/index.js +3 -0
  32. package/dist/ui/input-handler.js +62 -77
  33. package/dist/ui/keymap.js +208 -0
  34. package/dist/ui/modal/package-info-sections/release-notes.js +161 -0
  35. package/dist/ui/modal/package-info-sections/sections.js +150 -0
  36. package/dist/ui/modal/package-info-sections/text.js +75 -0
  37. package/dist/ui/modal/package-info-sections.js +15 -368
  38. package/dist/ui/modal/package-info.js +1 -1
  39. package/dist/ui/renderer/help-modal.js +75 -0
  40. package/dist/ui/renderer/index.js +2 -5
  41. package/dist/ui/renderer/package-list/interface.js +184 -0
  42. package/dist/ui/renderer/package-list/rows.js +172 -0
  43. package/dist/ui/renderer/package-list.js +15 -462
  44. package/dist/ui/session/action-dispatcher.js +233 -0
  45. package/dist/ui/session/index.js +13 -0
  46. package/dist/ui/session/interactive-session.js +280 -0
  47. package/dist/ui/session/selection-state-builder.js +144 -0
  48. package/dist/ui/state/filter-manager.js +17 -6
  49. package/dist/ui/state/modal-manager.js +35 -0
  50. package/dist/ui/state/navigation-manager.js +33 -4
  51. package/dist/ui/state/state-manager.js +68 -3
  52. package/dist/ui/state/theme-manager.js +1 -0
  53. package/dist/ui/themes-colors.js +8 -0
  54. package/dist/ui/themes.js +11 -19
  55. package/dist/ui/utils/cursor.js +3 -4
  56. package/dist/ui/utils/index.js +6 -1
  57. package/dist/ui/utils/text.js +3 -2
  58. package/dist/ui/utils/version.js +60 -86
  59. package/dist/utils/config.js +13 -1
  60. package/dist/utils/filesystem/io.js +87 -0
  61. package/dist/utils/filesystem/paths.js +19 -0
  62. package/dist/utils/filesystem/scan.js +205 -0
  63. package/dist/utils/filesystem.js +17 -335
  64. package/dist/utils/version.js +31 -1
  65. package/package.json +10 -9
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderInterface = renderInterface;
7
+ exports.renderPackagesTable = renderPackagesTable;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const utils_1 = require("../../utils");
10
+ const themes_colors_1 = require("../../themes-colors");
11
+ const config_1 = require("../../../config");
12
+ const rows_1 = require("./rows");
13
+ const keymap_1 = require("../../keymap");
14
+ function renderInterface(states, currentRow, scrollOffset, maxVisibleItems, _forceFullRender, renderableItems, activeFilterLabel, packageManager, filterMode, filterQuery, totalPackagesBeforeFilter, terminalWidth = 80, loadingProgress, auditProgress, options = {}, notice) {
15
+ const output = [];
16
+ if (packageManager) {
17
+ const colorMap = {
18
+ npm: chalk_1.default.red,
19
+ yarn: chalk_1.default.blue,
20
+ pnpm: chalk_1.default.yellow,
21
+ bun: chalk_1.default.magenta,
22
+ };
23
+ const pmColor = colorMap[packageManager.name] || packageManager.color;
24
+ const headerLine = ' ' +
25
+ chalk_1.default.bold(pmColor('🚀')) +
26
+ ' ' +
27
+ (0, themes_colors_1.coloredInupLogo)() +
28
+ (0, themes_colors_1.getThemeColor)('textSecondary')(` (${packageManager.displayName})`);
29
+ const fullHeaderLine = activeFilterLabel
30
+ ? headerLine +
31
+ (0, themes_colors_1.getThemeColor)('textSecondary')(' - ') +
32
+ (0, themes_colors_1.getThemeColor)('primary')(activeFilterLabel)
33
+ : headerLine;
34
+ const headerPadding = Math.max(0, terminalWidth - utils_1.VersionUtils.getVisualLength(fullHeaderLine));
35
+ output.push(fullHeaderLine + ' '.repeat(headerPadding));
36
+ }
37
+ else {
38
+ const headerLine = ' ' + chalk_1.default.bold.blue('🚀 ') + (0, themes_colors_1.coloredInupLogo)();
39
+ const fullHeaderLine = activeFilterLabel
40
+ ? headerLine +
41
+ (0, themes_colors_1.getThemeColor)('textSecondary')(' - ') +
42
+ (0, themes_colors_1.getThemeColor)('primary')(activeFilterLabel)
43
+ : headerLine;
44
+ const headerPadding = Math.max(0, terminalWidth - utils_1.VersionUtils.getVisualLength(fullHeaderLine));
45
+ output.push(fullHeaderLine + ' '.repeat(headerPadding));
46
+ }
47
+ output.push('');
48
+ if (filterMode) {
49
+ const filterDisplay = ' ' +
50
+ chalk_1.default.bold.white('Search: ') +
51
+ (0, themes_colors_1.getThemeColor)('primary')(filterQuery || '') +
52
+ (0, themes_colors_1.getThemeColor)('border')('█');
53
+ const padding = Math.max(0, terminalWidth - utils_1.VersionUtils.getVisualLength(filterDisplay));
54
+ output.push(filterDisplay + ' '.repeat(padding));
55
+ }
56
+ else if (filterQuery) {
57
+ const filterDisplay = ' ' +
58
+ chalk_1.default.bold.white('Search: ') +
59
+ (0, themes_colors_1.getThemeColor)('primary')(filterQuery) +
60
+ (0, themes_colors_1.getThemeColor)('textSecondary')(' (press / to edit)');
61
+ const padding = Math.max(0, terminalWidth - utils_1.VersionUtils.getVisualLength(filterDisplay));
62
+ output.push(filterDisplay + ' '.repeat(padding));
63
+ }
64
+ else {
65
+ const hintLine = (0, keymap_1.getFooterHints)()
66
+ .map(({ keyLabel, label }) => chalk_1.default.bold.white(keyLabel + ' ') + (0, themes_colors_1.getThemeColor)('textSecondary')(label))
67
+ .join(' ');
68
+ output.push(' ' + hintLine);
69
+ }
70
+ const totalPackages = states.length;
71
+ const totalBeforeFilter = totalPackagesBeforeFilter || totalPackages;
72
+ const totalVisualItems = renderableItems && renderableItems.length > 0 ? renderableItems.length : totalPackages;
73
+ const startItem = scrollOffset + 1;
74
+ const endItem = Math.min(scrollOffset + maxVisibleItems, totalVisualItems);
75
+ let statusLine = '';
76
+ if (filterMode) {
77
+ if (totalPackages === 0) {
78
+ statusLine =
79
+ (0, themes_colors_1.getThemeColor)('warning')(`No matches found`) +
80
+ ' ' +
81
+ chalk_1.default.bold.white('Esc ') +
82
+ chalk_1.default.gray('Clear');
83
+ }
84
+ else if (totalVisualItems > maxVisibleItems) {
85
+ statusLine =
86
+ (0, themes_colors_1.getThemeColor)('textSecondary')(`Showing ${chalk_1.default.white(startItem)}-${chalk_1.default.white(endItem)} of ${chalk_1.default.white(totalPackages)} matches`) +
87
+ ' ' +
88
+ chalk_1.default.bold.white('Enter ') +
89
+ chalk_1.default.gray('Apply') +
90
+ ' ' +
91
+ chalk_1.default.bold.white('Esc ') +
92
+ chalk_1.default.gray('Clear');
93
+ }
94
+ else {
95
+ statusLine =
96
+ (0, themes_colors_1.getThemeColor)('textSecondary')(`Showing all ${chalk_1.default.white(totalPackages)} matches`) +
97
+ ' ' +
98
+ chalk_1.default.bold.white('Enter ') +
99
+ chalk_1.default.gray('Apply') +
100
+ ' ' +
101
+ chalk_1.default.bold.white('Esc ') +
102
+ chalk_1.default.gray('Clear');
103
+ }
104
+ }
105
+ else if (totalPackages < totalBeforeFilter) {
106
+ // Footer already lists D/P/O, M, L, U — status line just shows count + Esc.
107
+ const matchCount = totalVisualItems > maxVisibleItems
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
+ : (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');
112
+ }
113
+ else {
114
+ if (totalVisualItems > maxVisibleItems) {
115
+ statusLine =
116
+ chalk_1.default.gray(`Showing ${chalk_1.default.white(startItem)}-${chalk_1.default.white(endItem)} of ${chalk_1.default.white(totalPackages)} packages`) +
117
+ ' ' +
118
+ chalk_1.default.bold.white('Enter ') +
119
+ chalk_1.default.gray('Confirm');
120
+ }
121
+ else {
122
+ statusLine =
123
+ chalk_1.default.gray(`Showing all ${chalk_1.default.white(totalPackages)} packages`) +
124
+ ' ' +
125
+ chalk_1.default.bold.white('Enter ') +
126
+ chalk_1.default.gray('Confirm');
127
+ }
128
+ }
129
+ if (auditProgress && auditProgress.total > 0) {
130
+ const auditLabel = auditProgress.isRunning
131
+ ? `Audit ${auditProgress.completed}/${auditProgress.total}`
132
+ : `Audit ${auditProgress.total}/${auditProgress.total}`;
133
+ statusLine += ' ' + (0, themes_colors_1.getThemeColor)('textSecondary')(auditLabel);
134
+ }
135
+ // A one-shot notice (e.g. "nothing selected") replaces the status line for a
136
+ // single render so the layout height stays constant.
137
+ const statusContent = notice ? (0, themes_colors_1.getThemeColor)('warning')(notice) : statusLine;
138
+ const statusLineFull = ' ' + statusContent;
139
+ const statusPadding = Math.max(0, terminalWidth - utils_1.VersionUtils.getVisualLength(statusLineFull));
140
+ output.push(statusLineFull + ' '.repeat(statusPadding));
141
+ output.push('');
142
+ if (renderableItems && renderableItems.length > 0) {
143
+ for (let i = scrollOffset; i < Math.min(scrollOffset + maxVisibleItems, renderableItems.length); i++) {
144
+ const item = renderableItems[i];
145
+ if (item.type === 'header') {
146
+ output.push((0, rows_1.renderSectionHeader)(item.title, item.sectionType));
147
+ }
148
+ else if (item.type === 'spacer') {
149
+ output.push((0, rows_1.renderSpacer)());
150
+ }
151
+ else if (item.type === 'package') {
152
+ const line = (0, rows_1.renderPackageLine)(item.state, item.originalIndex, item.originalIndex === currentRow, terminalWidth, options);
153
+ output.push(line);
154
+ }
155
+ }
156
+ }
157
+ else {
158
+ for (let i = scrollOffset; i < Math.min(scrollOffset + maxVisibleItems, states.length); i++) {
159
+ const line = (0, rows_1.renderPackageLine)(states[i], i, i === currentRow, terminalWidth, options);
160
+ output.push(line);
161
+ }
162
+ }
163
+ if (loadingProgress?.isLoading) {
164
+ const loadingLabel = `Loading packages... (${loadingProgress.resolved}/${loadingProgress.total} checked)`;
165
+ const failedLabel = loadingProgress.failed > 0 ? ` ${loadingProgress.failed} unavailable` : '';
166
+ const loadingLine = ' ' +
167
+ (0, themes_colors_1.getThemeColor)('textSecondary')(loadingLabel) +
168
+ (failedLabel ? chalk_1.default.yellow(failedLabel) : '');
169
+ const loadingPadding = Math.max(0, terminalWidth - utils_1.VersionUtils.getVisualLength(loadingLine));
170
+ output.push(loadingLine + ' '.repeat(loadingPadding));
171
+ }
172
+ return output.map((line) => (0, rows_1.padLineToWidth)(line, terminalWidth));
173
+ }
174
+ function renderPackagesTable(packages) {
175
+ if (packages.length === 0) {
176
+ return chalk_1.default.green('✅ All packages are up to date!');
177
+ }
178
+ const outdatedPackages = packages.filter((p) => p.isOutdated);
179
+ if (outdatedPackages.length === 0) {
180
+ return chalk_1.default.green('✅ All packages are up to date!');
181
+ }
182
+ return chalk_1.default.bold.blue(`🚀 ${config_1.PACKAGE_NAME}\n`);
183
+ }
184
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.padLineToWidth = padLineToWidth;
7
+ exports.renderPackageLine = renderPackageLine;
8
+ exports.renderSectionHeader = renderSectionHeader;
9
+ exports.renderSpacer = renderSpacer;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const utils_1 = require("../../utils");
12
+ const themes_colors_1 = require("../../themes-colors");
13
+ const vulnerability_1 = require("../../presenters/vulnerability");
14
+ function padLineToWidth(line, terminalWidth) {
15
+ const padding = Math.max(0, terminalWidth - utils_1.VersionUtils.getVisualLength(line));
16
+ return line + ' '.repeat(padding);
17
+ }
18
+ function getTypeBadge(type) {
19
+ switch (type) {
20
+ case 'devDependencies':
21
+ return (0, themes_colors_1.getThemeColor)('textSecondary')('[D]');
22
+ case 'peerDependencies':
23
+ return (0, themes_colors_1.getThemeColor)('textSecondary')('[P]');
24
+ case 'optionalDependencies':
25
+ return (0, themes_colors_1.getThemeColor)('textSecondary')('[O]');
26
+ case 'dependencies':
27
+ default:
28
+ return '';
29
+ }
30
+ }
31
+ function renderPackageLine(state, _index, isCurrentRow, terminalWidth = 80, options = {}) {
32
+ const prefix = isCurrentRow ? (0, themes_colors_1.getThemeColor)('success')('❯ ') : ' ';
33
+ let packageName;
34
+ if (state.name.startsWith('@')) {
35
+ const parts = state.name.split('/');
36
+ if (parts.length >= 2) {
37
+ const author = parts[0];
38
+ const packagePart = parts.slice(1).join('/');
39
+ if (isCurrentRow) {
40
+ packageName =
41
+ chalk_1.default.bold((0, themes_colors_1.getThemeColor)('packageAuthor')(author)) +
42
+ (0, themes_colors_1.getThemeColor)('packageName')('/' + packagePart);
43
+ }
44
+ else {
45
+ packageName = chalk_1.default.bold.white(author) + chalk_1.default.white('/' + packagePart);
46
+ }
47
+ }
48
+ else {
49
+ packageName = isCurrentRow
50
+ ? (0, themes_colors_1.getThemeColor)('packageName')(state.name)
51
+ : chalk_1.default.white(state.name);
52
+ }
53
+ }
54
+ else {
55
+ packageName = isCurrentRow ? (0, themes_colors_1.getThemeColor)('packageName')(state.name) : chalk_1.default.white(state.name);
56
+ }
57
+ const isCurrentSelected = state.selectedOption === 'none';
58
+ const isRangeSelected = state.selectedOption === 'range';
59
+ const isLatestSelected = state.selectedOption === 'latest';
60
+ const isPending = state.loadState === 'pending';
61
+ const isFailed = state.loadState === 'failed';
62
+ const currentDot = isCurrentSelected ? (0, themes_colors_1.getThemeColor)('dot')('●') : (0, themes_colors_1.getThemeColor)('dotEmpty')('○');
63
+ const currentVersion = chalk_1.default.white(state.currentVersionSpecifier);
64
+ let rangeDot = '';
65
+ let rangeVersionText = '';
66
+ if (isPending) {
67
+ rangeDot = (0, themes_colors_1.getThemeColor)('dotEmpty')('◌');
68
+ rangeVersionText = chalk_1.default.gray('loading');
69
+ }
70
+ else if (isFailed) {
71
+ rangeDot = (0, themes_colors_1.getThemeColor)('dotEmpty')('◌');
72
+ rangeVersionText = chalk_1.default.gray('unavailable');
73
+ }
74
+ else if (state.hasRangeUpdate) {
75
+ rangeDot = isRangeSelected ? (0, themes_colors_1.getThemeColor)('dot')('●') : (0, themes_colors_1.getThemeColor)('dotEmpty')('○');
76
+ const rangeVersionWithPrefix = utils_1.VersionUtils.applyVersionPrefix(state.currentVersionSpecifier, state.rangeVersion);
77
+ rangeVersionText = (0, themes_colors_1.getThemeColor)('versionRange')(rangeVersionWithPrefix);
78
+ }
79
+ else {
80
+ rangeDot = (0, themes_colors_1.getThemeColor)('dotEmpty')('○');
81
+ rangeVersionText = '';
82
+ }
83
+ let latestDot = '';
84
+ let latestVersionText = '';
85
+ if (isPending) {
86
+ latestDot = (0, themes_colors_1.getThemeColor)('dotEmpty')('◌');
87
+ latestVersionText = chalk_1.default.gray('loading');
88
+ }
89
+ else if (isFailed) {
90
+ latestDot = (0, themes_colors_1.getThemeColor)('dotEmpty')('◌');
91
+ latestVersionText = chalk_1.default.gray('unavailable');
92
+ }
93
+ else if (state.hasMajorUpdate) {
94
+ latestDot = isLatestSelected ? (0, themes_colors_1.getThemeColor)('dot')('●') : (0, themes_colors_1.getThemeColor)('dotEmpty')('○');
95
+ const latestVersionWithPrefix = utils_1.VersionUtils.applyVersionPrefix(state.currentVersionSpecifier, state.latestVersion);
96
+ latestVersionText = (0, themes_colors_1.getThemeColor)('versionLatest')(latestVersionWithPrefix);
97
+ }
98
+ else {
99
+ latestDot = (0, themes_colors_1.getThemeColor)('dotEmpty')('○');
100
+ latestVersionText = '';
101
+ }
102
+ const currentColumnWidth = 16;
103
+ const rangeColumnWidth = 16;
104
+ const latestColumnWidth = 16;
105
+ const spacingWidth = 3;
106
+ const maxPackageNameWidth = 50;
107
+ const minPackageNameWidth = 24;
108
+ const otherColumnsWidth = currentColumnWidth + rangeColumnWidth + latestColumnWidth + spacingWidth * 3;
109
+ const prefixWidth = 2;
110
+ const availableForPackageName = terminalWidth - prefixWidth - otherColumnsWidth - 1;
111
+ const packageNameWidth = Math.min(maxPackageNameWidth, Math.max(minPackageNameWidth, availableForPackageName));
112
+ const badgeWidth = state.type === 'dependencies' ? 0 : 3;
113
+ const truncatedName = utils_1.VersionUtils.truncateMiddle(state.name, packageNameWidth - 1 - badgeWidth);
114
+ const shouldShowDashes = (paddingAmount) => paddingAmount > 2;
115
+ const dashColor = isCurrentRow ? chalk_1.default.white : chalk_1.default.gray;
116
+ const displayName = truncatedName !== state.name ? truncatedName : packageName;
117
+ const typeBadge = getTypeBadge(state.type);
118
+ const shouldShowVulnerability = (0, vulnerability_1.shouldDisplayVulnerabilityForDependency)(state.type, options);
119
+ const vulnBadge = shouldShowVulnerability ? (0, vulnerability_1.getVulnerabilityBadge)(state.vulnerability) : '';
120
+ const vulnBadgeWidth = vulnBadge ? utils_1.VersionUtils.getVisualLength(vulnBadge) + 1 : 0;
121
+ const nameLength = utils_1.VersionUtils.getVisualLength(truncatedName);
122
+ const namePadding = Math.max(0, packageNameWidth - nameLength - 1 - badgeWidth - vulnBadgeWidth);
123
+ const nameDashes = shouldShowDashes(namePadding)
124
+ ? dashColor('-').repeat(namePadding)
125
+ : ' '.repeat(namePadding);
126
+ const vulnSuffix = vulnBadge ? ` ${vulnBadge}` : '';
127
+ const packageNameSection = typeBadge
128
+ ? `${displayName} ${nameDashes}${vulnSuffix}${typeBadge}`
129
+ : `${displayName} ${nameDashes}${vulnSuffix}`;
130
+ const currentSection = `${currentDot} ${currentVersion}`;
131
+ const currentSectionLength = utils_1.VersionUtils.getVisualLength(currentSection) + 1;
132
+ const currentPadding = Math.max(0, currentColumnWidth - currentSectionLength);
133
+ const currentPaddingText = shouldShowDashes(currentPadding)
134
+ ? dashColor('-').repeat(currentPadding)
135
+ : ' '.repeat(currentPadding);
136
+ const currentWithPadding = currentSection + ' ' + currentPaddingText;
137
+ let rangeSection = '';
138
+ if (isPending || isFailed || state.hasRangeUpdate) {
139
+ rangeSection = `${rangeDot} ${rangeVersionText}`;
140
+ const rangeSectionLength = utils_1.VersionUtils.getVisualLength(rangeSection) + 1;
141
+ const rangePadding = Math.max(0, rangeColumnWidth - rangeSectionLength);
142
+ const rangePaddingText = shouldShowDashes(rangePadding)
143
+ ? dashColor('-').repeat(rangePadding)
144
+ : ' '.repeat(rangePadding);
145
+ rangeSection += ' ' + rangePaddingText;
146
+ }
147
+ else {
148
+ rangeSection = ' '.repeat(rangeColumnWidth);
149
+ }
150
+ let latestSection = '';
151
+ if (isPending || isFailed || state.hasMajorUpdate) {
152
+ latestSection = `${latestDot} ${latestVersionText}`;
153
+ const latestSectionLength = utils_1.VersionUtils.getVisualLength(latestSection) + 1;
154
+ const latestPadding = Math.max(0, latestColumnWidth - latestSectionLength);
155
+ const latestPaddingText = shouldShowDashes(latestPadding)
156
+ ? dashColor('-').repeat(latestPadding)
157
+ : ' '.repeat(latestPadding);
158
+ latestSection += ' ' + latestPaddingText;
159
+ }
160
+ else {
161
+ latestSection = ' '.repeat(latestColumnWidth);
162
+ }
163
+ return `${prefix}${packageNameSection} ${currentWithPadding} ${rangeSection} ${latestSection}`;
164
+ }
165
+ function renderSectionHeader(title, sectionType) {
166
+ const colorFn = sectionType === 'main' ? chalk_1.default.cyan : sectionType === 'peer' ? chalk_1.default.magenta : chalk_1.default.yellow;
167
+ return ' ' + colorFn.bold(title);
168
+ }
169
+ function renderSpacer() {
170
+ return '';
171
+ }
172
+ //# sourceMappingURL=rows.js.map