Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@shopify/dates

Package Overview
Dependencies
Maintainers
27
Versions
112
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@shopify/dates - npm Package Compare versions

Comparing version 0.0.0-snapshot-20221111164351 to 0.0.0-snapshot-20230303190004

210

build/cjs/get-date-time-parts.js

@@ -5,8 +5,6 @@ 'use strict';

var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
var decorators = require('@shopify/decorators');
var functionEnhancers = require('@shopify/function-enhancers');
var sanitiseDateString = require('./sanitise-date-string.js');
var formatDate = require('./utilities/formatDate.js');
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class;
const TWO_DIGIT_REGEX = /(\d{2})/;

@@ -68,134 +66,126 @@ function getDateTimeParts(date, timeZone) {

let DateTimeParts = (_dec = decorators.memoize(dateTimeCacheKey('year')), _dec2 = decorators.memoize(dateTimeCacheKey('month')), _dec3 = decorators.memoize(dateTimeCacheKey('day')), _dec4 = decorators.memoize(dateTimeCacheKey('weekday')), _dec5 = decorators.memoize(dateTimeCacheKey('hour')), _dec6 = decorators.memoize(dateTimeCacheKey('minute')), _dec7 = decorators.memoize(dateTimeCacheKey('second')), _dec8 = decorators.memoize(dateTimeCacheKey('timePartsFallback')), (_class = class DateTimeParts {
static getYear(date, timeZone) {
if (isNaN(date.valueOf())) {
throw new Error(`Unable to parse date: ${date} for timezone: ${timeZone}`);
}
class DateTimeParts {}
const yearString = formatDate.formatDate(date, 'en', {
timeZone,
year: 'numeric'
});
const sanitisedYearString = sanitiseDateString.sanitiseDateString(yearString);
const year = parseInt(sanitisedYearString, 10);
DateTimeParts.getYear = functionEnhancers.memoize((date, timeZone) => {
if (isNaN(date.valueOf())) {
throw new Error(`Unable to parse date: ${date} for timezone: ${timeZone}`);
}
if (isNaN(year)) {
throw new Error(`Unable to parse year: '${yearString}'`);
}
const yearString = formatDate.formatDate(date, 'en', {
timeZone,
year: 'numeric'
});
const sanitisedYearString = sanitiseDateString.sanitiseDateString(yearString);
const year = parseInt(sanitisedYearString, 10);
return year;
if (isNaN(year)) {
throw new Error(`Unable to parse year: '${yearString}'`);
}
static getMonth(date, timeZone) {
const monthString = formatDate.formatDate(date, 'en', {
timeZone,
month: 'numeric'
});
const sanitisedMonthString = sanitiseDateString.sanitiseDateString(monthString);
const month = parseInt(sanitisedMonthString, 10);
return year;
}, dateTimeCacheKey('year'));
DateTimeParts.getMonth = functionEnhancers.memoize((date, timeZone) => {
const monthString = formatDate.formatDate(date, 'en', {
timeZone,
month: 'numeric'
});
const sanitisedMonthString = sanitiseDateString.sanitiseDateString(monthString);
const month = parseInt(sanitisedMonthString, 10);
if (isNaN(month)) {
throw new Error(`Unable to parse month: '${monthString}'`);
}
return month;
if (isNaN(month)) {
throw new Error(`Unable to parse month: '${monthString}'`);
}
static getDay(date, timeZone) {
const dayString = formatDate.formatDate(date, 'en', {
timeZone,
day: 'numeric'
});
const sanitisedDayString = sanitiseDateString.sanitiseDateString(dayString);
const day = parseInt(sanitisedDayString, 10);
return month;
}, dateTimeCacheKey('month'));
DateTimeParts.getDay = functionEnhancers.memoize((date, timeZone) => {
const dayString = formatDate.formatDate(date, 'en', {
timeZone,
day: 'numeric'
});
const sanitisedDayString = sanitiseDateString.sanitiseDateString(dayString);
const day = parseInt(sanitisedDayString, 10);
if (isNaN(day)) {
throw new Error(`Unable to parse day: '${dayString}'`);
}
return day;
if (isNaN(day)) {
throw new Error(`Unable to parse day: '${dayString}'`);
}
static getWeekday(date, timeZone) {
const weekdayString = formatDate.formatDate(date, 'en', {
timeZone,
weekday: 'long'
});
const sanitisedWeekdayString = sanitiseDateString.sanitiseDateString(weekdayString);
return getWeekdayValue(sanitisedWeekdayString);
}
return day;
}, dateTimeCacheKey('day'));
DateTimeParts.getWeekday = functionEnhancers.memoize((date, timeZone) => {
const weekdayString = formatDate.formatDate(date, 'en', {
timeZone,
weekday: 'long'
});
const sanitisedWeekdayString = sanitiseDateString.sanitiseDateString(weekdayString);
return getWeekdayValue(sanitisedWeekdayString);
}, dateTimeCacheKey('weekday'));
DateTimeParts.getHour = functionEnhancers.memoize((date, timeZone) => {
const hourString = formatDate.formatDate(date, 'en', {
timeZone,
hour12: false,
hour: 'numeric'
});
let hour = parseInt(hourString, 10);
static getHour(date, timeZone) {
const hourString = formatDate.formatDate(date, 'en', {
timeZone,
hour12: false,
hour: 'numeric'
});
let hour = parseInt(hourString, 10);
if (isNaN(hour)) {
hour = DateTimeParts.getTimePartsFallback(date, timeZone).hour;
}
return hour;
if (isNaN(hour)) {
hour = DateTimeParts.getTimePartsFallback(date, timeZone).hour;
}
static getMinute(date, timeZone) {
const minuteString = formatDate.formatDate(date, 'en', {
timeZone,
minute: 'numeric'
});
let minute = parseInt(minuteString, 10);
return hour;
}, dateTimeCacheKey('hour'));
DateTimeParts.getMinute = functionEnhancers.memoize((date, timeZone) => {
const minuteString = formatDate.formatDate(date, 'en', {
timeZone,
minute: 'numeric'
});
let minute = parseInt(minuteString, 10);
if (isNaN(minute)) {
minute = DateTimeParts.getTimePartsFallback(date, timeZone).minute;
}
return minute;
if (isNaN(minute)) {
minute = DateTimeParts.getTimePartsFallback(date, timeZone).minute;
}
static getSecond(date, timeZone) {
const secondString = formatDate.formatDate(date, 'en', {
timeZone,
second: 'numeric'
});
let second = parseInt(secondString, 10);
return minute;
}, dateTimeCacheKey('minute'));
DateTimeParts.getSecond = functionEnhancers.memoize((date, timeZone) => {
const secondString = formatDate.formatDate(date, 'en', {
timeZone,
second: 'numeric'
});
let second = parseInt(secondString, 10);
if (isNaN(second)) {
second = DateTimeParts.getTimePartsFallback(date, timeZone).second;
}
return second;
if (isNaN(second)) {
second = DateTimeParts.getTimePartsFallback(date, timeZone).second;
}
static getTimePartsFallback(date, timeZone) {
const timeString = formatDate.formatDate(date, 'en', {
timeZone,
hour12: false,
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
}); // In Microsoft Edge, Intl.DateTimeFormat returns invisible characters around the individual numbers
return second;
}, dateTimeCacheKey('second'));
DateTimeParts.getTimePartsFallback = functionEnhancers.memoize((date, timeZone) => {
const timeString = formatDate.formatDate(date, 'en', {
timeZone,
hour12: false,
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
}); // In Microsoft Edge, Intl.DateTimeFormat returns invisible characters around the individual numbers
const [dirtyHour, dirtyMinute, dirtySecond] = timeString.split(':');
const rawHour = new RegExp(TWO_DIGIT_REGEX).exec(dirtyHour);
const rawMinute = new RegExp(TWO_DIGIT_REGEX).exec(dirtyMinute);
const rawSecond = new RegExp(TWO_DIGIT_REGEX).exec(dirtySecond);
const [dirtyHour, dirtyMinute, dirtySecond] = timeString.split(':');
const rawHour = new RegExp(TWO_DIGIT_REGEX).exec(dirtyHour);
const rawMinute = new RegExp(TWO_DIGIT_REGEX).exec(dirtyMinute);
const rawSecond = new RegExp(TWO_DIGIT_REGEX).exec(dirtySecond);
if (rawHour != null && rawMinute != null && rawSecond != null) {
const hour = parseInt(rawHour[1], 10);
const minute = parseInt(rawMinute[1], 10);
const second = parseInt(rawSecond[1], 10);
return {
hour,
minute,
second
};
}
throw new Error(`Unable to parse timeString: '${timeString}'`);
if (rawHour != null && rawMinute != null && rawSecond != null) {
const hour = parseInt(rawHour[1], 10);
const minute = parseInt(rawMinute[1], 10);
const second = parseInt(rawSecond[1], 10);
return {
hour,
minute,
second
};
}
}, (_rollupPluginBabelHelpers.applyDecoratedDescriptor(_class, "getYear", [_dec], Object.getOwnPropertyDescriptor(_class, "getYear"), _class), _rollupPluginBabelHelpers.applyDecoratedDescriptor(_class, "getMonth", [_dec2], Object.getOwnPropertyDescriptor(_class, "getMonth"), _class), _rollupPluginBabelHelpers.applyDecoratedDescriptor(_class, "getDay", [_dec3], Object.getOwnPropertyDescriptor(_class, "getDay"), _class), _rollupPluginBabelHelpers.applyDecoratedDescriptor(_class, "getWeekday", [_dec4], Object.getOwnPropertyDescriptor(_class, "getWeekday"), _class), _rollupPluginBabelHelpers.applyDecoratedDescriptor(_class, "getHour", [_dec5], Object.getOwnPropertyDescriptor(_class, "getHour"), _class), _rollupPluginBabelHelpers.applyDecoratedDescriptor(_class, "getMinute", [_dec6], Object.getOwnPropertyDescriptor(_class, "getMinute"), _class), _rollupPluginBabelHelpers.applyDecoratedDescriptor(_class, "getSecond", [_dec7], Object.getOwnPropertyDescriptor(_class, "getSecond"), _class), _rollupPluginBabelHelpers.applyDecoratedDescriptor(_class, "getTimePartsFallback", [_dec8], Object.getOwnPropertyDescriptor(_class, "getTimePartsFallback"), _class)), _class));
throw new Error(`Unable to parse timeString: '${timeString}'`);
}, dateTimeCacheKey('timePartsFallback'));
exports.getDateTimeParts = getDateTimeParts;

@@ -17,4 +17,3 @@ 'use strict';

}
const browserFeatureDetectionDate = options => Intl.DateTimeFormat('en', { ...options,
const browserFeatureDetectionDate = Intl.DateTimeFormat('en', {
hour: 'numeric'

@@ -25,8 +24,5 @@ }); // hourCycle to Intl.DateTimeFormatOptions was added in TS 4.2, so we could

const resolvedOptions = options => typeof browserFeatureDetectionDate(options).resolvedOptions === 'undefined' ? undefined : browserFeatureDetectionDate(options).resolvedOptions();
const resolvedOptions = typeof browserFeatureDetectionDate.resolvedOptions === 'undefined' ? undefined : browserFeatureDetectionDate.resolvedOptions();
function formatDate(date, locales, options = {}) {
const ro = resolvedOptions(options);
const hourCycleRequired = ro != null && options.hour12 === false && ro.hourCycle != null;
const hourCycleRequired = resolvedOptions != null && options.hour12 === false && resolvedOptions.hourCycle != null;

@@ -33,0 +29,0 @@ if (hourCycleRequired) {

@@ -1,1 +0,1 @@

module.exports = require("./build/cjs/index.js");
module.exports = require("./build/cjs/index.js");
{
"name": "@shopify/dates",
"version": "0.0.0-snapshot-20221111164351",
"version": "0.0.0-snapshot-20230303190004",
"license": "MIT",

@@ -27,6 +27,6 @@ "description": "Lightweight date operations library",

"dependencies": {
"@shopify/decorators": "^3.0.1"
"@shopify/function-enhancers": "^3.0.1"
},
"devDependencies": {
"@shopify/jest-dom-mocks": "^4.0.2"
"@shopify/jest-dom-mocks": "^4.1.0"
},

@@ -33,0 +33,0 @@ "files": [

@@ -12,3 +12,3 @@ # `@shopify/dates`

```bash
$ yarn add @shopify/dates
yarn add @shopify/dates
```

@@ -15,0 +15,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc