swc/crates/swc_ecma_minifier/tests/fixture/issues/5682/output.js
Donny/강동윤 aacf7aaf80
feat(es/minifier): Drop function identifier in a single pass (#5901)
**Description:**

We only inline function declarations if `ref_count` is 1, so we don't need to preserve the name of the function.

**Related issue:**

 - Closes https://github.com/swc-project/swc/issues/5682.
2022-09-19 15:07:56 +00:00

70 lines
3.0 KiB
JavaScript

const m = 60000, h = 60 * m, d = 24 * h, w = 7 * d, y = 365.25 * d;
export default function(value, options) {
try {
if ('string' == typeof value && value.length > 0) return function(str) {
if (str.length > 100) throw Error('Value exceeds the maximum length of 100 characters.');
const match = /^(?<value>-?(?:\d+)?\.?\d+) *(?<type>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str), groups = match?.groups;
if (!groups) return NaN;
const n = parseFloat(groups.value), type = (groups.type || 'ms').toLowerCase();
switch(type){
case 'years':
case 'year':
case 'yrs':
case 'yr':
case 'y':
return n * y;
case 'weeks':
case 'week':
case 'w':
return n * w;
case 'days':
case 'day':
case 'd':
return n * d;
case 'hours':
case 'hour':
case 'hrs':
case 'hr':
case 'h':
return n * h;
case 'minutes':
case 'minute':
case 'mins':
case 'min':
case 'm':
return n * m;
case 'seconds':
case 'second':
case 'secs':
case 'sec':
case 's':
return 1000 * n;
case 'milliseconds':
case 'millisecond':
case 'msecs':
case 'msec':
case 'ms':
return n;
default:
throw Error(`The unit ${type} was matched, but no matching case exists.`);
}
}(value);
if ('number' == typeof value && isFinite(value)) return options?.long ? function(ms) {
const msAbs = Math.abs(ms);
return msAbs >= d ? plural(ms, msAbs, d, 'day') : msAbs >= h ? plural(ms, msAbs, h, 'hour') : msAbs >= m ? plural(ms, msAbs, m, 'minute') : msAbs >= 1000 ? plural(ms, msAbs, 1000, 'second') : `${ms} ms`;
}(value) : function(ms) {
const msAbs = Math.abs(ms);
return msAbs >= d ? `${Math.round(ms / d)}d` : msAbs >= h ? `${Math.round(ms / h)}h` : msAbs >= m ? `${Math.round(ms / m)}m` : msAbs >= 1000 ? `${Math.round(ms / 1000)}s` : `${ms}ms`;
}(value);
throw Error('Value is not a string or number.');
} catch (error) {
const message = function(value) {
return 'object' == typeof value && null !== value && 'message' in value;
}(error) ? `${error.message}. value=${JSON.stringify(value)}` : 'An unknown error has occurred.';
throw Error(message);
}
};
function plural(ms, msAbs, n, name) {
return `${Math.round(ms / n)} ${name}${msAbs >= 1.5 * n ? 's' : ''}`;
}