parse-xsd-duration
Advanced tools
Comparing version
(function (global, factory) { | ||
if (typeof define === "function" && define.amd) { | ||
define('parseXsdDuration', ['module', 'exports'], factory); | ||
define('parseXsdDuration', ['exports'], factory); | ||
} else if (typeof exports !== "undefined") { | ||
factory(module, exports); | ||
factory(exports); | ||
} else { | ||
@@ -10,6 +10,6 @@ var mod = { | ||
}; | ||
factory(mod, mod.exports); | ||
factory(mod.exports); | ||
global.parseXsdDuration = mod.exports; | ||
} | ||
})(this, function (module, exports) { | ||
})(this, function (exports) { | ||
'use strict'; | ||
@@ -20,2 +20,5 @@ | ||
}); | ||
var _emptyPeriod, _emptyTime; | ||
var UNITS = { | ||
@@ -30,2 +33,14 @@ YEAR: 31536000, | ||
var YEAR_UNIT = 'years'; | ||
var MONTH_UNIT = 'months'; | ||
var DAY_UNIT = 'days'; | ||
var HOUR_UNIT = 'hours'; | ||
var MINUTE_UNIT = 'minutes'; | ||
var SECOND_UNIT = 'seconds'; | ||
var IS_NEGATIVE_UNIT = 'isNegative'; | ||
var emptyPeriod = (_emptyPeriod = {}, _emptyPeriod[YEAR_UNIT] = 0, _emptyPeriod[MONTH_UNIT] = 0, _emptyPeriod[DAY_UNIT] = 0, _emptyPeriod); | ||
var emptyTime = (_emptyTime = {}, _emptyTime[HOUR_UNIT] = 0, _emptyTime[MINUTE_UNIT] = 0, _emptyTime[SECOND_UNIT] = 0, _emptyTime); | ||
// Regex taken from https://www.w3.org/TR/xmlschema11-2/#duration-lexical-space | ||
@@ -50,5 +65,10 @@ var isValidXsdDuration = function isValidXsdDuration(str) { | ||
var parseUnit = function parseUnit(unit, amount) { | ||
var amt = getNumber(amount); | ||
return unitToSeconds(unit, amt); | ||
}; | ||
var getNumber = function getNumber(amount) { | ||
var amt = parseFloat(amount); | ||
if (isNaN(amt)) return 0; | ||
return unitToSeconds(unit, amt); | ||
return amt; | ||
}; | ||
@@ -65,7 +85,18 @@ | ||
var parsePeriodToObject = function parsePeriodToObject(period) { | ||
var _ref3; | ||
var _ref2 = /^(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?$/g.exec(period) || [], | ||
years = _ref2[1], | ||
months = _ref2[2], | ||
days = _ref2[3]; | ||
return _ref3 = {}, _ref3[YEAR_UNIT] = getNumber(years), _ref3[MONTH_UNIT] = getNumber(months), _ref3[DAY_UNIT] = getNumber(days), _ref3; | ||
}; | ||
var parseTime = function parseTime(time) { | ||
var _ref2 = /^(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?$/g.exec(time) || [], | ||
hour = _ref2[1], | ||
minute = _ref2[2], | ||
second = _ref2[3]; | ||
var _ref4 = /^(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?$/g.exec(time) || [], | ||
hour = _ref4[1], | ||
minute = _ref4[2], | ||
second = _ref4[3]; | ||
@@ -75,2 +106,13 @@ return parseUnit('hour', hour) + parseUnit('minute', minute) + parseUnit('second', second); | ||
var parseTimeToObject = function parseTimeToObject(time) { | ||
var _ref6; | ||
var _ref5 = /^(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?$/g.exec(time) || [], | ||
hours = _ref5[1], | ||
minutes = _ref5[2], | ||
seconds = _ref5[3]; | ||
return _ref6 = {}, _ref6[HOUR_UNIT] = getNumber(hours), _ref6[MINUTE_UNIT] = getNumber(minutes), _ref6[SECOND_UNIT] = getNumber(seconds), _ref6; | ||
}; | ||
var parse = function parse(str) { | ||
@@ -89,3 +131,20 @@ var neg = isNegative(str); | ||
exports.default = function (input) { | ||
var convertToObject = exports.convertToObject = function convertToObject(str) { | ||
var _output; | ||
var neg = isNegative(str); | ||
var duration = neg ? stripFirstChar(str) : str; | ||
var splitDuration = duration.split('T'); | ||
var period = stripFirstChar(splitDuration[0]); | ||
var time = splitDuration[1]; | ||
var output = (_output = {}, _output[IS_NEGATIVE_UNIT] = neg, _output); | ||
output = isNonEmptyString(period) ? Object.assign(output, parsePeriodToObject(period)) : Object.assign(output, emptyPeriod); | ||
output = isNonEmptyString(time) ? Object.assign(output, parseTimeToObject(time)) : Object.assign(output, emptyTime); | ||
return output; | ||
}; | ||
var out = function out(input) { | ||
var toObject = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
// Throw error for non-string input | ||
@@ -98,7 +157,9 @@ if (typeof input !== 'string') { | ||
// Parse valid input | ||
return parse(input); | ||
return toObject ? convertToObject(input) : parse(input); | ||
}; | ||
module.exports = exports['default']; | ||
exports.default = function (input, toObject) { | ||
return out(input, toObject); | ||
}; | ||
}); | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "parse-xsd-duration", | ||
"version": "0.1.0", | ||
"version": "0.2.0", | ||
"description": "Parse XSD durations to seconds", | ||
@@ -26,3 +26,4 @@ "main": "dist/index.js", | ||
"test": "ava", | ||
"lint": "eslint src" | ||
"lint": "eslint src", | ||
"fmt": "prettier --write \"**/*.{js,json,yml,yaml}\"" | ||
}, | ||
@@ -51,3 +52,2 @@ "files": [ | ||
"babel-preset-env": "^1.3.3", | ||
"big-list-of-naughty-strings": "^1.0.0", | ||
"eslint": "^3.19.0", | ||
@@ -60,4 +60,5 @@ "eslint-config-standard": "^10.2.0", | ||
"eslint-watch": "^3.0.1", | ||
"npm-run-all": "^4.0.2" | ||
"npm-run-all": "^4.0.2", | ||
"prettier": "^1.14.2" | ||
} | ||
} |
@@ -1,3 +0,3 @@ | ||
# parse-xsd-duration [][npm] | ||
Parse XSD durations to seconds | ||
# parse-xsd-duration [][npm] [](https://travis-ci.com/mickdekkers/parse-xsd-duration) | ||
Parse XSD durations to seconds (by default) or to object | ||
@@ -10,3 +10,3 @@ ## Installation | ||
Note: this package has zero dependencies and is provided in [UMD format][umd] so you can easily use it in the browser. | ||
This package has zero dependencies and is provided in [UMD format][umd] so you can easily use it in the browser. | ||
@@ -26,2 +26,11 @@ ## Usage | ||
// => 37070430.123 | ||
pxd('PT2M10S', true) | ||
// => { years: 0, months: 0, days: 0, hours: 0, minutes: 2, seconds: 10, isNegative: 0 } | ||
pxd('P2Y6M5DT12H35M30S', true) | ||
// => { years: 2, months: 6, days: 5, hours: 12, minutes: 35, seconds: 30, isNegative: 0 } | ||
pxd('P1Y2M3DT5H20M30.123S', true) | ||
// => { years: 1, months: 2, days: 3, hours: 5, minutes: 20, seconds: 30.123, isNegative: 0 } | ||
``` | ||
@@ -31,5 +40,5 @@ | ||
### `parse-xsd-duration(xsdDuration: string): number | null` | ||
### `parseXsdDuration(xsdDuration: string, toObject: boolean): number | object | null` | ||
- Converts an XSD duration string to seconds. | ||
- Converts an XSD duration string to seconds by default or to object with parameter `toObject` = `true`. | ||
- If the string is not a valid XSD duration, it will return `null`. | ||
@@ -42,4 +51,4 @@ - If the input is not a string, it will throw a `TypeError`. | ||
[npm]: https://www.npmjs.com/package/vue-howler | ||
[npm]: https://www.npmjs.com/package/parse-xsd-duration | ||
[umd]: https://github.com/umdjs/umd | ||
[mickdekkers-gh]: https://github.com/soullesswaffle | ||
[mickdekkers-gh]: https://github.com/mickdekkers |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
151243
4.49%130
52.94%51
21.43%1
Infinity%