shrink-path
v0.3.1
Published
Utility to shrink file paths to a given length.
Downloads
281
Readme
shrink-path
Utility to shrink file paths to a given length.
Usage
const { shrinkPath } = require('shrink-path');
// or
import { shrinkPath } from 'shrink-path';
// or
import shrinkPath from 'shrink-path';
const filePath = 'c:\\Windows\\System32\\WindowsPowerShell\\v1.0\\Modules\\TroubleshootingPack\\en-US\\Microsoft.Windows.Diagnosis.TroubleshootingPack.dll-Help.xml';
shrinkPath(filePath, 60);
// c:/Windows/…/TroubleshootingPack/en-US/Microsoft.…l-Help.xml
shrinkPath(filePath, 60, 0);
// c:/Windows/Sys…m32/Win…ell/v1.0/Modules/Tro…ack/en-US/Mic…ml
shrinkPath(filePath, 60, 0, 'end');
// c:/Windows/System…/Window…/v1.0/Modules/Troubl…/en-US/Micro…
shrinkPath(filePath, 60, Infinity);
// …/Microsoft.Windows.Diagnosis.TroubleshootingPack.dll-Help.…
Docs
The algorithm:
- Tries to shrink path segments, skipping some letters.
aaaaaaaaaa/bbbbbbbbbb/cccccc.ddd
becomesaaa…aaa/bbb…bbb/ccc…ddd
- When still too long, tries to omit entire segments from the middle.
aaa…aaa/bbb…bbb/ccc…ddd
becomesaaa…aaa/…/ccc…ddd
- Omitting entire segments can result in shorter path than the desired maximum, in this case we unshrink previously shrinked segments to the maximum available size.
aaa…aaa/…/ccc…ddd
becomesaaaa…aaaa/…/cccc….ddd
shrinkPath(
path: string,
maxLength: number,
minSegmentLength: number = maxLength / 3,
ellipsisPlacement: 'middle' | 'end' = 'middle',
ellipsis: string = '…'
): string;
- The result length will always be shorter or equal to
maxLength
. If possible, the algorithm will try not to shrink more than needed. - Path segments shrinking can be configured by
minSegmentLength
, this value sets the minimum length a path segment must have. Defaults tomaxLength / 3
. Set toInfinity
to disable segment shrinking. - Segments removed entirely only if each segment length reached
minSegmentLength
and no further shrinking is possible. ellipsisPlacement
controls how path segments are shortened. Set it toend
to place ellipsis at the path segment end: instead ofaaaa…aaaa/…/cccc….ddd
it will produceaaaaaaaa…/…/cccccc.d…
.- By default
…
is used to mark shrinked parts of the path, configurable by theellipis
argument. - Windows paths are always normalized to Unix style.