ezmedicationinput 0.1.40 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/maps.js +33 -1
- package/dist/parser.js +247 -25
- package/package.json +1 -1
package/dist/maps.js
CHANGED
|
@@ -548,6 +548,13 @@ function addMetricUnitSynonyms(map) {
|
|
|
548
548
|
}
|
|
549
549
|
exports.HOUSEHOLD_VOLUME_UNITS = ["tsp", "tbsp"];
|
|
550
550
|
const STATIC_UNIT_SYNONYMS = {
|
|
551
|
+
u: "U",
|
|
552
|
+
unit: "U",
|
|
553
|
+
units: "U",
|
|
554
|
+
iu: "IU",
|
|
555
|
+
"i.u": "IU",
|
|
556
|
+
"i.u.": "IU",
|
|
557
|
+
ius: "IU",
|
|
551
558
|
tab: "tab",
|
|
552
559
|
tabs: "tab",
|
|
553
560
|
tablet: "tab",
|
|
@@ -745,18 +752,43 @@ exports.DISCOURAGED_TOKENS = {
|
|
|
745
752
|
exports.DAY_OF_WEEK_TOKENS = {
|
|
746
753
|
monday: types_1.FhirDayOfWeek.Monday,
|
|
747
754
|
mon: types_1.FhirDayOfWeek.Monday,
|
|
755
|
+
mond: types_1.FhirDayOfWeek.Monday,
|
|
748
756
|
tuesday: types_1.FhirDayOfWeek.Tuesday,
|
|
749
757
|
tue: types_1.FhirDayOfWeek.Tuesday,
|
|
758
|
+
tues: types_1.FhirDayOfWeek.Tuesday,
|
|
750
759
|
wednesday: types_1.FhirDayOfWeek.Wednesday,
|
|
751
760
|
wed: types_1.FhirDayOfWeek.Wednesday,
|
|
761
|
+
weds: types_1.FhirDayOfWeek.Wednesday,
|
|
752
762
|
thursday: types_1.FhirDayOfWeek.Thursday,
|
|
753
763
|
thu: types_1.FhirDayOfWeek.Thursday,
|
|
764
|
+
thur: types_1.FhirDayOfWeek.Thursday,
|
|
765
|
+
thurs: types_1.FhirDayOfWeek.Thursday,
|
|
754
766
|
friday: types_1.FhirDayOfWeek.Friday,
|
|
755
767
|
fri: types_1.FhirDayOfWeek.Friday,
|
|
756
768
|
saturday: types_1.FhirDayOfWeek.Saturday,
|
|
757
769
|
sat: types_1.FhirDayOfWeek.Saturday,
|
|
758
770
|
sunday: types_1.FhirDayOfWeek.Sunday,
|
|
759
|
-
sun: types_1.FhirDayOfWeek.Sunday
|
|
771
|
+
sun: types_1.FhirDayOfWeek.Sunday,
|
|
772
|
+
จ: types_1.FhirDayOfWeek.Monday,
|
|
773
|
+
จัน: types_1.FhirDayOfWeek.Monday,
|
|
774
|
+
จันทร์: types_1.FhirDayOfWeek.Monday,
|
|
775
|
+
อ: types_1.FhirDayOfWeek.Tuesday,
|
|
776
|
+
อัง: types_1.FhirDayOfWeek.Tuesday,
|
|
777
|
+
อังคาร: types_1.FhirDayOfWeek.Tuesday,
|
|
778
|
+
พ: types_1.FhirDayOfWeek.Wednesday,
|
|
779
|
+
พุธ: types_1.FhirDayOfWeek.Wednesday,
|
|
780
|
+
พฤ: types_1.FhirDayOfWeek.Thursday,
|
|
781
|
+
พฤหัส: types_1.FhirDayOfWeek.Thursday,
|
|
782
|
+
พฤหัสบดี: types_1.FhirDayOfWeek.Thursday,
|
|
783
|
+
ศ: types_1.FhirDayOfWeek.Friday,
|
|
784
|
+
ศุก: types_1.FhirDayOfWeek.Friday,
|
|
785
|
+
ศุกร์: types_1.FhirDayOfWeek.Friday,
|
|
786
|
+
ส: types_1.FhirDayOfWeek.Saturday,
|
|
787
|
+
เสา: types_1.FhirDayOfWeek.Saturday,
|
|
788
|
+
เสาร์: types_1.FhirDayOfWeek.Saturday,
|
|
789
|
+
อา: types_1.FhirDayOfWeek.Sunday,
|
|
790
|
+
อาท: types_1.FhirDayOfWeek.Sunday,
|
|
791
|
+
อาทิตย์: types_1.FhirDayOfWeek.Sunday
|
|
760
792
|
};
|
|
761
793
|
exports.WORD_FREQUENCIES = {
|
|
762
794
|
daily: { frequency: 1, periodUnit: types_1.FhirPeriodUnit.Day },
|
package/dist/parser.js
CHANGED
|
@@ -195,6 +195,11 @@ const COMBO_EVENT_TIMINGS = {
|
|
|
195
195
|
"before sleep": types_1.EventTiming["Before Sleep"],
|
|
196
196
|
"upon waking": types_1.EventTiming.Wake
|
|
197
197
|
};
|
|
198
|
+
const DAY_RANGE_PART_PATTERN = Object.keys(maps_1.DAY_OF_WEEK_TOKENS)
|
|
199
|
+
.sort((a, b) => b.length - a.length)
|
|
200
|
+
.map((token) => token.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))
|
|
201
|
+
.join("|");
|
|
202
|
+
const DAY_RANGE_SPACED_HYPHEN_REGEX = new RegExp(`(^|\\s)(${DAY_RANGE_PART_PATTERN})\\s*-\\s*(${DAY_RANGE_PART_PATTERN})(?=\\s|$)`, "giu");
|
|
198
203
|
const MEAL_CONTEXT_CONNECTORS = new Set(["and", "or", "&", "+", "plus"]);
|
|
199
204
|
const COUNT_KEYWORDS = new Set([
|
|
200
205
|
"time",
|
|
@@ -965,6 +970,7 @@ const SITE_UNIT_ROUTE_HINTS = [
|
|
|
965
970
|
function tokenize(input) {
|
|
966
971
|
const separators = /[(),;]/g;
|
|
967
972
|
let normalized = input.trim().replace(separators, " ");
|
|
973
|
+
normalized = normalized.replace(DAY_RANGE_SPACED_HYPHEN_REGEX, (_match, prefix, start, end) => `${prefix}${start}-${end}`);
|
|
968
974
|
normalized = normalized.replace(/\s-\s/g, " ; ");
|
|
969
975
|
normalized = normalized.replace(/(\d+(?:\.\d+)?)\s*\/\s*(d|day|days|wk|w|week|weeks|mo|month|months|hr|hrs|hour|hours|h|min|mins|minute|minutes)\b/gi, (_match, value, unit) => `${value} per ${unit}`);
|
|
970
976
|
normalized = normalized.replace(/(\d+)\s*\/\s*(\d+)/g, (match, num, den) => {
|
|
@@ -1585,6 +1591,154 @@ function isTimingAnchorOrPrefix(tokens, index, prnReasonStart) {
|
|
|
1585
1591
|
(isAtPrefixToken(lower) || lower === "on" || lower === "with") ||
|
|
1586
1592
|
/^\d/.test(lower));
|
|
1587
1593
|
}
|
|
1594
|
+
const DAY_SEQUENCE = [
|
|
1595
|
+
types_1.FhirDayOfWeek.Monday,
|
|
1596
|
+
types_1.FhirDayOfWeek.Tuesday,
|
|
1597
|
+
types_1.FhirDayOfWeek.Wednesday,
|
|
1598
|
+
types_1.FhirDayOfWeek.Thursday,
|
|
1599
|
+
types_1.FhirDayOfWeek.Friday,
|
|
1600
|
+
types_1.FhirDayOfWeek.Saturday,
|
|
1601
|
+
types_1.FhirDayOfWeek.Sunday
|
|
1602
|
+
];
|
|
1603
|
+
const DAY_GROUP_TOKENS = {
|
|
1604
|
+
weekend: [types_1.FhirDayOfWeek.Saturday, types_1.FhirDayOfWeek.Sunday],
|
|
1605
|
+
weekends: [types_1.FhirDayOfWeek.Saturday, types_1.FhirDayOfWeek.Sunday],
|
|
1606
|
+
wknd: [types_1.FhirDayOfWeek.Saturday, types_1.FhirDayOfWeek.Sunday],
|
|
1607
|
+
weekdays: [
|
|
1608
|
+
types_1.FhirDayOfWeek.Monday,
|
|
1609
|
+
types_1.FhirDayOfWeek.Tuesday,
|
|
1610
|
+
types_1.FhirDayOfWeek.Wednesday,
|
|
1611
|
+
types_1.FhirDayOfWeek.Thursday,
|
|
1612
|
+
types_1.FhirDayOfWeek.Friday
|
|
1613
|
+
],
|
|
1614
|
+
weekday: [
|
|
1615
|
+
types_1.FhirDayOfWeek.Monday,
|
|
1616
|
+
types_1.FhirDayOfWeek.Tuesday,
|
|
1617
|
+
types_1.FhirDayOfWeek.Wednesday,
|
|
1618
|
+
types_1.FhirDayOfWeek.Thursday,
|
|
1619
|
+
types_1.FhirDayOfWeek.Friday
|
|
1620
|
+
],
|
|
1621
|
+
workday: [
|
|
1622
|
+
types_1.FhirDayOfWeek.Monday,
|
|
1623
|
+
types_1.FhirDayOfWeek.Tuesday,
|
|
1624
|
+
types_1.FhirDayOfWeek.Wednesday,
|
|
1625
|
+
types_1.FhirDayOfWeek.Thursday,
|
|
1626
|
+
types_1.FhirDayOfWeek.Friday
|
|
1627
|
+
],
|
|
1628
|
+
workdays: [
|
|
1629
|
+
types_1.FhirDayOfWeek.Monday,
|
|
1630
|
+
types_1.FhirDayOfWeek.Tuesday,
|
|
1631
|
+
types_1.FhirDayOfWeek.Wednesday,
|
|
1632
|
+
types_1.FhirDayOfWeek.Thursday,
|
|
1633
|
+
types_1.FhirDayOfWeek.Friday
|
|
1634
|
+
],
|
|
1635
|
+
วันธรรมดา: [
|
|
1636
|
+
types_1.FhirDayOfWeek.Monday,
|
|
1637
|
+
types_1.FhirDayOfWeek.Tuesday,
|
|
1638
|
+
types_1.FhirDayOfWeek.Wednesday,
|
|
1639
|
+
types_1.FhirDayOfWeek.Thursday,
|
|
1640
|
+
types_1.FhirDayOfWeek.Friday
|
|
1641
|
+
],
|
|
1642
|
+
วันทำงาน: [
|
|
1643
|
+
types_1.FhirDayOfWeek.Monday,
|
|
1644
|
+
types_1.FhirDayOfWeek.Tuesday,
|
|
1645
|
+
types_1.FhirDayOfWeek.Wednesday,
|
|
1646
|
+
types_1.FhirDayOfWeek.Thursday,
|
|
1647
|
+
types_1.FhirDayOfWeek.Friday
|
|
1648
|
+
],
|
|
1649
|
+
วันหยุด: [types_1.FhirDayOfWeek.Saturday, types_1.FhirDayOfWeek.Sunday],
|
|
1650
|
+
สุดสัปดาห์: [types_1.FhirDayOfWeek.Saturday, types_1.FhirDayOfWeek.Sunday],
|
|
1651
|
+
เสาร์อาทิตย์: [types_1.FhirDayOfWeek.Saturday, types_1.FhirDayOfWeek.Sunday],
|
|
1652
|
+
จันทร์ถึงศุกร์: [
|
|
1653
|
+
types_1.FhirDayOfWeek.Monday,
|
|
1654
|
+
types_1.FhirDayOfWeek.Tuesday,
|
|
1655
|
+
types_1.FhirDayOfWeek.Wednesday,
|
|
1656
|
+
types_1.FhirDayOfWeek.Thursday,
|
|
1657
|
+
types_1.FhirDayOfWeek.Friday
|
|
1658
|
+
]
|
|
1659
|
+
};
|
|
1660
|
+
const DAY_RANGE_CONNECTOR_TOKENS = new Set(["-", "to", "through", "thru", "ถึง", "จนถึง"]);
|
|
1661
|
+
function addDayOfWeek(internal, day) {
|
|
1662
|
+
if (!(0, array_1.arrayIncludes)(internal.dayOfWeek, day)) {
|
|
1663
|
+
internal.dayOfWeek.push(day);
|
|
1664
|
+
}
|
|
1665
|
+
}
|
|
1666
|
+
function addDayOfWeekList(internal, days) {
|
|
1667
|
+
for (const day of days) {
|
|
1668
|
+
addDayOfWeek(internal, day);
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
function expandDayRange(start, end) {
|
|
1672
|
+
const startIndex = DAY_SEQUENCE.indexOf(start);
|
|
1673
|
+
const endIndex = DAY_SEQUENCE.indexOf(end);
|
|
1674
|
+
if (startIndex < 0 || endIndex < 0) {
|
|
1675
|
+
return [start, end];
|
|
1676
|
+
}
|
|
1677
|
+
if (startIndex <= endIndex) {
|
|
1678
|
+
return DAY_SEQUENCE.slice(startIndex, endIndex + 1);
|
|
1679
|
+
}
|
|
1680
|
+
return [...DAY_SEQUENCE.slice(startIndex), ...DAY_SEQUENCE.slice(0, endIndex + 1)];
|
|
1681
|
+
}
|
|
1682
|
+
function resolveDayTokenDays(tokenLower) {
|
|
1683
|
+
const normalized = tokenLower.replace(/[.,;:]/g, "");
|
|
1684
|
+
const direct = maps_1.DAY_OF_WEEK_TOKENS[normalized];
|
|
1685
|
+
if (direct) {
|
|
1686
|
+
return [direct];
|
|
1687
|
+
}
|
|
1688
|
+
const grouped = DAY_GROUP_TOKENS[normalized];
|
|
1689
|
+
if (grouped) {
|
|
1690
|
+
return grouped.slice();
|
|
1691
|
+
}
|
|
1692
|
+
const rangeMatch = normalized.match(/^([^-–—~]+)[-–—~]([^-–—~]+)$/);
|
|
1693
|
+
if (rangeMatch) {
|
|
1694
|
+
const start = maps_1.DAY_OF_WEEK_TOKENS[rangeMatch[1]];
|
|
1695
|
+
const end = maps_1.DAY_OF_WEEK_TOKENS[rangeMatch[2]];
|
|
1696
|
+
if (start && end) {
|
|
1697
|
+
return expandDayRange(start, end);
|
|
1698
|
+
}
|
|
1699
|
+
}
|
|
1700
|
+
const compactConnectorRange = normalized.match(/^(.+?)(ถึง|จนถึง|to|through|thru)(.+)$/u);
|
|
1701
|
+
if (compactConnectorRange) {
|
|
1702
|
+
const start = maps_1.DAY_OF_WEEK_TOKENS[compactConnectorRange[1]];
|
|
1703
|
+
const end = maps_1.DAY_OF_WEEK_TOKENS[compactConnectorRange[3]];
|
|
1704
|
+
if (start && end) {
|
|
1705
|
+
return expandDayRange(start, end);
|
|
1706
|
+
}
|
|
1707
|
+
}
|
|
1708
|
+
return undefined;
|
|
1709
|
+
}
|
|
1710
|
+
function tryConsumeDayRangeTokens(internal, tokens, index) {
|
|
1711
|
+
const startToken = tokens[index];
|
|
1712
|
+
if (!startToken || internal.consumed.has(startToken.index)) {
|
|
1713
|
+
return 0;
|
|
1714
|
+
}
|
|
1715
|
+
const startDays = resolveDayTokenDays(normalizeTokenLower(startToken));
|
|
1716
|
+
if (!startDays || startDays.length !== 1) {
|
|
1717
|
+
return 0;
|
|
1718
|
+
}
|
|
1719
|
+
const connectorToken = tokens[index + 1];
|
|
1720
|
+
const endToken = tokens[index + 2];
|
|
1721
|
+
if (!connectorToken ||
|
|
1722
|
+
!endToken ||
|
|
1723
|
+
internal.consumed.has(connectorToken.index) ||
|
|
1724
|
+
internal.consumed.has(endToken.index)) {
|
|
1725
|
+
return 0;
|
|
1726
|
+
}
|
|
1727
|
+
const connector = normalizeTokenLower(connectorToken);
|
|
1728
|
+
if (!DAY_RANGE_CONNECTOR_TOKENS.has(connector)) {
|
|
1729
|
+
return 0;
|
|
1730
|
+
}
|
|
1731
|
+
const endDays = resolveDayTokenDays(normalizeTokenLower(endToken));
|
|
1732
|
+
if (!endDays || endDays.length !== 1) {
|
|
1733
|
+
return 0;
|
|
1734
|
+
}
|
|
1735
|
+
const expanded = expandDayRange(startDays[0], endDays[0]);
|
|
1736
|
+
addDayOfWeekList(internal, expanded);
|
|
1737
|
+
mark(internal.consumed, startToken);
|
|
1738
|
+
mark(internal.consumed, connectorToken);
|
|
1739
|
+
mark(internal.consumed, endToken);
|
|
1740
|
+
return 3;
|
|
1741
|
+
}
|
|
1588
1742
|
function parseAnchorSequence(internal, tokens, index, prefixCode) {
|
|
1589
1743
|
var _a;
|
|
1590
1744
|
const token = tokens[index];
|
|
@@ -1594,16 +1748,20 @@ function parseAnchorSequence(internal, tokens, index, prefixCode) {
|
|
|
1594
1748
|
if (internal.consumed.has(nextToken.index)) {
|
|
1595
1749
|
continue;
|
|
1596
1750
|
}
|
|
1597
|
-
const lower = nextToken
|
|
1751
|
+
const lower = normalizeTokenLower(nextToken);
|
|
1598
1752
|
if (MEAL_CONTEXT_CONNECTORS.has(lower) || lower === ",") {
|
|
1599
1753
|
mark(internal.consumed, nextToken);
|
|
1600
1754
|
continue;
|
|
1601
1755
|
}
|
|
1602
|
-
const
|
|
1603
|
-
if (
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1756
|
+
const rangeConsumed = tryConsumeDayRangeTokens(internal, tokens, lookahead);
|
|
1757
|
+
if (rangeConsumed > 0) {
|
|
1758
|
+
converted++;
|
|
1759
|
+
lookahead += rangeConsumed - 1;
|
|
1760
|
+
continue;
|
|
1761
|
+
}
|
|
1762
|
+
const days = resolveDayTokenDays(lower);
|
|
1763
|
+
if (days) {
|
|
1764
|
+
addDayOfWeekList(internal, days);
|
|
1607
1765
|
mark(internal.consumed, nextToken);
|
|
1608
1766
|
converted++;
|
|
1609
1767
|
continue;
|
|
@@ -1748,6 +1906,70 @@ function applyCountLimit(internal, value) {
|
|
|
1748
1906
|
internal.count = rounded;
|
|
1749
1907
|
return true;
|
|
1750
1908
|
}
|
|
1909
|
+
const DOSE_SCALE_MULTIPLIERS = {
|
|
1910
|
+
k: 1000,
|
|
1911
|
+
thousand: 1000,
|
|
1912
|
+
m: 1000000,
|
|
1913
|
+
mn: 1000000,
|
|
1914
|
+
mio: 1000000,
|
|
1915
|
+
million: 1000000,
|
|
1916
|
+
b: 1000000000,
|
|
1917
|
+
bn: 1000000000,
|
|
1918
|
+
billion: 1000000000
|
|
1919
|
+
};
|
|
1920
|
+
function resolveUnitTokenAt(tokens, index, consumed, options) {
|
|
1921
|
+
const token = tokens[index];
|
|
1922
|
+
if (!token || consumed.has(token.index)) {
|
|
1923
|
+
return undefined;
|
|
1924
|
+
}
|
|
1925
|
+
const normalized = normalizeTokenLower(token);
|
|
1926
|
+
const direct = normalizeUnit(normalized, options);
|
|
1927
|
+
if (direct) {
|
|
1928
|
+
return { unit: direct, consumedIndices: [index] };
|
|
1929
|
+
}
|
|
1930
|
+
if (normalized === "international") {
|
|
1931
|
+
const nextToken = tokens[index + 1];
|
|
1932
|
+
if (!nextToken || consumed.has(nextToken.index)) {
|
|
1933
|
+
return undefined;
|
|
1934
|
+
}
|
|
1935
|
+
const nextNormalized = normalizeTokenLower(nextToken);
|
|
1936
|
+
if (nextNormalized === "unit" ||
|
|
1937
|
+
nextNormalized === "units" ||
|
|
1938
|
+
nextNormalized === "u" ||
|
|
1939
|
+
nextNormalized === "iu" ||
|
|
1940
|
+
nextNormalized === "ius") {
|
|
1941
|
+
return { unit: "IU", consumedIndices: [index, index + 1] };
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
return undefined;
|
|
1945
|
+
}
|
|
1946
|
+
function resolveNumericDoseUnit(tokens, numberIndex, value, consumed, options) {
|
|
1947
|
+
const directUnit = resolveUnitTokenAt(tokens, numberIndex + 1, consumed, options);
|
|
1948
|
+
if (directUnit) {
|
|
1949
|
+
return {
|
|
1950
|
+
doseValue: value,
|
|
1951
|
+
unit: directUnit.unit,
|
|
1952
|
+
consumedIndices: directUnit.consumedIndices
|
|
1953
|
+
};
|
|
1954
|
+
}
|
|
1955
|
+
const scaleToken = tokens[numberIndex + 1];
|
|
1956
|
+
if (!scaleToken || consumed.has(scaleToken.index)) {
|
|
1957
|
+
return { doseValue: value, consumedIndices: [] };
|
|
1958
|
+
}
|
|
1959
|
+
const multiplier = DOSE_SCALE_MULTIPLIERS[normalizeTokenLower(scaleToken)];
|
|
1960
|
+
if (!multiplier) {
|
|
1961
|
+
return { doseValue: value, consumedIndices: [] };
|
|
1962
|
+
}
|
|
1963
|
+
const scaledUnit = resolveUnitTokenAt(tokens, numberIndex + 2, consumed, options);
|
|
1964
|
+
if (!scaledUnit) {
|
|
1965
|
+
return { doseValue: value, consumedIndices: [] };
|
|
1966
|
+
}
|
|
1967
|
+
return {
|
|
1968
|
+
doseValue: value * multiplier,
|
|
1969
|
+
unit: scaledUnit.unit,
|
|
1970
|
+
consumedIndices: [numberIndex + 1, ...scaledUnit.consumedIndices]
|
|
1971
|
+
};
|
|
1972
|
+
}
|
|
1751
1973
|
function parseInternal(input, options) {
|
|
1752
1974
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1753
1975
|
const tokens = tokenize(input);
|
|
@@ -2063,11 +2285,13 @@ function parseInternal(input, options) {
|
|
|
2063
2285
|
}
|
|
2064
2286
|
}
|
|
2065
2287
|
// Day of week
|
|
2066
|
-
const
|
|
2067
|
-
if (
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2288
|
+
const rangeConsumed = tryConsumeDayRangeTokens(internal, tokens, i);
|
|
2289
|
+
if (rangeConsumed > 0) {
|
|
2290
|
+
continue;
|
|
2291
|
+
}
|
|
2292
|
+
const days = resolveDayTokenDays(normalizeTokenLower(token));
|
|
2293
|
+
if (days) {
|
|
2294
|
+
addDayOfWeekList(internal, days);
|
|
2071
2295
|
mark(internal.consumed, token);
|
|
2072
2296
|
continue;
|
|
2073
2297
|
}
|
|
@@ -2210,29 +2434,27 @@ function parseInternal(input, options) {
|
|
|
2210
2434
|
internal.doseRange = rangeValue;
|
|
2211
2435
|
}
|
|
2212
2436
|
mark(internal.consumed, token);
|
|
2213
|
-
const
|
|
2214
|
-
if (
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
internal.
|
|
2218
|
-
mark(internal.consumed, unitToken);
|
|
2437
|
+
const resolvedUnit = resolveUnitTokenAt(tokens, i + 1, internal.consumed, options);
|
|
2438
|
+
if (resolvedUnit) {
|
|
2439
|
+
internal.unit = resolvedUnit.unit;
|
|
2440
|
+
for (const consumedIndex of resolvedUnit.consumedIndices) {
|
|
2441
|
+
mark(internal.consumed, tokens[consumedIndex]);
|
|
2219
2442
|
}
|
|
2220
2443
|
}
|
|
2221
2444
|
continue;
|
|
2222
2445
|
}
|
|
2223
2446
|
if (/^[0-9]+(?:\.[0-9]+)?$/.test(token.lower)) {
|
|
2224
2447
|
const value = parseFloat(token.original);
|
|
2448
|
+
const resolvedDose = resolveNumericDoseUnit(tokens, i, value, internal.consumed, options);
|
|
2225
2449
|
if (internal.dose === undefined) {
|
|
2226
|
-
internal.dose =
|
|
2450
|
+
internal.dose = resolvedDose.doseValue;
|
|
2227
2451
|
}
|
|
2228
2452
|
mark(internal.consumed, token);
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
mark(internal.consumed, unitToken);
|
|
2235
|
-
}
|
|
2453
|
+
if (resolvedDose.unit) {
|
|
2454
|
+
internal.unit = resolvedDose.unit;
|
|
2455
|
+
}
|
|
2456
|
+
for (const consumedIndex of resolvedDose.consumedIndices) {
|
|
2457
|
+
mark(internal.consumed, tokens[consumedIndex]);
|
|
2236
2458
|
}
|
|
2237
2459
|
continue;
|
|
2238
2460
|
}
|