@opengeospatial/jsonld-ui-utils 0.3.0 → 0.4.1
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 +53 -1
- package/dist/crs.d.ts +25 -0
- package/dist/index.cjs.js +4 -9
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +4 -9
- package/dist/index.esm.js.map +1 -1
- package/dist/jsonld-ui-utils-leaflet.min.js +4 -4
- package/dist/jsonld-ui-utils-leaflet.min.js.map +1 -1
- package/dist/jsonld-ui-utils.min.js +4 -4
- package/dist/jsonld-ui-utils.min.js.map +1 -1
- package/dist/leaflet.cjs.js +205 -12
- package/dist/leaflet.cjs.js.map +1 -1
- package/dist/leaflet.d.ts +5 -1
- package/dist/leaflet.esm.js +205 -12
- package/dist/leaflet.esm.js.map +1 -1
- package/package.json +7 -2
package/dist/leaflet.esm.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as N3 from 'n3';
|
|
2
2
|
import { RdfXmlParser } from 'rdfxml-streaming-parser';
|
|
3
|
+
import proj4Lib from 'proj4';
|
|
3
4
|
|
|
4
5
|
const jsonFetch = async (url) => {
|
|
5
6
|
const response = await fetch(url, {
|
|
@@ -30,8 +31,8 @@ const mergeContexts = (definitions) => {
|
|
|
30
31
|
}
|
|
31
32
|
return currentContext;
|
|
32
33
|
};
|
|
34
|
+
const urlCache = new Map();
|
|
33
35
|
async function loadContext(context) {
|
|
34
|
-
const loadedUrls = new Map();
|
|
35
36
|
const walk = async (definition, refChain) => {
|
|
36
37
|
for (const [key, value] of Object.entries(definition)) {
|
|
37
38
|
if (key === '@context') {
|
|
@@ -62,15 +63,10 @@ async function loadContext(context) {
|
|
|
62
63
|
}
|
|
63
64
|
const newRefChain = Array.isArray(refChain) ? refChain === null || refChain === void 0 ? void 0 : refChain.slice() : [];
|
|
64
65
|
newRefChain.push(context);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
newContext = await jsonFetch(context);
|
|
68
|
-
loadedUrls.set(context, newContext);
|
|
66
|
+
if (!urlCache.has(context)) {
|
|
67
|
+
urlCache.set(context, jsonFetch(context).then(obj => load(obj['@context'], newRefChain)));
|
|
69
68
|
}
|
|
70
|
-
|
|
71
|
-
newContext = loadedUrls.get(context);
|
|
72
|
-
}
|
|
73
|
-
return load(newContext['@context'], newRefChain);
|
|
69
|
+
return urlCache.get(context);
|
|
74
70
|
}
|
|
75
71
|
};
|
|
76
72
|
if (typeof context === 'object' && context !== null && '@context' in context) {
|
|
@@ -525,9 +521,206 @@ async function augment(rootElem, context, options = {}) {
|
|
|
525
521
|
augmentInner(rootElem, [context]);
|
|
526
522
|
}
|
|
527
523
|
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
524
|
+
const WGS84_EPSG_CODES = new Set([4326, 4979]);
|
|
525
|
+
const proj4DefCache = new Map();
|
|
526
|
+
function extractEpsgCode(uri) {
|
|
527
|
+
// http(s)://www.opengis.net/def/crs/EPSG/0/5514
|
|
528
|
+
let m = uri.match(/\/crs\/EPSG\/[^/]+\/(\d+)$/i);
|
|
529
|
+
if (m)
|
|
530
|
+
return parseInt(m[1], 10);
|
|
531
|
+
// urn:ogc:def:crs:EPSG::5514
|
|
532
|
+
m = uri.match(/urn:ogc:def:crs:EPSG::(\d+)$/i);
|
|
533
|
+
if (m)
|
|
534
|
+
return parseInt(m[1], 10);
|
|
535
|
+
// EPSG:5514
|
|
536
|
+
m = uri.match(/^EPSG:(\d+)$/);
|
|
537
|
+
if (m)
|
|
538
|
+
return parseInt(m[1], 10);
|
|
539
|
+
return null;
|
|
540
|
+
}
|
|
541
|
+
function isWgs84(uri) {
|
|
542
|
+
const code = extractEpsgCode(uri);
|
|
543
|
+
if (code !== null)
|
|
544
|
+
return WGS84_EPSG_CODES.has(code);
|
|
545
|
+
return /\/OGC\/[^/]+\/CRS84h?$/i.test(uri) || /urn:ogc:def:crs:OGC:[^:]*:CRS84h?$/i.test(uri);
|
|
546
|
+
}
|
|
547
|
+
function parseSingleCrs(value) {
|
|
548
|
+
if (typeof value === 'string') {
|
|
549
|
+
if (isWgs84(value))
|
|
550
|
+
return null;
|
|
551
|
+
const code = extractEpsgCode(value);
|
|
552
|
+
return code !== null ? { epsgCode: code } : null;
|
|
553
|
+
}
|
|
554
|
+
if (value !== null && typeof value === 'object') {
|
|
555
|
+
const obj = value;
|
|
556
|
+
if (obj['type'] === 'Reference' && typeof obj['href'] === 'string') {
|
|
557
|
+
if (isWgs84(obj['href']))
|
|
558
|
+
return null;
|
|
559
|
+
const code = extractEpsgCode(obj['href']);
|
|
560
|
+
if (code === null)
|
|
561
|
+
return null;
|
|
562
|
+
return {
|
|
563
|
+
epsgCode: code,
|
|
564
|
+
epoch: typeof obj['epoch'] === 'number' ? obj['epoch'] : undefined,
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return null;
|
|
569
|
+
}
|
|
570
|
+
function parseCoordRefSys(coordRefSys) {
|
|
571
|
+
if (Array.isArray(coordRefSys)) {
|
|
572
|
+
for (const item of coordRefSys) {
|
|
573
|
+
const result = parseSingleCrs(item);
|
|
574
|
+
if (result !== null)
|
|
575
|
+
return result;
|
|
576
|
+
}
|
|
577
|
+
return null;
|
|
578
|
+
}
|
|
579
|
+
return parseSingleCrs(coordRefSys);
|
|
580
|
+
}
|
|
581
|
+
function parseLegacyCrs(crs) {
|
|
582
|
+
if (!crs || typeof crs !== 'object')
|
|
583
|
+
return null;
|
|
584
|
+
const obj = crs;
|
|
585
|
+
if (obj['type'] !== 'name')
|
|
586
|
+
return null;
|
|
587
|
+
const props = obj['properties'];
|
|
588
|
+
if (!props || typeof props !== 'object')
|
|
589
|
+
return null;
|
|
590
|
+
const name = props['name'];
|
|
591
|
+
if (typeof name !== 'string')
|
|
592
|
+
return null;
|
|
593
|
+
if (isWgs84(name))
|
|
594
|
+
return null;
|
|
595
|
+
const code = extractEpsgCode(name);
|
|
596
|
+
return code !== null ? { epsgCode: code } : null;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Detects the CRS from a GeoJSON/JSON-FG object.
|
|
600
|
+
*
|
|
601
|
+
* Checks in priority order:
|
|
602
|
+
* 1. JSON-FG `coordRefSys` (URI string, Reference object, or compound array)
|
|
603
|
+
* 2. Legacy GeoJSON `crs` with type "name"
|
|
604
|
+
*
|
|
605
|
+
* Returns null if the CRS is WGS84 or cannot be determined (no transform needed).
|
|
606
|
+
*/
|
|
607
|
+
function detectCrs(data) {
|
|
608
|
+
if (!data || typeof data !== 'object')
|
|
609
|
+
return null;
|
|
610
|
+
const obj = data;
|
|
611
|
+
if ('coordRefSys' in obj) {
|
|
612
|
+
const result = parseCoordRefSys(obj['coordRefSys']);
|
|
613
|
+
if (result !== null)
|
|
614
|
+
return result;
|
|
615
|
+
}
|
|
616
|
+
if ('crs' in obj) {
|
|
617
|
+
const result = parseLegacyCrs(obj['crs']);
|
|
618
|
+
if (result !== null)
|
|
619
|
+
return result;
|
|
620
|
+
}
|
|
621
|
+
return null;
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Returns a proj4 converter from the given EPSG CRS to WGS84.
|
|
625
|
+
* Fetches the projection definition from epsg.io if not already registered.
|
|
626
|
+
*/
|
|
627
|
+
async function getProjectionConverter(crsInfo, proj4Instance) {
|
|
628
|
+
const key = `EPSG:${crsInfo.epsgCode}`;
|
|
629
|
+
if (crsInfo.epoch !== undefined) {
|
|
630
|
+
console.warn(`CRS epoch ${crsInfo.epoch} ignored — proj4js does not support coordinate epochs.`);
|
|
631
|
+
}
|
|
632
|
+
if (!proj4Instance.defs(key)) {
|
|
633
|
+
let defStr = proj4DefCache.get(crsInfo.epsgCode);
|
|
634
|
+
if (!defStr) {
|
|
635
|
+
const response = await fetch(`https://epsg.io/${crsInfo.epsgCode}.proj4`);
|
|
636
|
+
if (!response.ok) {
|
|
637
|
+
throw new Error(`Unknown CRS EPSG:${crsInfo.epsgCode} — could not retrieve a definition from epsg.io (HTTP ${response.status})`);
|
|
638
|
+
}
|
|
639
|
+
defStr = (await response.text()).trim();
|
|
640
|
+
if (!defStr) {
|
|
641
|
+
throw new Error(`Unknown CRS EPSG:${crsInfo.epsgCode} — epsg.io returned an empty definition`);
|
|
642
|
+
}
|
|
643
|
+
proj4DefCache.set(crsInfo.epsgCode, defStr);
|
|
644
|
+
}
|
|
645
|
+
proj4Instance.defs(key, defStr);
|
|
646
|
+
}
|
|
647
|
+
return proj4Instance(key, 'WGS84');
|
|
648
|
+
}
|
|
649
|
+
function transformCoords(coords, converter) {
|
|
650
|
+
const projected = converter.forward(coords.slice(0, 2));
|
|
651
|
+
return coords.length > 2 ? [projected[0], projected[1], coords[2]] : [projected[0], projected[1]];
|
|
652
|
+
}
|
|
653
|
+
function transformGeometry(geometry, converter) {
|
|
654
|
+
if (!geometry)
|
|
655
|
+
return geometry;
|
|
656
|
+
switch (geometry.type) {
|
|
657
|
+
case 'Point':
|
|
658
|
+
return { ...geometry, coordinates: transformCoords(geometry.coordinates, converter) };
|
|
659
|
+
case 'MultiPoint':
|
|
660
|
+
case 'LineString':
|
|
661
|
+
return {
|
|
662
|
+
...geometry,
|
|
663
|
+
coordinates: geometry.coordinates.map((c) => transformCoords(c, converter)),
|
|
664
|
+
};
|
|
665
|
+
case 'MultiLineString':
|
|
666
|
+
case 'Polygon':
|
|
667
|
+
return {
|
|
668
|
+
...geometry,
|
|
669
|
+
coordinates: geometry.coordinates.map((r) => r.map((c) => transformCoords(c, converter))),
|
|
670
|
+
};
|
|
671
|
+
case 'MultiPolygon':
|
|
672
|
+
return {
|
|
673
|
+
...geometry,
|
|
674
|
+
coordinates: geometry.coordinates.map((p) => p.map((r) => r.map((c) => transformCoords(c, converter)))),
|
|
675
|
+
};
|
|
676
|
+
case 'GeometryCollection':
|
|
677
|
+
return {
|
|
678
|
+
...geometry,
|
|
679
|
+
geometries: geometry.geometries.map((g) => transformGeometry(g, converter)),
|
|
680
|
+
};
|
|
681
|
+
default:
|
|
682
|
+
return geometry;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* Deep-clones and transforms all geometries in a FeatureCollection or Feature
|
|
687
|
+
* from the given CRS to WGS84. Per the JSON-FG scoping rules, individual features
|
|
688
|
+
* may carry their own `coordRefSys` that overrides the collection-level one.
|
|
689
|
+
*/
|
|
690
|
+
async function transformFeatureCollection(data, collectionCrs, proj4Instance) {
|
|
691
|
+
var _a;
|
|
692
|
+
const collectionConverter = await getProjectionConverter(collectionCrs, proj4Instance);
|
|
693
|
+
const transformFeature = async (feature) => {
|
|
694
|
+
const featureCrs = detectCrs(feature);
|
|
695
|
+
let converter = collectionConverter;
|
|
696
|
+
if (featureCrs !== null && featureCrs.epsgCode !== collectionCrs.epsgCode) {
|
|
697
|
+
converter = await getProjectionConverter(featureCrs, proj4Instance);
|
|
698
|
+
}
|
|
699
|
+
return { ...feature, geometry: transformGeometry(feature.geometry, converter) };
|
|
700
|
+
};
|
|
701
|
+
if (data.type === 'FeatureCollection') {
|
|
702
|
+
return { ...data, features: await Promise.all(((_a = data.features) !== null && _a !== void 0 ? _a : []).map(transformFeature)) };
|
|
703
|
+
}
|
|
704
|
+
if (data.type === 'Feature') {
|
|
705
|
+
return transformFeature(data);
|
|
706
|
+
}
|
|
707
|
+
return data;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
async function createJsonLDGeoJSONLayer(L, data, options = {}) {
|
|
711
|
+
const { ldContext, popupOptions = { maxWidth: 400 }, augmentOptions = {}, onEachFeature: userOnEachFeature, coordRefSys: coordRefSysOverride, proj4: proj4Override, ...geoJSONOptions } = options;
|
|
712
|
+
let geoData = data;
|
|
713
|
+
const crsInfo = coordRefSysOverride
|
|
714
|
+
? detectCrs({ coordRefSys: coordRefSysOverride })
|
|
715
|
+
: detectCrs(data);
|
|
716
|
+
if (crsInfo !== null) {
|
|
717
|
+
const proj4Instance = proj4Override !== null && proj4Override !== void 0 ? proj4Override : proj4Lib;
|
|
718
|
+
if (!proj4Instance) {
|
|
719
|
+
throw new Error('proj4js is required for CRS transformation — include it via <script src="..."> or install it as a dependency');
|
|
720
|
+
}
|
|
721
|
+
geoData = await transformFeatureCollection(data, crsInfo, proj4Instance);
|
|
722
|
+
}
|
|
723
|
+
return L.geoJSON(geoData, {
|
|
531
724
|
...geoJSONOptions,
|
|
532
725
|
onEachFeature(feature, layer) {
|
|
533
726
|
if (userOnEachFeature)
|
package/dist/leaflet.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leaflet.esm.js","sources":["../src/jsonld.ts","../src/constants.ts","../src/resource.ts","../src/augment.ts","../src/leaflet.ts"],"sourcesContent":["import {ContextDefinition} from 'jsonld';\n\ntype OrArray<T> = T | T[];\n\nexport type Context = OrArray<null | string | ContextDefinition>;\n\nexport type ContextObject = {\n \"@context\": Context;\n}\n\nconst jsonFetch = async (url: string) => {\n const response = await fetch(url, {\n headers: {'Accept': 'application/json'},\n });\n return await response.json() as ContextObject;\n};\n\nconst mergeContexts = (definitions: ContextDefinition[]) => {\n const mergePair = (a: ContextDefinition | null | undefined,\n b: ContextDefinition): ContextDefinition => {\n if (!a || !Object.keys(a).length) {\n return b;\n }\n const result = {...a};\n for (const [k, v] of Object.entries(b)) {\n result[k] = v;\n }\n return result;\n };\n\n if (!definitions.length) {\n return {};\n }\n if (definitions.length === 1) {\n return definitions[0];\n }\n let currentContext = definitions[0];\n for (let i = 1; i < definitions.length; i++) {\n currentContext = mergePair(currentContext, definitions[i]);\n }\n return currentContext;\n};\n\n\nexport async function loadContext(context: Context | ContextObject) {\n const loadedUrls = new Map<string, ContextObject>();\n\n const walk = async (definition: object, refChain?: string[]) => {\n for (const [key, value] of Object.entries(definition)) {\n if (key === '@context') {\n // @ts-ignore\n definition[key] = await load(value as Context, refChain);\n } else if (typeof value === 'object' && value !== null) {\n await walk(value, refChain);\n }\n }\n };\n\n const load = async (context: Context, refChain?: string[]): Promise<ContextDefinition> => {\n if (context === null || typeof context === 'undefined') {\n return {};\n }\n if (Array.isArray(context)) {\n // fetch and merge\n const contextEntries = await Promise.all(context.map(e => load(e, refChain)));\n return mergeContexts(contextEntries);\n } else if (typeof context === 'object') {\n await walk(context, refChain);\n return context;\n } else {\n if (refChain?.includes(context)) {\n throw new Error('Circular dependencies found: ' + refChain.join(' -> ') + ' -> ' + context);\n }\n const newRefChain = Array.isArray(refChain) ? refChain?.slice() : [];\n newRefChain.push(context);\n let newContext: ContextObject;\n if (!loadedUrls.has(context)) {\n newContext = await jsonFetch(context);\n loadedUrls.set(context, newContext);\n } else {\n newContext = loadedUrls.get(context) as ContextObject;\n }\n return load(newContext['@context'], newRefChain);\n }\n };\n\n if (typeof context === 'object' && context !== null && '@context' in context) {\n return load((context as ContextObject)['@context']);\n } else {\n return load(context);\n }\n}","const ns = (base: string) => (local: string): string => `${base}${local}`;\n\nexport const SKOS = ns('http://www.w3.org/2004/02/skos/core#');\nexport const RDFS = ns('http://www.w3.org/2000/01/rdf-schema#');\nexport const RDF = ns('http://www.w3.org/1999/02/22-rdf-syntax-ns#');\nexport const DCT = ns('http://purl.org/dc/terms/');\nexport const DC = ns('http://purl.org/dc/elements/1.1/');\nexport const SDO = ns('https://schema.org/');\nexport const FOAF = ns('http://xmlns.com/foaf/0.1/');\n\nexport const labelPredicates: string[] = [\n SKOS('prefLabel'),\n DCT('title'),\n DC('title'),\n SDO('name'),\n FOAF('name'),\n RDFS('label'),\n];\n\nexport const descriptionPredicates: string[] = [\n SKOS('definition'),\n DCT('description'),\n DC('description'),\n RDFS('comment'),\n];","import {loadContext} from \"./jsonld\";\nimport {descriptionPredicates, labelPredicates} from \"./constants\";\nimport * as N3 from 'n3';\nimport {RdfXmlParser} from 'rdfxml-streaming-parser';\n\nexport interface FetchResourceOptions {\n labelPredicates: string[],\n descriptionPredicates: string[],\n fallbackRainbowInstance?: string, // deprecated: use fallbackRainbowInstances\n fallbackRainbowInstances?: string | string[],\n fallbackSparqlEndpoint?: string, // deprecated: use fallbackSparqlEndpoints\n fallbackSparqlEndpoints?: string | string[],\n}\n\nexport const defaultFetchResourceOptions: FetchResourceOptions = {\n labelPredicates,\n descriptionPredicates,\n};\n\nexport interface CreatePropertiesTableOptions {\n propertiesField?: string | null,\n}\n\nexport interface ResourceData {\n uri: string,\n label: string | null,\n description?: string | null,\n}\n\nconst fetchResourceCache: { [uri: string]: Promise<ResourceData> } = {};\nconst requestCache: { [url: string]: Promise<N3.Store | null> } = {};\n\nconst N3_CONTENT_TYPES = new Set([\n 'text/turtle',\n 'text/n3',\n 'application/n-triples',\n 'application/n-quads',\n 'application/trig',\n 'text/anot+turtle',\n]);\n\nconst ACCEPT_HEADER = [\n 'text/turtle',\n 'application/n-triples',\n 'application/n-quads',\n 'application/trig',\n 'application/ld+json',\n 'application/rdf+xml',\n].join(', ');\n\nfunction getUserLanguages(): string[] {\n if (typeof navigator !== 'undefined' && navigator.languages?.length) {\n return Array.from(navigator.languages);\n }\n try {\n return [Intl.DateTimeFormat().resolvedOptions().locale];\n } catch {\n return [];\n }\n}\n\nexport function findInStore(store: N3.Store, subjectUri: string, predicates: string[], userLangs = getUserLanguages()): string | null {\n const subj = N3.DataFactory.namedNode(subjectUri);\n for (const predUri of predicates) {\n const quads = store\n .getQuads(subj, N3.DataFactory.namedNode(predUri), null, null)\n .filter(q => q.object.termType === 'Literal');\n if (!quads.length) {\n continue;\n }\n for (const lang of userLangs) {\n const base = lang.split('-')[0].toLowerCase();\n const match = quads.find(q => {\n const qLang = (q.object as N3.Literal).language?.toLowerCase();\n return qLang === lang.toLowerCase() || qLang?.split('-')[0] === base;\n });\n if (match) {\n return match.object.value;\n }\n }\n const noLang = quads.find(q => !(q.object as N3.Literal).language);\n if (noLang) {\n return noLang.object.value;\n }\n const en = quads.find(q => (q.object as N3.Literal).language?.toLowerCase() === 'en');\n return (en ?? quads[0]).object.value;\n }\n return null;\n}\n\nfunction parseTurtle(text: string, baseIRI: string, contentType: string): Promise<N3.Store> {\n const store = new N3.Store();\n const format = contentType === 'text/anot+turtle' ? 'text/turtle' : contentType as any;\n const parser = new N3.Parser({baseIRI, format});\n return new Promise((resolve, reject) => {\n parser.parse(text, (err, quad) => {\n if (err) {\n return reject(err);\n }\n if (quad) {\n store.addQuad(quad);\n }\n else {\n resolve(store);\n }\n });\n });\n}\n\nasync function parseJsonLd(text: string, baseIRI: string): Promise<N3.Store> {\n const jsonldMod = await import('jsonld') as any;\n if (!jsonldMod) {\n throw new Error('jsonld peer dependency is not available');\n }\n const doc = JSON.parse(text);\n const nquads = await jsonldMod.toRDF(doc, {format: 'application/n-quads', base: baseIRI});\n return parseTurtle(nquads, baseIRI, 'application/n-quads');\n}\n\nasync function parseRdfXml(text: string, baseIRI: string): Promise<N3.Store> {\n const store = new N3.Store();\n return new Promise((resolve, reject) => {\n const parser = new RdfXmlParser({baseIRI});\n parser.on('data', (quad: any) => store.addQuad(quad));\n parser.on('error', reject);\n parser.on('end', () => resolve(store));\n parser.write(text);\n parser.end();\n });\n}\n\nconst toArray = (val?: string | string[]): string[] =>\n !val ? [] : Array.isArray(val) ? val : [val];\n\nconst getSparqlQuery = (uri: string) => `DESCRIBE <${uri}>`;\n\nconst fetchAndParse = async (fetchFn: () => Promise<Response>, baseIRI: string): Promise<N3.Store | null> => {\n let response: Response;\n try {\n response = await fetchFn();\n if (!response.ok) {\n return null;\n }\n } catch {\n return null;\n }\n const contentType = response.headers.get('content-type')?.split(';')[0].trim() || 'text/turtle';\n const text = await response.text();\n try {\n if (N3_CONTENT_TYPES.has(contentType)) {\n return parseTurtle(text, baseIRI, contentType);\n }\n if (contentType === 'application/ld+json') {\n return parseJsonLd(text, baseIRI);\n }\n if (contentType === 'application/rdf+xml') {\n return parseRdfXml(text, baseIRI);\n }\n } catch {\n }\n return null;\n};\n\nconst fetchAndParseDocument = (docUrl: string, fetchFn: () => Promise<Response>): Promise<N3.Store | null> => {\n if (!(docUrl in requestCache)) {\n requestCache[docUrl] = fetchAndParse(fetchFn, docUrl);\n }\n return requestCache[docUrl];\n};\n\nconst findResourceInStore = async (storePromise: Promise<N3.Store | null>, uri: string, options: FetchResourceOptions): Promise<ResourceData | null> => {\n const store = await storePromise;\n if (!store) {\n return null;\n }\n const label = findInStore(store, uri, options.labelPredicates);\n if (!label) {\n return null;\n }\n return {uri, label, description: findInStore(store, uri, options.descriptionPredicates)};\n};\n\nconst actualFetchResource = async (uri: string, options: FetchResourceOptions): Promise<ResourceData> => {\n const docUrl = uri.includes('#') ? uri.split('#')[0] : uri;\n\n // 1. Direct (cached by document URL so hash siblings share one request)\n let result = await findResourceInStore(\n fetchAndParseDocument(docUrl, () => fetch(docUrl, {headers: {'Accept': ACCEPT_HEADER}})),\n uri, options,\n );\n\n // 2. Rainbow proxies (in order) — not supported for hash URIs\n const isHashUri = uri.includes('#');\n for (const instance of [...toArray(options.fallbackRainbowInstances), ...toArray(options.fallbackRainbowInstance)]) {\n if (result || isHashUri) {\n break;\n }\n const rainbowURL = new URL(instance);\n rainbowURL.searchParams.set('uri', uri);\n const rainbowUrlStr = rainbowURL.toString();\n result = await findResourceInStore(\n fetchAndParseDocument(rainbowUrlStr, () => fetch(rainbowUrlStr, {headers: {'Accept': ACCEPT_HEADER}})),\n uri, options,\n );\n }\n\n // 3. SPARQL endpoints (in order) — each DESCRIBE is unique per URI, no request cache\n for (const endpoint of [...toArray(options.fallbackSparqlEndpoints), ...toArray(options.fallbackSparqlEndpoint)]) {\n if (result) {\n break;\n }\n const formBody = new URLSearchParams({query: getSparqlQuery(uri)});\n result = await findResourceInStore(\n fetchAndParse(() => fetch(endpoint, {\n method: 'POST',\n headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'text/turtle, application/n-triples'},\n body: formBody.toString(),\n }), uri),\n uri, options,\n );\n }\n\n if (!result) {\n throw new Error(`No label data found for <${uri}>`);\n }\n return result;\n};\n\nexport async function fetchResource(uri: string, options: Partial<FetchResourceOptions> = {}) {\n const mergedOptions: FetchResourceOptions = {...defaultFetchResourceOptions, ...options};\n if (!(uri in fetchResourceCache)) {\n fetchResourceCache[uri] = actualFetchResource(uri, mergedOptions);\n }\n return fetchResourceCache[uri];\n}\n\nexport async function loadFeature(url: string) {\n const response = await fetch(url, {\n headers: {\n 'Accept': 'application/ld+json, application/json;q=0.9, */*;q=0.1',\n },\n });\n if (!response.ok) {\n throw new Error(`Could not load feature ${url}: ${response.status} - ${response.statusText}`);\n }\n const feature = await response.json();\n const context = await loadContext(feature);\n return {\n feature,\n context,\n };\n}","import {\n CreatePropertiesTableOptions,\n defaultFetchResourceOptions,\n fetchResource,\n FetchResourceOptions,\n} from \"./resource\";\nimport {ContextDefinition, ExpandedTermDefinition} from \"jsonld\";\n\nexport interface AugmentOptions extends FetchResourceOptions {\n replaceElements: boolean,\n}\n\nconst defaultAugmentOptions: AugmentOptions = {\n replaceElements: true,\n ...defaultFetchResourceOptions,\n};\n\nexport function createPropertiesTable(feature: { [index: string]: any }, container: HTMLElement,\n options: CreatePropertiesTableOptions = {\n propertiesField: 'properties',\n }) {\n const createLevel = (parent: HTMLElement, value: any, addHeaders = false) => {\n if (Array.isArray(value)) {\n for (const entry of value) {\n const newElem = createLevel(parent, entry);\n newElem.classList.add('array-entry');\n }\n return parent;\n } else if (value === null || typeof value === 'undefined' || typeof value !== 'object') {\n const span = document.createElement('span');\n span.classList.add('literal-value');\n span.textContent = '' + value;\n parent.appendChild(span);\n return span;\n } else {\n const table = document.createElement('table');\n table.classList.add('object-table');\n if (addHeaders) {\n table.innerHTML = '<thead><tr><th>Property</th><th>Value</th></tr></thead>';\n }\n const tbody = document.createElement('tbody');\n Object.entries(value).forEach(([k, v]) => {\n const row = document.createElement('tr');\n const keyCell = document.createElement('td');\n keyCell.classList.add('object-property');\n keyCell.setAttribute('data-property', k);\n keyCell.textContent = k;\n row.appendChild(keyCell);\n const valueCell = document.createElement('td');\n valueCell.classList.add('object-value');\n createLevel(valueCell, v);\n row.appendChild(valueCell);\n tbody.appendChild(row);\n });\n table.appendChild(tbody);\n parent.appendChild(table);\n return table;\n }\n };\n const wrapper = document.createElement('div');\n wrapper.classList.add('object-properties');\n container.appendChild(wrapper);\n if (options.propertiesField) {\n createLevel(wrapper, feature[options.propertiesField], true);\n } else {\n createLevel(wrapper, feature, true);\n }\n}\n\nexport async function augment(rootElem: HTMLElement, context: ContextDefinition, options: Partial<AugmentOptions> = {}) {\n\n const mergedOptions = {...defaultAugmentOptions, ...options};\n\n const resolveTerm = (term: string, contextStack: ContextDefinition[],\n useVocab = true, useBase = false): ExpandedTermDefinition | null => {\n if (term.indexOf('://') !== -1) {\n return {'@id': term};\n }\n let closestVocab: string | null = null;\n let closestBase: string | null = null;\n for (let i = contextStack.length - 1; i >= 0; i--) {\n if (term in contextStack[i]) {\n let resolvedTerm = contextStack[i][term];\n let resolvedId: string;\n if (resolvedTerm === null || typeof resolvedTerm === 'undefined' || typeof resolvedTerm === 'boolean'\n || Array.isArray(resolvedTerm)) {\n continue;\n }\n if (typeof resolvedTerm === 'string') {\n if (resolvedTerm === '@type') {\n return {'@id': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'};\n }\n resolvedId = resolvedTerm;\n resolvedTerm = {'@id': resolvedTerm};\n } else if (typeof resolvedTerm === 'object' && '@id' in resolvedTerm && typeof resolvedTerm['@id'] === 'string') {\n resolvedId = resolvedTerm['@id'];\n } else {\n continue;\n }\n const idx = resolvedId.indexOf(':');\n if (idx > -1) {\n const prefix = resolvedId.substring(0, idx);\n const localPart = resolvedId.substring(idx + 1);\n if (localPart.startsWith('//')) {\n // Full URI -> return\n return resolvedTerm;\n }\n const resolvedPrefix = resolveTerm(prefix, contextStack);\n if (resolvedPrefix !== null && '@id' in resolvedPrefix && typeof resolvedPrefix['@id'] === 'string') {\n // Prefix found and resolved\n resolvedTerm['@id'] = `${resolvedPrefix['@id']}${localPart}`;\n }\n return resolvedTerm;\n }\n }\n if (closestVocab === null && contextStack[i]['@vocab']) {\n closestVocab = contextStack[i]['@vocab']!;\n }\n if (closestBase === null && contextStack[i]['@base']) {\n closestBase = contextStack[i]['@base']!;\n }\n }\n if (term.indexOf(':') === -1) {\n if (useVocab && closestVocab) {\n return {'@id': `${closestVocab}${term}`};\n }\n if (useBase && closestBase) {\n return {'@id': `${closestBase}${term}`};\n }\n }\n return null;\n };\n\n const findPropertyChildren = (elem: HTMLElement) => {\n const walker = document.createTreeWalker(elem, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node: Node): number {\n const nodeElem = node as HTMLElement;\n if (node !== elem && nodeElem.classList.contains('object-value')) {\n return NodeFilter.FILTER_REJECT;\n }\n if (nodeElem.classList.contains('object-property')) {\n return NodeFilter.FILTER_ACCEPT;\n }\n return NodeFilter.FILTER_SKIP;\n },\n });\n const result: HTMLElement[] = [];\n let cur;\n while ((cur = walker.nextNode())) {\n result.push(cur as HTMLElement);\n }\n return result;\n };\n\n const findLiteralChildren = (elem: HTMLElement) => {\n const result: HTMLElement[] = [];\n const walker = document.createTreeWalker(elem, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node: Node): number {\n const nodeElem = node as HTMLElement;\n if (nodeElem.classList.contains('object-property') || nodeElem.classList.contains('object-value')) {\n return NodeFilter.FILTER_REJECT;\n }\n if (nodeElem.classList.contains('literal-value')) {\n result.push(nodeElem);\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) {\n }\n return result;\n };\n\n const updateElement = (elem: HTMLElement, resourceUri: string,\n replaceElements = true) => {\n elem.setAttribute('data-uri', resourceUri);\n elem.classList.add('resource-loading');\n fetchResource(resourceUri, mergedOptions)\n .then(resourceData => {\n let elemToUpdate = elem.querySelector('.resource-link') as HTMLElement || elem;\n if (resourceData.label) {\n elem.setAttribute('data-label', resourceData.label);\n if (mergedOptions.replaceElements) {\n elemToUpdate.textContent = resourceData.label;\n }\n }\n if (resourceData.description) {\n elem.setAttribute('data-description', resourceData.description);\n if (mergedOptions.replaceElements) {\n elemToUpdate.title = resourceData.description;\n }\n }\n elem.classList.add('resource-resolved');\n })\n .catch(e => {\n console.error(`Error resolving URI ${resourceUri}: ${e}`, {cause: e});\n elem.classList.add('resource-error');\n })\n .finally(() => {\n elem.classList.remove('resource-loading');\n });\n if (replaceElements) {\n const link = document.createElement(\"a\");\n link.href = resourceUri;\n link.target = '_blank';\n link.classList.add('resource-link');\n while (elem.firstChild) {\n link.appendChild(elem.firstChild);\n }\n elem.appendChild(link);\n }\n };\n\n const augmentInner = (elem: HTMLElement, contextStack: ContextDefinition[]) => {\n const propElems = findPropertyChildren(elem);\n for (const propElem of propElems) {\n let propertyName: string | null = null;\n propertyName = propElem.getAttribute('data-property');\n if (!propertyName) {\n propertyName = propElem.textContent.trim();\n }\n const resolvedProperty = resolveTerm(propertyName, contextStack);\n let newContextStack = contextStack;\n const valueElem = propElem.parentElement?.querySelector('.object-value') as HTMLElement;\n if (resolvedProperty && '@id' in resolvedProperty && typeof resolvedProperty['@id'] === 'string') {\n const propertyUri = resolvedProperty['@id'];\n updateElement(propElem, propertyUri, mergedOptions.replaceElements);\n if ('@context' in resolvedProperty) {\n newContextStack = [...contextStack, resolvedProperty['@context']!];\n }\n if (resolvedProperty['@type'] === '@id' && valueElem) {\n const literalElems = findLiteralChildren(valueElem);\n literalElems.forEach(literalElem => {\n const resolvedLiteral = resolveTerm(literalElem.textContent.trim(),\n newContextStack, false, true);\n if (resolvedLiteral && '@id' in resolvedLiteral && typeof resolvedLiteral['@id'] === 'string') {\n const resourceUri = resolvedLiteral['@id'];\n updateElement(literalElem, resourceUri, mergedOptions.replaceElements);\n }\n });\n }\n }\n if (valueElem) {\n augmentInner(valueElem as HTMLElement, newContextStack);\n }\n }\n };\n augmentInner(rootElem, [context]);\n}\n","import {createPropertiesTable, augment, AugmentOptions} from './augment';\nimport {loadContext, type Context, type ContextObject} from './jsonld';\n\nexport interface JsonLDGeoJSONOptions {\n ldContext?: Context | ContextObject;\n popupOptions?: Record<string, any>;\n augmentOptions?: Partial<AugmentOptions>;\n onEachFeature?: (feature: any, layer: any) => void;\n [key: string]: any;\n}\n\nexport function createJsonLDGeoJSONLayer(L: any, data: any, options: JsonLDGeoJSONOptions = {}) {\n const {\n ldContext,\n popupOptions = {maxWidth: 400},\n augmentOptions = {},\n onEachFeature: userOnEachFeature,\n ...geoJSONOptions\n } = options;\n\n return L.geoJSON(data, {\n ...geoJSONOptions,\n onEachFeature(feature: any, layer: any) {\n if (userOnEachFeature) userOnEachFeature(feature, layer);\n\n if (feature.id != null) {\n layer.bindTooltip(String(feature.id), {permanent: false});\n }\n\n if (!feature.properties || Object.keys(feature.properties).length === 0) return;\n\n const container = document.createElement('div');\n createPropertiesTable(feature, container);\n layer.bindPopup(container, popupOptions);\n\n if (ldContext) {\n loadContext(ldContext).then((resolvedContext: any) => {\n augment(container, resolvedContext, augmentOptions);\n });\n }\n },\n });\n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"leaflet.esm.js","sources":["../src/jsonld.ts","../src/constants.ts","../src/resource.ts","../src/augment.ts","../src/crs.ts","../src/leaflet.ts"],"sourcesContent":["import {ContextDefinition} from 'jsonld';\n\ntype OrArray<T> = T | T[];\n\nexport type Context = OrArray<null | string | ContextDefinition>;\n\nexport type ContextObject = {\n \"@context\": Context;\n}\n\nconst jsonFetch = async (url: string) => {\n const response = await fetch(url, {\n headers: {'Accept': 'application/json'},\n });\n return await response.json() as ContextObject;\n};\n\nconst mergeContexts = (definitions: ContextDefinition[]) => {\n const mergePair = (a: ContextDefinition | null | undefined,\n b: ContextDefinition): ContextDefinition => {\n if (!a || !Object.keys(a).length) {\n return b;\n }\n const result = {...a};\n for (const [k, v] of Object.entries(b)) {\n result[k] = v;\n }\n return result;\n };\n\n if (!definitions.length) {\n return {};\n }\n if (definitions.length === 1) {\n return definitions[0];\n }\n let currentContext = definitions[0];\n for (let i = 1; i < definitions.length; i++) {\n currentContext = mergePair(currentContext, definitions[i]);\n }\n return currentContext;\n};\n\n\nconst urlCache = new Map<string, Promise<ContextDefinition>>();\n\nexport async function loadContext(context: Context | ContextObject) {\n const walk = async (definition: object, refChain?: string[]) => {\n for (const [key, value] of Object.entries(definition)) {\n if (key === '@context') {\n // @ts-ignore\n definition[key] = await load(value as Context, refChain);\n } else if (typeof value === 'object' && value !== null) {\n await walk(value, refChain);\n }\n }\n };\n\n const load = async (context: Context, refChain?: string[]): Promise<ContextDefinition> => {\n if (context === null || typeof context === 'undefined') {\n return {};\n }\n if (Array.isArray(context)) {\n // fetch and merge\n const contextEntries = await Promise.all(context.map(e => load(e, refChain)));\n return mergeContexts(contextEntries);\n } else if (typeof context === 'object') {\n await walk(context, refChain);\n return context;\n } else {\n if (refChain?.includes(context)) {\n throw new Error('Circular dependencies found: ' + refChain.join(' -> ') + ' -> ' + context);\n }\n const newRefChain = Array.isArray(refChain) ? refChain?.slice() : [];\n newRefChain.push(context);\n if (!urlCache.has(context)) {\n urlCache.set(context, jsonFetch(context).then(obj => load(obj['@context'], newRefChain)));\n }\n return urlCache.get(context) as Promise<ContextDefinition>;\n }\n };\n\n if (typeof context === 'object' && context !== null && '@context' in context) {\n return load((context as ContextObject)['@context']);\n } else {\n return load(context);\n }\n}","const ns = (base: string) => (local: string): string => `${base}${local}`;\n\nexport const SKOS = ns('http://www.w3.org/2004/02/skos/core#');\nexport const RDFS = ns('http://www.w3.org/2000/01/rdf-schema#');\nexport const RDF = ns('http://www.w3.org/1999/02/22-rdf-syntax-ns#');\nexport const DCT = ns('http://purl.org/dc/terms/');\nexport const DC = ns('http://purl.org/dc/elements/1.1/');\nexport const SDO = ns('https://schema.org/');\nexport const FOAF = ns('http://xmlns.com/foaf/0.1/');\n\nexport const labelPredicates: string[] = [\n SKOS('prefLabel'),\n DCT('title'),\n DC('title'),\n SDO('name'),\n FOAF('name'),\n RDFS('label'),\n];\n\nexport const descriptionPredicates: string[] = [\n SKOS('definition'),\n DCT('description'),\n DC('description'),\n RDFS('comment'),\n];","import {loadContext} from \"./jsonld\";\nimport {descriptionPredicates, labelPredicates} from \"./constants\";\nimport * as N3 from 'n3';\nimport {RdfXmlParser} from 'rdfxml-streaming-parser';\n\nexport interface FetchResourceOptions {\n labelPredicates: string[],\n descriptionPredicates: string[],\n fallbackRainbowInstance?: string, // deprecated: use fallbackRainbowInstances\n fallbackRainbowInstances?: string | string[],\n fallbackSparqlEndpoint?: string, // deprecated: use fallbackSparqlEndpoints\n fallbackSparqlEndpoints?: string | string[],\n}\n\nexport const defaultFetchResourceOptions: FetchResourceOptions = {\n labelPredicates,\n descriptionPredicates,\n};\n\nexport interface CreatePropertiesTableOptions {\n propertiesField?: string | null,\n}\n\nexport interface ResourceData {\n uri: string,\n label: string | null,\n description?: string | null,\n}\n\nconst fetchResourceCache: { [uri: string]: Promise<ResourceData> } = {};\nconst requestCache: { [url: string]: Promise<N3.Store | null> } = {};\n\nconst N3_CONTENT_TYPES = new Set([\n 'text/turtle',\n 'text/n3',\n 'application/n-triples',\n 'application/n-quads',\n 'application/trig',\n 'text/anot+turtle',\n]);\n\nconst ACCEPT_HEADER = [\n 'text/turtle',\n 'application/n-triples',\n 'application/n-quads',\n 'application/trig',\n 'application/ld+json',\n 'application/rdf+xml',\n].join(', ');\n\nfunction getUserLanguages(): string[] {\n if (typeof navigator !== 'undefined' && navigator.languages?.length) {\n return Array.from(navigator.languages);\n }\n try {\n return [Intl.DateTimeFormat().resolvedOptions().locale];\n } catch {\n return [];\n }\n}\n\nexport function findInStore(store: N3.Store, subjectUri: string, predicates: string[], userLangs = getUserLanguages()): string | null {\n const subj = N3.DataFactory.namedNode(subjectUri);\n for (const predUri of predicates) {\n const quads = store\n .getQuads(subj, N3.DataFactory.namedNode(predUri), null, null)\n .filter(q => q.object.termType === 'Literal');\n if (!quads.length) {\n continue;\n }\n for (const lang of userLangs) {\n const base = lang.split('-')[0].toLowerCase();\n const match = quads.find(q => {\n const qLang = (q.object as N3.Literal).language?.toLowerCase();\n return qLang === lang.toLowerCase() || qLang?.split('-')[0] === base;\n });\n if (match) {\n return match.object.value;\n }\n }\n const noLang = quads.find(q => !(q.object as N3.Literal).language);\n if (noLang) {\n return noLang.object.value;\n }\n const en = quads.find(q => (q.object as N3.Literal).language?.toLowerCase() === 'en');\n return (en ?? quads[0]).object.value;\n }\n return null;\n}\n\nfunction parseTurtle(text: string, baseIRI: string, contentType: string): Promise<N3.Store> {\n const store = new N3.Store();\n const format = contentType === 'text/anot+turtle' ? 'text/turtle' : contentType as any;\n const parser = new N3.Parser({baseIRI, format});\n return new Promise((resolve, reject) => {\n parser.parse(text, (err, quad) => {\n if (err) {\n return reject(err);\n }\n if (quad) {\n store.addQuad(quad);\n }\n else {\n resolve(store);\n }\n });\n });\n}\n\nasync function parseJsonLd(text: string, baseIRI: string): Promise<N3.Store> {\n const jsonldMod = await import('jsonld') as any;\n if (!jsonldMod) {\n throw new Error('jsonld peer dependency is not available');\n }\n const doc = JSON.parse(text);\n const nquads = await jsonldMod.toRDF(doc, {format: 'application/n-quads', base: baseIRI});\n return parseTurtle(nquads, baseIRI, 'application/n-quads');\n}\n\nasync function parseRdfXml(text: string, baseIRI: string): Promise<N3.Store> {\n const store = new N3.Store();\n return new Promise((resolve, reject) => {\n const parser = new RdfXmlParser({baseIRI});\n parser.on('data', (quad: any) => store.addQuad(quad));\n parser.on('error', reject);\n parser.on('end', () => resolve(store));\n parser.write(text);\n parser.end();\n });\n}\n\nconst toArray = (val?: string | string[]): string[] =>\n !val ? [] : Array.isArray(val) ? val : [val];\n\nconst getSparqlQuery = (uri: string) => `DESCRIBE <${uri}>`;\n\nconst fetchAndParse = async (fetchFn: () => Promise<Response>, baseIRI: string): Promise<N3.Store | null> => {\n let response: Response;\n try {\n response = await fetchFn();\n if (!response.ok) {\n return null;\n }\n } catch {\n return null;\n }\n const contentType = response.headers.get('content-type')?.split(';')[0].trim() || 'text/turtle';\n const text = await response.text();\n try {\n if (N3_CONTENT_TYPES.has(contentType)) {\n return parseTurtle(text, baseIRI, contentType);\n }\n if (contentType === 'application/ld+json') {\n return parseJsonLd(text, baseIRI);\n }\n if (contentType === 'application/rdf+xml') {\n return parseRdfXml(text, baseIRI);\n }\n } catch {\n }\n return null;\n};\n\nconst fetchAndParseDocument = (docUrl: string, fetchFn: () => Promise<Response>): Promise<N3.Store | null> => {\n if (!(docUrl in requestCache)) {\n requestCache[docUrl] = fetchAndParse(fetchFn, docUrl);\n }\n return requestCache[docUrl];\n};\n\nconst findResourceInStore = async (storePromise: Promise<N3.Store | null>, uri: string, options: FetchResourceOptions): Promise<ResourceData | null> => {\n const store = await storePromise;\n if (!store) {\n return null;\n }\n const label = findInStore(store, uri, options.labelPredicates);\n if (!label) {\n return null;\n }\n return {uri, label, description: findInStore(store, uri, options.descriptionPredicates)};\n};\n\nconst actualFetchResource = async (uri: string, options: FetchResourceOptions): Promise<ResourceData> => {\n const docUrl = uri.includes('#') ? uri.split('#')[0] : uri;\n\n // 1. Direct (cached by document URL so hash siblings share one request)\n let result = await findResourceInStore(\n fetchAndParseDocument(docUrl, () => fetch(docUrl, {headers: {'Accept': ACCEPT_HEADER}})),\n uri, options,\n );\n\n // 2. Rainbow proxies (in order) — not supported for hash URIs\n const isHashUri = uri.includes('#');\n for (const instance of [...toArray(options.fallbackRainbowInstances), ...toArray(options.fallbackRainbowInstance)]) {\n if (result || isHashUri) {\n break;\n }\n const rainbowURL = new URL(instance);\n rainbowURL.searchParams.set('uri', uri);\n const rainbowUrlStr = rainbowURL.toString();\n result = await findResourceInStore(\n fetchAndParseDocument(rainbowUrlStr, () => fetch(rainbowUrlStr, {headers: {'Accept': ACCEPT_HEADER}})),\n uri, options,\n );\n }\n\n // 3. SPARQL endpoints (in order) — each DESCRIBE is unique per URI, no request cache\n for (const endpoint of [...toArray(options.fallbackSparqlEndpoints), ...toArray(options.fallbackSparqlEndpoint)]) {\n if (result) {\n break;\n }\n const formBody = new URLSearchParams({query: getSparqlQuery(uri)});\n result = await findResourceInStore(\n fetchAndParse(() => fetch(endpoint, {\n method: 'POST',\n headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'text/turtle, application/n-triples'},\n body: formBody.toString(),\n }), uri),\n uri, options,\n );\n }\n\n if (!result) {\n throw new Error(`No label data found for <${uri}>`);\n }\n return result;\n};\n\nexport async function fetchResource(uri: string, options: Partial<FetchResourceOptions> = {}) {\n const mergedOptions: FetchResourceOptions = {...defaultFetchResourceOptions, ...options};\n if (!(uri in fetchResourceCache)) {\n fetchResourceCache[uri] = actualFetchResource(uri, mergedOptions);\n }\n return fetchResourceCache[uri];\n}\n\nexport async function loadFeature(url: string) {\n const response = await fetch(url, {\n headers: {\n 'Accept': 'application/ld+json, application/json;q=0.9, */*;q=0.1',\n },\n });\n if (!response.ok) {\n throw new Error(`Could not load feature ${url}: ${response.status} - ${response.statusText}`);\n }\n const feature = await response.json();\n const context = await loadContext(feature);\n return {\n feature,\n context,\n };\n}","import {\n CreatePropertiesTableOptions,\n defaultFetchResourceOptions,\n fetchResource,\n FetchResourceOptions,\n} from \"./resource\";\nimport {ContextDefinition, ExpandedTermDefinition} from \"jsonld\";\n\nexport interface AugmentOptions extends FetchResourceOptions {\n replaceElements: boolean,\n}\n\nconst defaultAugmentOptions: AugmentOptions = {\n replaceElements: true,\n ...defaultFetchResourceOptions,\n};\n\nexport function createPropertiesTable(feature: { [index: string]: any }, container: HTMLElement,\n options: CreatePropertiesTableOptions = {\n propertiesField: 'properties',\n }) {\n const createLevel = (parent: HTMLElement, value: any, addHeaders = false) => {\n if (Array.isArray(value)) {\n for (const entry of value) {\n const newElem = createLevel(parent, entry);\n newElem.classList.add('array-entry');\n }\n return parent;\n } else if (value === null || typeof value === 'undefined' || typeof value !== 'object') {\n const span = document.createElement('span');\n span.classList.add('literal-value');\n span.textContent = '' + value;\n parent.appendChild(span);\n return span;\n } else {\n const table = document.createElement('table');\n table.classList.add('object-table');\n if (addHeaders) {\n table.innerHTML = '<thead><tr><th>Property</th><th>Value</th></tr></thead>';\n }\n const tbody = document.createElement('tbody');\n Object.entries(value).forEach(([k, v]) => {\n const row = document.createElement('tr');\n const keyCell = document.createElement('td');\n keyCell.classList.add('object-property');\n keyCell.setAttribute('data-property', k);\n keyCell.textContent = k;\n row.appendChild(keyCell);\n const valueCell = document.createElement('td');\n valueCell.classList.add('object-value');\n createLevel(valueCell, v);\n row.appendChild(valueCell);\n tbody.appendChild(row);\n });\n table.appendChild(tbody);\n parent.appendChild(table);\n return table;\n }\n };\n const wrapper = document.createElement('div');\n wrapper.classList.add('object-properties');\n container.appendChild(wrapper);\n if (options.propertiesField) {\n createLevel(wrapper, feature[options.propertiesField], true);\n } else {\n createLevel(wrapper, feature, true);\n }\n}\n\nexport async function augment(rootElem: HTMLElement, context: ContextDefinition, options: Partial<AugmentOptions> = {}) {\n\n const mergedOptions = {...defaultAugmentOptions, ...options};\n\n const resolveTerm = (term: string, contextStack: ContextDefinition[],\n useVocab = true, useBase = false): ExpandedTermDefinition | null => {\n if (term.indexOf('://') !== -1) {\n return {'@id': term};\n }\n let closestVocab: string | null = null;\n let closestBase: string | null = null;\n for (let i = contextStack.length - 1; i >= 0; i--) {\n if (term in contextStack[i]) {\n let resolvedTerm = contextStack[i][term];\n let resolvedId: string;\n if (resolvedTerm === null || typeof resolvedTerm === 'undefined' || typeof resolvedTerm === 'boolean'\n || Array.isArray(resolvedTerm)) {\n continue;\n }\n if (typeof resolvedTerm === 'string') {\n if (resolvedTerm === '@type') {\n return {'@id': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'};\n }\n resolvedId = resolvedTerm;\n resolvedTerm = {'@id': resolvedTerm};\n } else if (typeof resolvedTerm === 'object' && '@id' in resolvedTerm && typeof resolvedTerm['@id'] === 'string') {\n resolvedId = resolvedTerm['@id'];\n } else {\n continue;\n }\n const idx = resolvedId.indexOf(':');\n if (idx > -1) {\n const prefix = resolvedId.substring(0, idx);\n const localPart = resolvedId.substring(idx + 1);\n if (localPart.startsWith('//')) {\n // Full URI -> return\n return resolvedTerm;\n }\n const resolvedPrefix = resolveTerm(prefix, contextStack);\n if (resolvedPrefix !== null && '@id' in resolvedPrefix && typeof resolvedPrefix['@id'] === 'string') {\n // Prefix found and resolved\n resolvedTerm['@id'] = `${resolvedPrefix['@id']}${localPart}`;\n }\n return resolvedTerm;\n }\n }\n if (closestVocab === null && contextStack[i]['@vocab']) {\n closestVocab = contextStack[i]['@vocab']!;\n }\n if (closestBase === null && contextStack[i]['@base']) {\n closestBase = contextStack[i]['@base']!;\n }\n }\n if (term.indexOf(':') === -1) {\n if (useVocab && closestVocab) {\n return {'@id': `${closestVocab}${term}`};\n }\n if (useBase && closestBase) {\n return {'@id': `${closestBase}${term}`};\n }\n }\n return null;\n };\n\n const findPropertyChildren = (elem: HTMLElement) => {\n const walker = document.createTreeWalker(elem, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node: Node): number {\n const nodeElem = node as HTMLElement;\n if (node !== elem && nodeElem.classList.contains('object-value')) {\n return NodeFilter.FILTER_REJECT;\n }\n if (nodeElem.classList.contains('object-property')) {\n return NodeFilter.FILTER_ACCEPT;\n }\n return NodeFilter.FILTER_SKIP;\n },\n });\n const result: HTMLElement[] = [];\n let cur;\n while ((cur = walker.nextNode())) {\n result.push(cur as HTMLElement);\n }\n return result;\n };\n\n const findLiteralChildren = (elem: HTMLElement) => {\n const result: HTMLElement[] = [];\n const walker = document.createTreeWalker(elem, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node: Node): number {\n const nodeElem = node as HTMLElement;\n if (nodeElem.classList.contains('object-property') || nodeElem.classList.contains('object-value')) {\n return NodeFilter.FILTER_REJECT;\n }\n if (nodeElem.classList.contains('literal-value')) {\n result.push(nodeElem);\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) {\n }\n return result;\n };\n\n const updateElement = (elem: HTMLElement, resourceUri: string,\n replaceElements = true) => {\n elem.setAttribute('data-uri', resourceUri);\n elem.classList.add('resource-loading');\n fetchResource(resourceUri, mergedOptions)\n .then(resourceData => {\n let elemToUpdate = elem.querySelector('.resource-link') as HTMLElement || elem;\n if (resourceData.label) {\n elem.setAttribute('data-label', resourceData.label);\n if (mergedOptions.replaceElements) {\n elemToUpdate.textContent = resourceData.label;\n }\n }\n if (resourceData.description) {\n elem.setAttribute('data-description', resourceData.description);\n if (mergedOptions.replaceElements) {\n elemToUpdate.title = resourceData.description;\n }\n }\n elem.classList.add('resource-resolved');\n })\n .catch(e => {\n console.error(`Error resolving URI ${resourceUri}: ${e}`, {cause: e});\n elem.classList.add('resource-error');\n })\n .finally(() => {\n elem.classList.remove('resource-loading');\n });\n if (replaceElements) {\n const link = document.createElement(\"a\");\n link.href = resourceUri;\n link.target = '_blank';\n link.classList.add('resource-link');\n while (elem.firstChild) {\n link.appendChild(elem.firstChild);\n }\n elem.appendChild(link);\n }\n };\n\n const augmentInner = (elem: HTMLElement, contextStack: ContextDefinition[]) => {\n const propElems = findPropertyChildren(elem);\n for (const propElem of propElems) {\n let propertyName: string | null = null;\n propertyName = propElem.getAttribute('data-property');\n if (!propertyName) {\n propertyName = propElem.textContent.trim();\n }\n const resolvedProperty = resolveTerm(propertyName, contextStack);\n let newContextStack = contextStack;\n const valueElem = propElem.parentElement?.querySelector('.object-value') as HTMLElement;\n if (resolvedProperty && '@id' in resolvedProperty && typeof resolvedProperty['@id'] === 'string') {\n const propertyUri = resolvedProperty['@id'];\n updateElement(propElem, propertyUri, mergedOptions.replaceElements);\n if ('@context' in resolvedProperty) {\n newContextStack = [...contextStack, resolvedProperty['@context']!];\n }\n if (resolvedProperty['@type'] === '@id' && valueElem) {\n const literalElems = findLiteralChildren(valueElem);\n literalElems.forEach(literalElem => {\n const resolvedLiteral = resolveTerm(literalElem.textContent.trim(),\n newContextStack, false, true);\n if (resolvedLiteral && '@id' in resolvedLiteral && typeof resolvedLiteral['@id'] === 'string') {\n const resourceUri = resolvedLiteral['@id'];\n updateElement(literalElem, resourceUri, mergedOptions.replaceElements);\n }\n });\n }\n }\n if (valueElem) {\n augmentInner(valueElem as HTMLElement, newContextStack);\n }\n }\n };\n augmentInner(rootElem, [context]);\n}\n","export interface CrsInfo {\n epsgCode: number;\n epoch?: number;\n}\n\nconst WGS84_EPSG_CODES = new Set([4326, 4979]);\n\nconst proj4DefCache = new Map<number, string>();\n\nfunction extractEpsgCode(uri: string): number | null {\n // http(s)://www.opengis.net/def/crs/EPSG/0/5514\n let m = uri.match(/\\/crs\\/EPSG\\/[^/]+\\/(\\d+)$/i);\n if (m) return parseInt(m[1], 10);\n // urn:ogc:def:crs:EPSG::5514\n m = uri.match(/urn:ogc:def:crs:EPSG::(\\d+)$/i);\n if (m) return parseInt(m[1], 10);\n // EPSG:5514\n m = uri.match(/^EPSG:(\\d+)$/);\n if (m) return parseInt(m[1], 10);\n return null;\n}\n\nfunction isWgs84(uri: string): boolean {\n const code = extractEpsgCode(uri);\n if (code !== null) return WGS84_EPSG_CODES.has(code);\n return /\\/OGC\\/[^/]+\\/CRS84h?$/i.test(uri) || /urn:ogc:def:crs:OGC:[^:]*:CRS84h?$/i.test(uri);\n}\n\nfunction parseSingleCrs(value: unknown): CrsInfo | null {\n if (typeof value === 'string') {\n if (isWgs84(value)) return null;\n const code = extractEpsgCode(value);\n return code !== null ? {epsgCode: code} : null;\n }\n if (value !== null && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n if (obj['type'] === 'Reference' && typeof obj['href'] === 'string') {\n if (isWgs84(obj['href'])) return null;\n const code = extractEpsgCode(obj['href']);\n if (code === null) return null;\n return {\n epsgCode: code,\n epoch: typeof obj['epoch'] === 'number' ? obj['epoch'] : undefined,\n };\n }\n }\n return null;\n}\n\nfunction parseCoordRefSys(coordRefSys: unknown): CrsInfo | null {\n if (Array.isArray(coordRefSys)) {\n for (const item of coordRefSys) {\n const result = parseSingleCrs(item);\n if (result !== null) return result;\n }\n return null;\n }\n return parseSingleCrs(coordRefSys);\n}\n\nfunction parseLegacyCrs(crs: unknown): CrsInfo | null {\n if (!crs || typeof crs !== 'object') return null;\n const obj = crs as Record<string, unknown>;\n if (obj['type'] !== 'name') return null;\n const props = obj['properties'];\n if (!props || typeof props !== 'object') return null;\n const name = (props as Record<string, unknown>)['name'];\n if (typeof name !== 'string') return null;\n if (isWgs84(name)) return null;\n const code = extractEpsgCode(name);\n return code !== null ? {epsgCode: code} : null;\n}\n\n/**\n * Detects the CRS from a GeoJSON/JSON-FG object.\n *\n * Checks in priority order:\n * 1. JSON-FG `coordRefSys` (URI string, Reference object, or compound array)\n * 2. Legacy GeoJSON `crs` with type \"name\"\n *\n * Returns null if the CRS is WGS84 or cannot be determined (no transform needed).\n */\nexport function detectCrs(data: unknown): CrsInfo | null {\n if (!data || typeof data !== 'object') return null;\n const obj = data as Record<string, unknown>;\n\n if ('coordRefSys' in obj) {\n const result = parseCoordRefSys(obj['coordRefSys']);\n if (result !== null) return result;\n }\n if ('crs' in obj) {\n const result = parseLegacyCrs(obj['crs']);\n if (result !== null) return result;\n }\n return null;\n}\n\n/**\n * Returns a proj4 converter from the given EPSG CRS to WGS84.\n * Fetches the projection definition from epsg.io if not already registered.\n */\nexport async function getProjectionConverter(crsInfo: CrsInfo, proj4Instance: any): Promise<any> {\n const key = `EPSG:${crsInfo.epsgCode}`;\n\n if (crsInfo.epoch !== undefined) {\n console.warn(`CRS epoch ${crsInfo.epoch} ignored — proj4js does not support coordinate epochs.`);\n }\n\n if (!proj4Instance.defs(key)) {\n let defStr = proj4DefCache.get(crsInfo.epsgCode);\n if (!defStr) {\n const response = await fetch(`https://epsg.io/${crsInfo.epsgCode}.proj4`);\n if (!response.ok) {\n throw new Error(\n `Unknown CRS EPSG:${crsInfo.epsgCode} — could not retrieve a definition from epsg.io (HTTP ${response.status})`\n );\n }\n defStr = (await response.text()).trim();\n if (!defStr) {\n throw new Error(`Unknown CRS EPSG:${crsInfo.epsgCode} — epsg.io returned an empty definition`);\n }\n proj4DefCache.set(crsInfo.epsgCode, defStr);\n }\n proj4Instance.defs(key, defStr);\n }\n\n return proj4Instance(key, 'WGS84');\n}\n\nfunction transformCoords(coords: number[], converter: any): number[] {\n const projected: number[] = converter.forward(coords.slice(0, 2));\n return coords.length > 2 ? [projected[0], projected[1], coords[2]] : [projected[0], projected[1]];\n}\n\nfunction transformGeometry(geometry: any, converter: any): any {\n if (!geometry) return geometry;\n switch (geometry.type) {\n case 'Point':\n return {...geometry, coordinates: transformCoords(geometry.coordinates, converter)};\n case 'MultiPoint':\n case 'LineString':\n return {\n ...geometry,\n coordinates: geometry.coordinates.map((c: number[]) => transformCoords(c, converter)),\n };\n case 'MultiLineString':\n case 'Polygon':\n return {\n ...geometry,\n coordinates: geometry.coordinates.map((r: number[][]) =>\n r.map((c: number[]) => transformCoords(c, converter))\n ),\n };\n case 'MultiPolygon':\n return {\n ...geometry,\n coordinates: geometry.coordinates.map((p: number[][][]) =>\n p.map((r: number[][]) => r.map((c: number[]) => transformCoords(c, converter)))\n ),\n };\n case 'GeometryCollection':\n return {\n ...geometry,\n geometries: geometry.geometries.map((g: any) => transformGeometry(g, converter)),\n };\n default:\n return geometry;\n }\n}\n\n/**\n * Deep-clones and transforms all geometries in a FeatureCollection or Feature\n * from the given CRS to WGS84. Per the JSON-FG scoping rules, individual features\n * may carry their own `coordRefSys` that overrides the collection-level one.\n */\nexport async function transformFeatureCollection(\n data: any,\n collectionCrs: CrsInfo,\n proj4Instance: any,\n): Promise<any> {\n const collectionConverter = await getProjectionConverter(collectionCrs, proj4Instance);\n\n const transformFeature = async (feature: any): Promise<any> => {\n const featureCrs = detectCrs(feature);\n let converter = collectionConverter;\n if (featureCrs !== null && featureCrs.epsgCode !== collectionCrs.epsgCode) {\n converter = await getProjectionConverter(featureCrs, proj4Instance);\n }\n return {...feature, geometry: transformGeometry(feature.geometry, converter)};\n };\n\n if (data.type === 'FeatureCollection') {\n return {...data, features: await Promise.all((data.features ?? []).map(transformFeature))};\n }\n if (data.type === 'Feature') {\n return transformFeature(data);\n }\n return data;\n}\n","import {createPropertiesTable, augment, AugmentOptions} from './augment';\nimport {loadContext, type Context, type ContextObject} from './jsonld';\nimport {detectCrs, transformFeatureCollection} from './crs';\nimport proj4Lib from 'proj4';\n\nexport interface JsonLDGeoJSONOptions {\n ldContext?: Context | ContextObject;\n popupOptions?: Record<string, any>;\n augmentOptions?: Partial<AugmentOptions>;\n onEachFeature?: (feature: any, layer: any) => void;\n /** Override the auto-detected CRS with an explicit URI (e.g. \"EPSG:5514\"). */\n coordRefSys?: string;\n /** Inject a proj4 instance. Useful in environments where window.proj4 is not available. */\n proj4?: any;\n [key: string]: any;\n}\n\nexport async function createJsonLDGeoJSONLayer(L: any, data: any, options: JsonLDGeoJSONOptions = {}): Promise<any> {\n const {\n ldContext,\n popupOptions = {maxWidth: 400},\n augmentOptions = {},\n onEachFeature: userOnEachFeature,\n coordRefSys: coordRefSysOverride,\n proj4: proj4Override,\n ...geoJSONOptions\n } = options;\n\n let geoData = data;\n const crsInfo = coordRefSysOverride\n ? detectCrs({coordRefSys: coordRefSysOverride})\n : detectCrs(data);\n\n if (crsInfo !== null) {\n const proj4Instance = proj4Override ?? proj4Lib;\n if (!proj4Instance) {\n throw new Error(\n 'proj4js is required for CRS transformation — include it via <script src=\"...\"> or install it as a dependency'\n );\n }\n geoData = await transformFeatureCollection(data, crsInfo, proj4Instance);\n }\n\n return L.geoJSON(geoData, {\n ...geoJSONOptions,\n onEachFeature(feature: any, layer: any) {\n if (userOnEachFeature) userOnEachFeature(feature, layer);\n\n if (feature.id != null) {\n layer.bindTooltip(String(feature.id), {permanent: false});\n }\n\n if (!feature.properties || Object.keys(feature.properties).length === 0) return;\n\n const container = document.createElement('div');\n createPropertiesTable(feature, container);\n layer.bindPopup(container, popupOptions);\n\n if (ldContext) {\n loadContext(ldContext).then((resolvedContext: any) => {\n augment(container, resolvedContext, augmentOptions);\n });\n }\n },\n });\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengeospatial/jsonld-ui-utils",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@babel/core": "^7.28.5",
|
|
24
|
+
"proj4": "^2.0.0",
|
|
24
25
|
"@babel/preset-env": "^7.28.5",
|
|
25
26
|
"@rollup/plugin-babel": "^6.1.0",
|
|
26
27
|
"@rollup/plugin-commonjs": "^29.0.0",
|
|
@@ -50,7 +51,8 @@
|
|
|
50
51
|
},
|
|
51
52
|
"peerDependencies": {
|
|
52
53
|
"jsonld": ">=8.0.0",
|
|
53
|
-
"leaflet": ">=1.0.0"
|
|
54
|
+
"leaflet": ">=1.0.0",
|
|
55
|
+
"proj4": ">=2.0.0"
|
|
54
56
|
},
|
|
55
57
|
"peerDependenciesMeta": {
|
|
56
58
|
"jsonld": {
|
|
@@ -58,6 +60,9 @@
|
|
|
58
60
|
},
|
|
59
61
|
"leaflet": {
|
|
60
62
|
"optional": true
|
|
63
|
+
},
|
|
64
|
+
"proj4": {
|
|
65
|
+
"optional": true
|
|
61
66
|
}
|
|
62
67
|
},
|
|
63
68
|
"repository": {
|