Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
126 lines
4.7 KiB
Text
126 lines
4.7 KiB
Text
import Decimal from 'decimal.js';
|
||
import { invariant } from '../utils';
|
||
import { ComputeExponent } from './ComputeExponent';
|
||
import formatToParts from './format_to_parts';
|
||
import { FormatNumericToString } from './FormatNumericToString';
|
||
/**
|
||
* https://tc39.es/ecma402/#sec-partitionnumberpattern
|
||
*/
|
||
export function PartitionNumberPattern(internalSlots, _x) {
|
||
var _a;
|
||
var x = _x;
|
||
// IMPL: We need to record the magnitude of the number
|
||
var magnitude = 0;
|
||
// 2. Let dataLocaleData be internalSlots.[[dataLocaleData]].
|
||
var pl = internalSlots.pl, dataLocaleData = internalSlots.dataLocaleData, numberingSystem = internalSlots.numberingSystem;
|
||
// 3. Let symbols be dataLocaleData.[[numbers]].[[symbols]][internalSlots.[[numberingSystem]]].
|
||
var symbols = dataLocaleData.numbers.symbols[numberingSystem] ||
|
||
dataLocaleData.numbers.symbols[dataLocaleData.numbers.nu[0]];
|
||
// 4. Let exponent be 0.
|
||
var exponent = 0;
|
||
// 5. Let n be ! ToString(x).
|
||
var n;
|
||
// 6. If x is NaN, then
|
||
if (x.isNaN()) {
|
||
// 6.a. Let n be symbols.[[nan]].
|
||
n = symbols.nan;
|
||
}
|
||
else if (!x.isFinite()) {
|
||
// 7. Else if x is a non-finite Number, then
|
||
// 7.a. Let n be symbols.[[infinity]].
|
||
n = symbols.infinity;
|
||
}
|
||
else {
|
||
// 8. Else,
|
||
if (!x.isZero()) {
|
||
// 8.a. If x < 0, let x be -x.
|
||
invariant(x.isFinite(), 'Input must be a mathematical value');
|
||
// 8.b. If internalSlots.[[style]] is "percent", let x be 100 × x.
|
||
if (internalSlots.style == 'percent') {
|
||
x = x.times(100);
|
||
}
|
||
// 8.c. Let exponent be ComputeExponent(numberFormat, x).
|
||
;
|
||
_a = ComputeExponent(internalSlots, x), exponent = _a[0],
|
||
// IMPL: We need to record the magnitude of the number
|
||
magnitude = _a[1];
|
||
// 8.d. Let x be x × 10^(-exponent).
|
||
x = x.times(Decimal.pow(10, -exponent));
|
||
}
|
||
// 8.e. Let formatNumberResult be FormatNumericToString(internalSlots, x).
|
||
var formatNumberResult = FormatNumericToString(internalSlots, x);
|
||
// 8.f. Let n be formatNumberResult.[[formattedString]].
|
||
n = formatNumberResult.formattedString;
|
||
// 8.g. Let x be formatNumberResult.[[roundedNumber]].
|
||
x = formatNumberResult.roundedNumber;
|
||
}
|
||
// 9. Let sign be 0.
|
||
var sign;
|
||
// 10. If x is negative, then
|
||
var signDisplay = internalSlots.signDisplay;
|
||
switch (signDisplay) {
|
||
case 'never':
|
||
// 10.a. If internalSlots.[[signDisplay]] is "never", then
|
||
// 10.a.i. Let sign be 0.
|
||
sign = 0;
|
||
break;
|
||
case 'auto':
|
||
// 10.b. Else if internalSlots.[[signDisplay]] is "auto", then
|
||
if (x.isPositive() || x.isNaN()) {
|
||
// 10.b.i. If x is positive or x is NaN, let sign be 0.
|
||
sign = 0;
|
||
}
|
||
else {
|
||
// 10.b.ii. Else, let sign be -1.
|
||
sign = -1;
|
||
}
|
||
break;
|
||
case 'always':
|
||
// 10.c. Else if internalSlots.[[signDisplay]] is "always", then
|
||
if (x.isPositive() || x.isNaN()) {
|
||
// 10.c.i. If x is positive or x is NaN, let sign be 1.
|
||
sign = 1;
|
||
}
|
||
else {
|
||
// 10.c.ii. Else, let sign be -1.
|
||
sign = -1;
|
||
}
|
||
break;
|
||
case 'exceptZero':
|
||
// 10.d. Else if internalSlots.[[signDisplay]] is "exceptZero", then
|
||
if (x.isZero()) {
|
||
// 10.d.i. If x is 0, let sign be 0.
|
||
sign = 0;
|
||
}
|
||
else if (x.isNegative()) {
|
||
// 10.d.ii. Else if x is negative, let sign be -1.
|
||
sign = -1;
|
||
}
|
||
else {
|
||
// 10.d.iii. Else, let sign be 1.
|
||
sign = 1;
|
||
}
|
||
break;
|
||
default:
|
||
// 10.e. Else,
|
||
invariant(signDisplay === 'negative', 'signDisplay must be "negative"');
|
||
if (x.isNegative() && !x.isZero()) {
|
||
// 10.e.i. If x is negative and x is not 0, let sign be -1.
|
||
sign = -1;
|
||
}
|
||
else {
|
||
// 10.e.ii. Else, let sign be 0.
|
||
sign = 0;
|
||
}
|
||
break;
|
||
}
|
||
// 11. Return ? FormatNumberToParts(numberFormat, x, n, exponent, sign).
|
||
return formatToParts({
|
||
roundedNumber: x,
|
||
formattedString: n,
|
||
exponent: exponent,
|
||
// IMPL: We're returning this for our implementation of formatToParts
|
||
magnitude: magnitude,
|
||
sign: sign,
|
||
}, internalSlots.dataLocaleData, pl, internalSlots);
|
||
}
|