n3 2.10.6 → 2.11.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/README.md +5 -1
- package/browser/n3.esm.min.js +4 -4
- package/browser/n3.min.js +4 -4
- package/lib/N3DataFactory.js +8 -2
- package/package.json +1 -1
- package/src/N3DataFactory.js +8 -2
package/lib/N3DataFactory.js
CHANGED
|
@@ -427,18 +427,24 @@ function literal(value, languageOrDataType) {
|
|
|
427
427
|
return new Literal(`"${value}"@${languageOrDataType.language.toLowerCase()}${languageOrDataType.direction ? `--${languageOrDataType.direction.toLowerCase()}` : ''}`);
|
|
428
428
|
}
|
|
429
429
|
|
|
430
|
-
// Automatically determine datatype for booleans, numbers, and dates
|
|
430
|
+
// Automatically determine datatype for booleans, numbers, BigInts, and dates
|
|
431
431
|
let datatype = languageOrDataType ? languageOrDataType.value : '';
|
|
432
432
|
if (datatype === '') {
|
|
433
433
|
// Convert a boolean
|
|
434
434
|
if (typeof value === 'boolean') datatype = xsd.boolean;
|
|
435
435
|
// Convert an integer or double
|
|
436
436
|
else if (typeof value === 'number') {
|
|
437
|
-
if (Number.isFinite(value))
|
|
437
|
+
if (Number.isFinite(value))
|
|
438
|
+
// From 1e21 upward, a number's string form turns exponential ("1e+21"),
|
|
439
|
+
// which is not a valid xsd:integer lexical, so type it as xsd:double
|
|
440
|
+
// (the same cut-off as JSON-LD 1.1's Object to RDF Conversion)
|
|
441
|
+
datatype = Number.isInteger(value) && Math.abs(value) < 1e21 ? xsd.integer : xsd.double;else {
|
|
438
442
|
datatype = xsd.double;
|
|
439
443
|
if (!Number.isNaN(value)) value = value > 0 ? 'INF' : '-INF';
|
|
440
444
|
}
|
|
441
445
|
}
|
|
446
|
+
// Convert a BigInt, whose decimal string is always a valid xsd:integer lexical
|
|
447
|
+
else if (typeof value === 'bigint') datatype = xsd.integer;
|
|
442
448
|
// Convert a valid date
|
|
443
449
|
else if (value instanceof Date && !Number.isNaN(value.getTime())) {
|
|
444
450
|
datatype = xsd.dateTime;
|
package/package.json
CHANGED
package/src/N3DataFactory.js
CHANGED
|
@@ -439,7 +439,7 @@ function literal(value, languageOrDataType) {
|
|
|
439
439
|
return new Literal(`"${value}"@${languageOrDataType.language.toLowerCase()}${languageOrDataType.direction ? `--${languageOrDataType.direction.toLowerCase()}` : ''}`);
|
|
440
440
|
}
|
|
441
441
|
|
|
442
|
-
// Automatically determine datatype for booleans, numbers, and dates
|
|
442
|
+
// Automatically determine datatype for booleans, numbers, BigInts, and dates
|
|
443
443
|
let datatype = languageOrDataType ? languageOrDataType.value : '';
|
|
444
444
|
if (datatype === '') {
|
|
445
445
|
// Convert a boolean
|
|
@@ -448,13 +448,19 @@ function literal(value, languageOrDataType) {
|
|
|
448
448
|
// Convert an integer or double
|
|
449
449
|
else if (typeof value === 'number') {
|
|
450
450
|
if (Number.isFinite(value))
|
|
451
|
-
|
|
451
|
+
// From 1e21 upward, a number's string form turns exponential ("1e+21"),
|
|
452
|
+
// which is not a valid xsd:integer lexical, so type it as xsd:double
|
|
453
|
+
// (the same cut-off as JSON-LD 1.1's Object to RDF Conversion)
|
|
454
|
+
datatype = Number.isInteger(value) && Math.abs(value) < 1e21 ? xsd.integer : xsd.double;
|
|
452
455
|
else {
|
|
453
456
|
datatype = xsd.double;
|
|
454
457
|
if (!Number.isNaN(value))
|
|
455
458
|
value = value > 0 ? 'INF' : '-INF';
|
|
456
459
|
}
|
|
457
460
|
}
|
|
461
|
+
// Convert a BigInt, whose decimal string is always a valid xsd:integer lexical
|
|
462
|
+
else if (typeof value === 'bigint')
|
|
463
|
+
datatype = xsd.integer;
|
|
458
464
|
// Convert a valid date
|
|
459
465
|
else if (value instanceof Date && !Number.isNaN(value.getTime())) {
|
|
460
466
|
datatype = xsd.dateTime;
|