feedsmith
Version:
Fast, all‑in‑one feed parser and generator for RSS, Atom, RDF, and JSON Feed, with support for Podcast, iTunes, Dublin Core, and OPML files.
50 lines (49 loc) • 2 kB
JavaScript
import { generateCdataString, generateNumber, isObject, trimObject } from "../../../common/utils.js";
//#region src/namespaces/georss/generate/utils.ts
const generateLatLngPairs = (points, pairsCount) => {
const coordinates = [];
for (const point of points) if (typeof point.lat === "number" && typeof point.lng === "number") coordinates.push(`${point.lat} ${point.lng}`);
if (coordinates.length === 0) return;
const actualPairCount = coordinates.length;
if (pairsCount?.min && actualPairCount < pairsCount.min || pairsCount?.max && actualPairCount > pairsCount.max) return;
return coordinates.join(" ");
};
const generatePoint = (point) => {
if (!isObject(point)) return;
return generateLatLngPairs([point], {
min: 1,
max: 1
});
};
const generateLine = (line) => {
if (!isObject(line)) return;
return generateLatLngPairs(line.points, { min: 2 });
};
const generatePolygon = (polygon) => {
if (!isObject(polygon)) return;
return generateLatLngPairs(polygon.points, { min: 4 });
};
const generateBox = (box) => {
if (!isObject(box) || !box.lowerCorner || !box.upperCorner) return;
return generateLatLngPairs([box.lowerCorner, box.upperCorner], {
min: 2,
max: 2
});
};
const generateItemOrFeed = (itemOrFeed) => {
if (!isObject(itemOrFeed)) return;
return trimObject({
"georss:point": generatePoint(itemOrFeed.point),
"georss:line": generateLine(itemOrFeed.line),
"georss:polygon": generatePolygon(itemOrFeed.polygon),
"georss:box": generateBox(itemOrFeed.box),
"georss:featureTypeTag": generateCdataString(itemOrFeed.featureTypeTag),
"georss:relationshipTag": generateCdataString(itemOrFeed.relationshipTag),
"georss:featureName": generateCdataString(itemOrFeed.featureName),
"georss:elev": generateNumber(itemOrFeed.elev),
"georss:floor": generateNumber(itemOrFeed.floor),
"georss:radius": generateNumber(itemOrFeed.radius)
});
};
//#endregion
export { generateBox, generateItemOrFeed, generateLatLngPairs, generateLine, generatePoint, generatePolygon };