@placemarkio/tokml
Version:
Convert GeoJSON to KML
1 lines • 48.2 kB
Source Map (JSON)
{"version":3,"file":"tokml.es.mjs","sources":["../node_modules/.pnpm/unist-builder@4.0.0/node_modules/unist-builder/lib/index.js","../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/core.js","../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-basic.js","../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/index.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/util-escape.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/cdata.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/comment.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/name.js","../node_modules/.pnpm/ccount@2.0.1/node_modules/ccount/index.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/value.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/doctype.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/element.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/instruction.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/text.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/raw.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/one.js","../node_modules/.pnpm/xast-util-to-xml@4.0.0/node_modules/xast-util-to-xml/lib/index.js","../node_modules/.pnpm/xastscript@4.0.0/node_modules/xastscript/lib/index.js","../lib/index.ts"],"sourcesContent":["/**\n * @typedef {import('unist').Node} Node\n */\n\n/**\n * @typedef {Array<Node> | string} ChildrenOrValue\n * List to use as `children` or value to use as `value`.\n *\n * @typedef {Record<string, unknown>} Props\n * Other fields to add to the node.\n */\n\n/**\n * Build a node.\n *\n * @template {string} T\n * @template {Props} P\n * @template {Array<Node>} C\n *\n * @overload\n * @param {T} type\n * @returns {{type: T}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @returns {{type: T} & P}\n *\n * @overload\n * @param {T} type\n * @param {string} value\n * @returns {{type: T, value: string}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @param {string} value\n * @returns {{type: T, value: string} & P}\n *\n * @overload\n * @param {T} type\n * @param {C} children\n * @returns {{type: T, children: C}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @param {C} children\n * @returns {{type: T, children: C} & P}\n *\n * @param {string} type\n * Node type.\n * @param {ChildrenOrValue | Props | null | undefined} [props]\n * Fields assigned to node (default: `undefined`).\n * @param {ChildrenOrValue | null | undefined} [value]\n * Children of node or value of `node` (cast to string).\n * @returns {Node}\n * Built node.\n */\nexport function u(type, props, value) {\n /** @type {Node} */\n const node = {type: String(type)}\n\n if (\n (value === undefined || value === null) &&\n (typeof props === 'string' || Array.isArray(props))\n ) {\n value = props\n } else {\n Object.assign(node, props)\n }\n\n if (Array.isArray(value)) {\n // @ts-expect-error: create a parent.\n node.children = value\n } else if (value !== undefined && value !== null) {\n // @ts-expect-error: create a literal.\n node.value = String(value)\n }\n\n return node\n}\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n * Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n * Whether to only escape possibly dangerous characters.\n * Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n * Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n value = value.replace(\n options.subset\n ? charactersToExpressionCached(options.subset)\n : defaultSubsetRegex,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(surrogatePairsRegex, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(controlCharactersRegex, basic)\n )\n\n /**\n * @param {string} pair\n * @param {number} index\n * @param {string} all\n */\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n /**\n * @param {string} character\n * @param {number} index\n * @param {string} all\n */\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n let cached = subsetToRegexCache.get(subset)\n\n if (!cached) {\n cached = charactersToExpression(subset)\n subsetToRegexCache.set(subset, cached)\n }\n\n return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n /** @type {Array<string>} */\n const groups = []\n let index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","/**\n * The smallest way to encode a character.\n *\n * @param {number} code\n * @returns {string}\n */\nexport function formatBasic(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n * Value to encode.\n * @param {Options} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntities(value, options) {\n return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n * Value to encode.\n * @param {LightOptions} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n return core(value, Object.assign({format: formatBasic}, options))\n}\n","import {stringifyEntitiesLight} from 'stringify-entities'\n\n// eslint-disable-next-line no-control-regex -- XO is wrong.\nconst noncharacter = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F]/g\n\n/**\n * Escape a string.\n *\n * @param {string} value\n * Raw string.\n * @param {Array<string>} subset\n * Characters to escape.\n * @param {RegExp | null | undefined} [unsafe]\n * Regex to scope `subset` to (optional).\n * @returns {string}\n * Escaped string.\n */\nexport function escape(value, subset, unsafe) {\n const result = clean(value)\n\n return unsafe ? result.replace(unsafe, encode) : encode(result)\n\n /**\n * Actually escape characters.\n *\n * @param {string} value\n * Raw value.\n * @returns {string}\n * Copy of `value`, escaped.\n */\n function encode(value) {\n return stringifyEntitiesLight(value, {subset})\n }\n}\n\n/**\n * Remove non-characters.\n *\n * @param {string} value\n * Raw value.\n * @returns {string}\n * Copy of `value` with non-characters removed.\n */\nfunction clean(value) {\n return String(value || '').replace(noncharacter, '')\n}\n","/**\n * @typedef {import('xast').Cdata} Cdata\n */\n\nimport {escape} from './util-escape.js'\n\nconst unsafe = /]]>/g\nconst subset = ['>']\n\n/**\n * Serialize a CDATA section.\n *\n * @param {Cdata} node\n * xast cdata node.\n * @returns {string}\n * Serialized XML.\n */\nexport function cdata(node) {\n return '<![CDATA[' + escape(node.value, subset, unsafe) + ']]>'\n}\n","/**\n * @typedef {import('xast').Comment} Comment\n */\n\nimport {escape} from './util-escape.js'\n\n/**\n * Serialize a comment.\n *\n * @param {Comment} node\n * xast comment node.\n * @returns {string}\n * Serialized XML.\n */\nexport function comment(node) {\n return '<!--' + escape(node.value, ['-']) + '-->'\n}\n","import {escape} from './util-escape.js'\n\nconst subset = ['\\t', '\\n', ' ', '\"', '&', \"'\", '/', '<', '=', '>']\n\n/**\n * Encode a node name.\n *\n * @param {string} value\n * Raw name.\n * @returns {string}\n * Escaped name.\n */\nexport function name(value) {\n return escape(value, subset)\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @typedef {import('./index.js').State} State\n */\n\nimport {ccount} from 'ccount'\nimport {escape} from './util-escape.js'\n\n/**\n * Serialize an attribute value.\n *\n * @param {string} value\n * Raw attribute value.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized attribute value.\n */\nexport function value(value, state) {\n const result = String(value)\n let quote = state.options.quote || '\"'\n\n if (state.options.quoteSmart) {\n const other = quote === '\"' ? \"'\" : '\"'\n\n if (ccount(result, quote) > ccount(result, other)) {\n quote = other\n }\n }\n\n return quote + escape(result, ['<', '&', quote]) + quote\n}\n","/**\n * @typedef {import('xast').Doctype} Doctype\n * @typedef {import('./index.js').State} State\n */\n\nimport {name} from './name.js'\nimport {value} from './value.js'\n\n/**\n * Serialize a doctype.\n *\n * @param {Doctype} node\n * xast doctype node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized XML.\n */\nexport function doctype(node, state) {\n const nodeName = name(node.name)\n const pub = node.public\n const sys = node.system\n let result = '<!DOCTYPE'\n\n if (nodeName !== '') {\n result += ' ' + nodeName\n }\n\n if (pub) {\n result += ' PUBLIC ' + value(pub, state)\n } else if (sys) {\n result += ' SYSTEM'\n }\n\n if (sys) {\n result += ' ' + value(sys, state)\n }\n\n return result + '>'\n}\n","/**\n * @typedef {import('xast').Element} Element\n * @typedef {import('./index.js').State} State\n */\n\nimport {name} from './name.js'\nimport {all} from './one.js'\nimport {value} from './value.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Serialize an element.\n *\n * @param {Element} node\n * xast element node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized XML.\n */\nexport function element(node, state) {\n const nodeName = name(node.name)\n const content = all(node, state)\n const attributes = node.attributes || {}\n const close = content ? false : state.options.closeEmptyElements\n /** @type {Array<string>} */\n const attrs = []\n /** @type {string} */\n let key\n\n for (key in attributes) {\n if (own.call(attributes, key)) {\n const result = attributes[key]\n\n if (result !== null && result !== undefined) {\n attrs.push(name(key) + '=' + value(result, state))\n }\n }\n }\n\n return (\n '<' +\n nodeName +\n (attrs.length === 0 ? '' : ' ' + attrs.join(' ')) +\n (close ? (state.options.tightClose ? '' : ' ') + '/' : '') +\n '>' +\n content +\n (close ? '' : '</' + nodeName + '>')\n )\n}\n","/**\n * @typedef {import('xast').Instruction} Instruction\n */\n\nimport {name} from './name.js'\nimport {escape} from './util-escape.js'\n\nconst unsafe = /\\?>/g\nconst subset = ['>']\n\n/**\n * Serialize an instruction.\n *\n * @param {Instruction} node\n * xast instruction node.\n * @returns {string}\n * Serialized XML.\n */\nexport function instruction(node) {\n const nodeName = name(node.name) || 'x'\n const result = escape(node.value, subset, unsafe)\n return '<?' + nodeName + (result ? ' ' + result : '') + '?>'\n}\n","/**\n * @typedef {import('xast').Text} Text\n * @typedef {import('../index.js').Raw} Raw\n */\n\nimport {escape} from './util-escape.js'\n\nconst subset = ['&', '<']\n\n/**\n * Serialize a text.\n *\n * @param {Raw | Text} node\n * xast text node (or raw).\n * @returns {string}\n * Serialized XML.\n */\nexport function text(node) {\n return escape(node.value, subset)\n}\n","/**\n * @typedef {import('../index.js').Raw} Raw\n * @typedef {import('./index.js').State} State\n */\n\nimport {text} from './text.js'\n\n/**\n * Serialize a (non-standard) raw.\n *\n * @param {Raw} node\n * xast raw node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized XML.\n */\nexport function raw(node, state) {\n return state.options.allowDangerousXml ? node.value : text(node)\n}\n","/**\n * @typedef {import('xast').Nodes} Nodes\n * @typedef {import('xast').Parents} Parents\n * @typedef {import('xast').RootContent} RootContent\n * @typedef {import('./index.js').State} State\n */\n\nimport {cdata} from './cdata.js'\nimport {comment} from './comment.js'\nimport {doctype} from './doctype.js'\nimport {element} from './element.js'\nimport {instruction} from './instruction.js'\nimport {raw} from './raw.js'\nimport {text} from './text.js'\n\nconst own = {}.hasOwnProperty\n\nconst handlers = {\n cdata,\n comment,\n doctype,\n element,\n instruction,\n raw,\n root: all,\n text\n}\n\n/**\n * Serialize a node.\n *\n * @param {Nodes} node\n * xast node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized XML.\n */\nexport function one(node, state) {\n const type = node && node.type\n\n if (!type) {\n throw new Error('Expected node, not `' + node + '`')\n }\n\n if (!own.call(handlers, type)) {\n throw new Error('Cannot compile unknown node `' + type + '`')\n }\n\n const handle = handlers[type]\n // @ts-expect-error hush, node matches `type`.\n const result = handle(node, state)\n\n return result\n}\n\n/**\n * Serialize all children of `parent`.\n *\n * @param {Parents} parent\n * xast parent node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized XML.\n */\nexport function all(parent, state) {\n /** @type {Array<RootContent>} */\n const children = (parent && parent.children) || []\n let index = -1\n /** @type {Array<string>} */\n const results = []\n\n while (++index < children.length) {\n results[index] = one(children[index], state)\n }\n\n return results.join('')\n}\n","/**\n * @typedef {import('xast').Literal} Literal\n * @typedef {import('xast').Nodes} Nodes\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [allowDangerousXml=false]\n * Allow `raw` nodes and insert them as raw XML (default: `false`).\n *\n * When `false`, `Raw` nodes are encoded.\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [closeEmptyElements=false]\n * Close elements without any content with slash (`/`) on the opening tag\n * instead of an end tag: `<circle />` instead of `<circle></circle>`\n * (default: `false`).\n *\n * See `tightClose` to control whether a space is used before the slash.\n * @property {Quote | null | undefined} [quote='\"']\n * Preferred quote to use (default: `'\"'`).\n * @property {boolean | null | undefined} [quoteSmart=false]\n * Use the other quote if that results in less bytes (default: `false`).\n * @property {boolean | null | undefined} [tightClose=false]\n * Do not use an extra space when closing self-closing elements: `<circle/>`\n * instead of `<circle />` (default: `false`).\n *\n * > 👉 **Note**: only used if `closeEmptyElements: true`.\n *\n * @typedef {'\"' | \"'\"} Quote\n * XML quotes for attribute values.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {Options} options\n * Configuration.\n */\n\nimport {one} from './one.js'\n\n/**\n * Serialize a xast tree to XML.\n *\n * @param {Array<Nodes> | Nodes} tree\n * xast node(s) to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized XML.\n */\nexport function toXml(tree, options) {\n /** @type {State} */\n const state = {options: options || {}}\n\n // Make sure the quote is valid.\n if (\n typeof state.options.quote === 'string' &&\n state.options.quote !== '\"' &&\n state.options.quote !== \"'\"\n ) {\n throw new Error(\n 'Invalid quote `' + state.options.quote + '`, expected `\\'` or `\"`'\n )\n }\n\n /** @type {Nodes} */\n // @ts-expect-error Assume no `root` in `node`.\n const node = Array.isArray(tree) ? {type: 'root', children: tree} : tree\n\n return one(node, state)\n}\n","/**\n * @typedef {import('xast').Element} Element\n * @typedef {import('xast').Nodes} Nodes\n * @typedef {import('xast').Root} Root\n */\n\n/**\n * @typedef {Element | Root} Result\n * Result from a `x` call.\n *\n * @typedef {boolean | number | string | null | undefined} Value\n * Attribute value\n *\n * @typedef {{[attribute: string]: Value}} Attributes\n * Acceptable value for element properties.\n *\n * @typedef {boolean | number | string | null | undefined} PrimitiveChild\n * Primitive children, either ignored (nullish), or turned into text nodes.\n * @typedef {Array<Nodes | PrimitiveChild>} ArrayChild\n * List of children.\n * @typedef {Nodes | PrimitiveChild | ArrayChild} Child\n * Acceptable child value.\n */\n\n// Define JSX.\n\n/**\n * @typedef {import('./jsx-classic.js').Element} x.JSX.Element\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} x.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} x.JSX.IntrinsicElements\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} x.JSX.ElementChildrenAttribute\n */\n\n/**\n * Create XML trees in xast.\n *\n * @param name\n * Qualified name.\n *\n * Case sensitive and can contain a namespace prefix (such as `rdf:RDF`).\n * When string, an `Element` is built.\n * When nullish, a `Root` is built instead.\n * @param attributes\n * Attributes of the element or first child.\n * @param children\n * Children of the node.\n * @returns\n * `Element` or `Root`.\n */\nexport const x =\n // Note: not yet possible to use the spread `...children` in JSDoc overloads.\n /**\n * @type {{\n * (): Root\n * (name: null | undefined, ...children: Array<Child>): Root\n * (name: string, attributes?: Attributes, ...children: Array<Child>): Element\n * (name: string, ...children: Array<Child>): Element\n * }}\n */\n (\n /**\n * @param {string | null | undefined} [name]\n * @param {Attributes | Child | null | undefined} [attributes]\n * @param {Array<Child>} children\n * @returns {Result}\n */\n function (name, attributes, ...children) {\n let index = -1\n /** @type {Result} */\n let node\n\n if (name === undefined || name === null) {\n node = {type: 'root', children: []}\n // @ts-expect-error: Root builder doesn’t accept attributes.\n children.unshift(attributes)\n } else if (typeof name === 'string') {\n node = {type: 'element', name, attributes: {}, children: []}\n\n if (isAttributes(attributes)) {\n /** @type {string} */\n let key\n\n for (key in attributes) {\n // Ignore nullish and NaN values.\n if (\n attributes[key] !== undefined &&\n attributes[key] !== null &&\n (typeof attributes[key] !== 'number' ||\n !Number.isNaN(attributes[key]))\n ) {\n node.attributes[key] = String(attributes[key])\n }\n }\n } else {\n children.unshift(attributes)\n }\n } else {\n throw new TypeError('Expected element name, got `' + name + '`')\n }\n\n // Handle children.\n while (++index < children.length) {\n addChild(node.children, children[index])\n }\n\n return node\n }\n )\n\n/**\n * Add children.\n *\n * @param {Array<Child>} nodes\n * List of nodes.\n * @param {Child} value\n * Child.\n * @returns {undefined}\n * Nothing.\n */\nfunction addChild(nodes, value) {\n let index = -1\n\n if (value === undefined || value === null) {\n // Empty.\n } else if (typeof value === 'string' || typeof value === 'number') {\n nodes.push({type: 'text', value: String(value)})\n } else if (Array.isArray(value)) {\n while (++index < value.length) {\n addChild(nodes, value[index])\n }\n } else if (typeof value === 'object' && 'type' in value) {\n if (value.type === 'root') {\n addChild(nodes, value.children)\n } else {\n nodes.push(value)\n }\n } else {\n throw new TypeError('Expected node, nodes, string, got `' + value + '`')\n }\n}\n\n/**\n * Check if `value` is `Attributes`.\n *\n * @param {Attributes | Child} value\n * Value.\n * @returns {value is Attributes}\n * Whether `value` is `Attributes`.\n */\nfunction isAttributes(value) {\n if (\n value === null ||\n value === undefined ||\n typeof value !== 'object' ||\n Array.isArray(value)\n ) {\n return false\n }\n\n return true\n}\n","import type { Folder, Root } from \"@tmcw/togeojson\";\nimport type { Feature, FeatureCollection, Geometry, Position } from \"geojson\";\nimport { u } from \"unist-builder\";\nimport type { Element } from \"xast\";\nimport { toXml } from \"xast-util-to-xml\";\nimport { x } from \"xastscript\";\n\ntype F = Feature<Geometry | null>;\n\nconst BR = u(\"text\", \"\\n\");\nconst TAB = u(\"text\", \" \");\n\ntype Literal = typeof BR;\n\n/**\n * Convert nested folder structure to KML. This expects\n * input that follows the same patterns as [toGeoJSON](https://github.com/placemark/togeojson)'s\n * kmlWithFolders method: a tree of folders and features,\n * starting with a root element.\n */\nexport function foldersToKML(root: Root): string {\n\treturn toXml(\n\t\tu(\"root\", [\n\t\t\tx(\n\t\t\t\t\"kml\",\n\t\t\t\t{ xmlns: \"http://www.opengis.net/kml/2.2\" },\n\t\t\t\tx(\n\t\t\t\t\t\"Document\",\n\t\t\t\t\troot.children.flatMap((child) => convertChild(child)),\n\t\t\t\t),\n\t\t\t),\n\t\t]),\n\t);\n}\n\n/**\n * Convert a GeoJSON FeatureCollection to a string of\n * KML data.\n */\nexport function toKML(\n\tfeatureCollection: FeatureCollection<Geometry | null>,\n): string {\n\treturn toXml(\n\t\tu(\"root\", [\n\t\t\tx(\n\t\t\t\t\"kml\",\n\t\t\t\t{ xmlns: \"http://www.opengis.net/kml/2.2\" },\n\t\t\t\tx(\n\t\t\t\t\t\"Document\",\n\t\t\t\t\tfeatureCollection.features.flatMap((feature) =>\n\t\t\t\t\t\tconvertFeature(feature),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t]),\n\t);\n}\n\nfunction convertChild(child: F | Folder) {\n\tswitch (child.type) {\n\t\tcase \"Feature\":\n\t\t\treturn convertFeature(child);\n\t\tcase \"folder\":\n\t\t\treturn convertFolder(child);\n\t}\n}\n\nfunction convertFolder(folder: Folder): Array<Literal | Element> {\n\tconst id = [\"string\", \"number\"].includes(typeof folder.meta.id)\n\t\t? {\n\t\t\t\tid: String(folder.meta.id),\n\t\t\t}\n\t\t: {};\n\treturn [\n\t\tBR,\n\t\tx(\"Folder\", id, [\n\t\t\tBR,\n\t\t\t...folderMeta(folder.meta),\n\t\t\tBR,\n\t\t\tTAB,\n\t\t\t...folder.children.flatMap((child) => convertChild(child)),\n\t\t]),\n\t];\n}\n\nconst META_PROPERTIES = [\n\t\"address\",\n\t\"description\",\n\t\"name\",\n\t\"open\",\n\t\"visibility\",\n\t\"phoneNumber\",\n] as const;\n\nfunction folderMeta(meta: Folder[\"meta\"]): Element[] {\n\treturn META_PROPERTIES.filter((p) => meta[p] !== undefined).map((p) => {\n\t\treturn x(p, [u(\"text\", String(meta[p]))]);\n\t});\n}\n\nfunction convertFeature(feature: F) {\n\tconst { id } = feature;\n\tconst idMember = [\"string\", \"number\"].includes(typeof id)\n\t\t? {\n\t\t\t\tid: id,\n\t\t\t}\n\t\t: {};\n\treturn [\n\t\tBR,\n\t\tx(\"Placemark\", idMember, [\n\t\t\tBR,\n\t\t\t...propertiesToTags(feature.properties),\n\t\t\tBR,\n\t\t\tTAB,\n\t\t\t...(feature.geometry ? [convertGeometry(feature.geometry)] : []),\n\t\t]),\n\t];\n}\n\nfunction join(position: Position): string {\n\treturn `${position[0]},${position[1]}`;\n}\n\nfunction coord1(coordinates: Position): Element {\n\treturn x(\"coordinates\", [u(\"text\", join(coordinates))]);\n}\n\nfunction coord2(coordinates: Position[]): Element {\n\treturn x(\"coordinates\", [u(\"text\", coordinates.map(join).join(\"\\n\"))]);\n}\n\nfunction valueToString(value: any): string {\n\tswitch (typeof value) {\n\t\tcase \"string\": {\n\t\t\treturn value;\n\t\t}\n\t\tcase \"boolean\":\n\t\tcase \"number\": {\n\t\t\treturn String(value);\n\t\t}\n\t\tcase \"object\": {\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(value);\n\t\t\t} catch (_e) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction maybeCData(value: any) {\n\tif (\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\t\"@type\" in value &&\n\t\tvalue[\"@type\"] === \"html\" &&\n\t\t\"value\" in value &&\n\t\ttypeof value.value === \"string\"\n\t) {\n\t\treturn u(\"cdata\", value.value);\n\t}\n\n\treturn valueToString(value);\n}\n\nfunction propertiesToTags(properties: Feature[\"properties\"]): Element[] {\n\tif (!properties) return [];\n\tconst { name, description, visibility, ...otherProperties } = properties;\n\n\treturn [\n\t\tname && x(\"name\", [u(\"text\", valueToString(name))]),\n\t\tdescription && x(\"description\", [u(\"text\", maybeCData(description))]),\n\t\tvisibility !== undefined &&\n\t\t\tx(\"visibility\", [u(\"text\", visibility ? \"1\" : \"0\")]),\n\t\tx(\n\t\t\t\"ExtendedData\",\n\t\t\tObject.entries(otherProperties).flatMap(([name, value]) => [\n\t\t\t\tBR,\n\t\t\t\tTAB,\n\t\t\t\tx(\"Data\", { name: name }, [\n\t\t\t\t\tx(\"value\", [\n\t\t\t\t\t\tu(\n\t\t\t\t\t\t\t\"text\",\n\t\t\t\t\t\t\ttypeof value === \"string\" ? value : JSON.stringify(value),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t]),\n\t\t),\n\t].filter(Boolean);\n}\n\nconst linearRing = (ring: Position[]): Element =>\n\tx(\"LinearRing\", [coord2(ring)]);\n\nfunction convertMultiPoint(geometry: GeoJSON.MultiPoint): Element {\n\treturn x(\n\t\t\"MultiGeometry\",\n\t\tgeometry.coordinates.flatMap((coordinates) => [\n\t\t\tBR,\n\t\t\tconvertGeometry({\n\t\t\t\ttype: \"Point\",\n\t\t\t\tcoordinates,\n\t\t\t}),\n\t\t]),\n\t);\n}\nfunction convertMultiLineString(geometry: GeoJSON.MultiLineString): Element {\n\treturn x(\n\t\t\"MultiGeometry\",\n\t\tgeometry.coordinates.flatMap((coordinates) => [\n\t\t\tBR,\n\t\t\tconvertGeometry({\n\t\t\t\ttype: \"LineString\",\n\t\t\t\tcoordinates,\n\t\t\t}),\n\t\t]),\n\t);\n}\n\nfunction convertMultiPolygon(geometry: GeoJSON.MultiPolygon): Element {\n\treturn x(\n\t\t\"MultiGeometry\",\n\t\tgeometry.coordinates.flatMap((coordinates) => [\n\t\t\tBR,\n\t\t\tconvertGeometry({\n\t\t\t\ttype: \"Polygon\",\n\t\t\t\tcoordinates,\n\t\t\t}),\n\t\t]),\n\t);\n}\n\nfunction convertPolygon(geometry: GeoJSON.Polygon): Element {\n\tconst [outerBoundary, ...innerRings] = geometry.coordinates;\n\treturn x(\"Polygon\", [\n\t\tBR,\n\t\tx(\"outerBoundaryIs\", [BR, TAB, linearRing(outerBoundary)]),\n\t\t...innerRings.flatMap((innerRing) => [\n\t\t\tBR,\n\t\t\tx(\"innerBoundaryIs\", [BR, TAB, linearRing(innerRing)]),\n\t\t]),\n\t]);\n}\n\nfunction convertGeometry(geometry: Geometry): Element {\n\tswitch (geometry.type) {\n\t\tcase \"Point\":\n\t\t\treturn x(\"Point\", [coord1(geometry.coordinates)]);\n\t\tcase \"MultiPoint\":\n\t\t\treturn convertMultiPoint(geometry);\n\t\tcase \"LineString\":\n\t\t\treturn x(\"LineString\", [coord2(geometry.coordinates)]);\n\t\tcase \"MultiLineString\":\n\t\t\treturn convertMultiLineString(geometry);\n\t\tcase \"Polygon\":\n\t\t\treturn convertPolygon(geometry);\n\t\tcase \"MultiPolygon\":\n\t\t\treturn convertMultiPolygon(geometry);\n\t\tcase \"GeometryCollection\":\n\t\t\treturn x(\n\t\t\t\t\"MultiGeometry\",\n\t\t\t\tgeometry.geometries.flatMap((geometry) => [\n\t\t\t\t\tBR,\n\t\t\t\t\tconvertGeometry(geometry),\n\t\t\t\t]),\n\t\t\t);\n\t}\n}\n"],"names":["unsafe","subset","own"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]}