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.
55 lines (54 loc) • 2.27 kB
JavaScript
const require_utils = require("../../../common/utils.cjs");
//#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 (!require_utils.isObject(point)) return;
return generateLatLngPairs([point], {
min: 1,
max: 1
});
};
const generateLine = (line) => {
if (!require_utils.isObject(line)) return;
return generateLatLngPairs(line.points, { min: 2 });
};
const generatePolygon = (polygon) => {
if (!require_utils.isObject(polygon)) return;
return generateLatLngPairs(polygon.points, { min: 4 });
};
const generateBox = (box) => {
if (!require_utils.isObject(box) || !box.lowerCorner || !box.upperCorner) return;
return generateLatLngPairs([box.lowerCorner, box.upperCorner], {
min: 2,
max: 2
});
};
const generateItemOrFeed = (itemOrFeed) => {
if (!require_utils.isObject(itemOrFeed)) return;
return require_utils.trimObject({
"georss:point": generatePoint(itemOrFeed.point),
"georss:line": generateLine(itemOrFeed.line),
"georss:polygon": generatePolygon(itemOrFeed.polygon),
"georss:box": generateBox(itemOrFeed.box),
"georss:featureTypeTag": require_utils.generateCdataString(itemOrFeed.featureTypeTag),
"georss:relationshipTag": require_utils.generateCdataString(itemOrFeed.relationshipTag),
"georss:featureName": require_utils.generateCdataString(itemOrFeed.featureName),
"georss:elev": require_utils.generateNumber(itemOrFeed.elev),
"georss:floor": require_utils.generateNumber(itemOrFeed.floor),
"georss:radius": require_utils.generateNumber(itemOrFeed.radius)
});
};
//#endregion
exports.generateBox = generateBox;
exports.generateItemOrFeed = generateItemOrFeed;
exports.generateLatLngPairs = generateLatLngPairs;
exports.generateLine = generateLine;
exports.generatePoint = generatePoint;
exports.generatePolygon = generatePolygon;