@comunica/utils-expression-evaluator 4.5.0 → 5.0.0
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/lib/expressions/Aggregate.d.ts +1 -1
- package/lib/expressions/Aggregate.js +3 -1
- package/lib/expressions/Aggregate.js.map +1 -1
- package/lib/expressions/Existence.d.ts +1 -1
- package/lib/expressions/Existence.js +2 -1
- package/lib/expressions/Existence.js.map +1 -1
- package/lib/expressions/Expressions.d.ts +0 -0
- package/lib/expressions/Expressions.js +1 -2
- package/lib/expressions/Expressions.js.map +1 -1
- package/lib/expressions/Operator.d.ts +0 -0
- package/lib/expressions/Operator.js +4 -1
- package/lib/expressions/Operator.js.map +1 -1
- package/lib/expressions/Term.d.ts +9 -1
- package/lib/expressions/Term.js +76 -21
- package/lib/expressions/Term.js.map +1 -1
- package/lib/expressions/Variable.d.ts +0 -0
- package/lib/expressions/Variable.js +2 -1
- package/lib/expressions/Variable.js.map +1 -1
- package/lib/expressions/index.d.ts +0 -0
- package/lib/expressions/index.js +0 -0
- package/lib/expressions/index.js.map +0 -0
- package/lib/functions/Helpers.d.ts +2 -0
- package/lib/functions/Helpers.js +20 -11
- package/lib/functions/Helpers.js.map +1 -1
- package/lib/functions/OverloadTree.d.ts +0 -0
- package/lib/functions/OverloadTree.js +8 -0
- package/lib/functions/OverloadTree.js.map +1 -1
- package/lib/index.d.ts +0 -0
- package/lib/index.js +0 -0
- package/lib/index.js.map +0 -0
- package/lib/transformers/TermTransformer.d.ts +2 -2
- package/lib/transformers/TermTransformer.js +7 -3
- package/lib/transformers/TermTransformer.js.map +1 -1
- package/lib/util/Consts.d.ts +5 -0
- package/lib/util/Consts.js +7 -3
- package/lib/util/Consts.js.map +1 -1
- package/lib/util/Context.d.ts +0 -0
- package/lib/util/Context.js +1 -2
- package/lib/util/Context.js.map +1 -1
- package/lib/util/DateTimeHelpers.d.ts +0 -0
- package/lib/util/DateTimeHelpers.js +15 -16
- package/lib/util/DateTimeHelpers.js.map +1 -1
- package/lib/util/Errors.d.ts +5 -0
- package/lib/util/Errors.js +28 -2
- package/lib/util/Errors.js.map +1 -1
- package/lib/util/Parsing.d.ts +0 -1
- package/lib/util/Parsing.js +8 -11
- package/lib/util/Parsing.js.map +1 -1
- package/lib/util/Serialization.d.ts +0 -0
- package/lib/util/Serialization.js +4 -5
- package/lib/util/Serialization.js.map +1 -1
- package/lib/util/SpecAlgos.d.ts +0 -0
- package/lib/util/SpecAlgos.js +3 -4
- package/lib/util/SpecAlgos.js.map +1 -1
- package/lib/util/TypeHandling.d.ts +0 -0
- package/lib/util/TypeHandling.js +11 -10
- package/lib/util/TypeHandling.js.map +1 -1
- package/package.json +8 -8
package/lib/util/Context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Context.js","sourceRoot":"","sources":["Context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Context.js","sourceRoot":"","sources":["Context.ts"],"names":[],"mappings":";;AAMA,sEAoCC;AA1CD,+DAAmF;AAGnF,yCAAqC;AACrC,uDAAoD;AAEpD,SAAgB,6BAA6B,CAAC,UAA0B;IACtE,IAAI,OAAO,GAAG,UAAU,CAAC;IAEzB,uDAAuD;IACvD,IAAI,OAAO,CAAC,GAAG,CAAC,+BAAa,CAAC,wBAAwB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,+BAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACzG,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,+BAAa,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACxD,OAAO,GAAG,OAAO,CAAC,GAAG,CACnB,yCAAuB,CAAC,wBAAwB,EAChD,OAAO,CAAC,GAAG,CAAC,+BAAa,CAAC,wBAAwB,CAAC,CACpD,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,+BAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACzD,MAAM,kBAAkB,GAA2C,OAAO,CAAC,OAAO,CAChF,+BAAa,CAAC,kBAAkB,CACjC,CAAC;QACF,OAAO,GAAG,OAAO,CAAC,GAAG,CACnB,yCAAuB,CAAC,wBAAwB,EAChD,KAAK,EAAC,iBAAgC,EAAE,EAAE,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CACvF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,yCAAuB,CAAC,wBAAwB,EAAE,KAAK,IAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvG,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,UAAU,CAC1B,yCAAuB,CAAC,eAAe,EACvC,IAAA,iCAAe,EAAC,OAAO,CAAC,OAAO,CAAC,+BAAa,CAAC,cAAc,CAAC,CAAC,CAC/D,CAAC;IAEF,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,yCAAuB,CAAC,iBAAiB,EAAE;QACtE,KAAK,EAAE,IAAI,oBAAQ,CAA+B,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACjE,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { KeysExpressionEvaluator, KeysInitQuery } from '@comunica/context-entries';\nimport type { AsyncExtensionFunction, GeneralSuperTypeDict, IActionContext } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { LRUCache } from 'lru-cache';\nimport { extractTimeZone } from './DateTimeHelpers';\n\nexport function prepareEvaluatorActionContext(orgContext: IActionContext): IActionContext {\n let context = orgContext;\n\n // Handle two variants of providing extension functions\n if (context.has(KeysInitQuery.extensionFunctionCreator) && context.has(KeysInitQuery.extensionFunctions)) {\n throw new Error('Illegal simultaneous usage of extensionFunctionCreator and extensionFunctions in context');\n }\n if (context.has(KeysInitQuery.extensionFunctionCreator)) {\n context = context.set(\n KeysExpressionEvaluator.extensionFunctionCreator,\n context.get(KeysInitQuery.extensionFunctionCreator),\n );\n } else if (context.has(KeysInitQuery.extensionFunctions)) {\n const extensionFunctions: Record<string, AsyncExtensionFunction> = context.getSafe(\n KeysInitQuery.extensionFunctions,\n );\n context = context.set(\n KeysExpressionEvaluator.extensionFunctionCreator,\n async(functionNamedNode: RDF.NamedNode) => extensionFunctions[functionNamedNode.value],\n );\n } else {\n // eslint-disable-next-line unicorn/no-useless-undefined\n context = context.setDefault(KeysExpressionEvaluator.extensionFunctionCreator, async() => undefined);\n }\n\n context = context.setDefault(\n KeysExpressionEvaluator.defaultTimeZone,\n extractTimeZone(context.getSafe(KeysInitQuery.queryTimestamp)),\n );\n\n context = context.setDefault(KeysExpressionEvaluator.superTypeProvider, {\n cache: new LRUCache<string, GeneralSuperTypeDict>({ max: 1_000 }),\n discoverer: () => 'term',\n });\n\n return context;\n}\n"]}
|
|
File without changes
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.defaultedDayTimeDurationRepresentation = defaultedDayTimeDurationRepresentation;
|
|
4
|
+
exports.defaultedYearMonthDurationRepresentation = defaultedYearMonthDurationRepresentation;
|
|
5
|
+
exports.defaultedDurationRepresentation = defaultedDurationRepresentation;
|
|
6
|
+
exports.simplifyDurationRepresentation = simplifyDurationRepresentation;
|
|
7
|
+
exports.defaultedDateTimeRepresentation = defaultedDateTimeRepresentation;
|
|
8
|
+
exports.toDateTimeRepresentation = toDateTimeRepresentation;
|
|
9
|
+
exports.negateDuration = negateDuration;
|
|
10
|
+
exports.toJSDate = toJSDate;
|
|
11
|
+
exports.toUTCDate = toUTCDate;
|
|
12
|
+
exports.trimToYearMonthDuration = trimToYearMonthDuration;
|
|
13
|
+
exports.trimToDayTimeDuration = trimToDayTimeDuration;
|
|
14
|
+
exports.yearMonthDurationsToMonths = yearMonthDurationsToMonths;
|
|
15
|
+
exports.dayTimeDurationsToSeconds = dayTimeDurationsToSeconds;
|
|
16
|
+
exports.extractRawTimeZone = extractRawTimeZone;
|
|
17
|
+
exports.extractTimeZone = extractTimeZone;
|
|
4
18
|
// Important is to notice JS and XSD datatypes have different defaulted values
|
|
5
19
|
// | Field | Default in JS | Default in XSD_DayTime | Default in XSD_Duration |
|
|
6
20
|
// | Month | 0 | 1 | 0 |
|
|
@@ -13,21 +27,18 @@ function defaultedDayTimeDurationRepresentation(rep) {
|
|
|
13
27
|
seconds: rep.seconds ?? 0,
|
|
14
28
|
};
|
|
15
29
|
}
|
|
16
|
-
exports.defaultedDayTimeDurationRepresentation = defaultedDayTimeDurationRepresentation;
|
|
17
30
|
function defaultedYearMonthDurationRepresentation(rep) {
|
|
18
31
|
return {
|
|
19
32
|
year: rep.year ?? 0,
|
|
20
33
|
month: rep.month ?? 0,
|
|
21
34
|
};
|
|
22
35
|
}
|
|
23
|
-
exports.defaultedYearMonthDurationRepresentation = defaultedYearMonthDurationRepresentation;
|
|
24
36
|
function defaultedDurationRepresentation(rep) {
|
|
25
37
|
return {
|
|
26
38
|
...defaultedDayTimeDurationRepresentation(rep),
|
|
27
39
|
...defaultedYearMonthDurationRepresentation(rep),
|
|
28
40
|
};
|
|
29
41
|
}
|
|
30
|
-
exports.defaultedDurationRepresentation = defaultedDurationRepresentation;
|
|
31
42
|
function simplifyDurationRepresentation(rep) {
|
|
32
43
|
const temp = defaultedDurationRepresentation(rep);
|
|
33
44
|
const res = {};
|
|
@@ -66,7 +77,6 @@ function simplifyDurationRepresentation(rep) {
|
|
|
66
77
|
}
|
|
67
78
|
return res;
|
|
68
79
|
}
|
|
69
|
-
exports.simplifyDurationRepresentation = simplifyDurationRepresentation;
|
|
70
80
|
function defaultedDateTimeRepresentation(rep) {
|
|
71
81
|
return {
|
|
72
82
|
...rep,
|
|
@@ -78,7 +88,6 @@ function defaultedDateTimeRepresentation(rep) {
|
|
|
78
88
|
minutes: rep.minutes ?? 0,
|
|
79
89
|
};
|
|
80
90
|
}
|
|
81
|
-
exports.defaultedDateTimeRepresentation = defaultedDateTimeRepresentation;
|
|
82
91
|
function toDateTimeRepresentation({ date, timeZone }) {
|
|
83
92
|
return {
|
|
84
93
|
year: date.getFullYear(),
|
|
@@ -91,7 +100,6 @@ function toDateTimeRepresentation({ date, timeZone }) {
|
|
|
91
100
|
zoneMinutes: timeZone.zoneMinutes,
|
|
92
101
|
};
|
|
93
102
|
}
|
|
94
|
-
exports.toDateTimeRepresentation = toDateTimeRepresentation;
|
|
95
103
|
function negateDuration(dur) {
|
|
96
104
|
return {
|
|
97
105
|
year: dur.year === undefined ? undefined : -1 * dur.year,
|
|
@@ -102,7 +110,6 @@ function negateDuration(dur) {
|
|
|
102
110
|
seconds: dur.seconds === undefined ? undefined : -1 * dur.seconds,
|
|
103
111
|
};
|
|
104
112
|
}
|
|
105
|
-
exports.negateDuration = negateDuration;
|
|
106
113
|
function toJSDate(date) {
|
|
107
114
|
// The given hours will be assumed to be local time.
|
|
108
115
|
const res = new Date(date.year, date.month - 1, date.day, date.hours, date.minutes, Math.trunc(date.seconds), (date.seconds % 1) * 1_000);
|
|
@@ -114,7 +121,6 @@ function toJSDate(date) {
|
|
|
114
121
|
}
|
|
115
122
|
return res;
|
|
116
123
|
}
|
|
117
|
-
exports.toJSDate = toJSDate;
|
|
118
124
|
function toUTCDate(date, defaultTimezone) {
|
|
119
125
|
const localTime = toJSDate(defaultedDateTimeRepresentation(date));
|
|
120
126
|
// This date has been constructed in machine local time, now we alter it to become UTC and convert to correct timezone
|
|
@@ -125,14 +131,12 @@ function toUTCDate(date, defaultTimezone) {
|
|
|
125
131
|
const minutesCorrectionUTC = date.zoneMinutes ?? defaultTimezone.zoneMinutes;
|
|
126
132
|
return new Date(localTime.getTime() - (minutesCorrectionLocal + hourCorrectionUTC * 60 + minutesCorrectionUTC) * 60 * 1_000);
|
|
127
133
|
}
|
|
128
|
-
exports.toUTCDate = toUTCDate;
|
|
129
134
|
function trimToYearMonthDuration(dur) {
|
|
130
135
|
return {
|
|
131
136
|
year: dur.year,
|
|
132
137
|
month: dur.month,
|
|
133
138
|
};
|
|
134
139
|
}
|
|
135
|
-
exports.trimToYearMonthDuration = trimToYearMonthDuration;
|
|
136
140
|
function trimToDayTimeDuration(dur) {
|
|
137
141
|
return {
|
|
138
142
|
day: dur.day,
|
|
@@ -141,26 +145,21 @@ function trimToDayTimeDuration(dur) {
|
|
|
141
145
|
seconds: dur.seconds,
|
|
142
146
|
};
|
|
143
147
|
}
|
|
144
|
-
exports.trimToDayTimeDuration = trimToDayTimeDuration;
|
|
145
148
|
function yearMonthDurationsToMonths(dur) {
|
|
146
149
|
return dur.year * 12 + dur.month;
|
|
147
150
|
}
|
|
148
|
-
exports.yearMonthDurationsToMonths = yearMonthDurationsToMonths;
|
|
149
151
|
function dayTimeDurationsToSeconds(dur) {
|
|
150
152
|
return (((dur.day * 24) + dur.hours) * 60 + dur.minutes) * 60 + dur.seconds;
|
|
151
153
|
}
|
|
152
|
-
exports.dayTimeDurationsToSeconds = dayTimeDurationsToSeconds;
|
|
153
154
|
function extractRawTimeZone(zoneContained) {
|
|
154
155
|
const extraction = /(Z|([+-]\d\d:\d\d))?$/u.exec(zoneContained);
|
|
155
156
|
// It is safe to cast here because the empty string can always match.
|
|
156
157
|
return extraction[0];
|
|
157
158
|
}
|
|
158
|
-
exports.extractRawTimeZone = extractRawTimeZone;
|
|
159
159
|
function extractTimeZone(date) {
|
|
160
160
|
return {
|
|
161
161
|
zoneHours: date.getTimezoneOffset() / 60,
|
|
162
162
|
zoneMinutes: date.getTimezoneOffset() % 60,
|
|
163
163
|
};
|
|
164
164
|
}
|
|
165
|
-
exports.extractTimeZone = extractTimeZone;
|
|
166
165
|
//# sourceMappingURL=DateTimeHelpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeHelpers.js","sourceRoot":"","sources":["DateTimeHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IDateTimeRepresentation,\n IDayTimeDurationRepresentation,\n IDurationRepresentation,\n ITimeZoneRepresentation,\n IYearMonthDurationRepresentation,\n} from '@comunica/types';\n\n// Important is to notice JS and XSD datatypes have different defaulted values\n// | Field | Default in JS | Default in XSD_DayTime | Default in XSD_Duration |\n// | Month | 0 | 1 | 0 |\n// | Day | 1 | 1 | 0 |\n\nexport function defaultedDayTimeDurationRepresentation(rep: Partial<IDayTimeDurationRepresentation>):\nIDayTimeDurationRepresentation {\n return {\n day: rep.day ?? 0,\n hours: rep.hours ?? 0,\n minutes: rep.minutes ?? 0,\n seconds: rep.seconds ?? 0,\n };\n}\n\nexport function defaultedYearMonthDurationRepresentation(rep: Partial<IYearMonthDurationRepresentation>):\nIYearMonthDurationRepresentation {\n return {\n year: rep.year ?? 0,\n month: rep.month ?? 0,\n };\n}\n\nexport function defaultedDurationRepresentation(\n rep: Partial<IDurationRepresentation>,\n): IDurationRepresentation {\n return {\n ...defaultedDayTimeDurationRepresentation(rep),\n ...defaultedYearMonthDurationRepresentation(rep),\n };\n}\n\nexport function simplifyDurationRepresentation(rep: Partial<IDurationRepresentation>):\nPartial<IDurationRepresentation> {\n const temp = defaultedDurationRepresentation(rep);\n const res: Partial<IDurationRepresentation> = {};\n\n // Simplify year part\n const years = temp.year + Math.trunc(temp.month / 12);\n if (years) {\n res.year = years;\n temp.month %= 12;\n }\n if (temp.month) {\n res.month = temp.month;\n }\n\n // Simplify day part\n const days = temp.day + Math.trunc(temp.hours / 24) +\n Math.trunc(temp.minutes / (24 * 60)) + Math.trunc(temp.seconds / (24 * 60 * 60));\n if (days) {\n res.day = days;\n temp.hours %= 24;\n temp.minutes %= 24 * 60;\n temp.seconds %= 24 * 60 * 60;\n }\n const hours = temp.hours + Math.trunc(temp.minutes / 60) +\n Math.trunc(temp.seconds / (60 * 60));\n if (hours) {\n res.hours = hours;\n temp.minutes %= 60;\n temp.seconds %= 60 * 60;\n }\n const minutes = temp.minutes + Math.trunc(temp.seconds / 60);\n if (minutes) {\n res.minutes = minutes;\n temp.seconds %= 60;\n }\n if (temp.seconds) {\n res.seconds = temp.seconds;\n }\n return res;\n}\n\nexport function defaultedDateTimeRepresentation(rep: Partial<IDateTimeRepresentation>): IDateTimeRepresentation {\n return {\n ...rep,\n day: rep.day ?? 1,\n hours: rep.hours ?? 0,\n month: rep.month ?? 1,\n year: rep.year ?? 0,\n seconds: rep.seconds ?? 0,\n minutes: rep.minutes ?? 0,\n };\n}\n\nexport function toDateTimeRepresentation({ date, timeZone }:\n{ date: Date; timeZone: ITimeZoneRepresentation }): IDateTimeRepresentation {\n return {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n zoneHours: timeZone.zoneHours,\n zoneMinutes: timeZone.zoneMinutes,\n };\n}\n\nexport function negateDuration(dur: Partial<IDurationRepresentation>): Partial<IDurationRepresentation> {\n return {\n year: dur.year === undefined ? undefined : -1 * dur.year,\n month: dur.month === undefined ? undefined : -1 * dur.month,\n day: dur.day === undefined ? undefined : -1 * dur.day,\n hours: dur.hours === undefined ? undefined : -1 * dur.hours,\n minutes: dur.minutes === undefined ? undefined : -1 * dur.minutes,\n seconds: dur.seconds === undefined ? undefined : -1 * dur.seconds,\n };\n}\n\nexport function toJSDate(date: IDateTimeRepresentation): Date {\n // The given hours will be assumed to be local time.\n const res = new Date(\n date.year,\n date.month - 1,\n date.day,\n date.hours,\n date.minutes,\n Math.trunc(date.seconds),\n (date.seconds % 1) * 1_000,\n );\n if (date.year >= 0 && date.year < 100) {\n // Special rule of date has gone int action:\n\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#individual_date_and_time_component_values\n\n const jumpDeltaOfDate = 1_900;\n res.setFullYear(res.getFullYear() - jumpDeltaOfDate);\n }\n return res;\n}\n\nexport function toUTCDate(date: Partial<IDateTimeRepresentation>, defaultTimezone: ITimeZoneRepresentation): Date {\n const localTime = toJSDate(defaultedDateTimeRepresentation(date));\n // This date has been constructed in machine local time, now we alter it to become UTC and convert to correct timezone\n\n // Correction needed from local machine timezone to UTC\n const minutesCorrectionLocal = localTime.getTimezoneOffset();\n // Correction needed from UTC to provided timeZone\n const hourCorrectionUTC = date.zoneHours ?? defaultTimezone.zoneHours;\n const minutesCorrectionUTC = date.zoneMinutes ?? defaultTimezone.zoneMinutes;\n return new Date(\n localTime.getTime() - (minutesCorrectionLocal + hourCorrectionUTC * 60 + minutesCorrectionUTC) * 60 * 1_000,\n );\n}\n\nexport function trimToYearMonthDuration(dur: Partial<IDurationRepresentation>):\nPartial<IYearMonthDurationRepresentation> {\n return {\n year: dur.year,\n month: dur.month,\n };\n}\n\nexport function trimToDayTimeDuration(dur: Partial<IDurationRepresentation>): Partial<IDayTimeDurationRepresentation> {\n return {\n day: dur.day,\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n };\n}\n\nexport function yearMonthDurationsToMonths(dur: IYearMonthDurationRepresentation): number {\n return dur.year * 12 + dur.month;\n}\n\nexport function dayTimeDurationsToSeconds(dur: IDayTimeDurationRepresentation): number {\n return (((dur.day * 24) + dur.hours) * 60 + dur.minutes) * 60 + dur.seconds;\n}\n\nexport function extractRawTimeZone(zoneContained: string): string {\n const extraction = /(Z|([+-]\\d\\d:\\d\\d))?$/u.exec(zoneContained);\n // It is safe to cast here because the empty string can always match.\n return extraction![0];\n}\n\nexport function extractTimeZone(date: Date): ITimeZoneRepresentation {\n return {\n zoneHours: date.getTimezoneOffset() / 60,\n zoneMinutes: date.getTimezoneOffset() % 60,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DateTimeHelpers.js","sourceRoot":"","sources":["DateTimeHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IDateTimeRepresentation,\n IDayTimeDurationRepresentation,\n IDurationRepresentation,\n ITimeZoneRepresentation,\n IYearMonthDurationRepresentation,\n} from '@comunica/types';\n\n// Important is to notice JS and XSD datatypes have different defaulted values\n// | Field | Default in JS | Default in XSD_DayTime | Default in XSD_Duration |\n// | Month | 0 | 1 | 0 |\n// | Day | 1 | 1 | 0 |\n\nexport function defaultedDayTimeDurationRepresentation(rep: Partial<IDayTimeDurationRepresentation>):\nIDayTimeDurationRepresentation {\n return {\n day: rep.day ?? 0,\n hours: rep.hours ?? 0,\n minutes: rep.minutes ?? 0,\n seconds: rep.seconds ?? 0,\n };\n}\n\nexport function defaultedYearMonthDurationRepresentation(rep: Partial<IYearMonthDurationRepresentation>):\nIYearMonthDurationRepresentation {\n return {\n year: rep.year ?? 0,\n month: rep.month ?? 0,\n };\n}\n\nexport function defaultedDurationRepresentation(\n rep: Partial<IDurationRepresentation>,\n): IDurationRepresentation {\n return {\n ...defaultedDayTimeDurationRepresentation(rep),\n ...defaultedYearMonthDurationRepresentation(rep),\n };\n}\n\nexport function simplifyDurationRepresentation(rep: Partial<IDurationRepresentation>):\nPartial<IDurationRepresentation> {\n const temp = defaultedDurationRepresentation(rep);\n const res: Partial<IDurationRepresentation> = {};\n\n // Simplify year part\n const years = temp.year + Math.trunc(temp.month / 12);\n if (years) {\n res.year = years;\n temp.month %= 12;\n }\n if (temp.month) {\n res.month = temp.month;\n }\n\n // Simplify day part\n const days = temp.day + Math.trunc(temp.hours / 24) +\n Math.trunc(temp.minutes / (24 * 60)) + Math.trunc(temp.seconds / (24 * 60 * 60));\n if (days) {\n res.day = days;\n temp.hours %= 24;\n temp.minutes %= 24 * 60;\n temp.seconds %= 24 * 60 * 60;\n }\n const hours = temp.hours + Math.trunc(temp.minutes / 60) +\n Math.trunc(temp.seconds / (60 * 60));\n if (hours) {\n res.hours = hours;\n temp.minutes %= 60;\n temp.seconds %= 60 * 60;\n }\n const minutes = temp.minutes + Math.trunc(temp.seconds / 60);\n if (minutes) {\n res.minutes = minutes;\n temp.seconds %= 60;\n }\n if (temp.seconds) {\n res.seconds = temp.seconds;\n }\n return res;\n}\n\nexport function defaultedDateTimeRepresentation(rep: Partial<IDateTimeRepresentation>): IDateTimeRepresentation {\n return {\n ...rep,\n day: rep.day ?? 1,\n hours: rep.hours ?? 0,\n month: rep.month ?? 1,\n year: rep.year ?? 0,\n seconds: rep.seconds ?? 0,\n minutes: rep.minutes ?? 0,\n };\n}\n\nexport function toDateTimeRepresentation({ date, timeZone }:\n{ date: Date; timeZone: ITimeZoneRepresentation }): IDateTimeRepresentation {\n return {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n zoneHours: timeZone.zoneHours,\n zoneMinutes: timeZone.zoneMinutes,\n };\n}\n\nexport function negateDuration(dur: Partial<IDurationRepresentation>): Partial<IDurationRepresentation> {\n return {\n year: dur.year === undefined ? undefined : -1 * dur.year,\n month: dur.month === undefined ? undefined : -1 * dur.month,\n day: dur.day === undefined ? undefined : -1 * dur.day,\n hours: dur.hours === undefined ? undefined : -1 * dur.hours,\n minutes: dur.minutes === undefined ? undefined : -1 * dur.minutes,\n seconds: dur.seconds === undefined ? undefined : -1 * dur.seconds,\n };\n}\n\nexport function toJSDate(date: IDateTimeRepresentation): Date {\n // The given hours will be assumed to be local time.\n const res = new Date(\n date.year,\n date.month - 1,\n date.day,\n date.hours,\n date.minutes,\n Math.trunc(date.seconds),\n (date.seconds % 1) * 1_000,\n );\n if (date.year >= 0 && date.year < 100) {\n // Special rule of date has gone int action:\n\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#individual_date_and_time_component_values\n\n const jumpDeltaOfDate = 1_900;\n res.setFullYear(res.getFullYear() - jumpDeltaOfDate);\n }\n return res;\n}\n\nexport function toUTCDate(date: Partial<IDateTimeRepresentation>, defaultTimezone: ITimeZoneRepresentation): Date {\n const localTime = toJSDate(defaultedDateTimeRepresentation(date));\n // This date has been constructed in machine local time, now we alter it to become UTC and convert to correct timezone\n\n // Correction needed from local machine timezone to UTC\n const minutesCorrectionLocal = localTime.getTimezoneOffset();\n // Correction needed from UTC to provided timeZone\n const hourCorrectionUTC = date.zoneHours ?? defaultTimezone.zoneHours;\n const minutesCorrectionUTC = date.zoneMinutes ?? defaultTimezone.zoneMinutes;\n return new Date(\n localTime.getTime() - (minutesCorrectionLocal + hourCorrectionUTC * 60 + minutesCorrectionUTC) * 60 * 1_000,\n );\n}\n\nexport function trimToYearMonthDuration(dur: Partial<IDurationRepresentation>):\nPartial<IYearMonthDurationRepresentation> {\n return {\n year: dur.year,\n month: dur.month,\n };\n}\n\nexport function trimToDayTimeDuration(dur: Partial<IDurationRepresentation>): Partial<IDayTimeDurationRepresentation> {\n return {\n day: dur.day,\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n };\n}\n\nexport function yearMonthDurationsToMonths(dur: IYearMonthDurationRepresentation): number {\n return dur.year * 12 + dur.month;\n}\n\nexport function dayTimeDurationsToSeconds(dur: IDayTimeDurationRepresentation): number {\n return (((dur.day * 24) + dur.hours) * 60 + dur.minutes) * 60 + dur.seconds;\n}\n\nexport function extractRawTimeZone(zoneContained: string): string {\n const extraction = /(Z|([+-]\\d\\d:\\d\\d))?$/u.exec(zoneContained);\n // It is safe to cast here because the empty string can always match.\n return extraction![0];\n}\n\nexport function extractTimeZone(date: Date): ITimeZoneRepresentation {\n return {\n zoneHours: date.getTimezoneOffset() / 60,\n zoneMinutes: date.getTimezoneOffset() % 60,\n };\n}\n"]}
|
package/lib/util/Errors.d.ts
CHANGED
|
@@ -99,6 +99,11 @@ export declare class IncompatibleLanguageOperation extends ExpressionError {
|
|
|
99
99
|
arg2: E.LangStringLiteral;
|
|
100
100
|
constructor(arg1: E.LangStringLiteral, arg2: E.LangStringLiteral);
|
|
101
101
|
}
|
|
102
|
+
export declare class IncompatibleDirectionalLanguageOperation extends ExpressionError {
|
|
103
|
+
arg1: E.DirLangStringLiteral;
|
|
104
|
+
arg2: E.DirLangStringLiteral;
|
|
105
|
+
constructor(arg1: E.DirLangStringLiteral, arg2: E.DirLangStringLiteral);
|
|
106
|
+
}
|
|
102
107
|
export declare class EmptyAggregateError extends ExpressionError {
|
|
103
108
|
constructor();
|
|
104
109
|
}
|
package/lib/util/Errors.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NoAggregator = exports.ExtensionFunctionError = exports.InvalidExpression = exports.InvalidArity = exports.UnexpectedError = exports.ParseError = exports.EmptyAggregateError = exports.IncompatibleLanguageOperation = exports.InvalidTimezoneCall = exports.CastError = exports.InvalidArgumentTypes = exports.InError = exports.CoalesceError = exports.RDFEqualTypeError = exports.EBVCoercionError = exports.UnboundVariableError = exports.InvalidLexicalForm = exports.
|
|
3
|
+
exports.NoAggregator = exports.ExtensionFunctionError = exports.InvalidExpression = exports.InvalidArity = exports.UnexpectedError = exports.ParseError = exports.EmptyAggregateError = exports.IncompatibleDirectionalLanguageOperation = exports.IncompatibleLanguageOperation = exports.InvalidTimezoneCall = exports.CastError = exports.InvalidArgumentTypes = exports.InError = exports.CoalesceError = exports.RDFEqualTypeError = exports.EBVCoercionError = exports.UnboundVariableError = exports.InvalidLexicalForm = exports.ExpressionError = void 0;
|
|
4
|
+
exports.isExpressionError = isExpressionError;
|
|
4
5
|
/**
|
|
5
6
|
* This class of error will be thrown when an expression errors.
|
|
6
7
|
* Various reasons this could happen are:
|
|
@@ -27,13 +28,13 @@ exports.ExpressionError = ExpressionError;
|
|
|
27
28
|
function isExpressionError(error) {
|
|
28
29
|
return error instanceof ExpressionError;
|
|
29
30
|
}
|
|
30
|
-
exports.isExpressionError = isExpressionError;
|
|
31
31
|
/**
|
|
32
32
|
* A literal has an invalid lexical form for the datatype it is accompanied by.
|
|
33
33
|
* This error is only thrown when the term is as function argument that requires
|
|
34
34
|
* a valid lexical form.
|
|
35
35
|
*/
|
|
36
36
|
class InvalidLexicalForm extends ExpressionError {
|
|
37
|
+
arg;
|
|
37
38
|
constructor(arg) {
|
|
38
39
|
super(`Invalid lexical form '${pp(arg)}'`);
|
|
39
40
|
this.arg = arg;
|
|
@@ -44,6 +45,8 @@ exports.InvalidLexicalForm = InvalidLexicalForm;
|
|
|
44
45
|
* A variable in the expression was not bound.
|
|
45
46
|
*/
|
|
46
47
|
class UnboundVariableError extends ExpressionError {
|
|
48
|
+
variable;
|
|
49
|
+
bindings;
|
|
47
50
|
constructor(variable, bindings) {
|
|
48
51
|
super(`Unbound variable '${pp(variable)}'`);
|
|
49
52
|
this.variable = variable;
|
|
@@ -58,6 +61,7 @@ exports.UnboundVariableError = UnboundVariableError;
|
|
|
58
61
|
* on EBVs.
|
|
59
62
|
*/
|
|
60
63
|
class EBVCoercionError extends ExpressionError {
|
|
64
|
+
arg;
|
|
61
65
|
constructor(arg) {
|
|
62
66
|
super(`Cannot coerce term to EBV '${pp(arg)}'`);
|
|
63
67
|
this.arg = arg;
|
|
@@ -70,6 +74,7 @@ exports.EBVCoercionError = EBVCoercionError;
|
|
|
70
74
|
* See {@link https://www.w3.org/TR/sparql11-query/#func-RDFterm-equal | term equality spec}.
|
|
71
75
|
*/
|
|
72
76
|
class RDFEqualTypeError extends ExpressionError {
|
|
77
|
+
args;
|
|
73
78
|
constructor(args) {
|
|
74
79
|
super('Equality test for literals with unsupported datatypes');
|
|
75
80
|
this.args = args;
|
|
@@ -80,6 +85,7 @@ exports.RDFEqualTypeError = RDFEqualTypeError;
|
|
|
80
85
|
* All the expressions in a COALESCE call threw errors.
|
|
81
86
|
*/
|
|
82
87
|
class CoalesceError extends ExpressionError {
|
|
88
|
+
errors;
|
|
83
89
|
constructor(errors) {
|
|
84
90
|
super('All COALESCE arguments threw errors');
|
|
85
91
|
this.errors = errors;
|
|
@@ -90,6 +96,7 @@ exports.CoalesceError = CoalesceError;
|
|
|
90
96
|
* No arguments to an IN call where equal, and at least one threw an error.
|
|
91
97
|
*/
|
|
92
98
|
class InError extends ExpressionError {
|
|
99
|
+
errors;
|
|
93
100
|
constructor(errors) {
|
|
94
101
|
super(`Some argument to IN errorred and none where equal. ${errors.map(err => `(${err.toString()}) `).join('and ')}`);
|
|
95
102
|
this.errors = errors;
|
|
@@ -100,6 +107,8 @@ exports.InError = InError;
|
|
|
100
107
|
* Literals were passed to an operator that doesn't support their datatypes.
|
|
101
108
|
*/
|
|
102
109
|
class InvalidArgumentTypes extends ExpressionError {
|
|
110
|
+
args;
|
|
111
|
+
op;
|
|
103
112
|
constructor(args, op) {
|
|
104
113
|
super(`Argument types not valid for operator: '${pp(op)}' with '${pp(args)}`);
|
|
105
114
|
this.args = args;
|
|
@@ -111,6 +120,7 @@ exports.InvalidArgumentTypes = InvalidArgumentTypes;
|
|
|
111
120
|
* An invalid typecast happened.
|
|
112
121
|
*/
|
|
113
122
|
class CastError extends ExpressionError {
|
|
123
|
+
arg;
|
|
114
124
|
constructor(arg, cast) {
|
|
115
125
|
super(`Invalid cast: '${pp(arg)}' to '${pp(cast)}'`);
|
|
116
126
|
this.arg = arg;
|
|
@@ -118,6 +128,7 @@ class CastError extends ExpressionError {
|
|
|
118
128
|
}
|
|
119
129
|
exports.CastError = CastError;
|
|
120
130
|
class InvalidTimezoneCall extends ExpressionError {
|
|
131
|
+
dateString;
|
|
121
132
|
constructor(dateString) {
|
|
122
133
|
super(`TIMEZONE call on ${dateString} which has no timezone`);
|
|
123
134
|
this.dateString = dateString;
|
|
@@ -125,6 +136,8 @@ class InvalidTimezoneCall extends ExpressionError {
|
|
|
125
136
|
}
|
|
126
137
|
exports.InvalidTimezoneCall = InvalidTimezoneCall;
|
|
127
138
|
class IncompatibleLanguageOperation extends ExpressionError {
|
|
139
|
+
arg1;
|
|
140
|
+
arg2;
|
|
128
141
|
constructor(arg1, arg2) {
|
|
129
142
|
super(`Operation on incompatible language literals '${pp(arg1)}' and '${pp(arg2)}'`);
|
|
130
143
|
this.arg1 = arg1;
|
|
@@ -132,6 +145,16 @@ class IncompatibleLanguageOperation extends ExpressionError {
|
|
|
132
145
|
}
|
|
133
146
|
}
|
|
134
147
|
exports.IncompatibleLanguageOperation = IncompatibleLanguageOperation;
|
|
148
|
+
class IncompatibleDirectionalLanguageOperation extends ExpressionError {
|
|
149
|
+
arg1;
|
|
150
|
+
arg2;
|
|
151
|
+
constructor(arg1, arg2) {
|
|
152
|
+
super(`Operation on incompatible directional language literals '${pp(arg1)}' and '${pp(arg2)}'`);
|
|
153
|
+
this.arg1 = arg1;
|
|
154
|
+
this.arg2 = arg2;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.IncompatibleDirectionalLanguageOperation = IncompatibleDirectionalLanguageOperation;
|
|
135
158
|
class EmptyAggregateError extends ExpressionError {
|
|
136
159
|
constructor() {
|
|
137
160
|
super('Empty aggregate expression');
|
|
@@ -151,6 +174,7 @@ exports.ParseError = ParseError;
|
|
|
151
174
|
* mistake has been made.
|
|
152
175
|
*/
|
|
153
176
|
class UnexpectedError extends Error {
|
|
177
|
+
payload;
|
|
154
178
|
constructor(message, payload) {
|
|
155
179
|
super(`Programmer Error '${message}'`);
|
|
156
180
|
this.payload = payload;
|
|
@@ -158,6 +182,8 @@ class UnexpectedError extends Error {
|
|
|
158
182
|
}
|
|
159
183
|
exports.UnexpectedError = UnexpectedError;
|
|
160
184
|
class InvalidArity extends Error {
|
|
185
|
+
args;
|
|
186
|
+
op;
|
|
161
187
|
constructor(args, op) {
|
|
162
188
|
super(`The number of args does not match the arity of the operator '${pp(op)}'.`);
|
|
163
189
|
this.args = args;
|
package/lib/util/Errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["Errors.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["Errors.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Expression } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type * as E from '../expressions';\nimport type * as C from './Consts';\n\n/**\n * This class of error will be thrown when an expression errors.\n * Various reasons this could happen are:\n * - invalid types for the given operator\n * - unbound variables\n * - invalid lexical forms\n * - ...\n *\n * The distinction is made so that one can catch this specific type\n * and handle it accordingly to the SPARQL spec (relevant for e.g. FILTER, EXTEND),\n * while others (programming errors) can be re-thrown.\n *\n * @see isExpressionError\n */\nexport class ExpressionError extends Error {}\n\n/**\n * Checks whether a given error is an {@link ExpressionError}.\n * Also useful for mocking in tests for covering all branches.\n *\n * @see ExpressionError\n */\nexport function isExpressionError(error: Error): boolean {\n return error instanceof ExpressionError;\n}\n\n/**\n * A literal has an invalid lexical form for the datatype it is accompanied by.\n * This error is only thrown when the term is as function argument that requires\n * a valid lexical form.\n */\nexport class InvalidLexicalForm extends ExpressionError {\n public constructor(public arg: RDF.Term) {\n super(`Invalid lexical form '${pp(arg)}'`);\n }\n}\n\n/**\n * A variable in the expression was not bound.\n */\nexport class UnboundVariableError extends ExpressionError {\n public constructor(public variable: string, public bindings: RDF.Bindings) {\n super(`Unbound variable '${pp(variable)}'`);\n }\n}\n\n/**\n * An invalid term was being coerced to an Effective Boolean Value.\n *\n * See the {@link https://www.w3.org/TR/sparql11-query/#ebv | SPARQL docs}\n * on EBVs.\n */\nexport class EBVCoercionError extends ExpressionError {\n public constructor(public arg: E.Term) {\n super(`Cannot coerce term to EBV '${pp(arg)}'`);\n }\n}\n\n/**\n * An equality test was done on literals with unsupported datatypes.\n *\n * See {@link https://www.w3.org/TR/sparql11-query/#func-RDFterm-equal | term equality spec}.\n */\nexport class RDFEqualTypeError extends ExpressionError {\n public constructor(public args: Expression[]) {\n super('Equality test for literals with unsupported datatypes');\n }\n}\n\n/**\n * All the expressions in a COALESCE call threw errors.\n */\nexport class CoalesceError extends ExpressionError {\n public constructor(public errors: Error[]) {\n super('All COALESCE arguments threw errors');\n }\n}\n\n/**\n * No arguments to an IN call where equal, and at least one threw an error.\n */\nexport class InError extends ExpressionError {\n public constructor(public errors: (Error | false)[]) {\n super(\n `Some argument to IN errorred and none where equal. ${\n\n errors.map(err => `(${err.toString()}) `).join('and ')}`,\n );\n }\n}\n\n/**\n * Literals were passed to an operator that doesn't support their datatypes.\n */\nexport class InvalidArgumentTypes extends ExpressionError {\n public constructor(public args: Expression[], public op: C.GeneralOperator) {\n super(`Argument types not valid for operator: '${pp(op)}' with '${pp(args)}`);\n }\n}\n\n/**\n * An invalid typecast happened.\n */\nexport class CastError<T> extends ExpressionError {\n public constructor(public arg: T, cast: C.TypeURL) {\n super(`Invalid cast: '${pp(arg)}' to '${pp(cast)}'`);\n }\n}\n\nexport class InvalidTimezoneCall extends ExpressionError {\n public constructor(public dateString: string) {\n super(`TIMEZONE call on ${dateString} which has no timezone`);\n }\n}\n\nexport class IncompatibleLanguageOperation extends ExpressionError {\n public constructor(public arg1: E.LangStringLiteral, public arg2: E.LangStringLiteral) {\n super(`Operation on incompatible language literals '${pp(arg1)}' and '${pp(arg2)}'`);\n }\n}\n\nexport class IncompatibleDirectionalLanguageOperation extends ExpressionError {\n public constructor(public arg1: E.DirLangStringLiteral, public arg2: E.DirLangStringLiteral) {\n super(`Operation on incompatible directional language literals '${pp(arg1)}' and '${pp(arg2)}'`);\n }\n}\n\nexport class EmptyAggregateError extends ExpressionError {\n public constructor() {\n super('Empty aggregate expression');\n }\n}\n\nexport class ParseError extends ExpressionError {\n public constructor(str: string, type: string) {\n super(`Failed to parse \"${str}\" as ${type}.`);\n }\n}\n\n// Non Expression Errors ------------------------------------------------------\n\n/**\n * An error that arises when we detect a 'should-be-impossible' state.\n * Given that this error is thrown, it clearly wasn't impossible, and some\n * mistake has been made.\n */\nexport class UnexpectedError<T> extends Error {\n public constructor(message: string, public payload?: T) {\n super(`Programmer Error '${message}'`);\n }\n}\n\nexport class InvalidArity extends Error {\n public constructor(public args: Expression[], public op: C.GeneralOperator) {\n super(`The number of args does not match the arity of the operator '${pp(op)}'.`);\n }\n}\n\nexport class InvalidExpression<T> extends Error {\n public constructor(expr: T) {\n super(`Invalid SPARQL Expression '${pp(expr)}'`);\n }\n}\n\nexport class ExtensionFunctionError extends Error {\n public constructor(name: string, functionError: unknown) {\n if (functionError instanceof Error) {\n super(`Error thrown in ${name}: ${functionError.message}${functionError.stack ? `\\n${functionError.stack}` : ''}`);\n } else {\n super(`Error thrown in ${name}`);\n }\n }\n}\n\nexport class NoAggregator extends Error {\n public constructor(name?: string) {\n super(`Aggregate expression ${pp(name)} found, but no aggregate hook provided.`);\n }\n}\n\nfunction pp<T>(object: T): string {\n return JSON.stringify(object);\n}\n"]}
|
package/lib/util/Parsing.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { IDateRepresentation, IDateTimeRepresentation, IDayTimeDurationRepresentation, IDurationRepresentation, ITimeRepresentation, IYearMonthDurationRepresentation } from '@comunica/types';
|
|
2
2
|
/**
|
|
3
|
-
* TODO: Fix decently
|
|
4
3
|
* Parses float datatypes (double, float).
|
|
5
4
|
*
|
|
6
5
|
* All invalid lexical values return undefined.
|
package/lib/util/Parsing.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// TODO: Find a library for this, because this is basically an xsd datatypes parser
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
3
|
+
exports.parseXSDFloat = parseXSDFloat;
|
|
4
|
+
exports.parseXSDDecimal = parseXSDDecimal;
|
|
5
|
+
exports.parseDateTime = parseDateTime;
|
|
6
|
+
exports.parseDate = parseDate;
|
|
7
|
+
exports.parseTime = parseTime;
|
|
8
|
+
exports.parseDuration = parseDuration;
|
|
9
|
+
exports.parseYearMonthDuration = parseYearMonthDuration;
|
|
10
|
+
exports.parseDayTimeDuration = parseDayTimeDuration;
|
|
5
11
|
const DateTimeHelpers_1 = require("./DateTimeHelpers");
|
|
6
12
|
const Errors_1 = require("./Errors");
|
|
7
13
|
const SpecAlgos_1 = require("./SpecAlgos");
|
|
8
14
|
/**
|
|
9
|
-
* TODO: Fix decently
|
|
10
15
|
* Parses float datatypes (double, float).
|
|
11
16
|
*
|
|
12
17
|
* All invalid lexical values return undefined.
|
|
@@ -29,7 +34,6 @@ function parseXSDFloat(value) {
|
|
|
29
34
|
}
|
|
30
35
|
return numb;
|
|
31
36
|
}
|
|
32
|
-
exports.parseXSDFloat = parseXSDFloat;
|
|
33
37
|
/**
|
|
34
38
|
* Parses decimal datatypes (decimal, int, byte, nonPositiveInteger, etc...).
|
|
35
39
|
*
|
|
@@ -42,7 +46,6 @@ function parseXSDDecimal(value) {
|
|
|
42
46
|
const numb = Number(value);
|
|
43
47
|
return Number.isNaN(numb) ? undefined : numb;
|
|
44
48
|
}
|
|
45
|
-
exports.parseXSDDecimal = parseXSDDecimal;
|
|
46
49
|
function parseDateTime(dateTimeStr) {
|
|
47
50
|
// https://www.w3.org/TR/xmlschema-2/#dateTime
|
|
48
51
|
const [date, time] = dateTimeStr.split('T');
|
|
@@ -51,7 +54,6 @@ function parseDateTime(dateTimeStr) {
|
|
|
51
54
|
}
|
|
52
55
|
return { ...parseDate(date), ...__parseTime(time) };
|
|
53
56
|
}
|
|
54
|
-
exports.parseDateTime = parseDateTime;
|
|
55
57
|
function parseTimeZone(timeZoneStr) {
|
|
56
58
|
// https://www.w3.org/TR/xmlschema-2/#dateTime-timezones
|
|
57
59
|
if (timeZoneStr === '') {
|
|
@@ -86,7 +88,6 @@ function parseDate(dateStr) {
|
|
|
86
88
|
}
|
|
87
89
|
return res;
|
|
88
90
|
}
|
|
89
|
-
exports.parseDate = parseDate;
|
|
90
91
|
function __parseTime(timeStr) {
|
|
91
92
|
// https://www.w3.org/TR/xmlschema-2/#time-lexical-repr
|
|
92
93
|
const formatted = timeStr.replaceAll(/^(\d\d):(\d\d):(\d\d(\.\d+)?)(Z|([+-]\d\d:\d\d))?$/gu, '$1!$2!$3!$5');
|
|
@@ -115,7 +116,6 @@ function parseTime(timeStr) {
|
|
|
115
116
|
res.hours %= 24;
|
|
116
117
|
return res;
|
|
117
118
|
}
|
|
118
|
-
exports.parseTime = parseTime;
|
|
119
119
|
function parseDuration(durationStr) {
|
|
120
120
|
// https://www.w3.org/TR/xmlschema-2/#duration-lexical-repr
|
|
121
121
|
const [dayNotation, timeNotation] = durationStr.split('T');
|
|
@@ -146,7 +146,6 @@ function parseDuration(durationStr) {
|
|
|
146
146
|
seconds: duration[6] ? sign * Number(duration[6]) : undefined,
|
|
147
147
|
});
|
|
148
148
|
}
|
|
149
|
-
exports.parseDuration = parseDuration;
|
|
150
149
|
function parseYearMonthDuration(durationStr) {
|
|
151
150
|
const res = parseDuration(durationStr);
|
|
152
151
|
if (['hours', 'minutes', 'seconds', 'day'].some(key => Boolean(res[key]))) {
|
|
@@ -154,7 +153,6 @@ function parseYearMonthDuration(durationStr) {
|
|
|
154
153
|
}
|
|
155
154
|
return res;
|
|
156
155
|
}
|
|
157
|
-
exports.parseYearMonthDuration = parseYearMonthDuration;
|
|
158
156
|
function parseDayTimeDuration(durationStr) {
|
|
159
157
|
const res = parseDuration(durationStr);
|
|
160
158
|
if (['year', 'month'].some(key => Boolean(res[key]))) {
|
|
@@ -162,5 +160,4 @@ function parseDayTimeDuration(durationStr) {
|
|
|
162
160
|
}
|
|
163
161
|
return res;
|
|
164
162
|
}
|
|
165
|
-
exports.parseDayTimeDuration = parseDayTimeDuration;
|
|
166
163
|
//# sourceMappingURL=Parsing.js.map
|
package/lib/util/Parsing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Parsing.js","sourceRoot":"","sources":["Parsing.ts"],"names":[],"mappings":"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","sourcesContent":["// TODO: Find a library for this, because this is basically an xsd datatypes parser\n\nimport type {\n IDateRepresentation,\n IDateTimeRepresentation,\n IDayTimeDurationRepresentation,\n IDurationRepresentation,\n ITimeRepresentation,\n ITimeZoneRepresentation,\n IYearMonthDurationRepresentation,\n} from '@comunica/types';\nimport { simplifyDurationRepresentation } from './DateTimeHelpers';\nimport { ParseError } from './Errors';\nimport { maximumDayInMonthFor } from './SpecAlgos';\n\n/**\n * TODO: Fix decently\n * Parses float datatypes (double, float).\n *\n * All invalid lexical values return undefined.\n *\n * @param value the string to interpret as a number\n */\nexport function parseXSDFloat(value: string): number | undefined {\n const numb = Number(value);\n if (Number.isNaN(numb)) {\n if (value === 'NaN') {\n return Number.NaN;\n }\n if (value === 'INF' || value === '+INF') {\n return Number.POSITIVE_INFINITY;\n }\n if (value === '-INF') {\n return Number.NEGATIVE_INFINITY;\n }\n return undefined;\n }\n return numb;\n}\n\n/**\n * Parses decimal datatypes (decimal, int, byte, nonPositiveInteger, etc...).\n *\n * All other values, including NaN, INF, and floating point numbers all\n * return undefined;\n *\n * @param value the string to interpret as a number\n */\nexport function parseXSDDecimal(value: string): number | undefined {\n const numb = Number(value);\n return Number.isNaN(numb) ? undefined : numb;\n}\n\nexport function parseDateTime(dateTimeStr: string): IDateTimeRepresentation {\n // https://www.w3.org/TR/xmlschema-2/#dateTime\n const [ date, time ] = dateTimeStr.split('T');\n if (time === undefined) {\n throw new ParseError(dateTimeStr, 'dateTime');\n }\n return { ...parseDate(date), ...__parseTime(time) };\n}\n\nfunction parseTimeZone(timeZoneStr: string): Partial<ITimeZoneRepresentation> {\n // https://www.w3.org/TR/xmlschema-2/#dateTime-timezones\n if (timeZoneStr === '') {\n return { zoneHours: undefined, zoneMinutes: undefined };\n }\n if (timeZoneStr === 'Z') {\n return { zoneHours: 0, zoneMinutes: 0 };\n }\n const timeZoneStrings = timeZoneStr.replaceAll(/^([+|-])(\\d\\d):(\\d\\d)$/gu, '$11!$2!$3').split('!');\n const timeZone = timeZoneStrings.map(Number);\n return {\n zoneHours: timeZone[0] * timeZone[1],\n zoneMinutes: timeZone[0] * timeZone[2],\n };\n}\n\nexport function parseDate(dateStr: string): IDateRepresentation {\n // https://www.w3.org/TR/xmlschema-2/#date-lexical-representation\n const formatted = dateStr.replaceAll(\n /^(-)?([123456789]*\\d{4})-(\\d\\d)-(\\d\\d)(Z|([+-]\\d\\d:\\d\\d))?$/gu,\n '$11!$2!$3!$4!$5',\n );\n if (formatted === dateStr) {\n throw new ParseError(dateStr, 'date');\n }\n const dateStrings = formatted.split('!');\n const date = dateStrings.slice(0, -1).map(Number);\n\n const res = {\n year: date[0] * date[1],\n month: date[2],\n day: date[3],\n ...parseTimeZone(dateStrings[4]),\n };\n if (!(res.month >= 1 && res.month <= 12) || !(res.day >= 1 && res.day <= maximumDayInMonthFor(res.year, res.month))) {\n throw new ParseError(dateStr, 'date');\n }\n return res;\n}\n\nfunction __parseTime(timeStr: string): ITimeRepresentation {\n // https://www.w3.org/TR/xmlschema-2/#time-lexical-repr\n const formatted = timeStr.replaceAll(/^(\\d\\d):(\\d\\d):(\\d\\d(\\.\\d+)?)(Z|([+-]\\d\\d:\\d\\d))?$/gu, '$1!$2!$3!$5');\n if (formatted === timeStr) {\n throw new ParseError(timeStr, 'time');\n }\n const timeStrings = formatted.split('!');\n const time = timeStrings.slice(0, -1).map(Number);\n\n const res = {\n hours: time[0],\n minutes: time[1],\n seconds: time[2],\n ...parseTimeZone(timeStrings[3]),\n };\n\n if (res.seconds >= 60 || res.minutes >= 60 || res.hours > 24 ||\n (res.hours === 24 && (res.minutes !== 0 || res.seconds !== 0))) {\n throw new ParseError(timeStr, 'time');\n }\n return res;\n}\n\n// We make a separation in internal and external since dateTime will have hour-date rollover,\n// but time just does modulo the time.\nexport function parseTime(timeStr: string): ITimeRepresentation {\n // https://www.w3.org/TR/xmlschema-2/#time-lexical-repr\n const res = __parseTime(timeStr);\n res.hours %= 24;\n return res;\n}\n\nexport function parseDuration(durationStr: string): Partial<IDurationRepresentation> {\n // https://www.w3.org/TR/xmlschema-2/#duration-lexical-repr\n const [ dayNotation, timeNotation ] = durationStr.split('T');\n\n // Handle date part\n const formattedDayDur = dayNotation.replaceAll(/^(-)?P(\\d+Y)?(\\d+M)?(\\d+D)?$/gu, '$11S!$2!$3!$4');\n if (formattedDayDur === dayNotation) {\n throw new ParseError(durationStr, 'duration');\n }\n\n const durationStrings = formattedDayDur.split('!');\n if (timeNotation !== undefined) {\n const formattedTimeDur = timeNotation.replaceAll(/^(\\d+H)?(\\d+M)?(\\d+(\\.\\d+)?S)?$/gu, '$1!$2!$3');\n\n if (timeNotation === '' || timeNotation === formattedTimeDur) {\n throw new ParseError(durationStr, 'duration');\n }\n durationStrings.push(...formattedTimeDur.split('!'));\n }\n const duration = durationStrings.map(str => str.slice(0, -1));\n if (!duration.slice(1).some(Boolean)) {\n throw new ParseError(durationStr, 'duration');\n }\n\n const sign = <-1 | 1> Number(duration[0]);\n return simplifyDurationRepresentation({\n year: duration[1] ? sign * Number(duration[1]) : undefined,\n month: duration[2] ? sign * Number(duration[2]) : undefined,\n day: duration[3] ? sign * Number(duration[3]) : undefined,\n hours: duration[4] ? sign * Number(duration[4]) : undefined,\n minutes: duration[5] ? sign * Number(duration[5]) : undefined,\n seconds: duration[6] ? sign * Number(duration[6]) : undefined,\n });\n}\n\nexport function parseYearMonthDuration(durationStr: string): Partial<IYearMonthDurationRepresentation> {\n const res = parseDuration(durationStr);\n if ([ 'hours', 'minutes', 'seconds', 'day' ].some(key => Boolean((<any> res)[key]))) {\n throw new ParseError(durationStr, 'yearMonthDuration');\n }\n return res;\n}\n\nexport function parseDayTimeDuration(durationStr: string): Partial<IDayTimeDurationRepresentation> {\n const res = parseDuration(durationStr);\n if ([ 'year', 'month' ].some(key => Boolean((<any> res)[key]))) {\n throw new ParseError(durationStr, 'dayTimeDuration');\n }\n return res;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Parsing.js","sourceRoot":"","sources":["Parsing.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IDateRepresentation,\n IDateTimeRepresentation,\n IDayTimeDurationRepresentation,\n IDurationRepresentation,\n ITimeRepresentation,\n ITimeZoneRepresentation,\n IYearMonthDurationRepresentation,\n} from '@comunica/types';\nimport { simplifyDurationRepresentation } from './DateTimeHelpers';\nimport { ParseError } from './Errors';\nimport { maximumDayInMonthFor } from './SpecAlgos';\n\n/**\n * Parses float datatypes (double, float).\n *\n * All invalid lexical values return undefined.\n *\n * @param value the string to interpret as a number\n */\nexport function parseXSDFloat(value: string): number | undefined {\n const numb = Number(value);\n if (Number.isNaN(numb)) {\n if (value === 'NaN') {\n return Number.NaN;\n }\n if (value === 'INF' || value === '+INF') {\n return Number.POSITIVE_INFINITY;\n }\n if (value === '-INF') {\n return Number.NEGATIVE_INFINITY;\n }\n return undefined;\n }\n return numb;\n}\n\n/**\n * Parses decimal datatypes (decimal, int, byte, nonPositiveInteger, etc...).\n *\n * All other values, including NaN, INF, and floating point numbers all\n * return undefined;\n *\n * @param value the string to interpret as a number\n */\nexport function parseXSDDecimal(value: string): number | undefined {\n const numb = Number(value);\n return Number.isNaN(numb) ? undefined : numb;\n}\n\nexport function parseDateTime(dateTimeStr: string): IDateTimeRepresentation {\n // https://www.w3.org/TR/xmlschema-2/#dateTime\n const [ date, time ] = dateTimeStr.split('T');\n if (time === undefined) {\n throw new ParseError(dateTimeStr, 'dateTime');\n }\n return { ...parseDate(date), ...__parseTime(time) };\n}\n\nfunction parseTimeZone(timeZoneStr: string): Partial<ITimeZoneRepresentation> {\n // https://www.w3.org/TR/xmlschema-2/#dateTime-timezones\n if (timeZoneStr === '') {\n return { zoneHours: undefined, zoneMinutes: undefined };\n }\n if (timeZoneStr === 'Z') {\n return { zoneHours: 0, zoneMinutes: 0 };\n }\n const timeZoneStrings = timeZoneStr.replaceAll(/^([+|-])(\\d\\d):(\\d\\d)$/gu, '$11!$2!$3').split('!');\n const timeZone = timeZoneStrings.map(Number);\n return {\n zoneHours: timeZone[0] * timeZone[1],\n zoneMinutes: timeZone[0] * timeZone[2],\n };\n}\n\nexport function parseDate(dateStr: string): IDateRepresentation {\n // https://www.w3.org/TR/xmlschema-2/#date-lexical-representation\n const formatted = dateStr.replaceAll(\n /^(-)?([123456789]*\\d{4})-(\\d\\d)-(\\d\\d)(Z|([+-]\\d\\d:\\d\\d))?$/gu,\n '$11!$2!$3!$4!$5',\n );\n if (formatted === dateStr) {\n throw new ParseError(dateStr, 'date');\n }\n const dateStrings = formatted.split('!');\n const date = dateStrings.slice(0, -1).map(Number);\n\n const res = {\n year: date[0] * date[1],\n month: date[2],\n day: date[3],\n ...parseTimeZone(dateStrings[4]),\n };\n if (!(res.month >= 1 && res.month <= 12) || !(res.day >= 1 && res.day <= maximumDayInMonthFor(res.year, res.month))) {\n throw new ParseError(dateStr, 'date');\n }\n return res;\n}\n\nfunction __parseTime(timeStr: string): ITimeRepresentation {\n // https://www.w3.org/TR/xmlschema-2/#time-lexical-repr\n const formatted = timeStr.replaceAll(/^(\\d\\d):(\\d\\d):(\\d\\d(\\.\\d+)?)(Z|([+-]\\d\\d:\\d\\d))?$/gu, '$1!$2!$3!$5');\n if (formatted === timeStr) {\n throw new ParseError(timeStr, 'time');\n }\n const timeStrings = formatted.split('!');\n const time = timeStrings.slice(0, -1).map(Number);\n\n const res = {\n hours: time[0],\n minutes: time[1],\n seconds: time[2],\n ...parseTimeZone(timeStrings[3]),\n };\n\n if (res.seconds >= 60 || res.minutes >= 60 || res.hours > 24 ||\n (res.hours === 24 && (res.minutes !== 0 || res.seconds !== 0))) {\n throw new ParseError(timeStr, 'time');\n }\n return res;\n}\n\n// We make a separation in internal and external since dateTime will have hour-date rollover,\n// but time just does modulo the time.\nexport function parseTime(timeStr: string): ITimeRepresentation {\n // https://www.w3.org/TR/xmlschema-2/#time-lexical-repr\n const res = __parseTime(timeStr);\n res.hours %= 24;\n return res;\n}\n\nexport function parseDuration(durationStr: string): Partial<IDurationRepresentation> {\n // https://www.w3.org/TR/xmlschema-2/#duration-lexical-repr\n const [ dayNotation, timeNotation ] = durationStr.split('T');\n\n // Handle date part\n const formattedDayDur = dayNotation.replaceAll(/^(-)?P(\\d+Y)?(\\d+M)?(\\d+D)?$/gu, '$11S!$2!$3!$4');\n if (formattedDayDur === dayNotation) {\n throw new ParseError(durationStr, 'duration');\n }\n\n const durationStrings = formattedDayDur.split('!');\n if (timeNotation !== undefined) {\n const formattedTimeDur = timeNotation.replaceAll(/^(\\d+H)?(\\d+M)?(\\d+(\\.\\d+)?S)?$/gu, '$1!$2!$3');\n\n if (timeNotation === '' || timeNotation === formattedTimeDur) {\n throw new ParseError(durationStr, 'duration');\n }\n durationStrings.push(...formattedTimeDur.split('!'));\n }\n const duration = durationStrings.map(str => str.slice(0, -1));\n if (!duration.slice(1).some(Boolean)) {\n throw new ParseError(durationStr, 'duration');\n }\n\n const sign = <-1 | 1> Number(duration[0]);\n return simplifyDurationRepresentation({\n year: duration[1] ? sign * Number(duration[1]) : undefined,\n month: duration[2] ? sign * Number(duration[2]) : undefined,\n day: duration[3] ? sign * Number(duration[3]) : undefined,\n hours: duration[4] ? sign * Number(duration[4]) : undefined,\n minutes: duration[5] ? sign * Number(duration[5]) : undefined,\n seconds: duration[6] ? sign * Number(duration[6]) : undefined,\n });\n}\n\nexport function parseYearMonthDuration(durationStr: string): Partial<IYearMonthDurationRepresentation> {\n const res = parseDuration(durationStr);\n if ([ 'hours', 'minutes', 'seconds', 'day' ].some(key => Boolean((<any> res)[key]))) {\n throw new ParseError(durationStr, 'yearMonthDuration');\n }\n return res;\n}\n\nexport function parseDayTimeDuration(durationStr: string): Partial<IDayTimeDurationRepresentation> {\n const res = parseDuration(durationStr);\n if ([ 'year', 'month' ].some(key => Boolean((<any> res)[key]))) {\n throw new ParseError(durationStr, 'dayTimeDuration');\n }\n return res;\n}\n"]}
|
|
File without changes
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.serializeDateTime = serializeDateTime;
|
|
4
|
+
exports.serializeDate = serializeDate;
|
|
5
|
+
exports.serializeTime = serializeTime;
|
|
6
|
+
exports.serializeDuration = serializeDuration;
|
|
4
7
|
function numSerializer(num, min = 2) {
|
|
5
8
|
return num.toLocaleString(undefined, { minimumIntegerDigits: min, useGrouping: false });
|
|
6
9
|
}
|
|
@@ -9,7 +12,6 @@ function serializeDateTime(date) {
|
|
|
9
12
|
// Extraction is needed because the date serializer can not add timezone y
|
|
10
13
|
return `${serializeDate({ year: date.year, month: date.month, day: date.day })}T${serializeTime(date)}`;
|
|
11
14
|
}
|
|
12
|
-
exports.serializeDateTime = serializeDateTime;
|
|
13
15
|
function serializeTimeZone(tz) {
|
|
14
16
|
// https://www.w3.org/TR/xmlschema-2/#dateTime-timezones
|
|
15
17
|
if (tz.zoneHours === undefined || tz.zoneMinutes === undefined) {
|
|
@@ -25,12 +27,10 @@ function serializeDate(date) {
|
|
|
25
27
|
// https://www.w3.org/TR/xmlschema-2/#date-lexical-representation
|
|
26
28
|
return `${numSerializer(date.year, 4)}-${numSerializer(date.month)}-${numSerializer(date.day)}${serializeTimeZone(date)}`;
|
|
27
29
|
}
|
|
28
|
-
exports.serializeDate = serializeDate;
|
|
29
30
|
function serializeTime(time) {
|
|
30
31
|
// https://www.w3.org/TR/xmlschema-2/#time-lexical-repr
|
|
31
32
|
return `${numSerializer(time.hours)}:${numSerializer(time.minutes)}:${numSerializer(time.seconds)}${serializeTimeZone(time)}`;
|
|
32
33
|
}
|
|
33
|
-
exports.serializeTime = serializeTime;
|
|
34
34
|
function serializeDuration(dur, zeroString = 'PT0S') {
|
|
35
35
|
// https://www.w3.org/TR/xmlschema-2/#duration-lexical-repr
|
|
36
36
|
if (!Object.values(dur).some(val => (val || 0) !== 0)) {
|
|
@@ -50,5 +50,4 @@ function serializeDuration(dur, zeroString = 'PT0S') {
|
|
|
50
50
|
const second = dur.seconds ? `${Math.abs(dur.seconds)}S` : '';
|
|
51
51
|
return `${dayNotation}T${hour}${minute}${second}`;
|
|
52
52
|
}
|
|
53
|
-
exports.serializeDuration = serializeDuration;
|
|
54
53
|
//# sourceMappingURL=Serialization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Serialization.js","sourceRoot":"","sources":["Serialization.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Serialization.js","sourceRoot":"","sources":["Serialization.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IDateRepresentation,\n IDateTimeRepresentation,\n IDurationRepresentation,\n ITimeRepresentation,\n ITimeZoneRepresentation,\n} from '@comunica/types';\n\nfunction numSerializer(num: number, min = 2): string {\n return num.toLocaleString(undefined, { minimumIntegerDigits: min, useGrouping: false });\n}\n\nexport function serializeDateTime(date: IDateTimeRepresentation): string {\n // https://www.w3.org/TR/xmlschema-2/#dateTime\n // Extraction is needed because the date serializer can not add timezone y\n return `${serializeDate({ year: date.year, month: date.month, day: date.day })}T${serializeTime(date)}`;\n}\n\nfunction serializeTimeZone(tz: Partial<ITimeZoneRepresentation>): string {\n // https://www.w3.org/TR/xmlschema-2/#dateTime-timezones\n if (tz.zoneHours === undefined || tz.zoneMinutes === undefined) {\n return '';\n }\n if (tz.zoneHours === 0 && tz.zoneMinutes === 0) {\n return 'Z';\n }\n // SerializeTimeZone({ zoneHours: 5, zoneMinutes: 4 }) returns +05:04\n return `${tz.zoneHours >= 0 ? `+${numSerializer(tz.zoneHours)}` : numSerializer(tz.zoneHours)}:${numSerializer(Math.abs(tz.zoneMinutes))}`;\n}\n\nexport function serializeDate(date: IDateRepresentation): string {\n // https://www.w3.org/TR/xmlschema-2/#date-lexical-representation\n return `${numSerializer(date.year, 4)}-${numSerializer(date.month)}-${numSerializer(date.day)}${serializeTimeZone(date)}`;\n}\n\nexport function serializeTime(time: ITimeRepresentation): string {\n // https://www.w3.org/TR/xmlschema-2/#time-lexical-repr\n return `${numSerializer(time.hours)}:${numSerializer(time.minutes)}:${numSerializer(time.seconds)}${serializeTimeZone(time)}`;\n}\n\nexport function serializeDuration(dur: Partial<IDurationRepresentation>, zeroString: 'PT0S' | 'P0M' = 'PT0S'): string {\n // https://www.w3.org/TR/xmlschema-2/#duration-lexical-repr\n if (!Object.values(dur).some(val => (val || 0) !== 0)) {\n return zeroString;\n }\n\n const sign = Object.values(dur).some(val => (val || 0) < 0) ? '-' : '';\n const year = dur.year ? `${Math.abs(dur.year)}Y` : '';\n const month = dur.month ? `${Math.abs(dur.month)}M` : '';\n const day = dur.day ? `${Math.abs(dur.day)}D` : '';\n\n const dayNotation = `${sign}P${year}${month}${day}`;\n // eslint-disable-next-line ts/prefer-nullish-coalescing\n if (!(dur.hours || dur.minutes || dur.seconds)) {\n return dayNotation;\n }\n\n const hour = dur.hours ? `${Math.abs(dur.hours)}H` : '';\n const minute = dur.minutes ? `${Math.abs(dur.minutes)}M` : '';\n const second = dur.seconds ? `${Math.abs(dur.seconds)}S` : '';\n\n return `${dayNotation}T${hour}${minute}${second}`;\n}\n"]}
|
package/lib/util/SpecAlgos.d.ts
CHANGED
|
File without changes
|