@opengeospatial/jsonld-ui-utils 0.2.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"jsonld-ui-utils-leaflet.min.js","sources":["../src/jsonld.ts","../src/constants.ts","../node_modules/n3/src/IRIs.js","../node_modules/n3/src/N3Lexer.js","../node_modules/n3/src/N3DataFactory.js","../node_modules/n3/src/N3Parser.js","../node_modules/n3/src/N3Util.js","../node_modules/n3/src/Util.js","../node_modules/n3/src/BaseIRI.js","../node_modules/n3/src/N3Writer.js","../node_modules/n3/src/N3Store.js","../node_modules/relative-to-absolute-iri/lib/Resolve.js","../node_modules/xmlchars/xml/1.0/ed5.js","../node_modules/xmlchars/xml/1.1/ed2.js","../node_modules/@rubensworks/saxes/saxes.js","../node_modules/xmlchars/xmlns/1.0/ed3.js","../node_modules/rdfxml-streaming-parser/lib/ParseError.js","../node_modules/rdf-data-factory/lib/BlankNode.js","../node_modules/rdf-data-factory/lib/DefaultGraph.js","../node_modules/rdf-data-factory/lib/NamedNode.js","../node_modules/rdf-data-factory/lib/Literal.js","../node_modules/rdf-data-factory/lib/Quad.js","../node_modules/rdf-data-factory/lib/Variable.js","../node_modules/rdf-data-factory/lib/DataFactory.js","../node_modules/validate-iri/lib/Validate.js","../node_modules/rdfxml-streaming-parser/lib/RdfXmlParser.js","../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];","const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n XSD = 'http://www.w3.org/2001/XMLSchema#',\n SWAP = 'http://www.w3.org/2000/10/swap/';\n\nexport default {\n xsd: {\n decimal: `${XSD}decimal`,\n boolean: `${XSD}boolean`,\n double: `${XSD}double`,\n integer: `${XSD}integer`,\n string: `${XSD}string`,\n },\n rdf: {\n type: `${RDF}type`,\n nil: `${RDF}nil`,\n first: `${RDF}first`,\n rest: `${RDF}rest`,\n langString: `${RDF}langString`,\n },\n owl: {\n sameAs: 'http://www.w3.org/2002/07/owl#sameAs',\n },\n r: {\n forSome: `${SWAP}reify#forSome`,\n forAll: `${SWAP}reify#forAll`,\n },\n log: {\n implies: `${SWAP}log#implies`,\n isImpliedBy: `${SWAP}log#isImpliedBy`,\n },\n};\n","// **N3Lexer** tokenizes N3 documents.\nimport { Buffer } from 'buffer';\nimport namespaces from './IRIs';\n\nconst { xsd } = namespaces;\n\n// Regular expression and replacement string to escape N3 strings\nconst escapeSequence = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{8})|\\\\([^])/g;\nconst escapeReplacements = {\n '\\\\': '\\\\', \"'\": \"'\", '\"': '\"',\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'f': '\\f', 'b': '\\b',\n '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&',\n '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';', '=': '=',\n '/': '/', '?': '?', '#': '#', '@': '@', '%': '%',\n};\nconst illegalIriChars = /[\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]/;\n\nconst lineModeRegExps = {\n _iri: true,\n _unescapedIri: true,\n _simpleQuotedString: true,\n _langcode: true,\n _blank: true,\n _newline: true,\n _comment: true,\n _whitespace: true,\n _endOfFile: true,\n};\nconst invalidRegExp = /$0^/;\n\n// ## Constructor\nexport default class N3Lexer {\n constructor(options) {\n // ## Regular expressions\n // It's slightly faster to have these as properties than as in-scope variables\n this._iri = /^<((?:[^ <>{}\\\\]|\\\\[uU])+)>[ \\t]*/; // IRI with escape sequences; needs sanity check after unescaping\n this._unescapedIri = /^<([^\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]*)>[ \\t]*/; // IRI without escape sequences; no unescaping\n this._simpleQuotedString = /^\"([^\"\\\\\\r\\n]*)\"(?=[^\"])/; // string without escape sequences\n this._simpleApostropheString = /^'([^'\\\\\\r\\n]*)'(?=[^'])/;\n this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9\\-])/i;\n this._prefix = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:(?=[#\\s<])/;\n this._prefixed = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:((?:(?:[0-:A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])(?:(?:[\\.\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])*(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~]))?)?)(?:[ \\t]+|(?=\\.?[,;!\\^\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._variable = /^\\?(?:(?:[A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/;\n this._blank = /^_:((?:[0-9A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?:[ \\t]+|(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._number = /^[\\-+]?(?:(\\d+\\.\\d*|\\.?\\d+)[eE][\\-+]?|\\d*(\\.)?)\\d+(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>])/;\n this._boolean = /^(?:true|false)(?=[.,;\\s#()\\[\\]\\{\\}\"'<>])/;\n this._keyword = /^@[a-z]+(?=[\\s#<:])/i;\n this._sparqlKeyword = /^(?:PREFIX|BASE|GRAPH)(?=[\\s#<])/i;\n this._shortPredicates = /^a(?=[\\s#()\\[\\]\\{\\}\"'<>])/;\n this._newline = /^[ \\t]*(?:#[^\\n\\r]*)?(?:\\r\\n|\\n|\\r)[ \\t]*/;\n this._comment = /#([^\\n\\r]*)/;\n this._whitespace = /^[ \\t]+/;\n this._endOfFile = /^(?:#[^\\n\\r]*)?$/;\n options = options || {};\n\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n\n // In line mode (N-Triples or N-Quads), only simple features may be parsed\n if (this._lineMode = !!options.lineMode) {\n this._n3Mode = false;\n // Don't tokenize special literals\n for (const key in this) {\n if (!(key in lineModeRegExps) && this[key] instanceof RegExp)\n this[key] = invalidRegExp;\n }\n }\n // When not in line mode, enable N3 functionality by default\n else {\n this._n3Mode = options.n3 !== false;\n }\n // Don't output comment tokens by default\n this.comments = !!options.comments;\n // Cache the last tested closing position of long literals\n this._literalClosingPos = 0;\n }\n\n // ## Private methods\n\n // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback\n _tokenizeToEnd(callback, inputFinished) {\n // Continue parsing as far as possible; the loop will return eventually\n let input = this._input;\n let currentLineLength = input.length;\n while (true) {\n // Count and skip whitespace lines\n let whiteSpaceMatch, comment;\n while (whiteSpaceMatch = this._newline.exec(input)) {\n // Try to find a comment\n if (this.comments && (comment = this._comment.exec(whiteSpaceMatch[0])))\n emitToken('comment', comment[1], '', this._line, whiteSpaceMatch[0].length);\n // Advance the input\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n currentLineLength = input.length;\n this._line++;\n }\n // Skip whitespace on current line\n if (!whiteSpaceMatch && (whiteSpaceMatch = this._whitespace.exec(input)))\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n\n // Stop for now if we're at the end\n if (this._endOfFile.test(input)) {\n // If the input is finished, emit EOF\n if (inputFinished) {\n // Try to find a final comment\n if (this.comments && (comment = this._comment.exec(input)))\n emitToken('comment', comment[1], '', this._line, input.length);\n input = null;\n emitToken('eof', '', '', this._line, 0);\n }\n return this._input = input;\n }\n\n // Look for specific token types based on the first character\n const line = this._line, firstChar = input[0];\n let type = '', value = '', prefix = '',\n match = null, matchLength = 0, inconclusive = false;\n switch (firstChar) {\n case '^':\n // We need at least 3 tokens lookahead to distinguish ^^<IRI> and ^^pre:fixed\n if (input.length < 3)\n break;\n // Try to match a type\n else if (input[1] === '^') {\n this._previousMarker = '^^';\n // Move to type IRI or prefixed name\n input = input.substr(2);\n if (input[0] !== '<') {\n inconclusive = true;\n break;\n }\n }\n // If no type, it must be a path expression\n else {\n if (this._n3Mode) {\n matchLength = 1;\n type = '^';\n }\n break;\n }\n // Fall through in case the type is an IRI\n case '<':\n // Try to find a full IRI without escape sequences\n if (match = this._unescapedIri.exec(input))\n type = 'IRI', value = match[1];\n // Try to find a full IRI with escape sequences\n else if (match = this._iri.exec(input)) {\n value = this._unescape(match[1]);\n if (value === null || illegalIriChars.test(value))\n return reportSyntaxError(this);\n type = 'IRI';\n }\n // Try to find a nested triple\n else if (input.length > 1 && input[1] === '<')\n type = '<<', matchLength = 2;\n // Try to find a backwards implication arrow\n else if (this._n3Mode && input.length > 1 && input[1] === '=') {\n matchLength = 2;\n if (this._isImpliedBy) type = 'abbreviation', value = '<';\n else type = 'inverse', value = '>';\n }\n break;\n\n case '>':\n if (input.length > 1 && input[1] === '>')\n type = '>>', matchLength = 2;\n break;\n\n case '_':\n // Try to find a blank node. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a blank node.\n // Therefore, try inserting a space if we're at the end of the input.\n if ((match = this._blank.exec(input)) ||\n inputFinished && (match = this._blank.exec(`${input} `)))\n type = 'blank', prefix = '_', value = match[1];\n break;\n\n case '\"':\n // Try to find a literal without escape sequences\n if (match = this._simpleQuotedString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n break;\n\n case \"'\":\n if (!this._lineMode) {\n // Try to find a literal without escape sequences\n if (match = this._simpleApostropheString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n }\n break;\n\n case '?':\n // Try to find a variable\n if (this._n3Mode && (match = this._variable.exec(input)))\n type = 'var', value = match[0];\n break;\n\n case '@':\n // Try to find a language code\n if (this._previousMarker === 'literal' && (match = this._langcode.exec(input)))\n type = 'langcode', value = match[1];\n // Try to find a keyword\n else if (match = this._keyword.exec(input))\n type = match[0];\n break;\n\n case '.':\n // Try to find a dot as punctuation\n if (input.length === 1 ? inputFinished : (input[1] < '0' || input[1] > '9')) {\n type = '.';\n matchLength = 1;\n break;\n }\n // Fall through to numerical case (could be a decimal dot)\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '+':\n case '-':\n // Try to find a number. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a number.\n // Therefore, try inserting a space if we're at the end of the input.\n if (match = this._number.exec(input) ||\n inputFinished && (match = this._number.exec(`${input} `))) {\n type = 'literal', value = match[0];\n prefix = (typeof match[1] === 'string' ? xsd.double :\n (typeof match[2] === 'string' ? xsd.decimal : xsd.integer));\n }\n break;\n\n case 'B':\n case 'b':\n case 'p':\n case 'P':\n case 'G':\n case 'g':\n // Try to find a SPARQL-style keyword\n if (match = this._sparqlKeyword.exec(input))\n type = match[0].toUpperCase();\n else\n inconclusive = true;\n break;\n\n case 'f':\n case 't':\n // Try to match a boolean\n if (match = this._boolean.exec(input))\n type = 'literal', value = match[0], prefix = xsd.boolean;\n else\n inconclusive = true;\n break;\n\n case 'a':\n // Try to find an abbreviated predicate\n if (match = this._shortPredicates.exec(input))\n type = 'abbreviation', value = 'a';\n else\n inconclusive = true;\n break;\n\n case '=':\n // Try to find an implication arrow or equals sign\n if (this._n3Mode && input.length > 1) {\n type = 'abbreviation';\n if (input[1] !== '>')\n matchLength = 1, value = '=';\n else\n matchLength = 2, value = '>';\n }\n break;\n\n case '!':\n if (!this._n3Mode)\n break;\n case ',':\n case ';':\n case '[':\n case ']':\n case '(':\n case ')':\n case '}':\n if (!this._lineMode) {\n matchLength = 1;\n type = firstChar;\n }\n break;\n case '{':\n // We need at least 2 tokens lookahead to distinguish \"{|\" and \"{ \"\n if (!this._lineMode && input.length >= 2) {\n // Try to find a quoted triple annotation start\n if (input[1] === '|')\n type = '{|', matchLength = 2;\n else\n type = firstChar, matchLength = 1;\n }\n break;\n case '|':\n // We need 2 tokens lookahead to parse \"|}\"\n // Try to find a quoted triple annotation end\n if (input.length >= 2 && input[1] === '}')\n type = '|}', matchLength = 2;\n break;\n\n default:\n inconclusive = true;\n }\n\n // Some first characters do not allow an immediate decision, so inspect more\n if (inconclusive) {\n // Try to find a prefix\n if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') &&\n (match = this._prefix.exec(input)))\n type = 'prefix', value = match[1] || '';\n // Try to find a prefixed name. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a prefixed name.\n // Therefore, try inserting a space if we're at the end of the input.\n else if ((match = this._prefixed.exec(input)) ||\n inputFinished && (match = this._prefixed.exec(`${input} `)))\n type = 'prefixed', prefix = match[1] || '', value = this._unescape(match[2]);\n }\n\n // A type token is special: it can only be emitted after an IRI or prefixed name is read\n if (this._previousMarker === '^^') {\n switch (type) {\n case 'prefixed': type = 'type'; break;\n case 'IRI': type = 'typeIRI'; break;\n default: type = '';\n }\n }\n\n // What if nothing of the above was found?\n if (!type) {\n // We could be in streaming mode, and then we just wait for more input to arrive.\n // Otherwise, a syntax error has occurred in the input.\n // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal).\n if (inputFinished || (!/^'''|^\"\"\"/.test(input) && /\\n|\\r/.test(input)))\n return reportSyntaxError(this);\n else\n return this._input = input;\n }\n\n // Emit the parsed token\n const length = matchLength || match[0].length;\n const token = emitToken(type, value, prefix, line, length);\n this.previousToken = token;\n this._previousMarker = type;\n\n // Advance to next part to tokenize\n input = input.substr(length, input.length);\n }\n\n // Emits the token through the callback\n function emitToken(type, value, prefix, line, length) {\n const start = input ? currentLineLength - input.length : currentLineLength;\n const end = start + length;\n const token = { type, value, prefix, line, start, end };\n callback(null, token);\n return token;\n }\n // Signals the syntax error through the callback\n function reportSyntaxError(self) { callback(self._syntaxError(/^\\S*/.exec(input)[0])); }\n }\n\n // ### `_unescape` replaces N3 escape codes by their corresponding characters\n _unescape(item) {\n let invalid = false;\n const replaced = item.replace(escapeSequence, (sequence, unicode4, unicode8, escapedChar) => {\n // 4-digit unicode character\n if (typeof unicode4 === 'string')\n return String.fromCharCode(Number.parseInt(unicode4, 16));\n // 8-digit unicode character\n if (typeof unicode8 === 'string') {\n let charCode = Number.parseInt(unicode8, 16);\n return charCode <= 0xFFFF ? String.fromCharCode(Number.parseInt(unicode8, 16)) :\n String.fromCharCode(0xD800 + ((charCode -= 0x10000) >> 10), 0xDC00 + (charCode & 0x3FF));\n }\n // fixed escape sequence\n if (escapedChar in escapeReplacements)\n return escapeReplacements[escapedChar];\n // invalid escape sequence\n invalid = true;\n return '';\n });\n return invalid ? null : replaced;\n }\n\n // ### `_parseLiteral` parses a literal into an unescaped value\n _parseLiteral(input) {\n // Ensure we have enough lookahead to identify triple-quoted strings\n if (input.length >= 3) {\n // Identify the opening quote(s)\n const opening = input.match(/^(?:\"\"\"|\"|'''|'|)/)[0];\n const openingLength = opening.length;\n\n // Find the next candidate closing quotes\n let closingPos = Math.max(this._literalClosingPos, openingLength);\n while ((closingPos = input.indexOf(opening, closingPos)) > 0) {\n // Count backslashes right before the closing quotes\n let backslashCount = 0;\n while (input[closingPos - backslashCount - 1] === '\\\\')\n backslashCount++;\n\n // An even number of backslashes (in particular 0)\n // means these are actual, non-escaped closing quotes\n if (backslashCount % 2 === 0) {\n // Extract and unescape the value\n const raw = input.substring(openingLength, closingPos);\n const lines = raw.split(/\\r\\n|\\r|\\n/).length - 1;\n const matchLength = closingPos + openingLength;\n // Only triple-quoted strings can be multi-line\n if (openingLength === 1 && lines !== 0 ||\n openingLength === 3 && this._lineMode)\n break;\n this._line += lines;\n return { value: this._unescape(raw), matchLength };\n }\n closingPos++;\n }\n this._literalClosingPos = input.length - openingLength + 1;\n }\n return { value: '', matchLength: 0 };\n }\n\n // ### `_syntaxError` creates a syntax error for the given issue\n _syntaxError(issue) {\n this._input = null;\n const err = new Error(`Unexpected \"${issue}\" on line ${this._line}.`);\n err.context = {\n token: undefined,\n line: this._line,\n previousToken: this.previousToken,\n };\n return err;\n }\n\n // ### Strips off any starting UTF BOM mark.\n _readStartingBom(input) {\n return input.startsWith('\\ufeff') ? input.substr(1) : input;\n }\n\n // ## Public methods\n\n // ### `tokenize` starts the transformation of an N3 document into an array of tokens.\n // The input can be a string or a stream.\n tokenize(input, callback) {\n this._line = 1;\n\n // If the input is a string, continuously emit tokens through the callback until the end\n if (typeof input === 'string') {\n this._input = this._readStartingBom(input);\n // If a callback was passed, asynchronously call it\n if (typeof callback === 'function')\n queueMicrotask(() => this._tokenizeToEnd(callback, true));\n // If no callback was passed, tokenize synchronously and return\n else {\n const tokens = [];\n let error;\n this._tokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true);\n if (error) throw error;\n return tokens;\n }\n }\n // Otherwise, the input must be a stream\n else {\n this._pendingBuffer = null;\n if (typeof input.setEncoding === 'function')\n input.setEncoding('utf8');\n // Adds the data chunk to the buffer and parses as far as possible\n input.on('data', data => {\n if (this._input !== null && data.length !== 0) {\n // Prepend any previous pending writes\n if (this._pendingBuffer) {\n data = Buffer.concat([this._pendingBuffer, data]);\n this._pendingBuffer = null;\n }\n // Hold if the buffer ends in an incomplete unicode sequence\n if (data[data.length - 1] & 0x80) {\n this._pendingBuffer = data;\n }\n // Otherwise, tokenize as far as possible\n else {\n // Only read a BOM at the start\n if (typeof this._input === 'undefined')\n this._input = this._readStartingBom(typeof data === 'string' ? data : data.toString());\n else\n this._input += data;\n this._tokenizeToEnd(callback, false);\n }\n }\n });\n // Parses until the end\n input.on('end', () => {\n if (typeof this._input === 'string')\n this._tokenizeToEnd(callback, true);\n });\n input.on('error', callback);\n }\n }\n}\n","// N3.js implementations of the RDF/JS core data types\n// See http://rdf.js.org/data-model-spec/\n\nimport namespaces from './IRIs';\n\nconst { rdf, xsd } = namespaces;\n\n// eslint-disable-next-line prefer-const\nlet DEFAULTGRAPH;\nlet _blankNodeCounter = 0;\n\nconst escapedLiteral = /^\"(.*\".*)(?=\"[^\"]*$)/;\n\n// ## DataFactory singleton\nconst DataFactory = {\n namedNode,\n blankNode,\n variable,\n literal,\n defaultGraph,\n quad,\n triple: quad,\n fromTerm,\n fromQuad,\n};\nexport default DataFactory;\n\n// ## Term constructor\nexport class Term {\n constructor(id) {\n this.id = id;\n }\n\n // ### The value of this term\n get value() {\n return this.id;\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through ids\n if (other instanceof Term)\n return this.id === other.id;\n // Otherwise, compare term type and value\n return !!other && this.termType === other.termType &&\n this.value === other.value;\n }\n\n // ### Implement hashCode for Immutable.js, since we implement `equals`\n // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode()\n hashCode() {\n return 0;\n }\n\n // ### Returns a plain object representation of this term\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n };\n }\n}\n\n\n// ## NamedNode constructor\nexport class NamedNode extends Term {\n // ### The term type of this term\n get termType() {\n return 'NamedNode';\n }\n}\n\n// ## Literal constructor\nexport class Literal extends Term {\n // ### The term type of this term\n get termType() {\n return 'Literal';\n }\n\n // ### The text value of this literal\n get value() {\n return this.id.substring(1, this.id.lastIndexOf('\"'));\n }\n\n // ### The language of this literal\n get language() {\n // Find the last quotation mark (e.g., '\"abc\"@en-us')\n const id = this.id;\n let atPos = id.lastIndexOf('\"') + 1;\n // If \"@\" it follows, return the remaining substring; empty otherwise\n return atPos < id.length && id[atPos++] === '@' ? id.substr(atPos).toLowerCase() : '';\n }\n\n // ### The datatype IRI of this literal\n get datatype() {\n return new NamedNode(this.datatypeString);\n }\n\n // ### The datatype string of this literal\n get datatypeString() {\n // Find the last quotation mark (e.g., '\"abc\"^^http://ex.org/types#t')\n const id = this.id, dtPos = id.lastIndexOf('\"') + 1;\n const char = dtPos < id.length ? id[dtPos] : '';\n // If \"^\" it follows, return the remaining substring\n return char === '^' ? id.substr(dtPos + 2) :\n // If \"@\" follows, return rdf:langString; xsd:string otherwise\n (char !== '@' ? xsd.string : rdf.langString);\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both literals were created by this library,\n // equality can be computed through ids\n if (other instanceof Literal)\n return this.id === other.id;\n // Otherwise, compare term type, value, language, and datatype\n return !!other && !!other.datatype &&\n this.termType === other.termType &&\n this.value === other.value &&\n this.language === other.language &&\n this.datatype.value === other.datatype.value;\n }\n\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n language: this.language,\n datatype: { termType: 'NamedNode', value: this.datatypeString },\n };\n }\n}\n\n// ## BlankNode constructor\nexport class BlankNode extends Term {\n constructor(name) {\n super(`_:${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'BlankNode';\n }\n\n // ### The name of this blank node\n get value() {\n return this.id.substr(2);\n }\n}\n\nexport class Variable extends Term {\n constructor(name) {\n super(`?${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Variable';\n }\n\n // ### The name of this variable\n get value() {\n return this.id.substr(1);\n }\n}\n\n// ## DefaultGraph constructor\nexport class DefaultGraph extends Term {\n constructor() {\n super('');\n return DEFAULTGRAPH || this;\n }\n\n // ### The term type of this term\n get termType() {\n return 'DefaultGraph';\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through strict equality;\n // otherwise, compare term types.\n return (this === other) || (!!other && (this.termType === other.termType));\n }\n}\n\n// ## DefaultGraph singleton\nDEFAULTGRAPH = new DefaultGraph();\n\n// ### Constructs a term from the given internal string ID\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termFromId(id, factory, nested) {\n factory = factory || DataFactory;\n\n // Falsy value or empty string indicate the default graph\n if (!id)\n return factory.defaultGraph();\n\n // Identify the term type based on the first character\n switch (id[0]) {\n case '?':\n return factory.variable(id.substr(1));\n case '_':\n return factory.blankNode(id.substr(2));\n case '\"':\n // Shortcut for internal literals\n if (factory === DataFactory)\n return new Literal(id);\n // Literal without datatype or language\n if (id[id.length - 1] === '\"')\n return factory.literal(id.substr(1, id.length - 2));\n // Literal with datatype or language\n const endPos = id.lastIndexOf('\"', id.length - 1);\n return factory.literal(id.substr(1, endPos - 1),\n id[endPos + 1] === '@' ? id.substr(endPos + 2)\n : factory.namedNode(id.substr(endPos + 3)));\n case '[':\n id = JSON.parse(id);\n break;\n default:\n if (!nested || !Array.isArray(id)) {\n return factory.namedNode(id);\n }\n }\n return factory.quad(\n termFromId(id[0], factory, true),\n termFromId(id[1], factory, true),\n termFromId(id[2], factory, true),\n id[3] && termFromId(id[3], factory, true),\n );\n}\n\n// ### Constructs an internal string ID from the given term or ID string\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termToId(term, nested) {\n if (typeof term === 'string')\n return term;\n if (term instanceof Term && term.termType !== 'Quad')\n return term.id;\n if (!term)\n return DEFAULTGRAPH.id;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return term.value;\n case 'BlankNode': return `_:${term.value}`;\n case 'Variable': return `?${term.value}`;\n case 'DefaultGraph': return '';\n case 'Literal': return `\"${term.value}\"${\n term.language ? `@${term.language}` :\n (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`;\n case 'Quad':\n const res = [\n termToId(term.subject, true),\n termToId(term.predicate, true),\n termToId(term.object, true),\n ];\n if (term.graph && term.graph.termType !== 'DefaultGraph') {\n res.push(termToId(term.graph, true));\n }\n return nested ? res : JSON.stringify(res);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\n\n// ## Quad constructor\nexport class Quad extends Term {\n constructor(subject, predicate, object, graph) {\n super('');\n this._subject = subject;\n this._predicate = predicate;\n this._object = object;\n this._graph = graph || DEFAULTGRAPH;\n }\n\n // ### The term type of this term\n get termType() {\n return 'Quad';\n }\n\n get subject() {\n return this._subject;\n }\n\n get predicate() {\n return this._predicate;\n }\n\n get object() {\n return this._object;\n }\n\n get graph() {\n return this._graph;\n }\n\n // ### Returns a plain object representation of this quad\n toJSON() {\n return {\n termType: this.termType,\n subject: this._subject.toJSON(),\n predicate: this._predicate.toJSON(),\n object: this._object.toJSON(),\n graph: this._graph.toJSON(),\n };\n }\n\n // ### Returns whether this object represents the same quad as the other\n equals(other) {\n return !!other && this._subject.equals(other.subject) &&\n this._predicate.equals(other.predicate) &&\n this._object.equals(other.object) &&\n this._graph.equals(other.graph);\n }\n}\nexport { Quad as Triple };\n\n// ### Escapes the quotes within the given literal\nexport function escapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"/g, '\"\"')}`);\n}\n\n// ### Unescapes the quotes within the given literal\nexport function unescapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"\"/g, '\"')}`);\n}\n\n// ### Creates an IRI\nfunction namedNode(iri) {\n return new NamedNode(iri);\n}\n\n// ### Creates a blank node\nfunction blankNode(name) {\n return new BlankNode(name || `n3-${_blankNodeCounter++}`);\n}\n\n// ### Creates a literal\nfunction literal(value, languageOrDataType) {\n // Create a language-tagged string\n if (typeof languageOrDataType === 'string')\n return new Literal(`\"${value}\"@${languageOrDataType.toLowerCase()}`);\n\n // Automatically determine datatype for booleans and numbers\n let datatype = languageOrDataType ? languageOrDataType.value : '';\n if (datatype === '') {\n // Convert a boolean\n if (typeof value === 'boolean')\n datatype = xsd.boolean;\n // Convert an integer or double\n else if (typeof value === 'number') {\n if (Number.isFinite(value))\n datatype = Number.isInteger(value) ? xsd.integer : xsd.double;\n else {\n datatype = xsd.double;\n if (!Number.isNaN(value))\n value = value > 0 ? 'INF' : '-INF';\n }\n }\n }\n\n // Create a datatyped literal\n return (datatype === '' || datatype === xsd.string) ?\n new Literal(`\"${value}\"`) :\n new Literal(`\"${value}\"^^${datatype}`);\n}\n\n// ### Creates a variable\nfunction variable(name) {\n return new Variable(name);\n}\n\n// ### Returns the default graph\nfunction defaultGraph() {\n return DEFAULTGRAPH;\n}\n\n// ### Creates a quad\nfunction quad(subject, predicate, object, graph) {\n return new Quad(subject, predicate, object, graph);\n}\n\nexport function fromTerm(term) {\n if (term instanceof Term)\n return term;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return namedNode(term.value);\n case 'BlankNode': return blankNode(term.value);\n case 'Variable': return variable(term.value);\n case 'DefaultGraph': return DEFAULTGRAPH;\n case 'Literal': return literal(term.value, term.language || term.datatype);\n case 'Quad': return fromQuad(term);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\nexport function fromQuad(inQuad) {\n if (inQuad instanceof Quad)\n return inQuad;\n\n if (inQuad.termType !== 'Quad')\n throw new Error(`Unexpected termType: ${inQuad.termType}`);\n\n return quad(fromTerm(inQuad.subject), fromTerm(inQuad.predicate), fromTerm(inQuad.object), fromTerm(inQuad.graph));\n}\n","// **N3Parser** parses N3 documents.\nimport N3Lexer from './N3Lexer';\nimport N3DataFactory from './N3DataFactory';\nimport namespaces from './IRIs';\n\nlet blankNodePrefix = 0;\n\n// ## Constructor\nexport default class N3Parser {\n constructor(options) {\n this._contextStack = [];\n this._graph = null;\n\n // Set the document IRI\n options = options || {};\n this._setBase(options.baseIRI);\n options.factory && initDataFactory(this, options.factory);\n\n // Set supported features depending on the format\n const format = (typeof options.format === 'string') ?\n options.format.match(/\\w*$/)[0].toLowerCase() : '',\n isTurtle = /turtle/.test(format), isTriG = /trig/.test(format),\n isNTriples = /triple/.test(format), isNQuads = /quad/.test(format),\n isN3 = this._n3Mode = /n3/.test(format),\n isLineMode = isNTriples || isNQuads;\n if (!(this._supportsNamedGraphs = !(isTurtle || isN3)))\n this._readPredicateOrNamedGraph = this._readPredicate;\n // Support triples in other graphs\n this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n // Support nesting of triples\n this._supportsRDFStar = format === '' || /star|\\*$/.test(format);\n // Disable relative IRIs in N-Triples or N-Quads mode\n if (isLineMode)\n this._resolveRelativeIRI = iri => { return null; };\n this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' :\n options.blankNodePrefix.replace(/^(?!_:)/, '_:');\n this._lexer = options.lexer || new N3Lexer({ lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy });\n // Disable explicit quantifiers by default\n this._explicitQuantifiers = !!options.explicitQuantifiers;\n }\n\n // ## Static class methods\n\n // ### `_resetBlankNodePrefix` restarts blank node prefix identification\n static _resetBlankNodePrefix() {\n blankNodePrefix = 0;\n }\n\n // ## Private methods\n\n // ### `_setBase` sets the base IRI to resolve relative IRIs\n _setBase(baseIRI) {\n if (!baseIRI) {\n this._base = '';\n this._basePath = '';\n }\n else {\n // Remove fragment if present\n const fragmentPos = baseIRI.indexOf('#');\n if (fragmentPos >= 0)\n baseIRI = baseIRI.substr(0, fragmentPos);\n // Set base IRI and its components\n this._base = baseIRI;\n this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI :\n baseIRI.replace(/[^\\/?]*(?:\\?.*)?$/, '');\n baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(?:\\/\\/[^\\/]*)?/i);\n this._baseRoot = baseIRI[0];\n this._baseScheme = baseIRI[1];\n }\n }\n\n // ### `_saveContext` stores the current parsing context\n // when entering a new scope (list, blank node, formula)\n _saveContext(type, graph, subject, predicate, object) {\n const n3Mode = this._n3Mode;\n this._contextStack.push({\n type,\n subject, predicate, object, graph,\n inverse: n3Mode ? this._inversePredicate : false,\n blankPrefix: n3Mode ? this._prefixes._ : '',\n quantified: n3Mode ? this._quantified : null,\n });\n // The settings below only apply to N3 streams\n if (n3Mode) {\n // Every new scope resets the predicate direction\n this._inversePredicate = false;\n // In N3, blank nodes are scoped to a formula\n // (using a dot as separator, as a blank node label cannot start with it)\n this._prefixes._ = (this._graph ? `${this._graph.value}.` : '.');\n // Quantifiers are scoped to a formula\n this._quantified = Object.create(this._quantified);\n }\n }\n\n // ### `_restoreContext` restores the parent context\n // when leaving a scope (list, blank node, formula)\n _restoreContext(type, token) {\n // Obtain the previous context\n const context = this._contextStack.pop();\n if (!context || context.type !== type)\n return this._error(`Unexpected ${token.type}`, token);\n\n // Restore the quad of the previous context\n this._subject = context.subject;\n this._predicate = context.predicate;\n this._object = context.object;\n this._graph = context.graph;\n\n // Restore N3 context settings\n if (this._n3Mode) {\n this._inversePredicate = context.inverse;\n this._prefixes._ = context.blankPrefix;\n this._quantified = context.quantified;\n }\n }\n\n // ### `_readInTopContext` reads a token when in the top context\n _readInTopContext(token) {\n switch (token.type) {\n // If an EOF token arrives in the top context, signal that we're done\n case 'eof':\n if (this._graph !== null)\n return this._error('Unclosed graph', token);\n delete this._prefixes._;\n return this._callback(null, null, this._prefixes);\n // It could be a prefix declaration\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n // It could be a base declaration\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n // It could be a graph\n case '{':\n if (this._supportsNamedGraphs) {\n this._graph = '';\n this._subject = null;\n return this._readSubject;\n }\n case 'GRAPH':\n if (this._supportsNamedGraphs)\n return this._readNamedGraphLabel;\n // Otherwise, the next token must be a subject\n default:\n return this._readSubject(token);\n }\n }\n\n // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable\n _readEntity(token, quantifier) {\n let value;\n switch (token.type) {\n // Read a relative or absolute IRI\n case 'IRI':\n case 'typeIRI':\n const iri = this._resolveIRI(token.value);\n if (iri === null)\n return this._error('Invalid IRI', token);\n value = this._factory.namedNode(iri);\n break;\n // Read a prefixed name\n case 'type':\n case 'prefixed':\n const prefix = this._prefixes[token.prefix];\n if (prefix === undefined)\n return this._error(`Undefined prefix \"${token.prefix}:\"`, token);\n value = this._factory.namedNode(prefix + token.value);\n break;\n // Read a blank node\n case 'blank':\n value = this._factory.blankNode(this._prefixes[token.prefix] + token.value);\n break;\n // Read a variable\n case 'var':\n value = this._factory.variable(token.value.substr(1));\n break;\n // Everything else is not an entity\n default:\n return this._error(`Expected entity but got ${token.type}`, token);\n }\n // In N3 mode, replace the entity if it is quantified\n if (!quantifier && this._n3Mode && (value.id in this._quantified))\n value = this._quantified[value.id];\n return value;\n }\n\n // ### `_readSubject` reads a quad's subject\n _readSubject(token) {\n this._predicate = null;\n switch (token.type) {\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph,\n this._subject = this._factory.blankNode(), null, null);\n return this._readBlankNodeHead;\n case '(':\n // Start a new list\n this._saveContext('list', this._graph, this.RDF_NIL, null, null);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph,\n this._graph = this._factory.blankNode(), null, null);\n return this._readSubject;\n case '}':\n // No subject; the graph in which we are reading is closed instead\n return this._readPunctuation(token);\n case '@forSome':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forSome\"', token);\n this._subject = null;\n this._predicate = this.N3_FORSOME;\n this._quantifier = 'blankNode';\n return this._readQuantifierList;\n case '@forAll':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forAll\"', token);\n this._subject = null;\n this._predicate = this.N3_FORALL;\n this._quantifier = 'variable';\n return this._readQuantifierList;\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completeSubjectLiteral;\n }\n else\n this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n\n break;\n case '<<':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n this._saveContext('<<', this._graph, null, null, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the subject entity\n if ((this._subject = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the subject might be a path\n if (this._n3Mode)\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n\n // The next token must be a predicate,\n // or, if the subject was actually a graph IRI, a named graph\n return this._readPredicateOrNamedGraph;\n }\n\n // ### `_readPredicate` reads a quad's predicate\n _readPredicate(token) {\n const type = token.type;\n switch (type) {\n case 'inverse':\n this._inversePredicate = true;\n case 'abbreviation':\n this._predicate = this.ABBREVIATIONS[token.value];\n break;\n case '.':\n case ']':\n case '}':\n // Expected predicate didn't come, must have been trailing semicolon\n if (this._predicate === null)\n return this._error(`Unexpected ${type}`, token);\n this._subject = null;\n return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token);\n case ';':\n // Additional semicolons can be safely ignored\n return this._predicate !== null ? this._readPredicate :\n this._error('Expected predicate but got ;', token);\n case '[':\n if (this._n3Mode) {\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject,\n this._subject = this._factory.blankNode(), null);\n return this._readBlankNodeHead;\n }\n case 'blank':\n if (!this._n3Mode)\n return this._error('Disallowed blank node as predicate', token);\n default:\n if ((this._predicate = this._readEntity(token)) === undefined)\n return;\n }\n // The next token must be an object\n return this._readObject;\n }\n\n // ### `_readObject` reads a quad's object\n _readObject(token) {\n switch (token.type) {\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._readDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else\n this._object = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n break;\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject, this._predicate,\n this._subject = this._factory.blankNode());\n return this._readBlankNodeHead;\n case '(':\n // Start a new list\n this._saveContext('list', this._graph, this._subject, this._predicate, this.RDF_NIL);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n case '<<':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n this._saveContext('<<', this._graph, this._subject, this._predicate, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the object entity\n if ((this._object = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the object might be a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n return this._getContextEndReader();\n }\n\n // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph\n _readPredicateOrNamedGraph(token) {\n return token.type === '{' ? this._readGraph(token) : this._readPredicate(token);\n }\n\n // ### `_readGraph` reads a graph\n _readGraph(token) {\n if (token.type !== '{')\n return this._error(`Expected graph but got ${token.type}`, token);\n // The \"subject\" we read is actually the GRAPH's label\n this._graph = this._subject, this._subject = null;\n return this._readSubject;\n }\n\n // ### `_readBlankNodeHead` reads the head of a blank node\n _readBlankNodeHead(token) {\n if (token.type === ']') {\n this._subject = null;\n return this._readBlankNodeTail(token);\n }\n else {\n this._predicate = null;\n return this._readPredicate(token);\n }\n }\n\n // ### `_readBlankNodeTail` reads the end of a blank node\n _readBlankNodeTail(token) {\n if (token.type !== ']')\n return this._readBlankNodePunctuation(token);\n\n // Store blank node quad\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this blank node\n const empty = this._predicate === null;\n this._restoreContext('blank', token);\n // If the blank node was the object, restore previous context and read punctuation\n if (this._object !== null)\n return this._getContextEndReader();\n // If the blank node was the predicate, continue reading the object\n else if (this._predicate !== null)\n return this._readObject;\n // If the blank node was the subject, continue reading the predicate\n else\n // If the blank node was empty, it could be a named graph label\n return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank;\n }\n\n // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node\n _readPredicateAfterBlank(token) {\n switch (token.type) {\n case '.':\n case '}':\n // No predicate is coming if the triple is terminated here\n this._subject = null;\n return this._readPunctuation(token);\n default:\n return this._readPredicate(token);\n }\n }\n\n // ### `_readListItem` reads items from a list\n _readListItem(token) {\n let item = null, // The item of the list\n list = null, // The list itself\n next = this._readListItem; // The next function to execute\n const previousList = this._subject, // The previous list that contains this list\n stack = this._contextStack, // The stack of parent contexts\n parent = stack[stack.length - 1]; // The parent containing the current list\n\n switch (token.type) {\n case '[':\n // Stack the current list quad and start a new quad with a blank node as subject\n this._saveContext('blank', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST,\n this._subject = item = this._factory.blankNode());\n next = this._readBlankNodeHead;\n break;\n case '(':\n // Stack the current list quad and start a new list\n this._saveContext('list', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST, this.RDF_NIL);\n this._subject = null;\n break;\n case ')':\n // Closing the list; restore the parent context\n this._restoreContext('list', token);\n // If this list is contained within a parent list, return the membership quad here.\n // This will be `<parent list element> rdf:first <this list>.`.\n if (stack.length !== 0 && stack[stack.length - 1].type === 'list')\n this._emit(this._subject, this._predicate, this._object, this._graph);\n // Was this list the parent's subject?\n if (this._predicate === null) {\n // The next token is the predicate\n next = this._readPredicate;\n // No list tail if this was an empty list\n if (this._subject === this.RDF_NIL)\n return next;\n }\n // The list was in the parent context's object\n else {\n next = this._getContextEndReader();\n // No list tail if this was an empty list\n if (this._object === this.RDF_NIL)\n return next;\n }\n // Close the list by making the head nil\n list = this.RDF_NIL;\n break;\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n next = this._readListItemDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n item = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n next = this._getContextEndReader();\n }\n break;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n default:\n if ((item = this._readEntity(token)) === undefined)\n return;\n }\n\n // Create a new blank node if no item head was assigned yet\n if (list === null)\n this._subject = list = this._factory.blankNode();\n\n // Is this the first element of the list?\n if (previousList === null) {\n // This list is either the subject or the object of its parent\n if (parent.predicate === null)\n parent.subject = list;\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // If an item was read, add it to the list\n if (item !== null) {\n // In N3 mode, the item might be a path\n if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed')) {\n // Create a new context to add the item's path\n this._saveContext('item', this._graph, list, this.RDF_FIRST, item);\n this._subject = item, this._predicate = null;\n // _readPath will restore the context and output the item\n return this._getPathReader(this._readListItem);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n }\n return next;\n }\n\n // ### `_readDataTypeOrLang` reads an _optional_ datatype or language\n _readDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, false);\n }\n\n\n // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list\n _readListItemDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, true);\n }\n\n // ### `_completeLiteral` completes a literal with an optional datatype or language\n _completeLiteral(token) {\n // Create a simple string literal by default\n let literal = this._factory.literal(this._literalValue);\n\n switch (token.type) {\n // Create a datatyped literal\n case 'type':\n case 'typeIRI':\n const datatype = this._readEntity(token);\n if (datatype === undefined) return; // No datatype means an error occurred\n literal = this._factory.literal(this._literalValue, datatype);\n token = null;\n break;\n // Create a language-tagged string\n case 'langcode':\n literal = this._factory.literal(this._literalValue, token.value);\n token = null;\n break;\n }\n\n return { token, literal };\n }\n\n // Completes a literal in subject position\n _completeSubjectLiteral(token) {\n this._subject = this._completeLiteral(token).literal;\n return this._readPredicateOrNamedGraph;\n }\n\n // Completes a literal in object position\n _completeObjectLiteral(token, listItem) {\n const completed = this._completeLiteral(token);\n if (!completed)\n return;\n this._object = completed.literal;\n\n // If this literal was part of a list, write the item\n // (we could also check the context stack, but passing in a flag is faster)\n if (listItem)\n this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);\n // If the token was consumed, continue with the rest of the input\n if (completed.token === null)\n return this._getContextEndReader();\n // Otherwise, consume the token now\n else {\n this._readCallback = this._getContextEndReader();\n return this._readCallback(completed.token);\n }\n }\n\n // ### `_readFormulaTail` reads the end of a formula\n _readFormulaTail(token) {\n if (token.type !== '}')\n return this._readPunctuation(token);\n\n // Store the last quad of the formula\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this formula\n this._restoreContext('formula', token);\n // If the formula was the subject, continue reading the predicate.\n // If the formula was the object, read punctuation.\n return this._object === null ? this._readPredicate : this._getContextEndReader();\n }\n\n // ### `_readPunctuation` reads punctuation between quads or quad parts\n _readPunctuation(token) {\n let next, graph = this._graph;\n const subject = this._subject, inversePredicate = this._inversePredicate;\n switch (token.type) {\n // A closing brace ends a graph\n case '}':\n if (this._graph === null)\n return this._error('Unexpected graph closing', token);\n if (this._n3Mode)\n return this._readFormulaTail(token);\n this._graph = null;\n // A dot just ends the statement, without sharing anything with the next\n case '.':\n this._subject = null;\n next = this._contextStack.length ? this._readSubject : this._readInTopContext;\n if (inversePredicate) this._inversePredicate = false;\n break;\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // {| means that the current triple is annotated with predicate-object pairs.\n case '{|':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n // Continue using the last triple as quoted triple subject for the predicate-object pairs.\n const predicate = this._predicate, object = this._object;\n this._subject = this._factory.quad(subject, predicate, object, this.DEFAULTGRAPH);\n next = this._readPredicate;\n break;\n // |} means that the current quoted triple in annotation syntax is finalized.\n case '|}':\n if (this._subject.termType !== 'Quad')\n return this._error('Unexpected asserted triple closing', token);\n this._subject = null;\n next = this._readPunctuation;\n break;\n default:\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) {\n next = this._readQuadPunctuation;\n break;\n }\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n if (subject !== null) {\n const predicate = this._predicate, object = this._object;\n if (!inversePredicate)\n this._emit(subject, predicate, object, graph);\n else\n this._emit(object, predicate, subject, graph);\n }\n return next;\n }\n\n // ### `_readBlankNodePunctuation` reads punctuation in a blank node\n _readBlankNodePunctuation(token) {\n let next;\n switch (token.type) {\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n default:\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n this._emit(this._subject, this._predicate, this._object, this._graph);\n return next;\n }\n\n // ### `_readQuadPunctuation` reads punctuation after a quad\n _readQuadPunctuation(token) {\n if (token.type !== '.')\n return this._error('Expected dot to follow quad', token);\n return this._readInTopContext;\n }\n\n // ### `_readPrefix` reads the prefix of a prefix declaration\n _readPrefix(token) {\n if (token.type !== 'prefix')\n return this._error('Expected prefix to follow @prefix', token);\n this._prefix = token.value;\n return this._readPrefixIRI;\n }\n\n // ### `_readPrefixIRI` reads the IRI of a prefix declaration\n _readPrefixIRI(token) {\n if (token.type !== 'IRI')\n return this._error(`Expected IRI to follow prefix \"${this._prefix}:\"`, token);\n const prefixNode = this._readEntity(token);\n this._prefixes[this._prefix] = prefixNode.value;\n this._prefixCallback(this._prefix, prefixNode);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readBaseIRI` reads the IRI of a base declaration\n _readBaseIRI(token) {\n const iri = token.type === 'IRI' && this._resolveIRI(token.value);\n if (!iri)\n return this._error('Expected valid IRI to follow base declaration', token);\n this._setBase(iri);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readNamedGraphLabel` reads the label of a named graph\n _readNamedGraphLabel(token) {\n switch (token.type) {\n case 'IRI':\n case 'blank':\n case 'prefixed':\n return this._readSubject(token), this._readGraph;\n case '[':\n return this._readNamedGraphBlankLabel;\n default:\n return this._error('Invalid graph label', token);\n }\n }\n\n // ### `_readNamedGraphLabel` reads a blank node label of a named graph\n _readNamedGraphBlankLabel(token) {\n if (token.type !== ']')\n return this._error('Invalid graph label', token);\n this._subject = this._factory.blankNode();\n return this._readGraph;\n }\n\n // ### `_readDeclarationPunctuation` reads the punctuation of a declaration\n _readDeclarationPunctuation(token) {\n // SPARQL-style declarations don't have punctuation\n if (this._sparqlStyle) {\n this._sparqlStyle = false;\n return this._readInTopContext(token);\n }\n\n if (token.type !== '.')\n return this._error('Expected declaration to end with a dot', token);\n return this._readInTopContext;\n }\n\n // Reads a list of quantified symbols from a @forSome or @forAll statement\n _readQuantifierList(token) {\n let entity;\n switch (token.type) {\n case 'IRI':\n case 'prefixed':\n if ((entity = this._readEntity(token, true)) !== undefined)\n break;\n default:\n return this._error(`Unexpected ${token.type}`, token);\n }\n // Without explicit quantifiers, map entities to a quantified entity\n if (!this._explicitQuantifiers)\n this._quantified[entity.id] = this._factory[this._quantifier](this._factory.blankNode().value);\n // With explicit quantifiers, output the reified quantifier\n else {\n // If this is the first item, start a new quantifier list\n if (this._subject === null)\n this._emit(this._graph || this.DEFAULTGRAPH, this._predicate,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Otherwise, continue the previous list\n else\n this._emit(this._subject, this.RDF_REST,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH);\n }\n return this._readQuantifierPunctuation;\n }\n\n // Reads punctuation from a @forSome or @forAll statement\n _readQuantifierPunctuation(token) {\n // Read more quantifiers\n if (token.type === ',')\n return this._readQuantifierList;\n // End of the quantifier list\n else {\n // With explicit quantifiers, close the quantifier list\n if (this._explicitQuantifiers) {\n this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH);\n this._subject = null;\n }\n // Read a dot\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_getPathReader` reads a potential path and then resumes with the given function\n _getPathReader(afterPath) {\n this._afterPath = afterPath;\n return this._readPath;\n }\n\n // ### `_readPath` reads a potential path\n _readPath(token) {\n switch (token.type) {\n // Forward path\n case '!': return this._readForwardPath;\n // Backward path\n case '^': return this._readBackwardPath;\n // Not a path; resume reading where we left off\n default:\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n // If we were reading a list item, we still need to output it\n if (parent && parent.type === 'item') {\n // The list item is the remaining subejct after reading the path\n const item = this._subject;\n // Switch back to the context of the list\n this._restoreContext('item', token);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, item, this._graph);\n }\n return this._afterPath(token);\n }\n }\n\n // ### `_readForwardPath` reads a '!' path\n _readForwardPath(token) {\n let subject, predicate;\n const object = this._factory.blankNode();\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's object\n if (this._predicate === null)\n subject = this._subject, this._subject = object;\n // If we were reading an object, replace the subject by the path's object\n else\n subject = this._object, this._object = object;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readBackwardPath` reads a '^' path\n _readBackwardPath(token) {\n const subject = this._factory.blankNode();\n let predicate, object;\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's subject\n if (this._predicate === null)\n object = this._subject, this._subject = subject;\n // If we were reading an object, replace the subject by the path's subject\n else\n object = this._object, this._object = subject;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readRDFStarTailOrGraph` reads the graph of a nested RDF-star quad or the end of a nested RDF-star triple\n _readRDFStarTailOrGraph(token) {\n if (token.type !== '>>') {\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (this._graph = this._readEntity(token)) !== undefined)\n return this._readRDFStarTail;\n return this._error(`Expected >> to follow \"${this._object.id}\"`, token);\n }\n return this._readRDFStarTail(token);\n }\n\n // ### `_readRDFStarTail` reads the end of a nested RDF-star triple\n _readRDFStarTail(token) {\n if (token.type !== '>>')\n return this._error(`Expected >> but got ${token.type}`, token);\n // Read the quad and restore the previous context\n const quad = this._factory.quad(this._subject, this._predicate, this._object,\n this._graph || this.DEFAULTGRAPH);\n this._restoreContext('<<', token);\n // If the triple was the subject, continue by reading the predicate.\n if (this._subject === null) {\n this._subject = quad;\n return this._readPredicate;\n }\n // If the triple was the object, read context end.\n else {\n this._object = quad;\n return this._getContextEndReader();\n }\n }\n\n // ### `_getContextEndReader` gets the next reader function at the end of a context\n _getContextEndReader() {\n const contextStack = this._contextStack;\n if (!contextStack.length)\n return this._readPunctuation;\n\n switch (contextStack[contextStack.length - 1].type) {\n case 'blank':\n return this._readBlankNodeTail;\n case 'list':\n return this._readListItem;\n case 'formula':\n return this._readFormulaTail;\n case '<<':\n return this._readRDFStarTailOrGraph;\n }\n }\n\n // ### `_emit` sends a quad through the callback\n _emit(subject, predicate, object, graph) {\n this._callback(null, this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH));\n }\n\n // ### `_error` emits an error message through the callback\n _error(message, token) {\n const err = new Error(`${message} on line ${token.line}.`);\n err.context = {\n token: token,\n line: token.line,\n previousToken: this._lexer.previousToken,\n };\n this._callback(err);\n this._callback = noop;\n }\n\n // ### `_resolveIRI` resolves an IRI against the base path\n _resolveIRI(iri) {\n return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri);\n }\n\n // ### `_resolveRelativeIRI` resolves an IRI against the base path,\n // assuming that a base path has been set and that the IRI is indeed relative\n _resolveRelativeIRI(iri) {\n // An empty relative IRI indicates the base IRI\n if (!iri.length)\n return this._base;\n // Decide resolving strategy based in the first character\n switch (iri[0]) {\n // Resolve relative fragment IRIs against the base IRI\n case '#': return this._base + iri;\n // Resolve relative query string IRIs by replacing the query string\n case '?': return this._base.replace(/(?:\\?.*)?$/, iri);\n // Resolve root-relative IRIs at the root of the base IRI\n case '/':\n // Resolve scheme-relative IRIs to the scheme\n return (iri[1] === '/' ? this._baseScheme : this._baseRoot) + this._removeDotSegments(iri);\n // Resolve all other IRIs at the base IRI's path\n default:\n // Relative IRIs cannot contain a colon in the first path segment\n return (/^[^/:]*:/.test(iri)) ? null : this._removeDotSegments(this._basePath + iri);\n }\n }\n\n // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986\n _removeDotSegments(iri) {\n // Don't modify the IRI if it does not contain any dot segments\n if (!/(^|\\/)\\.\\.?($|[/#?])/.test(iri))\n return iri;\n\n // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../'\n const length = iri.length;\n let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/';\n\n while (i < length) {\n switch (next) {\n // The path starts with the first slash after the authority\n case ':':\n if (pathStart < 0) {\n // Skip two slashes before the authority\n if (iri[++i] === '/' && iri[++i] === '/')\n // Skip to slash after the authority\n while ((pathStart = i + 1) < length && iri[pathStart] !== '/')\n i = pathStart;\n }\n break;\n // Don't modify a query string or fragment\n case '?':\n case '#':\n i = length;\n break;\n // Handle '/.' or '/..' path segments\n case '/':\n if (iri[i + 1] === '.') {\n next = iri[++i + 1];\n switch (next) {\n // Remove a '/.' segment\n case '/':\n result += iri.substring(segmentStart, i - 1);\n segmentStart = i + 1;\n break;\n // Remove a trailing '/.' segment\n case undefined:\n case '?':\n case '#':\n return result + iri.substring(segmentStart, i) + iri.substr(i + 1);\n // Remove a '/..' segment\n case '.':\n next = iri[++i + 1];\n if (next === undefined || next === '/' || next === '?' || next === '#') {\n result += iri.substring(segmentStart, i - 2);\n // Try to remove the parent path from result\n if ((segmentStart = result.lastIndexOf('/')) >= pathStart)\n result = result.substr(0, segmentStart);\n // Remove a trailing '/..' segment\n if (next !== '/')\n return `${result}/${iri.substr(i + 1)}`;\n segmentStart = i + 1;\n }\n }\n }\n }\n next = iri[++i];\n }\n return result + iri.substring(segmentStart);\n }\n\n // ## Public methods\n\n // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.\n parse(input, quadCallback, prefixCallback) {\n // The second parameter accepts an object { onQuad: ..., onPrefix: ..., onComment: ...}\n // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well\n let onQuad, onPrefix, onComment;\n if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment)) {\n onQuad = quadCallback.onQuad;\n onPrefix = quadCallback.onPrefix;\n onComment = quadCallback.onComment;\n }\n else {\n onQuad = quadCallback;\n onPrefix = prefixCallback;\n }\n // The read callback is the next function to be executed when a token arrives.\n // We start reading in the top context.\n this._readCallback = this._readInTopContext;\n this._sparqlStyle = false;\n this._prefixes = Object.create(null);\n this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)\n : `b${blankNodePrefix++}_`;\n this._prefixCallback = onPrefix || noop;\n this._inversePredicate = false;\n this._quantified = Object.create(null);\n\n // Parse synchronously if no quad callback is given\n if (!onQuad) {\n const quads = [];\n let error;\n this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); };\n this._lexer.tokenize(input).every(token => {\n return this._readCallback = this._readCallback(token);\n });\n if (error) throw error;\n return quads;\n }\n\n let processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback)\n this._readCallback = this._readCallback(token);\n };\n\n // Enable checking for comments on every token when a commentCallback has been set\n if (onComment) {\n // Enable the lexer to return comments as tokens first (disabled by default)\n this._lexer.comments = true;\n // Patch the processNextToken function\n processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback) {\n if (token.type === 'comment')\n onComment(token.value);\n else\n this._readCallback = this._readCallback(token);\n }\n };\n }\n\n // Parse asynchronously otherwise, executing the read callback when a token arrives\n this._callback = onQuad;\n this._lexer.tokenize(input, processNextToken);\n }\n}\n\n// The empty function\nfunction noop() {}\n\n// Initializes the parser with the given data factory\nfunction initDataFactory(parser, factory) {\n parser._factory = factory;\n\n parser.DEFAULTGRAPH = factory.defaultGraph();\n\n // Set common named nodes\n parser.RDF_FIRST = factory.namedNode(namespaces.rdf.first);\n parser.RDF_REST = factory.namedNode(namespaces.rdf.rest);\n parser.RDF_NIL = factory.namedNode(namespaces.rdf.nil);\n parser.N3_FORALL = factory.namedNode(namespaces.r.forAll);\n parser.N3_FORSOME = factory.namedNode(namespaces.r.forSome);\n parser.ABBREVIATIONS = {\n 'a': factory.namedNode(namespaces.rdf.type),\n '=': factory.namedNode(namespaces.owl.sameAs),\n '>': factory.namedNode(namespaces.log.implies),\n '<': factory.namedNode(namespaces.log.isImpliedBy),\n };\n parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');\n}\ninitDataFactory(N3Parser.prototype, N3DataFactory);\n","// **N3Util** provides N3 utility functions.\n\nimport N3DataFactory from './N3DataFactory';\n\n// Tests whether the given term represents an IRI\nexport function isNamedNode(term) {\n return !!term && term.termType === 'NamedNode';\n}\n\n// Tests whether the given term represents a blank node\nexport function isBlankNode(term) {\n return !!term && term.termType === 'BlankNode';\n}\n\n// Tests whether the given term represents a literal\nexport function isLiteral(term) {\n return !!term && term.termType === 'Literal';\n}\n\n// Tests whether the given term represents a variable\nexport function isVariable(term) {\n return !!term && term.termType === 'Variable';\n}\n\n// Tests whether the given term represents a quad\nexport function isQuad(term) {\n return !!term && term.termType === 'Quad';\n}\n\n// Tests whether the given term represents the default graph\nexport function isDefaultGraph(term) {\n return !!term && term.termType === 'DefaultGraph';\n}\n\n// Tests whether the given quad is in the default graph\nexport function inDefaultGraph(quad) {\n return isDefaultGraph(quad.graph);\n}\n\n// Creates a function that prepends the given IRI to a local name\nexport function prefix(iri, factory) {\n return prefixes({ '': iri.value || iri }, factory)('');\n}\n\n// Creates a function that allows registering and expanding prefixes\nexport function prefixes(defaultPrefixes, factory) {\n // Add all of the default prefixes\n const prefixes = Object.create(null);\n for (const prefix in defaultPrefixes)\n processPrefix(prefix, defaultPrefixes[prefix]);\n // Set the default factory if none was specified\n factory = factory || N3DataFactory;\n\n // Registers a new prefix (if an IRI was specified)\n // or retrieves a function that expands an existing prefix (if no IRI was specified)\n function processPrefix(prefix, iri) {\n // Create a new prefix if an IRI is specified or the prefix doesn't exist\n if (typeof iri === 'string') {\n // Create a function that expands the prefix\n const cache = Object.create(null);\n prefixes[prefix] = local => {\n return cache[local] || (cache[local] = factory.namedNode(iri + local));\n };\n }\n else if (!(prefix in prefixes)) {\n throw new Error(`Unknown prefix: ${prefix}`);\n }\n return prefixes[prefix];\n }\n return processPrefix;\n}\n","export function escapeRegex(regex) {\n return regex.replace(/[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n}\n","import { escapeRegex } from './Util';\n\n// Do not handle base IRIs without scheme, and currently unsupported cases:\n// - file: IRIs (which could also use backslashes)\n// - IRIs containing /. or /.. or //\nconst BASE_UNSUPPORTED = /^:?[^:?#]*(?:[?#]|$)|^file:|^[^:]*:\\/*[^?#]+?\\/(?:\\.\\.?(?:\\/|$)|\\/)/i;\nconst SUFFIX_SUPPORTED = /^(?:(?:[^/?#]{3,}|\\.?[^/?#.]\\.?)(?:\\/[^/?#]{3,}|\\.?[^/?#.]\\.?)*\\/?)?(?:[?#]|$)/;\nconst CURRENT = './';\nconst PARENT = '../';\nconst QUERY = '?';\nconst FRAGMENT = '#';\n\nexport default class BaseIRI {\n constructor(base) {\n this.base = base;\n this._baseLength = 0;\n this._baseMatcher = null;\n this._pathReplacements = new Array(base.length + 1);\n }\n\n static supports(base) {\n return !BASE_UNSUPPORTED.test(base);\n }\n\n _getBaseMatcher() {\n if (this._baseMatcher)\n return this._baseMatcher;\n if (!BaseIRI.supports(this.base))\n return this._baseMatcher = /.^/;\n\n // Extract the scheme\n const scheme = /^[^:]*:\\/*/.exec(this.base)[0];\n const regexHead = ['^', escapeRegex(scheme)];\n const regexTail = [];\n\n // Generate a regex for every path segment\n const segments = [], segmenter = /[^/?#]*([/?#])/y;\n let segment, query = 0, fragment = 0, last = segmenter.lastIndex = scheme.length;\n while (!query && !fragment && (segment = segmenter.exec(this.base))) {\n // Truncate base resolution path at fragment start\n if (segment[1] === FRAGMENT)\n fragment = segmenter.lastIndex - 1;\n else {\n // Create regex that matches the segment\n regexHead.push(escapeRegex(segment[0]), '(?:');\n regexTail.push(')?');\n\n // Create dedicated query string replacement\n if (segment[1] !== QUERY)\n segments.push(last = segmenter.lastIndex);\n else {\n query = last = segmenter.lastIndex;\n fragment = this.base.indexOf(FRAGMENT, query);\n this._pathReplacements[query] = QUERY;\n }\n }\n }\n\n // Precalculate parent path substitutions\n for (let i = 0; i < segments.length; i++)\n this._pathReplacements[segments[i]] = PARENT.repeat(segments.length - i - 1);\n this._pathReplacements[segments[segments.length - 1]] = CURRENT;\n\n // Add the remainder of the base IRI (without fragment) to the regex\n this._baseLength = fragment > 0 ? fragment : this.base.length;\n regexHead.push(\n escapeRegex(this.base.substring(last, this._baseLength)),\n query ? '(?:#|$)' : '(?:[?#]|$)',\n );\n return this._baseMatcher = new RegExp([...regexHead, ...regexTail].join(''));\n }\n\n toRelative(iri) {\n // Unsupported or non-matching base IRI\n const match = this._getBaseMatcher().exec(iri);\n if (!match)\n return iri;\n\n // Exact base IRI match\n const length = match[0].length;\n if (length === this._baseLength && length === iri.length)\n return '';\n\n // Parent path match\n const parentPath = this._pathReplacements[length];\n if (parentPath) {\n const suffix = iri.substring(length);\n // Don't abbreviate unsupported path\n if (parentPath !== QUERY && !SUFFIX_SUPPORTED.test(suffix))\n return iri;\n // Omit ./ with fragment or query string\n if (parentPath === CURRENT && /^[^?#]/.test(suffix))\n return suffix;\n // Append suffix to relative parent path\n return parentPath + suffix;\n }\n\n // Fragment or query string, so include delimiter\n return iri.substring(length - 1);\n }\n}\n","// **N3Writer** writes N3 documents.\nimport namespaces from './IRIs';\nimport { default as N3DataFactory, Term } from './N3DataFactory';\nimport { isDefaultGraph } from './N3Util';\nimport BaseIRI from './BaseIRI';\nimport { escapeRegex } from './Util';\n\nconst DEFAULTGRAPH = N3DataFactory.defaultGraph();\n\nconst { rdf, xsd } = namespaces;\n\n// Characters in literals that require escaping\nconst escape = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019\\ud800-\\udbff]/,\n escapeAll = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\ud800-\\udbff][\\udc00-\\udfff]/g,\n escapedCharacters = {\n '\\\\': '\\\\\\\\', '\"': '\\\\\"', '\\t': '\\\\t',\n '\\n': '\\\\n', '\\r': '\\\\r', '\\b': '\\\\b', '\\f': '\\\\f',\n };\n\n// ## Placeholder class to represent already pretty-printed terms\nclass SerializedTerm extends Term {\n // Pretty-printed nodes are not equal to any other node\n // (e.g., [] does not equal [])\n equals(other) {\n return other === this;\n }\n}\n\n// ## Constructor\nexport default class N3Writer {\n constructor(outputStream, options) {\n // ### `_prefixRegex` matches a prefixed name or IRI that begins with one of the added prefixes\n this._prefixRegex = /$0^/;\n\n // Shift arguments if the first argument is not a stream\n if (outputStream && typeof outputStream.write !== 'function')\n options = outputStream, outputStream = null;\n options = options || {};\n this._lists = options.lists;\n\n // If no output stream given, send the output as string through the end callback\n if (!outputStream) {\n let output = '';\n this._outputStream = {\n write(chunk, encoding, done) { output += chunk; done && done(); },\n end: done => { done && done(null, output); },\n };\n this._endStream = true;\n }\n else {\n this._outputStream = outputStream;\n this._endStream = options.end === undefined ? true : !!options.end;\n }\n\n // Initialize writer, depending on the format\n this._subject = null;\n if (!(/triple|quad/i).test(options.format)) {\n this._lineMode = false;\n this._graph = DEFAULTGRAPH;\n this._prefixIRIs = Object.create(null);\n options.prefixes && this.addPrefixes(options.prefixes);\n if (options.baseIRI) {\n this._baseIri = new BaseIRI(options.baseIRI);\n }\n }\n else {\n this._lineMode = true;\n this._writeQuad = this._writeQuadLine;\n }\n }\n\n // ## Private methods\n\n // ### Whether the current graph is the default graph\n get _inDefaultGraph() {\n return DEFAULTGRAPH.equals(this._graph);\n }\n\n // ### `_write` writes the argument to the output stream\n _write(string, callback) {\n this._outputStream.write(string, 'utf8', callback);\n }\n\n // ### `_writeQuad` writes the quad to the output stream\n _writeQuad(subject, predicate, object, graph, done) {\n try {\n // Write the graph's label if it has changed\n if (!graph.equals(this._graph)) {\n // Close the previous graph and start the new one\n this._write((this._subject === null ? '' : (this._inDefaultGraph ? '.\\n' : '\\n}\\n')) +\n (DEFAULTGRAPH.equals(graph) ? '' : `${this._encodeIriOrBlank(graph)} {\\n`));\n this._graph = graph;\n this._subject = null;\n }\n // Don't repeat the subject if it's the same\n if (subject.equals(this._subject)) {\n // Don't repeat the predicate if it's the same\n if (predicate.equals(this._predicate))\n this._write(`, ${this._encodeObject(object)}`, done);\n // Same subject, different predicate\n else\n this._write(`;\\n ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n // Different subject; write the whole quad\n else\n this._write(`${(this._subject === null ? '' : '.\\n') +\n this._encodeSubject(this._subject = subject)} ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n catch (error) { done && done(error); }\n }\n\n // ### `_writeQuadLine` writes the quad to the output stream as a single line\n _writeQuadLine(subject, predicate, object, graph, done) {\n // Write the quad without prefixes\n delete this._prefixMatch;\n this._write(this.quadToString(subject, predicate, object, graph), done);\n }\n\n // ### `quadToString` serializes a quad as a string\n quadToString(subject, predicate, object, graph) {\n return `${this._encodeSubject(subject)} ${\n this._encodeIriOrBlank(predicate)} ${\n this._encodeObject(object)\n }${graph && graph.value ? ` ${this._encodeIriOrBlank(graph)} .\\n` : ' .\\n'}`;\n }\n\n // ### `quadsToString` serializes an array of quads as a string\n quadsToString(quads) {\n let quadsString = '';\n for (const quad of quads)\n quadsString += this.quadToString(quad.subject, quad.predicate, quad.object, quad.graph);\n return quadsString;\n }\n\n // ### `_encodeSubject` represents a subject\n _encodeSubject(entity) {\n return entity.termType === 'Quad' ?\n this._encodeQuad(entity) : this._encodeIriOrBlank(entity);\n }\n\n // ### `_encodeIriOrBlank` represents an IRI or blank node\n _encodeIriOrBlank(entity) {\n // A blank node or list is represented as-is\n if (entity.termType !== 'NamedNode') {\n // If it is a list head, pretty-print it\n if (this._lists && (entity.value in this._lists))\n entity = this.list(this._lists[entity.value]);\n return 'id' in entity ? entity.id : `_:${entity.value}`;\n }\n let iri = entity.value;\n // Use relative IRIs if requested and possible\n if (this._baseIri) {\n iri = this._baseIri.toRelative(iri);\n }\n // Escape special characters\n if (escape.test(iri))\n iri = iri.replace(escapeAll, characterReplacer);\n // Try to represent the IRI as prefixed name\n const prefixMatch = this._prefixRegex.exec(iri);\n return !prefixMatch ? `<${iri}>` :\n (!prefixMatch[1] ? iri : this._prefixIRIs[prefixMatch[1]] + prefixMatch[2]);\n }\n\n // ### `_encodeLiteral` represents a literal\n _encodeLiteral(literal) {\n // Escape special characters\n let value = literal.value;\n if (escape.test(value))\n value = value.replace(escapeAll, characterReplacer);\n\n // Write a language-tagged literal\n if (literal.language)\n return `\"${value}\"@${literal.language}`;\n\n // Write dedicated literals per data type\n if (this._lineMode) {\n // Only abbreviate strings in N-Triples or N-Quads\n if (literal.datatype.value === xsd.string)\n return `\"${value}\"`;\n }\n else {\n // Use common datatype abbreviations in Turtle or TriG\n switch (literal.datatype.value) {\n case xsd.string:\n return `\"${value}\"`;\n case xsd.boolean:\n if (value === 'true' || value === 'false')\n return value;\n break;\n case xsd.integer:\n if (/^[+-]?\\d+$/.test(value))\n return value;\n break;\n case xsd.decimal:\n if (/^[+-]?\\d*\\.\\d+$/.test(value))\n return value;\n break;\n case xsd.double:\n if (/^[+-]?(?:\\d+\\.\\d*|\\.?\\d+)[eE][+-]?\\d+$/.test(value))\n return value;\n break;\n }\n }\n\n // Write a regular datatyped literal\n return `\"${value}\"^^${this._encodeIriOrBlank(literal.datatype)}`;\n }\n\n // ### `_encodePredicate` represents a predicate\n _encodePredicate(predicate) {\n return predicate.value === rdf.type ? 'a' : this._encodeIriOrBlank(predicate);\n }\n\n // ### `_encodeObject` represents an object\n _encodeObject(object) {\n switch (object.termType) {\n case 'Quad':\n return this._encodeQuad(object);\n case 'Literal':\n return this._encodeLiteral(object);\n default:\n return this._encodeIriOrBlank(object);\n }\n }\n\n // ### `_encodeQuad` encodes an RDF-star quad\n _encodeQuad({ subject, predicate, object, graph }) {\n return `<<${\n this._encodeSubject(subject)} ${\n this._encodePredicate(predicate)} ${\n this._encodeObject(object)}${\n isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`}>>`;\n }\n\n // ### `_blockedWrite` replaces `_write` after the writer has been closed\n _blockedWrite() {\n throw new Error('Cannot write because the writer has been closed.');\n }\n\n // ### `addQuad` adds the quad to the output stream\n addQuad(subject, predicate, object, graph, done) {\n // The quad was given as an object, so shift parameters\n if (object === undefined)\n this._writeQuad(subject.subject, subject.predicate, subject.object, subject.graph, predicate);\n // The optional `graph` parameter was not provided\n else if (typeof graph === 'function')\n this._writeQuad(subject, predicate, object, DEFAULTGRAPH, graph);\n // The `graph` parameter was provided\n else\n this._writeQuad(subject, predicate, object, graph || DEFAULTGRAPH, done);\n }\n\n // ### `addQuads` adds the quads to the output stream\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `addPrefix` adds the prefix to the output stream\n addPrefix(prefix, iri, done) {\n const prefixes = {};\n prefixes[prefix] = iri;\n this.addPrefixes(prefixes, done);\n }\n\n // ### `addPrefixes` adds the prefixes to the output stream\n addPrefixes(prefixes, done) {\n // Ignore prefixes if not supported by the serialization\n if (!this._prefixIRIs)\n return done && done();\n\n // Write all new prefixes\n let hasPrefixes = false;\n for (let prefix in prefixes) {\n let iri = prefixes[prefix];\n if (typeof iri !== 'string')\n iri = iri.value;\n hasPrefixes = true;\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null, this._graph = '';\n }\n // Store and write the prefix\n this._prefixIRIs[iri] = (prefix += ':');\n this._write(`@prefix ${prefix} <${iri}>.\\n`);\n }\n // Recreate the prefix matcher\n if (hasPrefixes) {\n let IRIlist = '', prefixList = '';\n for (const prefixIRI in this._prefixIRIs) {\n IRIlist += IRIlist ? `|${prefixIRI}` : prefixIRI;\n prefixList += (prefixList ? '|' : '') + this._prefixIRIs[prefixIRI];\n }\n IRIlist = escapeRegex(IRIlist, /[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n this._prefixRegex = new RegExp(`^(?:${prefixList})[^\\/]*$|` +\n `^(${IRIlist})([_a-zA-Z0-9][\\\\-_a-zA-Z0-9]*)$`);\n }\n // End a prefix block with a newline\n this._write(hasPrefixes ? '\\n' : '', done);\n }\n\n // ### `blank` creates a blank node with the given content\n blank(predicate, object) {\n let children = predicate, child, length;\n // Empty blank node\n if (predicate === undefined)\n children = [];\n // Blank node passed as blank(Term(\"predicate\"), Term(\"object\"))\n else if (predicate.termType)\n children = [{ predicate: predicate, object: object }];\n // Blank node passed as blank({ predicate: predicate, object: object })\n else if (!('length' in predicate))\n children = [predicate];\n\n switch (length = children.length) {\n // Generate an empty blank node\n case 0:\n return new SerializedTerm('[]');\n // Generate a non-nested one-triple blank node\n case 1:\n child = children[0];\n if (!(child.object instanceof SerializedTerm))\n return new SerializedTerm(`[ ${this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)} ]`);\n // Generate a multi-triple or nested blank node\n default:\n let contents = '[';\n // Write all triples in order\n for (let i = 0; i < length; i++) {\n child = children[i];\n // Write only the object is the predicate is the same as the previous\n if (child.predicate.equals(predicate))\n contents += `, ${this._encodeObject(child.object)}`;\n // Otherwise, write the predicate and the object\n else {\n contents += `${(i ? ';\\n ' : '\\n ') +\n this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)}`;\n predicate = child.predicate;\n }\n }\n return new SerializedTerm(`${contents}\\n]`);\n }\n }\n\n // ### `list` creates a list node with the given content\n list(elements) {\n const length = elements && elements.length || 0, contents = new Array(length);\n for (let i = 0; i < length; i++)\n contents[i] = this._encodeObject(elements[i]);\n return new SerializedTerm(`(${contents.join(' ')})`);\n }\n\n // ### `end` signals the end of the output stream\n end(done) {\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null;\n }\n // Disallow further writing\n this._write = this._blockedWrite;\n\n // Try to end the underlying stream, ensuring done is called exactly one time\n let singleDone = done && ((error, result) => { singleDone = null, done(error, result); });\n if (this._endStream) {\n try { return this._outputStream.end(singleDone); }\n catch (error) { /* error closing stream */ }\n }\n singleDone && singleDone();\n }\n}\n\n// Replaces a character by its escaped version\nfunction characterReplacer(character) {\n // Replace a single character by its escaped version\n let result = escapedCharacters[character];\n if (result === undefined) {\n // Replace a single character with its 4-bit unicode escape sequence\n if (character.length === 1) {\n result = character.charCodeAt(0).toString(16);\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n // Replace a surrogate pair with its 8-bit unicode escape sequence\n else {\n result = ((character.charCodeAt(0) - 0xD800) * 0x400 +\n character.charCodeAt(1) + 0x2400).toString(16);\n result = '\\\\U00000000'.substr(0, 10 - result.length) + result;\n }\n }\n return result;\n}\n","// **N3Store** objects store N3 quads by graph in memory.\nimport { Readable } from 'readable-stream';\nimport { default as N3DataFactory, termToId, termFromId } from './N3DataFactory';\nimport namespaces from './IRIs';\nimport { isDefaultGraph } from './N3Util';\nimport N3Writer from './N3Writer';\n\nconst ITERATOR = Symbol('iter');\n\nfunction merge(target, source, depth = 4) {\n if (depth === 0)\n return Object.assign(target, source);\n\n for (const key in source)\n target[key] = merge(target[key] || Object.create(null), source[key], depth - 1);\n\n return target;\n}\n\n/**\n * Determines the intersection of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no intersection; this should\n * *not* be set as the value for an index.\n */\nfunction intersect(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n if (key in s2) {\n const intersection = depth === 0 ? null : intersect(s1[key], s2[key], depth - 1);\n if (intersection !== false) {\n target = target || Object.create(null);\n target[key] = intersection;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Determines the difference of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no difference; this should\n * *not* be set as the value for an index.\n */\nfunction difference(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n // When the key is not in the index, then none of the triples defined by s1[key] are\n // in s2 and so we want to copy them over to the resultant store.\n if (!(key in s2)) {\n target = target || Object.create(null);\n target[key] = depth === 0 ? null : merge({}, s1[key], depth - 1);\n }\n else if (depth !== 0) {\n const diff = difference(s1[key], s2[key], depth - 1);\n if (diff !== false) {\n target = target || Object.create(null);\n target[key] = diff;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n// ## Constructor\nexport class N3EntityIndex {\n constructor(options = {}) {\n this._id = 1;\n // `_ids` maps entities such as `http://xmlns.com/foaf/0.1/name` to numbers,\n // saving memory by using only numbers as keys in `_graphs`\n this._ids = Object.create(null);\n this._ids[''] = 1;\n // inverse of `_ids`\n this._entities = Object.create(null);\n this._entities[1] = '';\n // `_blankNodeIndex` is the index of the last automatically named blank node\n this._blankNodeIndex = 0;\n this._factory = options.factory || N3DataFactory;\n }\n\n _termFromId(id) {\n if (id[0] === '.') {\n const entities = this._entities;\n const terms = id.split('.');\n const q = this._factory.quad(\n this._termFromId(entities[terms[1]]),\n this._termFromId(entities[terms[2]]),\n this._termFromId(entities[terms[3]]),\n terms[4] && this._termFromId(entities[terms[4]]),\n );\n return q;\n }\n return termFromId(id, this._factory);\n }\n\n _termToNumericId(term) {\n if (term.termType === 'Quad') {\n const s = this._termToNumericId(term.subject),\n p = this._termToNumericId(term.predicate),\n o = this._termToNumericId(term.object);\n let g;\n\n return s && p && o && (isDefaultGraph(term.graph) || (g = this._termToNumericId(term.graph))) &&\n this._ids[g ? `.${s}.${p}.${o}.${g}` : `.${s}.${p}.${o}`];\n }\n return this._ids[termToId(term)];\n }\n\n _termToNewNumericId(term) {\n // This assumes that no graph term is present - we may wish to error if there is one\n const str = term && term.termType === 'Quad' ?\n `.${this._termToNewNumericId(term.subject)}.${this._termToNewNumericId(term.predicate)}.${this._termToNewNumericId(term.object)}${\n isDefaultGraph(term.graph) ? '' : `.${this._termToNewNumericId(term.graph)}`\n }`\n : termToId(term);\n\n return this._ids[str] || (this._ids[this._entities[++this._id] = str] = this._id);\n }\n\n createBlankNode(suggestedName) {\n let name, index;\n // Generate a name based on the suggested name\n if (suggestedName) {\n name = suggestedName = `_:${suggestedName}`, index = 1;\n while (this._ids[name])\n name = suggestedName + index++;\n }\n // Generate a generic blank node name\n else {\n do { name = `_:b${this._blankNodeIndex++}`; }\n while (this._ids[name]);\n }\n // Add the blank node to the entities, avoiding the generation of duplicates\n this._ids[name] = ++this._id;\n this._entities[this._id] = name;\n return this._factory.blankNode(name.substr(2));\n }\n}\n\n// ## Constructor\nexport default class N3Store {\n constructor(quads, options) {\n // The number of quads is initially zero\n this._size = 0;\n // `_graphs` contains subject, predicate, and object indexes per graph\n this._graphs = Object.create(null);\n\n // Shift parameters if `quads` is not given\n if (!options && quads && !quads[0] && !(typeof quads.match === 'function'))\n options = quads, quads = null;\n options = options || {};\n this._factory = options.factory || N3DataFactory;\n this._entityIndex = options.entityIndex || new N3EntityIndex({ factory: this._factory });\n this._entities = this._entityIndex._entities;\n this._termFromId = this._entityIndex._termFromId.bind(this._entityIndex);\n this._termToNumericId = this._entityIndex._termToNumericId.bind(this._entityIndex);\n this._termToNewNumericId = this._entityIndex._termToNewNumericId.bind(this._entityIndex);\n\n // Add quads if passed\n if (quads)\n this.addAll(quads);\n }\n\n // ## Public properties\n\n // ### `size` returns the number of quads in the store\n get size() {\n // Return the quad count if if was cached\n let size = this._size;\n if (size !== null)\n return size;\n\n // Calculate the number of quads by counting to the deepest level\n size = 0;\n const graphs = this._graphs;\n let subjects, subject;\n for (const graphKey in graphs)\n for (const subjectKey in (subjects = graphs[graphKey].subjects))\n for (const predicateKey in (subject = subjects[subjectKey]))\n size += Object.keys(subject[predicateKey]).length;\n return this._size = size;\n }\n\n // ## Private methods\n\n // ### `_addToIndex` adds a quad to a three-layered index.\n // Returns if the index has changed, if the entry did not already exist.\n _addToIndex(index0, key0, key1, key2) {\n // Create layers as necessary\n const index1 = index0[key0] || (index0[key0] = {});\n const index2 = index1[key1] || (index1[key1] = {});\n // Setting the key to _any_ value signals the presence of the quad\n const existed = key2 in index2;\n if (!existed)\n index2[key2] = null;\n return !existed;\n }\n\n // ### `_removeFromIndex` removes a quad from a three-layered index\n _removeFromIndex(index0, key0, key1, key2) {\n // Remove the quad from the index\n const index1 = index0[key0], index2 = index1[key1];\n delete index2[key2];\n\n // Remove intermediary index layers if they are empty\n for (const key in index2) return;\n delete index1[key1];\n for (const key in index1) return;\n delete index0[key0];\n }\n\n // ### `_findInIndex` finds a set of quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n // `name0`, `name1`, and `name2` are the names of the keys at each level,\n // used when reconstructing the resulting quad\n // (for instance: _subject_, _predicate_, and _object_).\n // Finally, `graphId` will be the graph of the created quads.\n *_findInIndex(index0, key0, key1, key2, name0, name1, name2, graphId) {\n let tmp, index1, index2;\n const entityKeys = this._entities;\n const graph = this._termFromId(entityKeys[graphId]);\n const parts = { subject: null, predicate: null, object: null };\n\n // If a key is specified, use only that part of index 0.\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n parts[name0] = this._termFromId(entityKeys[value0]);\n // If a key is specified, use only that part of index 1.\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n parts[name1] = this._termFromId(entityKeys[value1]);\n // If a key is specified, use only that part of index 2, if it exists.\n const values = key2 ? (key2 in index2 ? [key2] : []) : Object.keys(index2);\n // Create quads for all items found in index 2.\n for (let l = 0; l < values.length; l++) {\n parts[name2] = this._termFromId(entityKeys[values[l]]);\n yield this._factory.quad(parts.subject, parts.predicate, parts.object, graph);\n }\n }\n }\n }\n }\n }\n\n // ### `_loop` executes the callback on all keys of index 0\n _loop(index0, callback) {\n for (const key0 in index0)\n callback(key0);\n }\n\n // ### `_loopByKey0` executes the callback on all keys of a certain entry in index 0\n _loopByKey0(index0, key0, callback) {\n let index1, key1;\n if (index1 = index0[key0]) {\n for (key1 in index1)\n callback(key1);\n }\n }\n\n // ### `_loopByKey1` executes the callback on given keys of all entries in index 0\n _loopByKey1(index0, key1, callback) {\n let key0, index1;\n for (key0 in index0) {\n index1 = index0[key0];\n if (index1[key1])\n callback(key0);\n }\n }\n\n // ### `_loopBy2Keys` executes the callback on given keys of certain entries in index 2\n _loopBy2Keys(index0, key0, key1, callback) {\n let index1, index2, key2;\n if ((index1 = index0[key0]) && (index2 = index1[key1])) {\n for (key2 in index2)\n callback(key2);\n }\n }\n\n // ### `_countInIndex` counts matching quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n _countInIndex(index0, key0, key1, key2) {\n let count = 0, tmp, index1, index2;\n\n // If a key is specified, count only that part of index 0\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n // If a key is specified, count only that part of index 1\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n // If a key is specified, count the quad if it exists\n if (key2) (key2 in index2) && count++;\n // Otherwise, count all quads\n else count += Object.keys(index2).length;\n }\n }\n }\n }\n return count;\n }\n\n // ### `_getGraphs` returns an array with the given graph,\n // or all graphs if the argument is null or undefined.\n _getGraphs(graph) {\n graph = graph === '' ? 1 : (graph && (this._termToNumericId(graph) || -1));\n return typeof graph !== 'number' ? this._graphs : { [graph]: this._graphs[graph] };\n }\n\n // ### `_uniqueEntities` returns a function that accepts an entity ID\n // and passes the corresponding entity to callback if it hasn't occurred before.\n _uniqueEntities(callback) {\n const uniqueIds = Object.create(null);\n return id => {\n if (!(id in uniqueIds)) {\n uniqueIds[id] = true;\n callback(this._termFromId(this._entities[id], this._factory));\n }\n };\n }\n\n // ## Public methods\n\n // ### `add` adds the specified quad to the dataset.\n // Returns the dataset instance it was called on.\n // Existing quads, as defined in Quad.equals, will be ignored.\n add(quad) {\n this.addQuad(quad);\n return this;\n }\n\n // ### `addQuad` adds a new quad to the store.\n // Returns if the quad index has changed, if the quad did not already exist.\n addQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n graph = subject.graph, object = subject.object,\n predicate = subject.predicate, subject = subject.subject;\n\n // Convert terms to internal string representation\n graph = graph ? this._termToNewNumericId(graph) : 1;\n\n // Find the graph that will contain the triple\n let graphItem = this._graphs[graph];\n // Create the graph if it doesn't exist yet\n if (!graphItem) {\n graphItem = this._graphs[graph] = { subjects: {}, predicates: {}, objects: {} };\n // Freezing a graph helps subsequent `add` performance,\n // and properties will never be modified anyway\n Object.freeze(graphItem);\n }\n\n // Since entities can often be long IRIs, we avoid storing them in every index.\n // Instead, we have a separate index that maps entities to numbers,\n // which are then used as keys in the other indexes.\n subject = this._termToNewNumericId(subject);\n predicate = this._termToNewNumericId(predicate);\n object = this._termToNewNumericId(object);\n\n if (!this._addToIndex(graphItem.subjects, subject, predicate, object))\n return false;\n this._addToIndex(graphItem.predicates, predicate, object, subject);\n this._addToIndex(graphItem.objects, object, subject, predicate);\n\n // The cached quad count is now invalid\n this._size = null;\n return true;\n }\n\n // ### `addQuads` adds multiple quads to the store\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `delete` removes the specified quad from the dataset.\n // Returns the dataset instance it was called on.\n delete(quad) {\n this.removeQuad(quad);\n return this;\n }\n\n // ### `has` determines whether a dataset includes a certain quad or quad pattern.\n has(subjectOrQuad, predicate, object, graph) {\n if (subjectOrQuad && subjectOrQuad.subject)\n ({ subject: subjectOrQuad, predicate, object, graph } = subjectOrQuad);\n return !this.readQuads(subjectOrQuad, predicate, object, graph).next().done;\n }\n\n // ### `import` adds a stream of quads to the store\n import(stream) {\n stream.on('data', quad => { this.addQuad(quad); });\n return stream;\n }\n\n // ### `removeQuad` removes a quad from the store if it exists\n removeQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n ({ subject, predicate, object, graph } = subject);\n // Convert terms to internal string representation\n graph = graph ? this._termToNumericId(graph) : 1;\n\n // Find internal identifiers for all components\n // and verify the quad exists.\n const graphs = this._graphs;\n let graphItem, subjects, predicates;\n if (!(subject = subject && this._termToNumericId(subject)) || !(predicate = predicate && this._termToNumericId(predicate)) ||\n !(object = object && this._termToNumericId(object)) || !(graphItem = graphs[graph]) ||\n !(subjects = graphItem.subjects[subject]) ||\n !(predicates = subjects[predicate]) ||\n !(object in predicates))\n return false;\n\n // Remove it from all indexes\n this._removeFromIndex(graphItem.subjects, subject, predicate, object);\n this._removeFromIndex(graphItem.predicates, predicate, object, subject);\n this._removeFromIndex(graphItem.objects, object, subject, predicate);\n if (this._size !== null) this._size--;\n\n // Remove the graph if it is empty\n for (subject in graphItem.subjects) return true;\n delete graphs[graph];\n return true;\n }\n\n // ### `removeQuads` removes multiple quads from the store\n removeQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.removeQuad(quads[i]);\n }\n\n // ### `remove` removes a stream of quads from the store\n remove(stream) {\n stream.on('data', quad => { this.removeQuad(quad); });\n return stream;\n }\n\n // ### `removeMatches` removes all matching quads from the store\n // Setting any field to `undefined` or `null` indicates a wildcard.\n removeMatches(subject, predicate, object, graph) {\n const stream = new Readable({ objectMode: true });\n\n const iterable = this.readQuads(subject, predicate, object, graph);\n stream._read = size => {\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n stream.push(null);\n return;\n }\n stream.push(value);\n }\n };\n\n return this.remove(stream);\n }\n\n // ### `deleteGraph` removes all triples with the given graph from the store\n deleteGraph(graph) {\n return this.removeMatches(null, null, null, graph);\n }\n\n // ### `getQuads` returns an array of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getQuads(subject, predicate, object, graph) {\n return [...this.readQuads(subject, predicate, object, graph)];\n }\n\n /**\n * `readQuads` returns a generator of quads matching a pattern.\n * Setting any field to `undefined` or `null` indicates a wildcard.\n * @deprecated Use `match` instead.\n */\n *readQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, subjectId, predicateId,\n 'object', 'subject', 'predicate', graphId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n yield* this._findInIndex(content.subjects, subjectId, predicateId, null,\n 'subject', 'predicate', 'object', graphId);\n }\n else if (predicateId)\n // If only predicate and possibly object are given, the predicate index will be the fastest\n yield* this._findInIndex(content.predicates, predicateId, objectId, null,\n 'predicate', 'object', 'subject', graphId);\n else if (objectId)\n // If only object is given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, null, null,\n 'object', 'subject', 'predicate', graphId);\n else\n // If nothing is given, iterate subjects and predicates first\n yield* this._findInIndex(content.subjects, null, null, null,\n 'subject', 'predicate', 'object', graphId);\n }\n }\n }\n\n // ### `match` returns a new dataset that is comprised of all quads in the current instance matching the given arguments.\n // The logic described in Quad Matching is applied for each quad in this dataset to check if it should be included in the output dataset.\n // Note: This method always returns a new DatasetCore, even if that dataset contains no quads.\n // Note: Since a DatasetCore is an unordered set, the order of the quads within the returned sequence is arbitrary.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n // For backwards compatibility, the object return also implements the Readable stream interface.\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this, subject, predicate, object, graph, { entityIndex: this._entityIndex });\n }\n\n // ### `countQuads` returns the number of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n countQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let count = 0, content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return 0;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subject) {\n if (object)\n // If subject and object are given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n count += this._countInIndex(content.subjects, subjectId, predicateId, objectId);\n }\n else if (predicate) {\n // If only predicate and possibly object are given, the predicate index will be the fastest\n count += this._countInIndex(content.predicates, predicateId, objectId, subjectId);\n }\n else {\n // If only object is possibly given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n }\n }\n }\n return count;\n }\n\n // ### `forEach` executes the callback on all quads.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forEach(callback, subject, predicate, object, graph) {\n this.some(quad => {\n callback(quad, this);\n return false;\n }, subject, predicate, object, graph);\n }\n\n // ### `every` executes the callback on all quads,\n // and returns `true` if it returns truthy for all them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n every(callback, subject, predicate, object, graph) {\n return !this.some(quad => !callback(quad, this), subject, predicate, object, graph);\n }\n\n // ### `some` executes the callback on all quads,\n // and returns `true` if it returns truthy for any of them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n some(callback, subject, predicate, object, graph) {\n for (const quad of this.readQuads(subject, predicate, object, graph))\n if (callback(quad, this))\n return true;\n return false;\n }\n\n // ### `getSubjects` returns all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getSubjects(predicate, object, graph) {\n const results = [];\n this.forSubjects(s => { results.push(s); }, predicate, object, graph);\n return results;\n }\n\n // ### `forSubjects` executes the callback on all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forSubjects(callback, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, predicateId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (predicateId) {\n if (objectId)\n // If predicate and object are given, the POS index is best.\n this._loopBy2Keys(content.predicates, predicateId, objectId, callback);\n else\n // If only predicate is given, the SPO index is best.\n this._loopByKey1(content.subjects, predicateId, callback);\n }\n else if (objectId)\n // If only object is given, the OSP index is best.\n this._loopByKey0(content.objects, objectId, callback);\n else\n // If no params given, iterate all the subjects\n this._loop(content.subjects, callback);\n }\n }\n }\n\n // ### `getPredicates` returns all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getPredicates(subject, object, graph) {\n const results = [];\n this.forPredicates(p => { results.push(p); }, subject, object, graph);\n return results;\n }\n\n // ### `forPredicates` executes the callback on all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forPredicates(callback, subject, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the OSP index is best.\n this._loopBy2Keys(content.objects, objectId, subjectId, callback);\n else\n // If only subject is given, the SPO index is best.\n this._loopByKey0(content.subjects, subjectId, callback);\n }\n else if (objectId)\n // If only object is given, the POS index is best.\n this._loopByKey1(content.predicates, objectId, callback);\n else\n // If no params given, iterate all the predicates.\n this._loop(content.predicates, callback);\n }\n }\n }\n\n // ### `getObjects` returns all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getObjects(subject, predicate, graph) {\n const results = [];\n this.forObjects(o => { results.push(o); }, subject, predicate, graph);\n return results;\n }\n\n // ### `forObjects` executes the callback on all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forObjects(callback, subject, predicate, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (predicateId)\n // If subject and predicate are given, the SPO index is best.\n this._loopBy2Keys(content.subjects, subjectId, predicateId, callback);\n else\n // If only subject is given, the OSP index is best.\n this._loopByKey1(content.objects, subjectId, callback);\n }\n else if (predicateId)\n // If only predicate is given, the POS index is best.\n this._loopByKey0(content.predicates, predicateId, callback);\n else\n // If no params given, iterate all the objects.\n this._loop(content.objects, callback);\n }\n }\n }\n\n // ### `getGraphs` returns all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getGraphs(subject, predicate, object) {\n const results = [];\n this.forGraphs(g => { results.push(g); }, subject, predicate, object);\n return results;\n }\n\n // ### `forGraphs` executes the callback on all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forGraphs(callback, subject, predicate, object) {\n for (const graph in this._graphs) {\n this.some(quad => {\n callback(quad.graph);\n return true; // Halt iteration of some()\n }, subject, predicate, object, this._termFromId(this._entities[graph]));\n }\n }\n\n // ### `createBlankNode` creates a new blank node, returning its name\n createBlankNode(suggestedName) {\n return this._entityIndex.createBlankNode(suggestedName);\n }\n\n // ### `extractLists` finds and removes all list triples\n // and returns the items per list.\n extractLists({ remove = false, ignoreErrors = false } = {}) {\n const lists = {}; // has scalar keys so could be a simple Object\n const onError = ignoreErrors ? (() => true) :\n ((node, message) => { throw new Error(`${node.value} ${message}`); });\n\n // Traverse each list from its tail\n const tails = this.getQuads(null, namespaces.rdf.rest, namespaces.rdf.nil, null);\n const toRemove = remove ? [...tails] : [];\n tails.forEach(tailQuad => {\n const items = []; // the members found as objects of rdf:first quads\n let malformed = false; // signals whether the current list is malformed\n let head; // the head of the list (_:b1 in above example)\n let headPos; // set to subject or object when head is set\n const graph = tailQuad.graph; // make sure list is in exactly one graph\n\n // Traverse the list from tail to end\n let current = tailQuad.subject;\n while (current && !malformed) {\n const objectQuads = this.getQuads(null, null, current, null);\n const subjectQuads = this.getQuads(current, null, null, null);\n let quad, first = null, rest = null, parent = null;\n\n // Find the first and rest of this list node\n for (let i = 0; i < subjectQuads.length && !malformed; i++) {\n quad = subjectQuads[i];\n if (!quad.graph.equals(graph))\n malformed = onError(current, 'not confined to single graph');\n else if (head)\n malformed = onError(current, 'has non-list arcs out');\n\n // one rdf:first\n else if (quad.predicate.value === namespaces.rdf.first) {\n if (first)\n malformed = onError(current, 'has multiple rdf:first arcs');\n else\n toRemove.push(first = quad);\n }\n\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (rest)\n malformed = onError(current, 'has multiple rdf:rest arcs');\n else\n toRemove.push(rest = quad);\n }\n\n // alien triple\n else if (objectQuads.length)\n malformed = onError(current, 'can\\'t be subject and object');\n else {\n head = quad; // e.g. { (1 2 3) :p :o }\n headPos = 'subject';\n }\n }\n\n // { :s :p (1 2) } arrives here with no head\n // { (1 2) :p :o } arrives here with head set to the list.\n for (let i = 0; i < objectQuads.length && !malformed; ++i) {\n quad = objectQuads[i];\n if (head)\n malformed = onError(current, 'can\\'t have coreferences');\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (parent)\n malformed = onError(current, 'has incoming rdf:rest arcs');\n else\n parent = quad;\n }\n else {\n head = quad; // e.g. { :s :p (1 2) }\n headPos = 'object';\n }\n }\n\n // Store the list item and continue with parent\n if (!first)\n malformed = onError(current, 'has no list head');\n else\n items.unshift(first.object);\n current = parent && parent.subject;\n }\n\n // Don't remove any quads if the list is malformed\n if (malformed)\n remove = false;\n // Store the list under the value of its head\n else if (head)\n lists[head[headPos].value] = items;\n });\n\n // Remove list quads if requested\n if (remove)\n this.removeQuads(toRemove);\n return lists;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n addAll(quads) {\n if (quads instanceof DatasetCoreAndReadableStream)\n quads = quads.filtered;\n\n if (Array.isArray(quads))\n this.addQuads(quads);\n else if (quads instanceof N3Store && quads._entityIndex === this._entityIndex) {\n if (quads._size !== 0) {\n this._graphs = merge(this._graphs, quads._graphs);\n this._size = null; // Invalidate the cached size\n }\n }\n else {\n for (const quad of quads)\n this.add(quad);\n }\n return this;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n contains(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return true;\n\n if (!(other instanceof N3Store) || this._entityIndex !== other._entityIndex)\n return other.every(quad => this.has(quad));\n\n const g1 = this._graphs, g2 = other._graphs;\n let s1, s2, p1, p2, o1;\n for (const graph in g2) {\n if (!(s1 = g1[graph])) return false;\n s1 = s1.subjects;\n for (const subject in (s2 = g2[graph].subjects)) {\n if (!(p1 = s1[subject])) return false;\n for (const predicate in (p2 = s2[subject])) {\n if (!(o1 = p1[predicate])) return false;\n for (const object in p2[predicate])\n if (!(object in o1)) return false;\n }\n }\n }\n return true;\n }\n\n /**\n * This method removes the quads in the current dataset that match the given arguments.\n *\n * The logic described in {@link https://rdf.js.org/dataset-spec/#quad-matching|Quad Matching} is applied for each\n * quad in this dataset, to select the quads which will be deleted.\n *\n * @param subject The optional exact subject to match.\n * @param predicate The optional exact predicate to match.\n * @param object The optional exact object to match.\n * @param graph The optional exact graph to match.\n */\n deleteMatches(subject, predicate, object, graph) {\n for (const quad of this.match(subject, predicate, object, graph))\n this.removeQuad(quad);\n return this;\n }\n\n /**\n * Returns a new dataset that contains all quads from the current dataset that are not included in the given dataset.\n */\n difference(other) {\n if (other && other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return new N3Store({ entityIndex: this._entityIndex });\n\n if ((other instanceof N3Store) && other._entityIndex === this._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = difference(this._graphs, other._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => !other.has(quad));\n }\n\n /**\n * Returns true if the current dataset contains the same graph structure as the given dataset.\n *\n * Blank Nodes will be normalized.\n */\n equals(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n return other === this || (this.size === other.size && this.contains(other));\n }\n\n /**\n * Creates a new dataset with all the quads that pass the test implemented by the provided `iteratee`.\n *\n * This method is aligned with Array.prototype.filter() in ECMAScript-262.\n */\n filter(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n if (iteratee(quad, this))\n store.add(quad);\n return store;\n }\n\n /**\n * Returns a new dataset containing all quads from the current dataset that are also included in the given dataset.\n */\n intersection(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n return store;\n }\n else if ((other instanceof N3Store) && this._entityIndex === other._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = intersect(other._graphs, this._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => other.has(quad));\n }\n\n /**\n * Returns a new dataset containing all quads returned by applying `iteratee` to each quad in the current dataset.\n */\n map(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n store.add(iteratee(quad, this));\n return store;\n }\n\n /**\n * This method calls the `iteratee` method on each `quad` of the `Dataset`. The first time the `iteratee` method\n * is called, the `accumulator` value is the `initialValue`, or, if not given, equals the first quad of the `Dataset`.\n * The return value of each call to the `iteratee` method is used as the `accumulator` value for the next call.\n *\n * This method returns the return value of the last `iteratee` call.\n *\n * This method is aligned with `Array.prototype.reduce()` in ECMAScript-262.\n */\n reduce(callback, initialValue) {\n const iter = this.readQuads();\n let accumulator = initialValue === undefined ? iter.next().value : initialValue;\n for (const quad of iter)\n accumulator = callback(accumulator, quad, this);\n return accumulator;\n }\n\n /**\n * Returns the set of quads within the dataset as a host-language-native sequence, for example an `Array` in\n * ECMAScript-262.\n *\n * Since a `Dataset` is an unordered set, the order of the quads within the returned sequence is arbitrary.\n */\n toArray() {\n return this.getQuads();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset, preprocessed with the\n * {@link https://json-ld.github.io/normalization/spec/|RDF Dataset Normalization} algorithm.\n */\n toCanonical() {\n throw new Error('not implemented');\n }\n\n /**\n * Returns a stream that contains all quads of the dataset.\n */\n toStream() {\n return this.match();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset.\n *\n * No prior normalization is required, therefore the results for the same quads may vary depending on the `Dataset`\n * implementation.\n */\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n /**\n * Returns a new `Dataset` that is a concatenation of this dataset and the quads given as an argument.\n */\n union(quads) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n\n store.addAll(quads);\n return store;\n }\n\n // ### Store is an iterable.\n // Can be used where iterables are expected: for...of loops, array spread operator,\n // `yield*`, and destructuring assignment (order is not guaranteed).\n *[Symbol.iterator]() {\n yield* this.readQuads();\n }\n}\n\n/**\n * Returns a subset of the `index` with that part of the index\n * matching the `ids` array. `ids` contains 3 elements that are\n * either numerical ids; or `null`.\n *\n * `false` is returned when there are no matching indices; this should\n * *not* be set as the value for an index.\n */\nfunction indexMatch(index, ids, depth = 0) {\n const ind = ids[depth];\n if (ind && !(ind in index))\n return false;\n\n let target = false;\n for (const key in (ind ? { [ind]: index[ind] } : index)) {\n const result = depth === 2 ? null : indexMatch(index[key], ids, depth + 1);\n\n if (result !== false) {\n target = target || Object.create(null);\n target[key] = result;\n }\n }\n return target;\n}\n\n/**\n * A class that implements both DatasetCore and Readable.\n */\nclass DatasetCoreAndReadableStream extends Readable {\n constructor(n3Store, subject, predicate, object, graph, options) {\n super({ objectMode: true });\n Object.assign(this, { n3Store, subject, predicate, object, graph, options });\n }\n\n get filtered() {\n if (!this._filtered) {\n const { n3Store, graph, object, predicate, subject } = this;\n const newStore = this._filtered = new N3Store({ factory: n3Store._factory, entityIndex: this.options.entityIndex });\n\n let subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = newStore._termToNumericId(subject)) ||\n predicate && !(predicateId = newStore._termToNumericId(predicate)) ||\n object && !(objectId = newStore._termToNumericId(object)))\n return newStore;\n\n const graphs = n3Store._getGraphs(graph);\n for (const graphKey in graphs) {\n let subjects, predicates, objects, content;\n if (content = graphs[graphKey]) {\n if (!subjectId && predicateId) {\n if (predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n }\n else if (objectId) {\n if (objects = indexMatch(content.objects, [objectId, subjectId, predicateId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n }\n }\n else if (subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId])) {\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n\n if (subjects)\n newStore._graphs[graphKey] = { subjects, predicates, objects };\n }\n }\n newStore._size = null;\n }\n return this._filtered;\n }\n\n get size() {\n return this.filtered.size;\n }\n\n _read(size) {\n if (size > 0 && !this[ITERATOR])\n this[ITERATOR] = this[Symbol.iterator]();\n const iterable = this[ITERATOR];\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n this.push(null);\n return;\n }\n this.push(value);\n }\n }\n\n addAll(quads) {\n return this.filtered.addAll(quads);\n }\n\n contains(other) {\n return this.filtered.contains(other);\n }\n\n deleteMatches(subject, predicate, object, graph) {\n return this.filtered.deleteMatches(subject, predicate, object, graph);\n }\n\n difference(other) {\n return this.filtered.difference(other);\n }\n\n equals(other) {\n return this.filtered.equals(other);\n }\n\n every(callback, subject, predicate, object, graph) {\n return this.filtered.every(callback, subject, predicate, object, graph);\n }\n\n filter(iteratee) {\n return this.filtered.filter(iteratee);\n }\n\n forEach(callback, subject, predicate, object, graph) {\n return this.filtered.forEach(callback, subject, predicate, object, graph);\n }\n\n import(stream) {\n return this.filtered.import(stream);\n }\n\n intersection(other) {\n return this.filtered.intersection(other);\n }\n\n map(iteratee) {\n return this.filtered.map(iteratee);\n }\n\n some(callback, subject, predicate, object, graph) {\n return this.filtered.some(callback, subject, predicate, object, graph);\n }\n\n toCanonical() {\n return this.filtered.toCanonical();\n }\n\n toStream() {\n return this._filtered ?\n this._filtered.toStream()\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph);\n }\n\n union(quads) {\n return this._filtered ?\n this._filtered.union(quads)\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph).addAll(quads);\n }\n\n toArray() {\n return this._filtered ? this._filtered.toArray() : this.n3Store.getQuads(this.subject, this.predicate, this.object, this.graph);\n }\n\n reduce(callback, initialValue) {\n return this.filtered.reduce(callback, initialValue);\n }\n\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n add(quad) {\n return this.filtered.add(quad);\n }\n\n delete(quad) {\n return this.filtered.delete(quad);\n }\n\n has(quad) {\n return this.filtered.has(quad);\n }\n\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this.filtered, subject, predicate, object, graph, this.options);\n }\n\n *[Symbol.iterator]() {\n yield* this._filtered || this.n3Store.readQuads(this.subject, this.predicate, this.object, this.graph);\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeDotSegmentsOfPath = exports.removeDotSegments = exports.resolve = void 0;\n/**\n * Convert the given relative IRI to an absolute IRI\n * by taking into account the given optional baseIRI.\n *\n * @param {string} relativeIRI The relative IRI to convert to an absolute IRI.\n * @param {string} baseIRI The optional base IRI.\n * @return {string} an absolute IRI.\n */\nfunction resolve(relativeIRI, baseIRI) {\n baseIRI = baseIRI || '';\n const baseFragmentPos = baseIRI.indexOf('#');\n // Ignore any fragments in the base IRI\n if (baseFragmentPos > 0) {\n baseIRI = baseIRI.substr(0, baseFragmentPos);\n }\n // Convert empty value directly to base IRI\n if (!relativeIRI.length) {\n // At this point, the baseIRI MUST be absolute, otherwise we error\n if (baseIRI.indexOf(':') < 0) {\n throw new Error(`Found invalid baseIRI '${baseIRI}' for value '${relativeIRI}'`);\n }\n return baseIRI;\n }\n // If the value starts with a query character, concat directly (but strip the existing query)\n if (relativeIRI.startsWith('?')) {\n const baseQueryPos = baseIRI.indexOf('?');\n if (baseQueryPos > 0) {\n baseIRI = baseIRI.substr(0, baseQueryPos);\n }\n return baseIRI + relativeIRI;\n }\n // If the value starts with a fragment character, concat directly\n if (relativeIRI.startsWith('#')) {\n return baseIRI + relativeIRI;\n }\n // Ignore baseIRI if it is empty\n if (!baseIRI.length) {\n const relativeColonPos = relativeIRI.indexOf(':');\n if (relativeColonPos < 0) {\n throw new Error(`Found invalid relative IRI '${relativeIRI}' for a missing baseIRI`);\n }\n return removeDotSegmentsOfPath(relativeIRI, relativeColonPos);\n }\n // Ignore baseIRI if the value is absolute.\n // Per RFC 3986, a URI scheme cannot contain a '/', so if a '/' appears before the first ':',\n // the IRI is a relative path (not an absolute IRI).\n const valueColonPos = relativeIRI.indexOf(':');\n if (valueColonPos >= 0) {\n const valueSlashPos = relativeIRI.indexOf('/');\n if (valueSlashPos < 0 || valueColonPos < valueSlashPos) {\n return removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n }\n // At this point, the baseIRI MUST be absolute, otherwise we error\n const baseColonPos = baseIRI.indexOf(':');\n if (baseColonPos < 0) {\n throw new Error(`Found invalid baseIRI '${baseIRI}' for value '${relativeIRI}'`);\n }\n const baseIRIScheme = baseIRI.substr(0, baseColonPos + 1);\n // Inherit the baseIRI scheme if the value starts with '//'\n if (relativeIRI.indexOf('//') === 0) {\n return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n // Check cases where '://' occurs in the baseIRI, and where there is no '/' after a ':' anymore.\n let baseSlashAfterColonPos;\n if (baseIRI.indexOf('//', baseColonPos) === baseColonPos + 1) {\n // If there is no additional '/' after the '//'.\n baseSlashAfterColonPos = baseIRI.indexOf('/', baseColonPos + 3);\n if (baseSlashAfterColonPos < 0) {\n // If something other than a '/' follows the '://', append the value after a '/',\n // otherwise, prefix the value with only the baseIRI scheme.\n if (baseIRI.length > baseColonPos + 3) {\n return baseIRI + '/' + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n else {\n return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n }\n }\n else {\n // If there is not even a single '/' after the ':'\n baseSlashAfterColonPos = baseIRI.indexOf('/', baseColonPos + 1);\n if (baseSlashAfterColonPos < 0) {\n // If we don't have a '/' after the ':',\n // prefix the value with only the baseIRI scheme.\n return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n }\n // If the value starts with a '/', then prefix it with everything before the first effective slash of the base IRI.\n if (relativeIRI.indexOf('/') === 0) {\n return baseIRI.substr(0, baseSlashAfterColonPos) + removeDotSegments(relativeIRI);\n }\n let baseIRIPath = baseIRI.substr(baseSlashAfterColonPos);\n const baseIRILastSlashPos = baseIRIPath.lastIndexOf('/');\n // Ignore everything after the last '/' in the baseIRI path\n if (baseIRILastSlashPos >= 0 && baseIRILastSlashPos < baseIRIPath.length - 1) {\n baseIRIPath = baseIRIPath.substr(0, baseIRILastSlashPos + 1);\n // Also remove the first character of the relative path if it starts with '.' (and not '..' or './')\n // This change is only allowed if there is something else following the path\n if (relativeIRI[0] === '.' && relativeIRI[1] !== '.' && relativeIRI[1] !== '/' && relativeIRI[2]) {\n relativeIRI = relativeIRI.substr(1);\n }\n }\n // Prefix the value with the baseIRI path where\n relativeIRI = baseIRIPath + relativeIRI;\n // Remove dot segment from the IRI\n relativeIRI = removeDotSegments(relativeIRI);\n // Prefix our transformed value with the part of the baseIRI until the first '/' after the first ':'.\n return baseIRI.substr(0, baseSlashAfterColonPos) + relativeIRI;\n}\nexports.resolve = resolve;\n/**\n * Remove dot segments from the given path,\n * as described in https://www.ietf.org/rfc/rfc3986.txt (page 32).\n * @param {string} path An IRI path.\n * @return {string} A path, will always start with a '/'.\n */\nfunction removeDotSegments(path) {\n // Prepare a buffer with segments between each '/.\n // Each segment represents an array of characters.\n const segmentBuffers = [];\n let i = 0;\n while (i < path.length) {\n // Remove '/.' or '/..'\n switch (path[i]) {\n case '/':\n if (path[i + 1] === '.') {\n if (path[i + 2] === '.') {\n // Start a new segment if we find an invalid character after the '.'\n if (!isCharacterAllowedAfterRelativePathSegment(path[i + 3])) {\n segmentBuffers.push([]);\n i++;\n break;\n }\n // Go to parent directory,\n // so we remove a parent segment\n segmentBuffers.pop();\n // Ensure that we end with a slash if there is a trailing '/..'\n if (!path[i + 3]) {\n segmentBuffers.push([]);\n }\n i += 3;\n }\n else {\n // Start a new segment if we find an invalid character after the '.'\n if (!isCharacterAllowedAfterRelativePathSegment(path[i + 2])) {\n segmentBuffers.push([]);\n i++;\n break;\n }\n // Ensure that we end with a slash if there is a trailing '/.'\n if (!path[i + 2]) {\n segmentBuffers.push([]);\n }\n // Go to the current directory,\n // so we do nothing\n i += 2;\n }\n }\n else {\n // Start a new segment\n segmentBuffers.push([]);\n i++;\n }\n break;\n case '#':\n case '?':\n // Query and fragment string should be appended unchanged\n if (!segmentBuffers.length) {\n segmentBuffers.push([]);\n }\n segmentBuffers[segmentBuffers.length - 1].push(path.substr(i));\n // Break the while loop\n i = path.length;\n break;\n default:\n // Not a special character, just append it to our buffer\n if (!segmentBuffers.length) {\n segmentBuffers.push([]);\n }\n segmentBuffers[segmentBuffers.length - 1].push(path[i]);\n i++;\n break;\n }\n }\n return '/' + segmentBuffers.map((buffer) => buffer.join('')).join('/');\n}\nexports.removeDotSegments = removeDotSegments;\n/**\n * Removes dot segments of the given IRI.\n * @param {string} iri An IRI (or part of IRI).\n * @param {number} colonPosition The position of the first ':' in the IRI.\n * @return {string} The IRI where dot segments were removed.\n */\nfunction removeDotSegmentsOfPath(iri, colonPosition) {\n // Determine where we should start looking for the first '/' that indicates the start of the path\n let searchOffset = colonPosition + 1;\n if (colonPosition >= 0) {\n if (iri[colonPosition + 1] === '/' && iri[colonPosition + 2] === '/') {\n searchOffset = colonPosition + 3;\n }\n }\n else {\n if (iri[0] === '/' && iri[1] === '/') {\n searchOffset = 2;\n }\n }\n // Determine the path\n const pathSeparator = iri.indexOf('/', searchOffset);\n if (pathSeparator < 0) {\n return iri;\n }\n const base = iri.substr(0, pathSeparator);\n const path = iri.substr(pathSeparator);\n // Remove dot segments from the path\n return base + removeDotSegments(path);\n}\nexports.removeDotSegmentsOfPath = removeDotSegmentsOfPath;\nfunction isCharacterAllowedAfterRelativePathSegment(character) {\n return !character || character === '#' || character === '?' || character === '/';\n}\n//# sourceMappingURL=Resolve.js.map","\"use strict\";\n/**\n * Character classes and associated utilities for the 5th edition of XML 1.0.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//\n// Fragments.\n//\nexports.CHAR = \"\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return (c >= SPACE && c <= 0xD7FF) ||\n c === NL || c === CR || c === TAB ||\n (c >= 0xE000 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0x10FFFF);\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\nfunction isNameStartChar(c) {\n return ((c >= 0x41 && c <= 0x5A) ||\n (c >= 0x61 && c <= 0x7A) ||\n c === 0x3A ||\n c === 0x5F ||\n c === 0x200C ||\n c === 0x200D ||\n (c >= 0xC0 && c <= 0xD6) ||\n (c >= 0xD8 && c <= 0xF6) ||\n (c >= 0x00F8 && c <= 0x02FF) ||\n (c >= 0x0370 && c <= 0x037D) ||\n (c >= 0x037F && c <= 0x1FFF) ||\n (c >= 0x2070 && c <= 0x218F) ||\n (c >= 0x2C00 && c <= 0x2FEF) ||\n (c >= 0x3001 && c <= 0xD7FF) ||\n (c >= 0xF900 && c <= 0xFDCF) ||\n (c >= 0xFDF0 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0xEFFFF));\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) ||\n (c >= 0x30 && c <= 0x39) ||\n c === 0x2D ||\n c === 0x2E ||\n c === 0xB7 ||\n (c >= 0x0300 && c <= 0x036F) ||\n (c >= 0x203F && c <= 0x2040);\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=ed5.js.map","\"use strict\";\n/**\n * Character classes and associated utilities for the 2nd edition of XML 1.1.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//\n// Fragments.\n//\nexports.CHAR = \"\\u0001-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.RESTRICTED_CHAR = \"\\u0001-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u0084\\u0086-\\u009F\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.RESTRICTED_CHAR_RE = new RegExp(\"^[\" + exports.RESTRICTED_CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return (c >= 0x0001 && c <= 0xD7FF) ||\n (c >= 0xE000 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0x10FFFF);\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``.\n */\nfunction isRestrictedChar(c) {\n return (c >= 0x1 && c <= 0x8) ||\n c === 0xB ||\n c === 0xC ||\n (c >= 0xE && c <= 0x1F) ||\n (c >= 0x7F && c <= 0x84) ||\n (c >= 0x86 && c <= 0x9F);\n}\nexports.isRestrictedChar = isRestrictedChar;\n/**\n * Determines whether a codepoint matches the ``CHAR`` production and does not\n * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is\n * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster\n * than running the two-call equivalent.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR`` and does not match\n * ``RESTRICTED_CHAR``.\n */\nfunction isCharAndNotRestricted(c) {\n return (c === 0x9) ||\n (c === 0xA) ||\n (c === 0xD) ||\n (c > 0x1F && c < 0x7F) ||\n (c === 0x85) ||\n (c > 0x9F && c <= 0xD7FF) ||\n (c >= 0xE000 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0x10FFFF);\n}\nexports.isCharAndNotRestricted = isCharAndNotRestricted;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNameStartChar(c) {\n return ((c >= 0x41 && c <= 0x5A) ||\n (c >= 0x61 && c <= 0x7A) ||\n c === 0x3A ||\n c === 0x5F ||\n c === 0x200C ||\n c === 0x200D ||\n (c >= 0xC0 && c <= 0xD6) ||\n (c >= 0xD8 && c <= 0xF6) ||\n (c >= 0x00F8 && c <= 0x02FF) ||\n (c >= 0x0370 && c <= 0x037D) ||\n (c >= 0x037F && c <= 0x1FFF) ||\n (c >= 0x2070 && c <= 0x218F) ||\n (c >= 0x2C00 && c <= 0x2FEF) ||\n (c >= 0x3001 && c <= 0xD7FF) ||\n (c >= 0xF900 && c <= 0xFDCF) ||\n (c >= 0xFDF0 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0xEFFFF));\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) ||\n (c >= 0x30 && c <= 0x39) ||\n c === 0x2D ||\n c === 0x2E ||\n c === 0xB7 ||\n (c >= 0x0300 && c <= 0x036F) ||\n (c >= 0x203F && c <= 0x2040);\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=ed2.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SaxesParser = exports.EVENTS = void 0;\nconst ed5 = require(\"xmlchars/xml/1.0/ed5\");\nconst ed2 = require(\"xmlchars/xml/1.1/ed2\");\nconst NSed3 = require(\"xmlchars/xmlns/1.0/ed3\");\nvar isS = ed5.isS;\nvar isChar10 = ed5.isChar;\nvar isNameStartChar = ed5.isNameStartChar;\nvar isNameChar = ed5.isNameChar;\nvar S_LIST = ed5.S_LIST;\nvar NAME_RE = ed5.NAME_RE;\nvar isChar11 = ed2.isChar;\nvar isNCNameStartChar = NSed3.isNCNameStartChar;\nvar isNCNameChar = NSed3.isNCNameChar;\nvar NC_NAME_RE = NSed3.NC_NAME_RE;\nconst XML_NAMESPACE = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE = \"http://www.w3.org/2000/xmlns/\";\nconst rootNS = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n __proto__: null,\n xml: XML_NAMESPACE,\n xmlns: XMLNS_NAMESPACE,\n};\nconst XML_ENTITIES = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n __proto__: null,\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: \"\\\"\",\n apos: \"'\",\n};\n// EOC: end-of-chunk\nconst EOC = -1;\nconst NL_LIKE = -2;\nconst S_BEGIN = 0; // Initial state.\nconst S_BEGIN_WHITESPACE = 1; // leading whitespace\nconst S_DOCTYPE = 2; // <!DOCTYPE\nconst S_DOCTYPE_QUOTE = 3; // <!DOCTYPE \"//blah\nconst S_DTD = 4; // <!DOCTYPE \"//blah\" [ ...\nconst S_DTD_QUOTED = 5; // <!DOCTYPE \"//blah\" [ \"foo\nconst S_DTD_OPEN_WAKA = 6;\nconst S_DTD_OPEN_WAKA_BANG = 7;\nconst S_DTD_COMMENT = 8; // <!--\nconst S_DTD_COMMENT_ENDING = 9; // <!-- blah -\nconst S_DTD_COMMENT_ENDED = 10; // <!-- blah --\nconst S_DTD_PI = 11; // <?\nconst S_DTD_PI_ENDING = 12; // <?hi \"there\" ?\nconst S_TEXT = 13; // general stuff\nconst S_ENTITY = 14; // &amp and such\nconst S_OPEN_WAKA = 15; // <\nconst S_OPEN_WAKA_BANG = 16; // <!...\nconst S_COMMENT = 17; // <!--\nconst S_COMMENT_ENDING = 18; // <!-- blah -\nconst S_COMMENT_ENDED = 19; // <!-- blah --\nconst S_CDATA = 20; // <![CDATA[ something\nconst S_CDATA_ENDING = 21; // ]\nconst S_CDATA_ENDING_2 = 22; // ]]\nconst S_PI_FIRST_CHAR = 23; // <?hi, first char\nconst S_PI_REST = 24; // <?hi, rest of the name\nconst S_PI_BODY = 25; // <?hi there\nconst S_PI_ENDING = 26; // <?hi \"there\" ?\nconst S_XML_DECL_NAME_START = 27; // <?xml\nconst S_XML_DECL_NAME = 28; // <?xml foo\nconst S_XML_DECL_EQ = 29; // <?xml foo=\nconst S_XML_DECL_VALUE_START = 30; // <?xml foo=\nconst S_XML_DECL_VALUE = 31; // <?xml foo=\"bar\"\nconst S_XML_DECL_SEPARATOR = 32; // <?xml foo=\"bar\"\nconst S_XML_DECL_ENDING = 33; // <?xml ... ?\nconst S_OPEN_TAG = 34; // <strong\nconst S_OPEN_TAG_SLASH = 35; // <strong /\nconst S_ATTRIB = 36; // <a\nconst S_ATTRIB_NAME = 37; // <a foo\nconst S_ATTRIB_NAME_SAW_WHITE = 38; // <a foo _\nconst S_ATTRIB_VALUE = 39; // <a foo=\nconst S_ATTRIB_VALUE_QUOTED = 40; // <a foo=\"bar\nconst S_ATTRIB_VALUE_CLOSED = 41; // <a foo=\"bar\"\nconst S_ATTRIB_VALUE_UNQUOTED = 42; // <a foo=bar\nconst S_CLOSE_TAG = 43; // </a\nconst S_CLOSE_TAG_SAW_WHITE = 44; // </a >\nconst TAB = 9;\nconst NL = 0xA;\nconst CR = 0xD;\nconst SPACE = 0x20;\nconst BANG = 0x21;\nconst DQUOTE = 0x22;\nconst AMP = 0x26;\nconst SQUOTE = 0x27;\nconst MINUS = 0x2D;\nconst FORWARD_SLASH = 0x2F;\nconst SEMICOLON = 0x3B;\nconst LESS = 0x3C;\nconst EQUAL = 0x3D;\nconst GREATER = 0x3E;\nconst QUESTION = 0x3F;\nconst OPEN_BRACKET = 0x5B;\nconst CLOSE_BRACKET = 0x5D;\nconst NEL = 0x85;\nconst LS = 0x2028; // Line Separator\nconst isQuote = (c) => c === DQUOTE || c === SQUOTE;\nconst QUOTES = [DQUOTE, SQUOTE];\nconst DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER];\nconst DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET];\nconst XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST];\nconst ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS];\nfunction nsPairCheck(parser, prefix, uri) {\n switch (prefix) {\n case \"xml\":\n if (uri !== XML_NAMESPACE) {\n parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);\n }\n break;\n case \"xmlns\":\n if (uri !== XMLNS_NAMESPACE) {\n parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`);\n }\n break;\n default:\n }\n switch (uri) {\n case XMLNS_NAMESPACE:\n parser.fail(prefix === \"\" ?\n `the default namespace may not be set to ${uri}.` :\n `may not assign a prefix (even \"xmlns\") to the URI \\\n${XMLNS_NAMESPACE}.`);\n break;\n case XML_NAMESPACE:\n switch (prefix) {\n case \"xml\":\n // Assinging the XML namespace to \"xml\" is fine.\n break;\n case \"\":\n parser.fail(`the default namespace may not be set to ${uri}.`);\n break;\n default:\n parser.fail(\"may not assign the xml namespace to another prefix.\");\n }\n break;\n default:\n }\n}\nfunction nsMappingCheck(parser, mapping) {\n for (const local of Object.keys(mapping)) {\n nsPairCheck(parser, local, mapping[local]);\n }\n}\nconst isNCName = (name) => NC_NAME_RE.test(name);\nconst isName = (name) => NAME_RE.test(name);\nconst FORBIDDEN_START = 0;\nconst FORBIDDEN_BRACKET = 1;\nconst FORBIDDEN_BRACKET_BRACKET = 2;\n/**\n * The list of supported events.\n */\nexports.EVENTS = [\n \"xmldecl\",\n \"text\",\n \"processinginstruction\",\n \"doctype\",\n \"comment\",\n \"opentagstart\",\n \"attribute\",\n \"opentag\",\n \"closetag\",\n \"cdata\",\n \"error\",\n \"end\",\n \"ready\",\n];\nconst EVENT_NAME_TO_HANDLER_NAME = {\n xmldecl: \"xmldeclHandler\",\n text: \"textHandler\",\n processinginstruction: \"piHandler\",\n doctype: \"doctypeHandler\",\n comment: \"commentHandler\",\n opentagstart: \"openTagStartHandler\",\n attribute: \"attributeHandler\",\n opentag: \"openTagHandler\",\n closetag: \"closeTagHandler\",\n cdata: \"cdataHandler\",\n error: \"errorHandler\",\n end: \"endHandler\",\n ready: \"readyHandler\",\n};\n// eslint-disable-next-line @typescript-eslint/ban-types\nclass SaxesParser {\n /**\n * Indicates whether or not the parser is closed. If ``true``, wait for\n * the ``ready`` event to write again.\n */\n get closed() {\n return this._closed;\n }\n /**\n * @param opt The parser options.\n */\n constructor(opt) {\n this.opt = opt !== null && opt !== void 0 ? opt : {};\n this.fragmentOpt = !!this.opt.fragment;\n const xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns;\n this.trackPosition = this.opt.position !== false;\n this.fileName = this.opt.fileName;\n if (xmlnsOpt) {\n // This is the function we use to perform name checks on PIs and entities.\n // When namespaces are used, colons are not allowed in PI target names or\n // entity names. So the check depends on whether namespaces are used. See:\n //\n // https://www.w3.org/XML/xml-names-19990114-errata.html\n // NE08\n //\n this.nameStartCheck = isNCNameStartChar;\n this.nameCheck = isNCNameChar;\n this.isName = isNCName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsNS;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribNS;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n this.ns = Object.assign({ __proto__: null }, rootNS);\n const additional = this.opt.additionalNamespaces;\n if (additional != null) {\n nsMappingCheck(this, additional);\n Object.assign(this.ns, additional);\n }\n }\n else {\n this.nameStartCheck = isNameStartChar;\n this.nameCheck = isNameChar;\n this.isName = isName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsPlain;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribPlain;\n }\n //\n // The order of the members in this table needs to correspond to the state\n // numbers given to the states that correspond to the methods being recorded\n // here.\n //\n this.stateTable = [\n /* eslint-disable @typescript-eslint/unbound-method */\n this.sBegin,\n this.sBeginWhitespace,\n this.sDoctype,\n this.sDoctypeQuote,\n this.sDTD,\n this.sDTDQuoted,\n this.sDTDOpenWaka,\n this.sDTDOpenWakaBang,\n this.sDTDComment,\n this.sDTDCommentEnding,\n this.sDTDCommentEnded,\n this.sDTDPI,\n this.sDTDPIEnding,\n this.sText,\n this.sEntity,\n this.sOpenWaka,\n this.sOpenWakaBang,\n this.sComment,\n this.sCommentEnding,\n this.sCommentEnded,\n this.sCData,\n this.sCDataEnding,\n this.sCDataEnding2,\n this.sPIFirstChar,\n this.sPIRest,\n this.sPIBody,\n this.sPIEnding,\n this.sXMLDeclNameStart,\n this.sXMLDeclName,\n this.sXMLDeclEq,\n this.sXMLDeclValueStart,\n this.sXMLDeclValue,\n this.sXMLDeclSeparator,\n this.sXMLDeclEnding,\n this.sOpenTag,\n this.sOpenTagSlash,\n this.sAttrib,\n this.sAttribName,\n this.sAttribNameSawWhite,\n this.sAttribValue,\n this.sAttribValueQuoted,\n this.sAttribValueClosed,\n this.sAttribValueUnquoted,\n this.sCloseTag,\n this.sCloseTagSawWhite,\n /* eslint-enable @typescript-eslint/unbound-method */\n ];\n this._init();\n }\n _init() {\n var _a;\n this.openWakaBang = \"\";\n this.text = \"\";\n this.name = \"\";\n this.piTarget = \"\";\n this.entity = \"\";\n this.q = null;\n this.tags = [];\n this.tag = null;\n this.topNS = null;\n this.chunk = \"\";\n this.chunkPosition = 0;\n this.i = 0;\n this.prevI = 0;\n this.carriedFromPrevious = undefined;\n this.forbiddenState = FORBIDDEN_START;\n this.attribList = [];\n // The logic is organized so as to minimize the need to check\n // this.opt.fragment while parsing.\n const { fragmentOpt } = this;\n this.state = fragmentOpt ? S_TEXT : S_BEGIN;\n // We want these to be all true if we are dealing with a fragment.\n this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot =\n this.sawRoot = fragmentOpt;\n // An XML declaration is intially possible only when parsing whole\n // documents.\n this.xmlDeclPossible = !fragmentOpt;\n this.xmlDeclExpects = [\"version\"];\n this.entityReturnState = undefined;\n let { defaultXMLVersion } = this.opt;\n if (defaultXMLVersion === undefined) {\n if (this.opt.forceXMLVersion === true) {\n throw new Error(\"forceXMLVersion set but defaultXMLVersion is not set\");\n }\n defaultXMLVersion = \"1.0\";\n }\n this.setXMLVersion(defaultXMLVersion);\n this.positionAtNewLine = 0;\n this.doctype = false;\n this._closed = false;\n this.xmlDecl = {\n version: undefined,\n encoding: undefined,\n standalone: undefined,\n };\n this.line = 1;\n this.column = 0;\n this.ENTITIES = Object.create(XML_ENTITIES);\n (_a = this.readyHandler) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n /**\n * The stream position the parser is currently looking at. This field is\n * zero-based.\n *\n * This field is not based on counting Unicode characters but is to be\n * interpreted as a plain index into a JavaScript string.\n */\n get position() {\n return this.chunkPosition + this.i;\n }\n /**\n * The column number of the next character to be read by the parser. *\n * This field is zero-based. (The first column in a line is 0.)\n *\n * This field reports the index at which the next character would be in the\n * line if the line were represented as a JavaScript string. Note that this\n * *can* be different to a count based on the number of *Unicode characters*\n * due to how JavaScript handles astral plane characters.\n *\n * See [[column]] for a number that corresponds to a count of Unicode\n * characters.\n */\n get columnIndex() {\n return this.position - this.positionAtNewLine;\n }\n /**\n * Set an event listener on an event. The parser supports one handler per\n * event type. If you try to set an event handler over an existing handler,\n * the old handler is silently overwritten.\n *\n * @param name The event to listen to.\n *\n * @param handler The handler to set.\n */\n on(name, handler) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler;\n }\n /**\n * Unset an event handler.\n *\n * @parma name The event to stop listening to.\n */\n off(name) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined;\n }\n /**\n * Make an error object. The error object will have a message that contains\n * the ``fileName`` option passed at the creation of the parser. If position\n * tracking was turned on, it will also have line and column number\n * information.\n *\n * @param message The message describing the error to report.\n *\n * @returns An error object with a properly formatted message.\n */\n makeError(message) {\n var _a;\n let msg = (_a = this.fileName) !== null && _a !== void 0 ? _a : \"\";\n if (this.trackPosition) {\n if (msg.length > 0) {\n msg += \":\";\n }\n msg += `${this.line}:${this.column}`;\n }\n if (msg.length > 0) {\n msg += \": \";\n }\n return new Error(msg + message);\n }\n /**\n * Report a parsing error. This method is made public so that client code may\n * check for issues that are outside the scope of this project and can report\n * errors.\n *\n * @param message The error to report.\n *\n * @returns this\n */\n fail(message) {\n const err = this.makeError(message);\n const handler = this.errorHandler;\n if (handler === undefined) {\n throw err;\n }\n else {\n handler(err);\n }\n return this;\n }\n /**\n * Write a XML data to the parser.\n *\n * @param chunk The XML data to write.\n *\n * @returns this\n */\n // We do need object for the type here. Yes, it often causes problems\n // but not in this case.\n write(chunk) {\n if (this.closed) {\n return this.fail(\"cannot write after close; assign an onready handler.\");\n }\n let end = false;\n if (chunk === null) {\n // We cannot return immediately because carriedFromPrevious may need\n // processing.\n end = true;\n chunk = \"\";\n }\n else if (typeof chunk === \"object\") {\n chunk = chunk.toString();\n }\n // We checked if performing a pre-decomposition of the string into an array\n // of single complete characters (``Array.from(chunk)``) would be faster\n // than the current repeated calls to ``charCodeAt``. As of August 2018, it\n // isn't. (There may be Node-specific code that would perform faster than\n // ``Array.from`` but don't want to be dependent on Node.)\n if (this.carriedFromPrevious !== undefined) {\n // The previous chunk had char we must carry over.\n chunk = `${this.carriedFromPrevious}${chunk}`;\n this.carriedFromPrevious = undefined;\n }\n let limit = chunk.length;\n const lastCode = chunk.charCodeAt(limit - 1);\n if (!end &&\n // A trailing CR or surrogate must be carried over to the next\n // chunk.\n (lastCode === CR || (lastCode >= 0xD800 && lastCode <= 0xDBFF))) {\n // The chunk ends with a character that must be carried over. We cannot\n // know how to handle it until we get the next chunk or the end of the\n // stream. So save it for later.\n this.carriedFromPrevious = chunk[limit - 1];\n limit--;\n chunk = chunk.slice(0, limit);\n }\n const { stateTable } = this;\n this.chunk = chunk;\n this.i = 0;\n while (this.i < limit) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument\n stateTable[this.state].call(this);\n }\n this.chunkPosition += limit;\n return end ? this.end() : this;\n }\n /**\n * Close the current stream. Perform final well-formedness checks and reset\n * the parser tstate.\n *\n * @returns this\n */\n close() {\n return this.write(null);\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.0.\n *\n * @returns The character read.\n */\n getCode10() {\n const { chunk, i } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if (code >= SPACE || code === TAB) {\n return code;\n }\n switch (code) {\n case NL:\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR:\n // We may get NaN if we read past the end of the chunk, which is fine.\n if (chunk.charCodeAt(i + 1) === NL) {\n // A \\r\\n sequence is converted to \\n so we have to skip over the\n // next character. We already know it has a size of 1 so ++ is fine\n // here.\n this.i = i + 2;\n }\n // Otherwise, a \\r is just converted to \\n, so we don't have to skip\n // ahead.\n // In either case, \\r becomes \\n.\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n // If we get here, then code < SPACE and it is not NL CR or TAB.\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isChar10 that takes into account\n // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not\n // test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + ((code - 0xD800) * 0x400) +\n (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isChar10 that takes into account that in\n // this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.1.\n *\n * @returns {number} The character read.\n */\n getCode11() {\n const { chunk, i } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if ((code > 0x1F && code < 0x7F) || (code > 0x9F && code !== LS) ||\n code === TAB) {\n return code;\n }\n switch (code) {\n case NL: // 0xA\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR: { // 0xD\n // We may get NaN if we read past the end of the chunk, which is\n // fine.\n const next = chunk.charCodeAt(i + 1);\n if (next === NL || next === NEL) {\n // A CR NL or CR NEL sequence is converted to NL so we have to skip\n // over the next character. We already know it has a size of 1.\n this.i = i + 2;\n }\n // Otherwise, a CR is just converted to NL, no skip.\n }\n /* yes, fall through */\n case NEL: // 0x85\n case LS: // Ox2028\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context code > 0xDBFF and code <= 0xFFFF. So it\n // does not test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + ((code - 0xD800) * 0x400) +\n (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Like ``getCode`` but with the return value normalized so that ``NL`` is\n * returned for ``NL_LIKE``.\n */\n getCodeNorm() {\n const c = this.getCode();\n return c === NL_LIKE ? NL : c;\n }\n unget() {\n this.i = this.prevI;\n this.column--;\n }\n /**\n * Capture characters into a buffer until encountering one of a set of\n * characters.\n *\n * @param chars An array of codepoints. Encountering a character in the array\n * ends the capture. (``chars`` may safely contain ``NL``.)\n *\n * @return The character code that made the capture end, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureTo(chars) {\n let { i: start } = this;\n const { chunk } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n const isNLLike = c === NL_LIKE;\n const final = isNLLike ? NL : c;\n if (final === EOC || chars.includes(final)) {\n this.text += chunk.slice(start, this.prevI);\n return final;\n }\n if (isNLLike) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n }\n }\n }\n /**\n * Capture characters into a buffer until encountering a character.\n *\n * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT\n * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior.\n *\n * @return ``true`` if we ran into the character. Otherwise, we ran into the\n * end of the current chunk.\n */\n captureToChar(char) {\n let { i: start } = this;\n const { chunk } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let c = this.getCode();\n switch (c) {\n case NL_LIKE:\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n c = NL;\n break;\n case EOC:\n this.text += chunk.slice(start);\n return false;\n default:\n }\n if (c === char) {\n this.text += chunk.slice(start, this.prevI);\n return true;\n }\n }\n }\n /**\n * Capture characters that satisfy ``isNameChar`` into the ``name`` field of\n * this parser.\n *\n * @return The character code that made the test fail, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureNameChars() {\n const { chunk, i: start } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n if (c === EOC) {\n this.name += chunk.slice(start);\n return EOC;\n }\n // NL is not a name char so we don't have to test specifically for it.\n if (!isNameChar(c)) {\n this.name += chunk.slice(start, this.prevI);\n return c === NL_LIKE ? NL : c;\n }\n }\n }\n /**\n * Skip white spaces.\n *\n * @return The character that ended the skip, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n skipSpaces() {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC || !isS(c)) {\n return c;\n }\n }\n }\n setXMLVersion(version) {\n this.currentXMLVersion = version;\n /* eslint-disable @typescript-eslint/unbound-method */\n if (version === \"1.0\") {\n this.isChar = isChar10;\n this.getCode = this.getCode10;\n }\n else {\n this.isChar = isChar11;\n this.getCode = this.getCode11;\n }\n /* eslint-enable @typescript-eslint/unbound-method */\n }\n // STATE ENGINE METHODS\n // This needs to be a state separate from S_BEGIN_WHITESPACE because we want\n // to be sure never to come back to this state later.\n sBegin() {\n // We are essentially peeking at the first character of the chunk. Since\n // S_BEGIN can be in effect only when we start working on the first chunk,\n // the index at which we must look is necessarily 0. Note also that the\n // following test does not depend on decoding surrogates.\n // If the initial character is 0xFEFF, ignore it.\n if (this.chunk.charCodeAt(0) === 0xFEFF) {\n this.i++;\n this.column++;\n }\n this.state = S_BEGIN_WHITESPACE;\n }\n sBeginWhitespace() {\n // We need to know whether we've encountered spaces or not because as soon\n // as we run into a space, an XML declaration is no longer possible. Rather\n // than slow down skipSpaces even in places where we don't care whether it\n // skipped anything or not, we check whether prevI is equal to the value of\n // i from before we skip spaces.\n const iBefore = this.i;\n const c = this.skipSpaces();\n if (this.prevI !== iBefore) {\n this.xmlDeclPossible = false;\n }\n switch (c) {\n case LESS:\n this.state = S_OPEN_WAKA;\n // We could naively call closeText but in this state, it is not normal\n // to have text be filled with any data.\n if (this.text.length !== 0) {\n throw new Error(\"no-empty text at start\");\n }\n break;\n case EOC:\n break;\n default:\n this.unget();\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n sDoctype() {\n var _a;\n const c = this.captureTo(DOCTYPE_TERMINATOR);\n switch (c) {\n case GREATER: {\n (_a = this.doctypeHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n this.doctype = true; // just remember that we saw it.\n break;\n }\n case EOC:\n break;\n default:\n this.text += String.fromCodePoint(c);\n if (c === OPEN_BRACKET) {\n this.state = S_DTD;\n }\n else if (isQuote(c)) {\n this.state = S_DOCTYPE_QUOTE;\n this.q = c;\n }\n }\n }\n sDoctypeQuote() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.q = null;\n this.state = S_DOCTYPE;\n }\n }\n sDTD() {\n const c = this.captureTo(DTD_TERMINATOR);\n if (c === EOC) {\n return;\n }\n this.text += String.fromCodePoint(c);\n if (c === CLOSE_BRACKET) {\n this.state = S_DOCTYPE;\n }\n else if (c === LESS) {\n this.state = S_DTD_OPEN_WAKA;\n }\n else if (isQuote(c)) {\n this.state = S_DTD_QUOTED;\n this.q = c;\n }\n }\n sDTDQuoted() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.state = S_DTD;\n this.q = null;\n }\n }\n sDTDOpenWaka() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n switch (c) {\n case BANG:\n this.state = S_DTD_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n break;\n case QUESTION:\n this.state = S_DTD_PI;\n break;\n default:\n this.state = S_DTD;\n }\n }\n sDTDOpenWakaBang() {\n const char = String.fromCodePoint(this.getCodeNorm());\n const owb = this.openWakaBang += char;\n this.text += char;\n if (owb !== \"-\") {\n this.state = owb === \"--\" ? S_DTD_COMMENT : S_DTD;\n this.openWakaBang = \"\";\n }\n }\n sDTDComment() {\n if (this.captureToChar(MINUS)) {\n this.text += \"-\";\n this.state = S_DTD_COMMENT_ENDING;\n }\n }\n sDTDCommentEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT;\n }\n sDTDCommentEnded() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n }\n else {\n this.fail(\"malformed comment.\");\n // <!-- blah -- bloo --> will be recorded as\n // a comment of \" blah -- bloo \"\n this.state = S_DTD_COMMENT;\n }\n }\n sDTDPI() {\n if (this.captureToChar(QUESTION)) {\n this.text += \"?\";\n this.state = S_DTD_PI_ENDING;\n }\n }\n sDTDPIEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n }\n }\n sText() {\n //\n // We did try a version of saxes where the S_TEXT state was split in two\n // states: one for text inside the root element, and one for text\n // outside. This was avoiding having to test this.tags.length to decide\n // what implementation to actually use.\n //\n // Peformance testing on gigabyte-size files did not show any advantage to\n // using the two states solution instead of the current one. Conversely, it\n // made the code a bit more complicated elsewhere. For instance, a comment\n // can appear before the root element so when a comment ended it was\n // necessary to determine whether to return to the S_TEXT state or to the\n // new text-outside-root state.\n //\n if (this.tags.length !== 0) {\n this.handleTextInRoot();\n }\n else {\n this.handleTextOutsideRoot();\n }\n }\n sEntity() {\n // This is essentially a specialized version of captureToChar(SEMICOLON...)\n let { i: start } = this;\n const { chunk } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n loop: \n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case NL_LIKE:\n this.entity += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n break;\n case SEMICOLON: {\n const { entityReturnState } = this;\n const entity = this.entity + chunk.slice(start, this.prevI);\n this.state = entityReturnState;\n let parsed;\n if (entity === \"\") {\n this.fail(\"empty entity name.\");\n parsed = \"&;\";\n }\n else {\n parsed = this.parseEntity(entity);\n this.entity = \"\";\n }\n if (entityReturnState !== S_TEXT || this.textHandler !== undefined) {\n this.text += parsed;\n }\n // eslint-disable-next-line no-labels\n break loop;\n }\n case EOC:\n this.entity += chunk.slice(start);\n // eslint-disable-next-line no-labels\n break loop;\n default:\n }\n }\n }\n sOpenWaka() {\n // Reminder: a state handler is called with at least one character\n // available in the current chunk. So the first call to get code inside of\n // a state handler cannot return ``EOC``. That's why we don't test\n // for it.\n const c = this.getCode();\n // either a /, ?, !, or text is coming next.\n if (isNameStartChar(c)) {\n this.state = S_OPEN_TAG;\n this.unget();\n this.xmlDeclPossible = false;\n }\n else {\n switch (c) {\n case FORWARD_SLASH:\n this.state = S_CLOSE_TAG;\n this.xmlDeclPossible = false;\n break;\n case BANG:\n this.state = S_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n this.xmlDeclPossible = false;\n break;\n case QUESTION:\n this.state = S_PI_FIRST_CHAR;\n break;\n default:\n this.fail(\"disallowed character in tag name\");\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n }\n sOpenWakaBang() {\n this.openWakaBang += String.fromCodePoint(this.getCodeNorm());\n switch (this.openWakaBang) {\n case \"[CDATA[\":\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n this.state = S_CDATA;\n this.openWakaBang = \"\";\n break;\n case \"--\":\n this.state = S_COMMENT;\n this.openWakaBang = \"\";\n break;\n case \"DOCTYPE\":\n this.state = S_DOCTYPE;\n if (this.doctype || this.sawRoot) {\n this.fail(\"inappropriately located doctype declaration.\");\n }\n this.openWakaBang = \"\";\n break;\n default:\n // 7 happens to be the maximum length of the string that can possibly\n // match one of the cases above.\n if (this.openWakaBang.length >= 7) {\n this.fail(\"incorrect syntax.\");\n }\n }\n }\n sComment() {\n if (this.captureToChar(MINUS)) {\n this.state = S_COMMENT_ENDING;\n }\n }\n sCommentEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === MINUS) {\n this.state = S_COMMENT_ENDED;\n (_a = this.commentHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n }\n else {\n this.text += `-${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n }\n }\n sCommentEnded() {\n const c = this.getCodeNorm();\n if (c !== GREATER) {\n this.fail(\"malformed comment.\");\n // <!-- blah -- bloo --> will be recorded as\n // a comment of \" blah -- bloo \"\n this.text += `--${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n }\n else {\n this.state = S_TEXT;\n }\n }\n sCData() {\n if (this.captureToChar(CLOSE_BRACKET)) {\n this.state = S_CDATA_ENDING;\n }\n }\n sCDataEnding() {\n const c = this.getCodeNorm();\n if (c === CLOSE_BRACKET) {\n this.state = S_CDATA_ENDING_2;\n }\n else {\n this.text += `]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n sCDataEnding2() {\n var _a;\n const c = this.getCodeNorm();\n switch (c) {\n case GREATER: {\n (_a = this.cdataHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n break;\n }\n case CLOSE_BRACKET:\n this.text += \"]\";\n break;\n default:\n this.text += `]]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n // We need this separate state to check the first character fo the pi target\n // with this.nameStartCheck which allows less characters than this.nameCheck.\n sPIFirstChar() {\n const c = this.getCodeNorm();\n // This is first because in the case where the file is well-formed this is\n // the branch taken. We optimize for well-formedness.\n if (this.nameStartCheck(c)) {\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n }\n else if (c === QUESTION || isS(c)) {\n this.fail(\"processing instruction without a target.\");\n this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY;\n }\n else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n }\n }\n sPIRest() {\n // Capture characters into a piTarget while ``this.nameCheck`` run on the\n // character read returns true.\n const { chunk, i: start } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC) {\n this.piTarget += chunk.slice(start);\n return;\n }\n // NL cannot satisfy this.nameCheck so we don't have to test specifically\n // for it.\n if (!this.nameCheck(c)) {\n this.piTarget += chunk.slice(start, this.prevI);\n const isQuestion = c === QUESTION;\n if (isQuestion || isS(c)) {\n if (this.piTarget === \"xml\") {\n if (!this.xmlDeclPossible) {\n this.fail(\"an XML declaration must be at the start of the document.\");\n }\n this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START;\n }\n else {\n this.state = isQuestion ? S_PI_ENDING : S_PI_BODY;\n }\n }\n else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n }\n break;\n }\n }\n }\n sPIBody() {\n if (this.text.length === 0) {\n const c = this.getCodeNorm();\n if (c === QUESTION) {\n this.state = S_PI_ENDING;\n }\n else if (!isS(c)) {\n this.text = String.fromCodePoint(c);\n }\n }\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n else if (this.captureToChar(QUESTION)) {\n this.state = S_PI_ENDING;\n }\n }\n sPIEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n const { piTarget } = this;\n if (piTarget.toLowerCase() === \"xml\") {\n this.fail(\"the XML declaration must appear at the start of the document.\");\n }\n (_a = this.piHandler) === null || _a === void 0 ? void 0 : _a.call(this, {\n target: piTarget,\n body: this.text,\n });\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n }\n else if (c === QUESTION) {\n // We ran into ?? as part of a processing instruction. We initially took\n // the first ? as a sign that the PI was ending, but it is not. So we have\n // to add it to the body but we take the new ? as a sign that the PI is\n // ending.\n this.text += \"?\";\n }\n else {\n this.text += `?${String.fromCodePoint(c)}`;\n this.state = S_PI_BODY;\n }\n this.xmlDeclPossible = false;\n }\n sXMLDeclNameStart() {\n const c = this.skipSpaces();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (c !== EOC) {\n this.state = S_XML_DECL_NAME;\n this.name = String.fromCodePoint(c);\n }\n }\n sXMLDeclName() {\n const c = this.captureTo(XML_DECL_NAME_TERMINATOR);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.name += this.text;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (!(isS(c) || c === EQUAL)) {\n return;\n }\n this.name += this.text;\n this.text = \"\";\n if (!this.xmlDeclExpects.includes(this.name)) {\n switch (this.name.length) {\n case 0:\n this.fail(\"did not expect any more name/value pairs.\");\n break;\n case 1:\n this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);\n break;\n default:\n this.fail(`expected one of ${this.xmlDeclExpects.join(\", \")}`);\n }\n }\n this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ;\n }\n sXMLDeclEq() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (c !== EQUAL) {\n this.fail(\"value required.\");\n }\n this.state = S_XML_DECL_VALUE_START;\n }\n sXMLDeclValueStart() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (!isQuote(c)) {\n this.fail(\"value must be quoted.\");\n this.q = SPACE;\n }\n else {\n this.q = c;\n }\n this.state = S_XML_DECL_VALUE;\n }\n sXMLDeclValue() {\n const c = this.captureTo([this.q, QUESTION]);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (c === EOC) {\n return;\n }\n const value = this.text;\n this.text = \"\";\n switch (this.name) {\n case \"version\": {\n this.xmlDeclExpects = [\"encoding\", \"standalone\"];\n const version = value;\n this.xmlDecl.version = version;\n // This is the test specified by XML 1.0 but it is fine for XML 1.1.\n if (!/^1\\.[0-9]+$/.test(version)) {\n this.fail(\"version number must match /^1\\\\.[0-9]+$/.\");\n }\n // When forceXMLVersion is set, the XML declaration is ignored.\n else if (!this.opt.forceXMLVersion) {\n this.setXMLVersion(version);\n }\n break;\n }\n case \"encoding\":\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) {\n this.fail(\"encoding value must match \\\n/^[A-Za-z0-9][A-Za-z0-9._-]*$/.\");\n }\n this.xmlDeclExpects = [\"standalone\"];\n this.xmlDecl.encoding = value;\n break;\n case \"standalone\":\n if (value !== \"yes\" && value !== \"no\") {\n this.fail(\"standalone value must match \\\"yes\\\" or \\\"no\\\".\");\n }\n this.xmlDeclExpects = [];\n this.xmlDecl.standalone = value;\n break;\n default:\n // We don't need to raise an error here since we've already raised one\n // when checking what name was expected.\n }\n this.name = \"\";\n this.state = S_XML_DECL_SEPARATOR;\n }\n sXMLDeclSeparator() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (!isS(c)) {\n this.fail(\"whitespace required.\");\n this.unget();\n }\n this.state = S_XML_DECL_NAME_START;\n }\n sXMLDeclEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n if (this.piTarget !== \"xml\") {\n this.fail(\"processing instructions are not allowed before root.\");\n }\n else if (this.name !== \"version\" &&\n this.xmlDeclExpects.includes(\"version\")) {\n this.fail(\"XML declaration must contain a version.\");\n }\n (_a = this.xmldeclHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.xmlDecl);\n this.name = \"\";\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n }\n else {\n // We got here because the previous character was a ?, but the question\n // mark character is not valid inside any of the XML declaration\n // name/value pairs.\n this.fail(\"The character ? is disallowed anywhere in XML declarations.\");\n }\n this.xmlDeclPossible = false;\n }\n sOpenTag() {\n var _a;\n const c = this.captureNameChars();\n if (c === EOC) {\n return;\n }\n const tag = this.tag = {\n name: this.name,\n attributes: Object.create(null),\n };\n this.name = \"\";\n if (this.xmlnsOpt) {\n this.topNS = tag.ns = Object.create(null);\n }\n (_a = this.openTagStartHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n this.sawRoot = true;\n if (!this.fragmentOpt && this.closedRoot) {\n this.fail(\"documents may contain only one root.\");\n }\n switch (c) {\n case GREATER:\n this.openTag();\n break;\n case FORWARD_SLASH:\n this.state = S_OPEN_TAG_SLASH;\n break;\n default:\n if (!isS(c)) {\n this.fail(\"disallowed character in tag name.\");\n }\n this.state = S_ATTRIB;\n }\n }\n sOpenTagSlash() {\n if (this.getCode() === GREATER) {\n this.openSelfClosingTag();\n }\n else {\n this.fail(\"forward-slash in opening tag not followed by >.\");\n this.state = S_ATTRIB;\n }\n }\n sAttrib() {\n const c = this.skipSpaces();\n if (c === EOC) {\n return;\n }\n if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n }\n else if (c === GREATER) {\n this.openTag();\n }\n else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n }\n else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribName() {\n const c = this.captureNameChars();\n if (c === EQUAL) {\n this.state = S_ATTRIB_VALUE;\n }\n else if (isS(c)) {\n this.state = S_ATTRIB_NAME_SAW_WHITE;\n }\n else if (c === GREATER) {\n this.fail(\"attribute without value.\");\n this.pushAttrib(this.name, this.name);\n this.name = this.text = \"\";\n this.openTag();\n }\n else if (c !== EOC) {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribNameSawWhite() {\n const c = this.skipSpaces();\n switch (c) {\n case EOC:\n return;\n case EQUAL:\n this.state = S_ATTRIB_VALUE;\n break;\n default:\n this.fail(\"attribute without value.\");\n // Should we do this???\n // this.tag.attributes[this.name] = \"\";\n this.text = \"\";\n this.name = \"\";\n if (c === GREATER) {\n this.openTag();\n }\n else if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n }\n else {\n this.fail(\"disallowed character in attribute name.\");\n this.state = S_ATTRIB;\n }\n }\n }\n sAttribValue() {\n const c = this.getCodeNorm();\n if (isQuote(c)) {\n this.q = c;\n this.state = S_ATTRIB_VALUE_QUOTED;\n }\n else if (!isS(c)) {\n this.fail(\"unquoted attribute value.\");\n this.state = S_ATTRIB_VALUE_UNQUOTED;\n this.unget();\n }\n }\n sAttribValueQuoted() {\n // We deliberately do not use captureTo here. The specialized code we use\n // here is faster than using captureTo.\n const { q, chunk } = this;\n let { i: start } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case q:\n this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI));\n this.name = this.text = \"\";\n this.q = null;\n this.state = S_ATTRIB_VALUE_CLOSED;\n return;\n case AMP:\n this.text += chunk.slice(start, this.prevI);\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_QUOTED;\n return;\n case NL:\n case NL_LIKE:\n case TAB:\n this.text += `${chunk.slice(start, this.prevI)} `;\n start = this.i;\n break;\n case LESS:\n this.text += chunk.slice(start, this.prevI);\n this.fail(\"disallowed character.\");\n return;\n case EOC:\n this.text += chunk.slice(start);\n return;\n default:\n }\n }\n }\n sAttribValueClosed() {\n const c = this.getCodeNorm();\n if (isS(c)) {\n this.state = S_ATTRIB;\n }\n else if (c === GREATER) {\n this.openTag();\n }\n else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n }\n else if (isNameStartChar(c)) {\n this.fail(\"no whitespace between attributes.\");\n this.unget();\n this.state = S_ATTRIB_NAME;\n }\n else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribValueUnquoted() {\n // We don't do anything regarding EOL or space handling for unquoted\n // attributes. We already have failed by the time we get here, and the\n // contract that saxes upholds states that upon failure, it is not safe to\n // rely on the data passed to event handlers (other than\n // ``onerror``). Passing \"bad\" data is not a problem.\n const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);\n switch (c) {\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED;\n break;\n case LESS:\n this.fail(\"disallowed character.\");\n break;\n case EOC:\n break;\n default:\n if (this.text.includes(\"]]>\")) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n this.pushAttrib(this.name, this.text);\n this.name = this.text = \"\";\n if (c === GREATER) {\n this.openTag();\n }\n else {\n this.state = S_ATTRIB;\n }\n }\n }\n sCloseTag() {\n const c = this.captureNameChars();\n if (c === GREATER) {\n this.closeTag();\n }\n else if (isS(c)) {\n this.state = S_CLOSE_TAG_SAW_WHITE;\n }\n else if (c !== EOC) {\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n sCloseTagSawWhite() {\n switch (this.skipSpaces()) {\n case GREATER:\n this.closeTag();\n break;\n case EOC:\n break;\n default:\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n // END OF STATE ENGINE METHODS\n handleTextInRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for performing the ]]> check. A previous version of this code, checked\n // ``this.text`` for the presence of ]]>. It simplified the code but was\n // very costly when character data contained a lot of entities to be parsed.\n //\n // Since we are using a specialized loop, we also keep track of the presence\n // of ]]> in text data. The sequence ]]> is forbidden to appear as-is.\n //\n let { i: start, forbiddenState } = this;\n const { chunk, textHandler: handler } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n scanLoop: \n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case LESS: {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const { text } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n }\n else if (slice.length !== 0) {\n handler(slice);\n }\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n case CLOSE_BRACKET:\n switch (forbiddenState) {\n case FORBIDDEN_START:\n forbiddenState = FORBIDDEN_BRACKET;\n break;\n case FORBIDDEN_BRACKET:\n forbiddenState = FORBIDDEN_BRACKET_BRACKET;\n break;\n case FORBIDDEN_BRACKET_BRACKET:\n break;\n default:\n throw new Error(\"impossible state\");\n }\n break;\n case GREATER:\n if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n forbiddenState = FORBIDDEN_START;\n break;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n forbiddenState = FORBIDDEN_START;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break scanLoop;\n default:\n forbiddenState = FORBIDDEN_START;\n }\n }\n this.forbiddenState = forbiddenState;\n }\n handleTextOutsideRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for a specialized task. We keep track of the presence of non-space\n // characters in the text since these are errors when appearing outside the\n // document root element.\n let { i: start } = this;\n const { chunk, textHandler: handler } = this;\n let nonSpace = false;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n outRootLoop: \n // eslint-disable-next-line no-constant-condition\n while (true) {\n const code = this.getCode();\n switch (code) {\n case LESS: {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const { text } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n }\n else if (slice.length !== 0) {\n handler(slice);\n }\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n nonSpace = true;\n // eslint-disable-next-line no-labels\n break outRootLoop;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n default:\n if (!isS(code)) {\n nonSpace = true;\n }\n }\n }\n if (!nonSpace) {\n return;\n }\n // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags\n // to avoid reporting errors for every single character that is out of\n // place.\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n }\n pushAttribNS(name, value) {\n var _a;\n const { prefix, local } = this.qname(name);\n const attr = { name, prefix, local, value };\n this.attribList.push(attr);\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n if (prefix === \"xmlns\") {\n const trimmed = value.trim();\n if (this.currentXMLVersion === \"1.0\" && trimmed === \"\") {\n this.fail(\"invalid attempt to undefine prefix in XML 1.0\");\n }\n this.topNS[local] = trimmed;\n nsPairCheck(this, local, trimmed);\n }\n else if (name === \"xmlns\") {\n const trimmed = value.trim();\n this.topNS[\"\"] = trimmed;\n nsPairCheck(this, \"\", trimmed);\n }\n }\n pushAttribPlain(name, value) {\n var _a;\n const attr = { name, value };\n this.attribList.push(attr);\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n }\n /**\n * End parsing. This performs final well-formedness checks and resets the\n * parser to a clean state.\n *\n * @returns this\n */\n end() {\n var _a, _b;\n if (!this.sawRoot) {\n this.fail(\"document must contain a root element.\");\n }\n const { tags } = this;\n while (tags.length > 0) {\n const tag = tags.pop();\n this.fail(`unclosed tag: ${tag.name}`);\n }\n if ((this.state !== S_BEGIN) && (this.state !== S_TEXT)) {\n this.fail(\"unexpected end.\");\n }\n const { text } = this;\n if (text.length !== 0) {\n (_a = this.textHandler) === null || _a === void 0 ? void 0 : _a.call(this, text);\n this.text = \"\";\n }\n this._closed = true;\n (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this);\n this._init();\n return this;\n }\n /**\n * Resolve a namespace prefix.\n *\n * @param prefix The prefix to resolve.\n *\n * @returns The namespace URI or ``undefined`` if the prefix is not defined.\n */\n resolve(prefix) {\n var _a, _b;\n let uri = this.topNS[prefix];\n if (uri !== undefined) {\n return uri;\n }\n const { tags } = this;\n for (let index = tags.length - 1; index >= 0; index--) {\n uri = tags[index].ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n }\n uri = this.ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n return (_b = (_a = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a, prefix);\n }\n /**\n * Parse a qname into its prefix and local name parts.\n *\n * @param name The name to parse\n *\n * @returns\n */\n qname(name) {\n // This is faster than using name.split(\":\").\n const colon = name.indexOf(\":\");\n if (colon === -1) {\n return { prefix: \"\", local: name };\n }\n const local = name.slice(colon + 1);\n const prefix = name.slice(0, colon);\n if (prefix === \"\" || local === \"\" || local.includes(\":\")) {\n this.fail(`malformed name: ${name}.`);\n }\n return { prefix, local };\n }\n processAttribsNS() {\n var _a;\n const { attribList } = this;\n const tag = this.tag;\n {\n // add namespace info to tag\n const { prefix, local } = this.qname(tag.name);\n tag.prefix = prefix;\n tag.local = local;\n const uri = tag.uri = (_a = this.resolve(prefix)) !== null && _a !== void 0 ? _a : \"\";\n if (prefix !== \"\") {\n if (prefix === \"xmlns\") {\n this.fail(\"tags may not have \\\"xmlns\\\" as prefix.\");\n }\n if (uri === \"\") {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n tag.uri = prefix;\n }\n }\n }\n if (attribList.length === 0) {\n return;\n }\n const { attributes } = tag;\n const seen = new Set();\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (const attr of attribList) {\n const { name, prefix, local } = attr;\n let uri;\n let eqname;\n if (prefix === \"\") {\n uri = name === \"xmlns\" ? XMLNS_NAMESPACE : \"\";\n eqname = name;\n }\n else {\n uri = this.resolve(prefix);\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (uri === undefined) {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n uri = prefix;\n }\n eqname = `{${uri}}${local}`;\n }\n if (seen.has(eqname)) {\n this.fail(`duplicate attribute: ${eqname}.`);\n }\n seen.add(eqname);\n attr.uri = uri;\n attributes[name] = attr;\n }\n this.attribList = [];\n }\n processAttribsPlain() {\n const { attribList } = this;\n // eslint-disable-next-line prefer-destructuring\n const attributes = this.tag.attributes;\n for (const { name, value } of attribList) {\n if (attributes[name] !== undefined) {\n this.fail(`duplicate attribute: ${name}.`);\n }\n attributes[name] = value;\n }\n this.attribList = [];\n }\n /**\n * Handle a complete open tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onopentag``.\n */\n openTag() {\n var _a;\n this.processAttribs();\n const { tags } = this;\n const tag = this.tag;\n tag.isSelfClosing = false;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n tags.push(tag);\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete self-closing tag. This parser code calls this once it has\n * seen the whole tag. This method checks for well-formeness and then emits\n * ``onopentag`` and ``onclosetag``.\n */\n openSelfClosingTag() {\n var _a, _b, _c;\n this.processAttribs();\n const { tags } = this;\n const tag = this.tag;\n tag.isSelfClosing = true;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag);\n const top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null;\n if (top === null) {\n this.closedRoot = true;\n }\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete close tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onclosetag``.\n */\n closeTag() {\n const { tags, name } = this;\n // Our state after this will be S_TEXT, no matter what, and we can clear\n // tagName now.\n this.state = S_TEXT;\n this.name = \"\";\n if (name === \"\") {\n this.fail(\"weird empty close tag.\");\n this.text += \"</>\";\n return;\n }\n const handler = this.closeTagHandler;\n let l = tags.length;\n while (l-- > 0) {\n const tag = this.tag = tags.pop();\n this.topNS = tag.ns;\n handler === null || handler === void 0 ? void 0 : handler(tag);\n if (tag.name === name) {\n break;\n }\n this.fail(\"unexpected close tag.\");\n }\n if (l === 0) {\n this.closedRoot = true;\n }\n else if (l < 0) {\n this.fail(`unmatched closing tag: ${name}.`);\n this.text += `</${name}>`;\n }\n }\n /**\n * Resolves an entity. Makes any necessary well-formedness checks.\n *\n * @param entity The entity to resolve.\n *\n * @returns The parsed entity.\n */\n parseEntity(entity) {\n // startsWith would be significantly slower for this test.\n if (entity[0] !== \"#\") {\n const defined = this.ENTITIES[entity];\n if (defined !== undefined) {\n return defined;\n }\n this.fail(this.isName(entity) ? \"undefined entity.\" :\n \"disallowed character in entity name.\");\n return `&${entity};`;\n }\n let num = NaN;\n if (entity[1] === \"x\" && /^#x[0-9a-f]+$/i.test(entity)) {\n num = parseInt(entity.slice(2), 16);\n }\n else if (/^#[0-9]+$/.test(entity)) {\n num = parseInt(entity.slice(1), 10);\n }\n // The character reference is required to match the CHAR production.\n if (!this.isChar(num)) {\n this.fail(\"malformed character entity.\");\n return `&${entity};`;\n }\n return String.fromCodePoint(num);\n }\n}\nexports.SaxesParser = SaxesParser;\n//# sourceMappingURL=saxes.js.map","\"use strict\";\n/**\n * Character class utilities for XML NS 1.0 edition 3.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//\n// Fragments.\n//\n// tslint:disable-next-line:max-line-length\nexports.NC_NAME_START_CHAR = \"A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NC_NAME_CHAR = \"-\" + exports.NC_NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.NC_NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"]$\", \"u\");\nexports.NC_NAME_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_CHAR + \"]$\", \"u\");\nexports.NC_NAME_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"][\" + exports.NC_NAME_CHAR + \"]*$\", \"u\");\n/**\n * Determines whether a codepoint matches [[NC_NAME_START_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNCNameStartChar(c) {\n return ((c >= 0x41 && c <= 0x5A) ||\n c === 0x5F ||\n (c >= 0x61 && c <= 0x7A) ||\n (c >= 0xC0 && c <= 0xD6) ||\n (c >= 0xD8 && c <= 0xF6) ||\n (c >= 0x00F8 && c <= 0x02FF) ||\n (c >= 0x0370 && c <= 0x037D) ||\n (c >= 0x037F && c <= 0x1FFF) ||\n (c >= 0x200C && c <= 0x200D) ||\n (c >= 0x2070 && c <= 0x218F) ||\n (c >= 0x2C00 && c <= 0x2FEF) ||\n (c >= 0x3001 && c <= 0xD7FF) ||\n (c >= 0xF900 && c <= 0xFDCF) ||\n (c >= 0xFDF0 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0xEFFFF));\n}\nexports.isNCNameStartChar = isNCNameStartChar;\n/**\n * Determines whether a codepoint matches [[NC_NAME_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\nfunction isNCNameChar(c) {\n return isNCNameStartChar(c) ||\n (c === 0x2D ||\n c === 0x2E ||\n (c >= 0x30 && c <= 0x39) ||\n c === 0x00B7 ||\n (c >= 0x0300 && c <= 0x036F) ||\n (c >= 0x203F && c <= 0x2040));\n}\nexports.isNCNameChar = isNCNameChar;\n//# sourceMappingURL=ed3.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ParseError = void 0;\n/**\n * An error that includes line and column in the error message.\n */\nclass ParseError extends Error {\n constructor(parser, message) {\n const saxParser = parser.saxParser;\n super(parser.trackPosition ? `Line ${saxParser.line} column ${saxParser.column + 1}: ${message}` : message);\n }\n}\nexports.ParseError = ParseError;\n//# sourceMappingURL=ParseError.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BlankNode = void 0;\n/**\n * A term that represents an RDF blank node with a label.\n */\nclass BlankNode {\n constructor(value) {\n this.termType = 'BlankNode';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'BlankNode' && other.value === this.value;\n }\n}\nexports.BlankNode = BlankNode;\n//# sourceMappingURL=BlankNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultGraph = void 0;\n/**\n * A singleton term instance that represents the default graph.\n * It's only allowed to assign a DefaultGraph to the .graph property of a Quad.\n */\nclass DefaultGraph {\n constructor() {\n this.termType = 'DefaultGraph';\n this.value = '';\n // Private constructor\n }\n equals(other) {\n return !!other && other.termType === 'DefaultGraph';\n }\n}\nexports.DefaultGraph = DefaultGraph;\nDefaultGraph.INSTANCE = new DefaultGraph();\n//# sourceMappingURL=DefaultGraph.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NamedNode = void 0;\n/**\n * A term that contains an IRI.\n */\nclass NamedNode {\n constructor(value) {\n this.termType = 'NamedNode';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'NamedNode' && other.value === this.value;\n }\n}\nexports.NamedNode = NamedNode;\n//# sourceMappingURL=NamedNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Literal = void 0;\nconst NamedNode_1 = require(\"./NamedNode\");\n/**\n * A term that represents an RDF literal, containing a string with an optional language tag or datatype.\n */\nclass Literal {\n constructor(value, languageOrDatatype) {\n this.termType = 'Literal';\n this.value = value;\n if (typeof languageOrDatatype === 'string') {\n this.language = languageOrDatatype;\n this.datatype = Literal.RDF_LANGUAGE_STRING;\n }\n else if (languageOrDatatype) {\n this.language = '';\n this.datatype = languageOrDatatype;\n }\n else {\n this.language = '';\n this.datatype = Literal.XSD_STRING;\n }\n }\n equals(other) {\n return !!other && other.termType === 'Literal' && other.value === this.value &&\n other.language === this.language && this.datatype.equals(other.datatype);\n }\n}\nexports.Literal = Literal;\nLiteral.RDF_LANGUAGE_STRING = new NamedNode_1.NamedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString');\nLiteral.XSD_STRING = new NamedNode_1.NamedNode('http://www.w3.org/2001/XMLSchema#string');\n//# sourceMappingURL=Literal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quad = void 0;\n/**\n * An instance of DefaultGraph represents the default graph.\n * It's only allowed to assign a DefaultGraph to the .graph property of a Quad.\n */\nclass Quad {\n constructor(subject, predicate, object, graph) {\n this.termType = 'Quad';\n this.value = '';\n this.subject = subject;\n this.predicate = predicate;\n this.object = object;\n this.graph = graph;\n }\n equals(other) {\n // `|| !other.termType` is for backwards-compatibility with old factories without RDF* support.\n return !!other && (other.termType === 'Quad' || !other.termType) &&\n this.subject.equals(other.subject) &&\n this.predicate.equals(other.predicate) &&\n this.object.equals(other.object) &&\n this.graph.equals(other.graph);\n }\n}\nexports.Quad = Quad;\n//# sourceMappingURL=Quad.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Variable = void 0;\n/**\n * A term that represents a variable.\n */\nclass Variable {\n constructor(value) {\n this.termType = 'Variable';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'Variable' && other.value === this.value;\n }\n}\nexports.Variable = Variable;\n//# sourceMappingURL=Variable.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataFactory = void 0;\nconst BlankNode_1 = require(\"./BlankNode\");\nconst DefaultGraph_1 = require(\"./DefaultGraph\");\nconst Literal_1 = require(\"./Literal\");\nconst NamedNode_1 = require(\"./NamedNode\");\nconst Quad_1 = require(\"./Quad\");\nconst Variable_1 = require(\"./Variable\");\nlet dataFactoryCounter = 0;\n/**\n * A factory for instantiating RDF terms and quads.\n */\nclass DataFactory {\n constructor(options) {\n this.blankNodeCounter = 0;\n options = options || {};\n this.blankNodePrefix = options.blankNodePrefix || `df_${dataFactoryCounter++}_`;\n }\n /**\n * @param value The IRI for the named node.\n * @return A new instance of NamedNode.\n * @see NamedNode\n */\n namedNode(value) {\n return new NamedNode_1.NamedNode(value);\n }\n /**\n * @param value The optional blank node identifier.\n * @return A new instance of BlankNode.\n * If the `value` parameter is undefined a new identifier\n * for the blank node is generated for each call.\n * @see BlankNode\n */\n blankNode(value) {\n return new BlankNode_1.BlankNode(value || `${this.blankNodePrefix}${this.blankNodeCounter++}`);\n }\n /**\n * @param value The literal value.\n * @param languageOrDatatype The optional language or datatype.\n * If `languageOrDatatype` is a NamedNode,\n * then it is used for the value of `NamedNode.datatype`.\n * Otherwise `languageOrDatatype` is used for the value\n * of `NamedNode.language`.\n * @return A new instance of Literal.\n * @see Literal\n */\n literal(value, languageOrDatatype) {\n return new Literal_1.Literal(value, languageOrDatatype);\n }\n /**\n * This method is optional.\n * @param value The variable name\n * @return A new instance of Variable.\n * @see Variable\n */\n variable(value) {\n return new Variable_1.Variable(value);\n }\n /**\n * @return An instance of DefaultGraph.\n */\n defaultGraph() {\n return DefaultGraph_1.DefaultGraph.INSTANCE;\n }\n /**\n * @param subject The quad subject term.\n * @param predicate The quad predicate term.\n * @param object The quad object term.\n * @param graph The quad graph term.\n * @return A new instance of Quad.\n * @see Quad\n */\n quad(subject, predicate, object, graph) {\n return new Quad_1.Quad(subject, predicate, object, graph || this.defaultGraph());\n }\n /**\n * Create a deep copy of the given term using this data factory.\n * @param original An RDF term.\n * @return A deep copy of the given term.\n */\n fromTerm(original) {\n // TODO: remove nasty any casts when this TS bug has been fixed:\n // https://github.com/microsoft/TypeScript/issues/26933\n switch (original.termType) {\n case 'NamedNode':\n return this.namedNode(original.value);\n case 'BlankNode':\n return this.blankNode(original.value);\n case 'Literal':\n if (original.language) {\n return this.literal(original.value, original.language);\n }\n if (!original.datatype.equals(Literal_1.Literal.XSD_STRING)) {\n return this.literal(original.value, this.fromTerm(original.datatype));\n }\n return this.literal(original.value);\n case 'Variable':\n return this.variable(original.value);\n case 'DefaultGraph':\n return this.defaultGraph();\n case 'Quad':\n return this.quad(this.fromTerm(original.subject), this.fromTerm(original.predicate), this.fromTerm(original.object), this.fromTerm(original.graph));\n }\n }\n /**\n * Create a deep copy of the given quad using this data factory.\n * @param original An RDF quad.\n * @return A deep copy of the given quad.\n */\n fromQuad(original) {\n return this.fromTerm(original);\n }\n /**\n * Reset the internal blank node counter.\n */\n resetBlankNodeCounter() {\n this.blankNodeCounter = 0;\n }\n}\nexports.DataFactory = DataFactory;\n//# sourceMappingURL=DataFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateIri = exports.IriValidationStrategy = void 0;\nfunction buildAbsoluteIriRfc3987Regex() {\n // The syntax is defined in https://www.rfc-editor.org/rfc/rfc3987#section-2.2\n // Rules are defined in reversed order\n const sub_delims_raw = `!$&'()*+,;=`;\n const sub_delims = `[${sub_delims_raw}]`;\n const pct_encoded = `%[a-fA-F0-9]{2}`;\n const dec_octet = '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';\n const ipv4address = `${dec_octet}\\\\.${dec_octet}\\\\.${dec_octet}\\\\.${dec_octet}`;\n const h16 = `[a-fA-F0-9]{1,4}`;\n const ls32 = `(${h16}:${h16}|${ipv4address})`;\n const ipv6address = `((${h16}:){6}${ls32}|::(${h16}:){5}${ls32}|(${h16})?::(${h16}:){4}${ls32}|((${h16}:){0,1}${h16})?::(${h16}:){3}${ls32}|((${h16}:){0,2}${h16})?::(${h16}:){2}${ls32}|((${h16}:){0,3}${h16})?::${h16}:${ls32}|((${h16}:){0,4}${h16})?::${ls32}|((${h16}:){0,5}${h16})?::${h16}|((${h16}:){0,6}${h16})?::)`;\n const ipvfuture = `v[a-fA-F0-9]+\\\\.(${sub_delims}|${sub_delims}|\":)+`;\n const ip_literal = `\\\\[(${ipv6address}|${ipvfuture})\\\\]`;\n const port = `[0-9]*`;\n const scheme = `[a-zA-Z][a-zA-Z0-9+\\\\-.]*`;\n const iprivate_raw = `\\u{E000}-\\u{F8FF}\\u{F0000}-\\u{FFFFD}\\u{100000}-\\u{10FFFD}`;\n const iprivate = `[${iprivate_raw}]`;\n const ucschar_raw = `\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}`;\n const iunreserved_raw = `a-zA-Z0-9\\\\-._~${ucschar_raw}`;\n const iunreserved = `[${iunreserved_raw}]`;\n const ipchar = `(${iunreserved}|${pct_encoded}|${sub_delims}|[:@])*`;\n const ifragment = `(${ipchar}|[\\\\/?])*`;\n const iquery = `(${ipchar}|${iprivate}|[\\\\/?])*`;\n const isegment_nz = `(${ipchar})+`;\n const isegment = `(${ipchar})*`;\n const ipath_empty = '';\n const ipath_rootless = `${isegment_nz}(\\\\/${isegment})*`;\n const ipath_absolute = `\\\\/(${isegment_nz}(\\\\/${isegment})*)?`;\n const ipath_abempty = `(\\\\/${isegment})*`;\n const ireg_name = `(${iunreserved}|${pct_encoded}|${sub_delims})*`;\n const ihost = `(${ip_literal}|${ipv4address}|${ireg_name})`;\n const iuserinfo = `(${iunreserved}|${pct_encoded}|${sub_delims}|:)*`;\n const iauthority = `(${iuserinfo}@)?${ihost}(:${port})?`;\n const ihier_part = `(\\\\/\\\\/${iauthority}${ipath_abempty}|${ipath_absolute}|${ipath_rootless}|${ipath_empty})`;\n const iri = `^${scheme}:${ihier_part}(\\\\?${iquery})?(#${ifragment})?$`;\n return new RegExp(iri, 'u');\n}\nconst STRICT_IRI_REGEX = buildAbsoluteIriRfc3987Regex();\n// eslint-disable-next-line no-control-regex\nconst PRAGMATIC_IRI_REGEX = /^[A-Za-z][\\d+-.A-Za-z]*:[^\\u0000-\\u0020\"<>\\\\^`{|}]*$/u;\n/**\n * Possible ways of validating an IRI\n */\nvar IriValidationStrategy;\n(function (IriValidationStrategy) {\n /**\n * Validates the IRI according to RFC 3987.\n */\n IriValidationStrategy[\"Strict\"] = \"strict\";\n /**\n * Validates that the IRI has a valid scheme and does not contain any character forbidden by the Turtle specification.\n */\n IriValidationStrategy[\"Pragmatic\"] = \"pragmatic\";\n /**\n * Does not validate the IRI at all.\n */\n IriValidationStrategy[\"None\"] = \"none\";\n})(IriValidationStrategy = exports.IriValidationStrategy || (exports.IriValidationStrategy = {}));\n/**\n * Validate a given IRI according to the given strategy.\n *\n * By default the IRI is fully validated according to RFC 3987.\n * But it is possible to do a lighter a faster validation using the \"pragmatic\" strategy.\n *\n * @param {string} iri a string that may be an IRI.\n * @param {IriValidationStrategy} strategy IRI validation strategy.\n * @return {Error | undefined} An error if the IRI is invalid, or undefined if it is valid.\n */\nfunction validateIri(iri, strategy = IriValidationStrategy.Strict) {\n switch (strategy) {\n case IriValidationStrategy.Strict:\n return STRICT_IRI_REGEX.test(iri) ? undefined : new Error(`Invalid IRI according to RFC 3987: '${iri}'`);\n case IriValidationStrategy.Pragmatic:\n return PRAGMATIC_IRI_REGEX.test(iri) ? undefined : new Error(`Invalid IRI according to RDF Turtle: '${iri}'`);\n case IriValidationStrategy.None:\n return undefined;\n default:\n return new Error(`Not supported validation strategy \"${strategy}\"`);\n }\n}\nexports.validateIri = validateIri;\n//# sourceMappingURL=Validate.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ParseType = exports.RdfXmlParser = void 0;\nconst relative_to_absolute_iri_1 = require(\"relative-to-absolute-iri\");\nconst saxes_1 = require(\"@rubensworks/saxes\");\nconst readable_stream_1 = require(\"readable-stream\");\nconst ParseError_1 = require(\"./ParseError\");\nconst rdf_data_factory_1 = require(\"rdf-data-factory\");\nconst validate_iri_1 = require(\"validate-iri\");\nclass RdfXmlParser extends readable_stream_1.Transform {\n constructor(args) {\n super({ readableObjectMode: true });\n this.activeTagStack = [];\n this.nodeIds = {};\n if (args) {\n Object.assign(this, args);\n this.options = args;\n }\n if (!this.dataFactory) {\n this.dataFactory = new rdf_data_factory_1.DataFactory();\n }\n if (!this.baseIRI) {\n this.baseIRI = '';\n }\n if (!this.defaultGraph) {\n this.defaultGraph = this.dataFactory.defaultGraph();\n }\n if (this.validateUri !== false) {\n this.validateUri = true;\n }\n if (!this.iriValidationStrategy) {\n this.iriValidationStrategy = this.validateUri ? validate_iri_1.IriValidationStrategy.Pragmatic : validate_iri_1.IriValidationStrategy.None;\n }\n this.saxParser = new saxes_1.SaxesParser({ xmlns: true, position: this.trackPosition });\n this.attachSaxListeners();\n }\n /**\n * Parses the given text stream into a quad stream.\n * @param {NodeJS.EventEmitter} stream A text stream.\n * @return {RDF.Stream} A quad stream.\n */\n import(stream) {\n const output = new readable_stream_1.PassThrough({ readableObjectMode: true });\n stream.on('error', (error) => parsed.emit('error', error));\n stream.on('data', (data) => output.push(data));\n stream.on('end', () => output.push(null));\n const parsed = output.pipe(new RdfXmlParser(this.options));\n return parsed;\n }\n _transform(chunk, encoding, callback) {\n try {\n this.saxParser.write(chunk);\n }\n catch (e) {\n return callback(e);\n }\n callback();\n }\n /**\n * Create a new parse error instance.\n * @param {string} message An error message.\n * @return {Error} An error instance.\n */\n newParseError(message) {\n return new ParseError_1.ParseError(this, message);\n }\n /**\n * Convert the given value to a IRI by taking into account the baseIRI.\n *\n * This will follow the RDF/XML spec for converting values with baseIRIs to a IRI.\n *\n * @param {string} value The value to convert to an IRI.\n * @param {IActiveTag} activeTag The active tag.\n * @return {NamedNode} an IRI.\n */\n valueToUri(value, activeTag) {\n return this.uriToNamedNode((0, relative_to_absolute_iri_1.resolve)(value, activeTag.baseIRI));\n }\n /**\n * Convert the given value URI string to a named node.\n *\n * This throw an error if the URI is invalid.\n *\n * @param {string} uri A URI string.\n * @return {NamedNode} a named node.\n */\n uriToNamedNode(uri) {\n // Validate URI\n const uriValidationResult = (0, validate_iri_1.validateIri)(uri, this.iriValidationStrategy);\n if (uriValidationResult instanceof Error) {\n throw this.newParseError(uriValidationResult.message);\n }\n return this.dataFactory.namedNode(uri);\n }\n /**\n * Validate the given value as an NCName: https://www.w3.org/TR/xml-names/#NT-NCName\n * If it is invalid, an error will thrown emitted.\n * @param {string} value A value.\n */\n validateNcname(value) {\n // Validate term as an NCName: https://www.w3.org/TR/xml-names/#NT-NCName\n if (!RdfXmlParser.NCNAME_MATCHER.test(value)) {\n throw this.newParseError(`Not a valid NCName: ${value}`);\n }\n }\n attachSaxListeners() {\n this.saxParser.on('error', (error) => this.emit('error', error));\n this.saxParser.on('opentag', this.onTag.bind(this));\n this.saxParser.on('text', this.onText.bind(this));\n this.saxParser.on('cdata', this.onText.bind(this));\n this.saxParser.on('closetag', this.onCloseTag.bind(this));\n this.saxParser.on('doctype', this.onDoctype.bind(this));\n }\n /**\n * Handle the given tag.\n * @param {SaxesTagNS} tag A SAX tag.\n */\n onTag(tag) {\n // Get parent tag\n const parentTag = this.activeTagStack.length\n ? this.activeTagStack[this.activeTagStack.length - 1] : null;\n let currentParseType = ParseType.RESOURCE;\n if (parentTag) {\n parentTag.hadChildren = true;\n currentParseType = parentTag.childrenParseType;\n }\n // Check if this tag needs to be converted to a string\n if (parentTag && parentTag.childrenStringTags) {\n // Convert this tag to a string\n const tagName = tag.name;\n let attributes = '';\n for (const attributeKey in tag.attributes) {\n attributes += ` ${attributeKey}=\"${tag.attributes[attributeKey].value}\"`;\n }\n const tagContents = `${tagName}${attributes}`;\n const tagString = `<${tagContents}>`;\n parentTag.childrenStringTags.push(tagString);\n // Inherit the array, so that deeper tags are appended to this same array\n const stringActiveTag = { childrenStringTags: parentTag.childrenStringTags };\n stringActiveTag.childrenStringEmitClosingTag = `</${tagName}>`;\n this.activeTagStack.push(stringActiveTag);\n // Halt any further processing\n return;\n }\n const activeTag = {};\n if (parentTag) {\n // Inherit language scope and baseIRI from parent\n activeTag.language = parentTag.language;\n activeTag.baseIRI = parentTag.baseIRI;\n }\n else {\n activeTag.baseIRI = this.baseIRI;\n }\n this.activeTagStack.push(activeTag);\n if (currentParseType === ParseType.RESOURCE) {\n this.onTagResource(tag, activeTag, parentTag, !parentTag);\n }\n else { // currentParseType === ParseType.PROPERTY\n this.onTagProperty(tag, activeTag, parentTag);\n }\n }\n /**\n * Handle the given node element in resource-mode.\n * @param {SaxesTagNS} tag A SAX tag.\n * @param {IActiveTag} activeTag The currently active tag.\n * @param {IActiveTag} parentTag The parent tag or null.\n * @param {boolean} rootTag If we are currently processing the root tag.\n */\n onTagResource(tag, activeTag, parentTag, rootTag) {\n activeTag.childrenParseType = ParseType.PROPERTY;\n // Assume that the current node is a _typed_ node (2.13), unless we find an rdf:Description as node name\n let typedNode = true;\n if (tag.uri === RdfXmlParser.RDF) {\n // Check forbidden property element names\n if (!rootTag && RdfXmlParser.FORBIDDEN_NODE_ELEMENTS.indexOf(tag.local) >= 0) {\n throw this.newParseError(`Illegal node element name: ${tag.local}`);\n }\n switch (tag.local) {\n case 'RDF':\n // Tags under <rdf:RDF> must always be resources\n activeTag.childrenParseType = ParseType.RESOURCE;\n case 'Description':\n typedNode = false;\n }\n }\n const predicates = [];\n const objects = [];\n // Collect all attributes as triples\n // Assign subject value only after all attributes have been processed, because baseIRI may change the final val\n let activeSubjectValue = null;\n let claimSubjectNodeId = false;\n let subjectValueBlank = false;\n let explicitType = null;\n for (const attributeKey in tag.attributes) {\n const attribute = tag.attributes[attributeKey];\n if (parentTag && attribute.uri === RdfXmlParser.RDF) {\n switch (attribute.local) {\n case 'about':\n if (activeSubjectValue) {\n throw this.newParseError(`Only one of rdf:about, rdf:nodeID and rdf:ID can be present, \\\nwhile ${attribute.value} and ${activeSubjectValue} where found.`);\n }\n activeSubjectValue = attribute.value;\n continue;\n case 'ID':\n if (activeSubjectValue) {\n throw this.newParseError(`Only one of rdf:about, rdf:nodeID and rdf:ID can be present, \\\nwhile ${attribute.value} and ${activeSubjectValue} where found.`);\n }\n this.validateNcname(attribute.value);\n activeSubjectValue = '#' + attribute.value;\n claimSubjectNodeId = true;\n continue;\n case 'nodeID':\n if (activeSubjectValue) {\n throw this.newParseError(`Only one of rdf:about, rdf:nodeID and rdf:ID can be present, \\\nwhile ${attribute.value} and ${activeSubjectValue} where found.`);\n }\n this.validateNcname(attribute.value);\n activeSubjectValue = attribute.value;\n subjectValueBlank = true;\n continue;\n case 'bagID':\n throw this.newParseError(`rdf:bagID is not supported.`);\n case 'type':\n // Emit the rdf:type later as named node instead of the default literal\n explicitType = attribute.value;\n continue;\n case 'aboutEach':\n throw this.newParseError(`rdf:aboutEach is not supported.`);\n case 'aboutEachPrefix':\n throw this.newParseError(`rdf:aboutEachPrefix is not supported.`);\n case 'li':\n throw this.newParseError(`rdf:li on node elements are not supported.`);\n }\n }\n else if (attribute.uri === RdfXmlParser.XML) {\n if (attribute.local === 'lang') {\n activeTag.language = attribute.value === '' ? null : attribute.value.toLowerCase();\n continue;\n }\n else if (attribute.local === 'base') {\n // SAX Parser does not expand xml:base, based on DOCTYPE, so we have to do it manually\n activeTag.baseIRI = (0, relative_to_absolute_iri_1.resolve)(attribute.value, activeTag.baseIRI);\n continue;\n }\n }\n // Interpret attributes at this point as properties on this node,\n // but we ignore attributes that have no prefix or known expanded URI\n if (attribute.prefix !== 'xml' && attribute.prefix !== 'xmlns'\n && (attribute.prefix !== '' || attribute.local !== 'xmlns')\n && attribute.uri) {\n predicates.push(this.uriToNamedNode(attribute.uri + attribute.local));\n objects.push(attribute.value);\n }\n }\n // Create the subject value _after_ all attributes have been processed\n if (activeSubjectValue !== null) {\n activeTag.subject = subjectValueBlank\n ? this.dataFactory.blankNode(activeSubjectValue) : this.valueToUri(activeSubjectValue, activeTag);\n if (claimSubjectNodeId) {\n this.claimNodeId(activeTag.subject);\n }\n }\n // Force the creation of a subject if it doesn't exist yet\n if (!activeTag.subject) {\n activeTag.subject = this.dataFactory.blankNode();\n }\n // Emit the type if we're at a typed node\n if (typedNode) {\n const type = this.uriToNamedNode(tag.uri + tag.local);\n this.emitTriple(activeTag.subject, this.dataFactory.namedNode(RdfXmlParser.RDF + 'type'), type, parentTag ? parentTag.reifiedStatementId : null);\n }\n if (parentTag) {\n // If the parent tag defined a predicate, add the current tag as property value\n if (parentTag.predicate) {\n if (parentTag.childrenCollectionSubject) {\n // RDF:List-based properties\n const linkTerm = this.dataFactory.blankNode();\n // Emit <x> <p> <current-chain> OR <previous-chain> <rdf:rest> <current-chain>\n this.emitTriple(parentTag.childrenCollectionSubject, parentTag.childrenCollectionPredicate, linkTerm, parentTag.reifiedStatementId);\n // Emit <current-chain> <rdf:first> value\n this.emitTriple(linkTerm, this.dataFactory.namedNode(RdfXmlParser.RDF + 'first'), activeTag.subject, activeTag.reifiedStatementId);\n // Store <current-chain> in the parent node\n parentTag.childrenCollectionSubject = linkTerm;\n parentTag.childrenCollectionPredicate = this.dataFactory.namedNode(RdfXmlParser.RDF + 'rest');\n }\n else { // !parentTag.predicateEmitted\n // Set-based properties\n this.emitTriple(parentTag.subject, parentTag.predicate, activeTag.subject, parentTag.reifiedStatementId);\n // Emit pending properties on the parent tag that had no defined subject yet.\n for (let i = 0; i < parentTag.predicateSubPredicates.length; i++) {\n this.emitTriple(activeTag.subject, parentTag.predicateSubPredicates[i], parentTag.predicateSubObjects[i], null);\n }\n // Cleanup so we don't emit them again when the parent tag is closed\n parentTag.predicateSubPredicates = [];\n parentTag.predicateSubObjects = [];\n parentTag.predicateEmitted = true;\n }\n }\n // Emit all collected triples\n for (let i = 0; i < predicates.length; i++) {\n const object = this.dataFactory.literal(objects[i], activeTag.datatype || activeTag.language);\n this.emitTriple(activeTag.subject, predicates[i], object, parentTag.reifiedStatementId);\n }\n // Emit the rdf:type as named node instead of literal\n if (explicitType) {\n this.emitTriple(activeTag.subject, this.dataFactory.namedNode(RdfXmlParser.RDF + 'type'), this.uriToNamedNode(explicitType), null);\n }\n }\n }\n /**\n * Handle the given property element in property-mode.\n * @param {SaxesTagNS} tag A SAX tag.\n * @param {IActiveTag} activeTag The currently active tag.\n * @param {IActiveTag} parentTag The parent tag or null.\n */\n onTagProperty(tag, activeTag, parentTag) {\n activeTag.childrenParseType = ParseType.RESOURCE;\n activeTag.subject = parentTag.subject; // Inherit parent subject\n if (tag.uri === RdfXmlParser.RDF && tag.local === 'li') {\n // Convert rdf:li to rdf:_x\n if (!parentTag.listItemCounter) {\n parentTag.listItemCounter = 1;\n }\n activeTag.predicate = this.uriToNamedNode(tag.uri + '_' + parentTag.listItemCounter++);\n }\n else {\n activeTag.predicate = this.uriToNamedNode(tag.uri + tag.local);\n }\n // Check forbidden property element names\n if (tag.uri === RdfXmlParser.RDF\n && RdfXmlParser.FORBIDDEN_PROPERTY_ELEMENTS.indexOf(tag.local) >= 0) {\n throw this.newParseError(`Illegal property element name: ${tag.local}`);\n }\n activeTag.predicateSubPredicates = [];\n activeTag.predicateSubObjects = [];\n let parseType = false;\n let attributedProperty = false;\n // Collect all attributes as triples\n // Assign subject value only after all attributes have been processed, because baseIRI may change the final val\n let activeSubSubjectValue = null;\n let subSubjectValueBlank = true;\n const predicates = [];\n const objects = [];\n for (const propertyAttributeKey in tag.attributes) {\n const propertyAttribute = tag.attributes[propertyAttributeKey];\n if (propertyAttribute.uri === RdfXmlParser.RDF) {\n switch (propertyAttribute.local) {\n case 'resource':\n if (activeSubSubjectValue) {\n throw this.newParseError(`Found both rdf:resource (${propertyAttribute.value}) and rdf:nodeID (${activeSubSubjectValue}).`);\n }\n if (parseType) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:resource (${propertyAttribute.value})`);\n }\n activeTag.hadChildren = true;\n activeSubSubjectValue = propertyAttribute.value;\n subSubjectValueBlank = false;\n continue;\n case 'datatype':\n if (attributedProperty) {\n throw this.newParseError(`Found both non-rdf:* property attributes and rdf:datatype (${propertyAttribute.value}).`);\n }\n if (parseType) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:datatype (${propertyAttribute.value})`);\n }\n activeTag.datatype = this.valueToUri(propertyAttribute.value, activeTag);\n continue;\n case 'nodeID':\n if (attributedProperty) {\n throw this.newParseError(`Found both non-rdf:* property attributes and rdf:nodeID (${propertyAttribute.value}).`);\n }\n if (activeTag.hadChildren) {\n throw this.newParseError(`Found both rdf:resource and rdf:nodeID (${propertyAttribute.value}).`);\n }\n if (parseType) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:nodeID (${propertyAttribute.value})`);\n }\n this.validateNcname(propertyAttribute.value);\n activeTag.hadChildren = true;\n activeSubSubjectValue = propertyAttribute.value;\n subSubjectValueBlank = true;\n continue;\n case 'bagID':\n throw this.newParseError(`rdf:bagID is not supported.`);\n case 'parseType':\n // Validation\n if (attributedProperty) {\n throw this.newParseError(`rdf:parseType is not allowed when non-rdf:* property attributes are present`);\n }\n if (activeTag.datatype) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:datatype (${activeTag.datatype.value})`);\n }\n if (activeSubSubjectValue) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:nodeID or rdf:resource (${activeSubSubjectValue})`);\n }\n if (propertyAttribute.value === 'Resource') {\n parseType = true;\n activeTag.childrenParseType = ParseType.PROPERTY;\n // Turn this property element into a node element\n const nestedBNode = this.dataFactory.blankNode();\n this.emitTriple(activeTag.subject, activeTag.predicate, nestedBNode, activeTag.reifiedStatementId);\n activeTag.subject = nestedBNode;\n activeTag.predicate = null;\n }\n else if (propertyAttribute.value === 'Collection') {\n parseType = true;\n // Interpret children as being part of an rdf:List\n activeTag.hadChildren = true;\n activeTag.childrenCollectionSubject = activeTag.subject;\n activeTag.childrenCollectionPredicate = activeTag.predicate;\n subSubjectValueBlank = false;\n }\n else if (propertyAttribute.value === 'Literal') {\n parseType = true;\n // Interpret children as being part of a literal string\n activeTag.childrenTagsToString = true;\n activeTag.childrenStringTags = [];\n }\n continue;\n case 'ID':\n this.validateNcname(propertyAttribute.value);\n activeTag.reifiedStatementId = this.valueToUri('#' + propertyAttribute.value, activeTag);\n this.claimNodeId(activeTag.reifiedStatementId);\n continue;\n }\n }\n else if (propertyAttribute.uri === RdfXmlParser.XML && propertyAttribute.local === 'lang') {\n activeTag.language = propertyAttribute.value === ''\n ? null : propertyAttribute.value.toLowerCase();\n continue;\n }\n // Interpret attributes at this point as properties via implicit blank nodes on the property,\n // but we ignore attributes that have no prefix or known expanded URI\n if (propertyAttribute.prefix !== 'xml' && propertyAttribute.prefix !== 'xmlns'\n && (propertyAttribute.prefix !== '' || propertyAttribute.local !== 'xmlns')\n && propertyAttribute.uri) {\n if (parseType || activeTag.datatype) {\n throw this.newParseError(`Found illegal rdf:* properties on property element with attribute: ${propertyAttribute.value}`);\n }\n activeTag.hadChildren = true;\n attributedProperty = true;\n predicates.push(this.uriToNamedNode(propertyAttribute.uri + propertyAttribute.local));\n objects.push(this.dataFactory.literal(propertyAttribute.value, activeTag.datatype || activeTag.language));\n }\n }\n // Create the subject value _after_ all attributes have been processed\n if (activeSubSubjectValue !== null) {\n const subjectParent = activeTag.subject;\n activeTag.subject = subSubjectValueBlank\n ? this.dataFactory.blankNode(activeSubSubjectValue) : this.valueToUri(activeSubSubjectValue, activeTag);\n this.emitTriple(subjectParent, activeTag.predicate, activeTag.subject, activeTag.reifiedStatementId);\n // Emit our buffered triples\n for (let i = 0; i < predicates.length; i++) {\n this.emitTriple(activeTag.subject, predicates[i], objects[i], null);\n }\n activeTag.predicateEmitted = true;\n }\n else if (subSubjectValueBlank) {\n // The current property element has no defined subject\n // Let's buffer the properties until the child node defines a subject,\n // or if the tag closes.\n activeTag.predicateSubPredicates = predicates;\n activeTag.predicateSubObjects = objects;\n activeTag.predicateEmitted = false;\n }\n }\n /**\n * Emit the given triple to the stream.\n * @param {Term} subject A subject term.\n * @param {Term} predicate A predicate term.\n * @param {Term} object An object term.\n * @param {Term} statementId An optional resource that identifies the triple.\n * If truthy, then the given triple will also be emitted reified.\n */\n emitTriple(subject, predicate, object, statementId) {\n this.push(this.dataFactory.quad(subject, predicate, object, this.defaultGraph));\n // Reify triple\n if (statementId) {\n this.push(this.dataFactory.quad(statementId, this.dataFactory.namedNode(RdfXmlParser.RDF + 'type'), this.dataFactory.namedNode(RdfXmlParser.RDF + 'Statement'), this.defaultGraph));\n this.push(this.dataFactory.quad(statementId, this.dataFactory.namedNode(RdfXmlParser.RDF + 'subject'), subject, this.defaultGraph));\n this.push(this.dataFactory.quad(statementId, this.dataFactory.namedNode(RdfXmlParser.RDF + 'predicate'), predicate, this.defaultGraph));\n this.push(this.dataFactory.quad(statementId, this.dataFactory.namedNode(RdfXmlParser.RDF + 'object'), object, this.defaultGraph));\n }\n }\n /**\n * Register the given term as a node ID.\n * If one was already registered, this will emit an error.\n *\n * This is used to check duplicate occurrences of rdf:ID in scope of the baseIRI.\n * @param {Term} term An RDF term.\n */\n claimNodeId(term) {\n if (!this.allowDuplicateRdfIds) {\n if (this.nodeIds[term.value]) {\n throw this.newParseError(`Found multiple occurrences of rdf:ID='${term.value}'.`);\n }\n this.nodeIds[term.value] = true;\n }\n }\n /**\n * Handle the given text string.\n * @param {string} text A parsed text string.\n */\n onText(text) {\n const activeTag = this.activeTagStack.length\n ? this.activeTagStack[this.activeTagStack.length - 1] : null;\n if (activeTag) {\n if (activeTag.childrenStringTags) {\n activeTag.childrenStringTags.push(text);\n }\n else if (activeTag.predicate) {\n activeTag.text = text;\n }\n }\n }\n /**\n * Handle the closing of the last tag.\n */\n onCloseTag() {\n const poppedTag = this.activeTagStack.pop();\n // If we were converting a tag to a string, and the tag was not self-closing, close it here.\n if (poppedTag.childrenStringEmitClosingTag) {\n poppedTag.childrenStringTags.push(poppedTag.childrenStringEmitClosingTag);\n }\n // Set the literal value if we were collecting XML tags to string\n if (poppedTag.childrenTagsToString) {\n poppedTag.datatype = this.dataFactory.namedNode(RdfXmlParser.RDF + 'XMLLiteral');\n poppedTag.text = poppedTag.childrenStringTags.join('');\n poppedTag.hadChildren = false; // Force a literal triple to be emitted hereafter\n }\n if (poppedTag.childrenCollectionSubject) {\n // Terminate the rdf:List\n this.emitTriple(poppedTag.childrenCollectionSubject, poppedTag.childrenCollectionPredicate, this.dataFactory.namedNode(RdfXmlParser.RDF + 'nil'), poppedTag.reifiedStatementId);\n }\n else if (poppedTag.predicate) {\n if (!poppedTag.hadChildren && poppedTag.childrenParseType !== ParseType.PROPERTY) {\n // Property element contains text\n this.emitTriple(poppedTag.subject, poppedTag.predicate, this.dataFactory.literal(poppedTag.text || '', poppedTag.datatype || poppedTag.language), poppedTag.reifiedStatementId);\n }\n else if (!poppedTag.predicateEmitted) {\n // Emit remaining properties on an anonymous property element\n const subject = this.dataFactory.blankNode();\n this.emitTriple(poppedTag.subject, poppedTag.predicate, subject, poppedTag.reifiedStatementId);\n for (let i = 0; i < poppedTag.predicateSubPredicates.length; i++) {\n this.emitTriple(subject, poppedTag.predicateSubPredicates[i], poppedTag.predicateSubObjects[i], null);\n }\n }\n }\n }\n /**\n * Fetch local DOCTYPE ENTITY's and make the parser recognise them.\n * @param {string} doctype The read doctype.\n */\n onDoctype(doctype) {\n doctype.replace(/<!ENTITY\\s+([^\\s]+)\\s+[\"']([^\"']+)[\"']\\s*>/g, (match, prefix, uri) => {\n this.saxParser.ENTITIES[prefix] = uri;\n return '';\n });\n }\n}\nexports.RdfXmlParser = RdfXmlParser;\nRdfXmlParser.MIME_TYPE = 'application/rdf+xml';\nRdfXmlParser.RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\nRdfXmlParser.XML = 'http://www.w3.org/XML/1998/namespace';\nRdfXmlParser.FORBIDDEN_NODE_ELEMENTS = [\n 'RDF',\n 'ID',\n 'about',\n 'bagID',\n 'parseType',\n 'resource',\n 'nodeID',\n 'li',\n 'aboutEach',\n 'aboutEachPrefix',\n];\nRdfXmlParser.FORBIDDEN_PROPERTY_ELEMENTS = [\n 'Description',\n 'RDF',\n 'ID',\n 'about',\n 'bagID',\n 'parseType',\n 'resource',\n 'nodeID',\n 'aboutEach',\n 'aboutEachPrefix',\n];\n// tslint:disable-next-line:max-line-length\nRdfXmlParser.NCNAME_MATCHER = /^([A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\u{F8}-\\u{2FF}\\u{370}-\\u{37D}\\u{37F}-\\u{1FFF}\\u{200C}-\\u{200D}\\u{2070}-\\u{218F}\\u{2C00}-\\u{2FEF}\\u{3001}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFFD}\\u{10000}-\\u{EFFFF}_])([A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\u{F8}-\\u{2FF}\\u{370}-\\u{37D}\\u{37F}-\\u{1FFF}\\u{200C}-\\u{200D}\\u{2070}-\\u{218F}\\u{2C00}-\\u{2FEF}\\u{3001}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFFD}\\u{10000}-\\u{EFFFF}_\\-.0-9#xB7\\u{0300}-\\u{036F}\\u{203F}-\\u{2040}])*$/u;\nvar ParseType;\n(function (ParseType) {\n ParseType[ParseType[\"RESOURCE\"] = 0] = \"RESOURCE\";\n ParseType[ParseType[\"PROPERTY\"] = 1] = \"PROPERTY\";\n})(ParseType || (exports.ParseType = ParseType = {}));\n//# sourceMappingURL=RdfXmlParser.js.map","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 findInStore(store: N3.Store, subjectUri: string, predicates: string[]): 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 const en = quads.find(q => (q.object as N3.Literal).language === 'en');\n const noLang = quads.find(q => !(q.object as N3.Literal).language);\n return (en ?? noLang ?? 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":["async","loadContext","context","loadedUrls","Map","walk","definition","refChain","key","value","Object","entries","load","Array","isArray","definitions","mergePair","a","b","keys","length","result","k","v","currentContext","i","mergeContexts","Promise","all","map","e","includes","Error","join","newRefChain","slice","newContext","push","has","get","url","response","fetch","headers","Accept","json","jsonFetch","set","ns","base","local","SKOS","RDFS","DCT","DC","SDO","FOAF","labelPredicates","descriptionPredicates","RDF","XSD","SWAP","namespaces","xsd","decimal","boolean","double","integer","string","rdf","type","nil","first","rest","langString","owl","sameAs","r","forSome","forAll","log","implies","isImpliedBy","escapeSequence","escapeReplacements","n","t","f","_","$","illegalIriChars","lineModeRegExps","_iri","_unescapedIri","_simpleQuotedString","_langcode","_blank","_newline","_comment","_whitespace","_endOfFile","invalidRegExp","N3Lexer","constructor","options","this","_simpleApostropheString","_prefix","_prefixed","_variable","_number","_boolean","_keyword","_sparqlKeyword","_shortPredicates","_isImpliedBy","_lineMode","lineMode","_n3Mode","RegExp","n3","comments","_literalClosingPos","_tokenizeToEnd","callback","inputFinished","input","_input","currentLineLength","whiteSpaceMatch","comment","exec","emitToken","_line","substr","test","line","firstChar","prefix","match","matchLength","inconclusive","_previousMarker","_unescape","reportSyntaxError","_parseLiteral","toUpperCase","token","previousToken","start","end","self","_syntaxError","item","invalid","replaced","replace","sequence","unicode4","unicode8","escapedChar","String","fromCharCode","Number","parseInt","charCode","opening","openingLength","closingPos","Math","max","indexOf","backslashCount","raw","substring","lines","split","issue","err","undefined","_readStartingBom","startsWith","tokenize","tokens","error","queueMicrotask","_pendingBuffer","setEncoding","on","data","Buffer","concat","toString","DEFAULTGRAPH","_blankNodeCounter","DataFactory","namedNode","blankNode","variable","literal","defaultGraph","quad","triple","fromTerm","fromQuad","Term","id","equals","other","termType","hashCode","toJSON","Literal","lastIndexOf","language","atPos","toLowerCase","datatype","NamedNode","datatypeString","dtPos","char","name","super","termFromId","factory","nested","endPos","JSON","parse","termToId","term","res","subject","predicate","object","graph","stringify","_subject","_predicate","_object","_graph","iri","BlankNode","languageOrDataType","isFinite","isInteger","isNaN","Variable","Quad","inQuad","blankNodePrefix","N3Parser","_contextStack","_setBase","baseIRI","initDataFactory","format","isTurtle","isTriG","isNTriples","isNQuads","isN3","isLineMode","_supportsNamedGraphs","_readPredicateOrNamedGraph","_readPredicate","_supportsQuads","_supportsRDFStar","_resolveRelativeIRI","_blankNodePrefix","_lexer","lexer","_explicitQuantifiers","explicitQuantifiers","_resetBlankNodePrefix","fragmentPos","_base","_basePath","_baseRoot","_baseScheme","_saveContext","n3Mode","inverse","_inversePredicate","blankPrefix","_prefixes","quantified","_quantified","create","_restoreContext","pop","_error","_readInTopContext","_callback","_sparqlStyle","_readPrefix","_readBaseIRI","_readSubject","_readNamedGraphLabel","_readEntity","quantifier","_resolveIRI","_factory","_readBlankNodeHead","RDF_NIL","_readListItem","_readPunctuation","N3_FORSOME","_quantifier","_readQuantifierList","N3_FORALL","_literalValue","_completeSubjectLiteral","_getPathReader","ABBREVIATIONS","_readBlankNodeTail","_readObject","_readDataTypeOrLang","_getContextEndReader","_readGraph","_readBlankNodePunctuation","_emit","empty","_readPredicateAfterBlank","list","next","previousList","stack","parent","RDF_FIRST","_readListItemDataTypeOrLang","RDF_REST","_completeObjectLiteral","_completeLiteral","listItem","completed","_readCallback","_readFormulaTail","inversePredicate","_readQuadPunctuation","_readPrefixIRI","prefixNode","_prefixCallback","_readDeclarationPunctuation","_readNamedGraphBlankLabel","entity","QUANTIFIERS_GRAPH","_readQuantifierPunctuation","afterPath","_afterPath","_readPath","_readForwardPath","_readBackwardPath","_readRDFStarTailOrGraph","_readRDFStarTail","contextStack","message","noop","_removeDotSegments","pathStart","segmentStart","quadCallback","prefixCallback","onQuad","onPrefix","onComment","quads","every","processNextToken","parser","isDefaultGraph","escapeRegex","regex","prototype","N3DataFactory","BASE_UNSUPPORTED","SUFFIX_SUPPORTED","BaseIRI","_baseLength","_baseMatcher","_pathReplacements","supports","_getBaseMatcher","scheme","regexHead","regexTail","segments","segmenter","segment","query","fragment","last","lastIndex","repeat","toRelative","parentPath","suffix","escape","escapeAll","escapedCharacters","SerializedTerm","N3Writer","outputStream","_prefixRegex","write","_lists","lists","_outputStream","_endStream","output","chunk","encoding","done","_writeQuad","_writeQuadLine","_prefixIRIs","prefixes","addPrefixes","_baseIri","_inDefaultGraph","_write","_encodeIriOrBlank","_encodeObject","_encodePredicate","_encodeSubject","_prefixMatch","quadToString","quadsToString","quadsString","_encodeQuad","characterReplacer","prefixMatch","_encodeLiteral","_blockedWrite","addQuad","addQuads","addPrefix","hasPrefixes","IRIlist","prefixList","prefixIRI","blank","child","children","contents","elements","singleDone","character","charCodeAt","ITERATOR","Symbol","merge","target","source","depth","assign","intersect","s1","s2","intersection","difference","diff","N3EntityIndex","_id","_ids","_entities","_blankNodeIndex","_termFromId","entities","terms","_termToNumericId","s","p","o","g","_termToNewNumericId","str","createBlankNode","suggestedName","index","N3Store","_size","_graphs","_entityIndex","entityIndex","bind","addAll","size","graphs","subjects","graphKey","subjectKey","predicateKey","_addToIndex","index0","key0","key1","key2","index1","index2","existed","_removeFromIndex","_findInIndex","name0","name1","name2","graphId","tmp","entityKeys","parts","value0","value1","values","l","_loop","_loopByKey0","_loopByKey1","_loopBy2Keys","_countInIndex","count","_getGraphs","_uniqueEntities","uniqueIds","add","graphItem","predicates","objects","freeze","delete","removeQuad","subjectOrQuad","readQuads","import","stream","removeQuads","remove","removeMatches","Readable","objectMode","iterable","_read","deleteGraph","getQuads","content","subjectId","predicateId","objectId","DatasetCoreAndReadableStream","countQuads","forEach","some","getSubjects","results","forSubjects","getPredicates","forPredicates","getObjects","forObjects","getGraphs","forGraphs","extractLists","ignoreErrors","onError","node","tails","toRemove","tailQuad","items","head","headPos","malformed","current","objectQuads","subjectQuads","unshift","filtered","contains","g1","g2","p1","p2","o1","deleteMatches","store","filter","iteratee","reduce","initialValue","iter","accumulator","toArray","toCanonical","toStream","union","iterator","indexMatch","ids","ind","n3Store","_filtered","newStore","removeDotSegments","path","segmentBuffers","isCharacterAllowedAfterRelativePathSegment","buffer","removeDotSegmentsOfPath","colonPosition","searchOffset","pathSeparator","resolve","relativeIRI","baseFragmentPos","baseQueryPos","relativeColonPos","valueColonPos","valueSlashPos","baseColonPos","baseIRIScheme","baseSlashAfterColonPos","baseIRIPath","baseIRILastSlashPos","defineProperty","exports","CHAR","S","NAME_START_CHAR","NAME_CHAR","CHAR_RE","S_RE","NAME_START_CHAR_RE","NAME_CHAR_RE","NAME_RE","NMTOKEN_RE","isNameStartChar","c","S_LIST","isChar","isS","RESTRICTED_CHAR","RESTRICTED_CHAR_RE","isCharAndNotRestricted","saxes","SaxesParser","EVENTS","ed5","require$$0","ed2","require$$1","NSed3","isNCNameStartChar","NC_NAME_START_CHAR_RE","NC_NAME_START_CHAR","NC_NAME_CHAR_RE","NC_NAME_CHAR","NC_NAME_RE","isChar10","isNameChar","isChar11","isNCNameChar","XML_NAMESPACE","XMLNS_NAMESPACE","rootNS","__proto__","xml","XML_ENTITIES","gt","EOC","NL_LIKE","S_TEXT","S_XML_DECL_ENDING","NL","LESS","EQUAL","GREATER","CLOSE_BRACKET","DOCTYPE_TERMINATOR","QUOTES","DTD_TERMINATOR","XML_DECL_NAME_TERMINATOR","QUESTION","ATTRIB_VALUE_UNQUOTED_TERMINATOR","nsPairCheck","uri","fail","isNCName","isName","EVENT_NAME_TO_HANDLER_NAME","xmldecl","text","processinginstruction","opentagstart","closetag","cdata","ready","closed","_closed","opt","fragmentOpt","xmlnsOpt","xmlns","trackPosition","position","fileName","nameStartCheck","nameCheck","processAttribs","processAttribsNS","pushAttrib","pushAttribNS","additional","additionalNamespaces","mapping","nsMappingCheck","processAttribsPlain","pushAttribPlain","stateTable","sBegin","sBeginWhitespace","sDoctype","sDoctypeQuote","sDTD","sDTDQuoted","sDTDOpenWaka","sDTDOpenWakaBang","sDTDComment","sDTDCommentEnding","sDTDCommentEnded","sDTDPI","sDTDPIEnding","sText","sEntity","sOpenWaka","sOpenWakaBang","sComment","sCommentEnding","sCData","sCDataEnding","sCDataEnding2","sPIFirstChar","sPIRest","sPIBody","sPIEnding","sXMLDeclNameStart","sXMLDeclName","sXMLDeclEq","sXMLDeclValueStart","sXMLDeclValue","sXMLDeclSeparator","sXMLDeclEnding","sOpenTag","sOpenTagSlash","sAttribName","sAttribNameSawWhite","sAttribValueQuoted","sAttribValueClosed","sAttribValueUnquoted","sCloseTagSawWhite","_init","_a","openWakaBang","q","tags","tag","topNS","chunkPosition","prevI","carriedFromPrevious","forbiddenState","attribList","state","reportedTextBeforeRoot","reportedTextAfterRoot","closedRoot","sawRoot","xmlDeclPossible","xmlDeclExpects","entityReturnState","defaultXMLVersion","forceXMLVersion","setXMLVersion","positionAtNewLine","doctype","column","ENTITIES","readyHandler","call","columnIndex","handler","makeError","msg","limit","lastCode","close","code","final","captureTo","chars","getCode","isNLLike","captureToChar","getCodeNorm","version","currentXMLVersion","getCode10","getCode11","iBefore","skipSpaces","doctypeHandler","fromCodePoint","isQuote","owb","handleTextInRoot","handleTextOutsideRoot","parsed","parseEntity","textHandler","loop","unget","commentHandler","cdataHandler","piTarget","isQuestion","piHandler","body","xmlDecl","standalone","xmldeclHandler","captureNameChars","attributes","openTagStartHandler","openTag","openSelfClosingTag","ParseError_1","ParseError","hasRequiredBlankNode","BlankNode_1","DefaultGraph_1","DefaultGraph","hasRequiredNamedNode","NamedNode_1","hasRequiredLiteral","Literal_1","Literal$1","languageOrDatatype","RDF_LANGUAGE_STRING","XSD_STRING","Variable_1","DataFactory_1","require$$2","dataFactoryCounter","blankNodeCounter","Quad_1","original","validateIri","IriValidationStrategy","buildAbsoluteIriRfc3987Regex","pct_encoded","dec_octet","ipv4address","h16","ls32","iunreserved","sub_delims","isegment_nz","ipchar","isegment","PRAGMATIC_IRI_REGEX","requireRdfXmlParser","hasRequiredRdfXmlParser","RdfXmlParser_1","ParseType","RdfXmlParser","relative_to_absolute_iri_1","saxes_1","require$$3","rdf_data_factory_1","require$$4","validate_iri_1","require$$5","readable_stream_1","Transform","args","readableObjectMode","activeTagStack","nodeIds","dataFactory","validateUri","iriValidationStrategy","Pragmatic","None","saxParser","attachSaxListeners","PassThrough","emit","_transform","newParseError","activeTag","uriToNamedNode","uriValidationResult","validateNcname","onTag","onText","onCloseTag","onDoctype","parentTag","currentParseType","RESOURCE","hadChildren","childrenParseType","childrenStringTags","tagName","attributeKey","tagString","stringActiveTag","childrenStringEmitClosingTag","onTagResource","onTagProperty","rootTag","PROPERTY","typedNode","FORBIDDEN_NODE_ELEMENTS","claimSubjectNodeId","subjectValueBlank","explicitType","attribute","activeSubjectValue","XML","valueToUri","claimNodeId","emitTriple","reifiedStatementId","linkTerm","childrenCollectionSubject","childrenCollectionPredicate","predicateSubPredicates","predicateSubObjects","predicateEmitted","listItemCounter","FORBIDDEN_PROPERTY_ELEMENTS","parseType","attributedProperty","activeSubSubjectValue","propertyAttribute","propertyAttributeKey","subSubjectValueBlank","nestedBNode","childrenTagsToString","subjectParent","statementId","allowDuplicateRdfIds","MIME_TYPE","defaultFetchResourceOptions","fetchResourceCache","requestCache","N3_CONTENT_TYPES","Set","ACCEPT_HEADER","findInStore","subjectUri","subj","N3.DataFactory","predUri","en","find","noLang","parseTurtle","contentType","N3.Store","N3.Parser","reject","val","getSparqlQuery","fetchAndParse","fetchFn","ok","_b","trim","jsonldMod","then","_shim_jsonld$1","doc","toRDF","parseJsonLd","parseRdfXml","_c","fetchAndParseDocument","docUrl","findResourceInStore","storePromise","label","description","fetchResource","mergedOptions","isHashUri","instance","fallbackRainbowInstances","fallbackRainbowInstance","rainbowURL","URL","searchParams","rainbowUrlStr","endpoint","fallbackSparqlEndpoints","fallbackSparqlEndpoint","formBody","URLSearchParams","method","actualFetchResource","defaultAugmentOptions","replaceElements","augment","rootElem","resolveTerm","useVocab","useBase","closestVocab","closestBase","resolvedId","resolvedTerm","idx","localPart","resolvedPrefix","findLiteralChildren","elem","walker","document","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","nodeElem","classList","FILTER_REJECT","FILTER_SKIP","nextNode","updateElement","resourceUri","setAttribute","resourceData","elemToUpdate","querySelector","textContent","title","catch","console","cause","finally","link","createElement","href","firstChild","appendChild","augmentInner","propElems","FILTER_ACCEPT","cur","findPropertyChildren","propElem","propertyName","getAttribute","resolvedProperty","newContextStack","valueElem","parentElement","propertyUri","literalElem","resolvedLiteral","L","ldContext","popupOptions","maxWidth","augmentOptions","onEachFeature","userOnEachFeature","geoJSONOptions","geoJSON","feature","layer","bindTooltip","permanent","properties","container","propertiesField","createLevel","addHeaders","entry","span","table","innerHTML","tbody","row","keyCell","valueCell","wrapper","createPropertiesTable","bindPopup","resolvedContext"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}
1
+ {"version":3,"file":"jsonld-ui-utils-leaflet.min.js","sources":["../src/jsonld.ts","../src/constants.ts","../node_modules/n3/src/IRIs.js","../node_modules/n3/src/N3Lexer.js","../node_modules/n3/src/N3DataFactory.js","../node_modules/n3/src/N3Parser.js","../node_modules/n3/src/N3Util.js","../node_modules/n3/src/Util.js","../node_modules/n3/src/BaseIRI.js","../node_modules/n3/src/N3Writer.js","../node_modules/n3/src/N3Store.js","../node_modules/relative-to-absolute-iri/lib/Resolve.js","../node_modules/xmlchars/xml/1.0/ed5.js","../node_modules/xmlchars/xml/1.1/ed2.js","../node_modules/@rubensworks/saxes/saxes.js","../node_modules/xmlchars/xmlns/1.0/ed3.js","../node_modules/rdfxml-streaming-parser/lib/ParseError.js","../node_modules/rdf-data-factory/lib/BlankNode.js","../node_modules/rdf-data-factory/lib/DefaultGraph.js","../node_modules/rdf-data-factory/lib/NamedNode.js","../node_modules/rdf-data-factory/lib/Literal.js","../node_modules/rdf-data-factory/lib/Quad.js","../node_modules/rdf-data-factory/lib/Variable.js","../node_modules/rdf-data-factory/lib/DataFactory.js","../node_modules/validate-iri/lib/Validate.js","../node_modules/rdfxml-streaming-parser/lib/RdfXmlParser.js","../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];","const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n XSD = 'http://www.w3.org/2001/XMLSchema#',\n SWAP = 'http://www.w3.org/2000/10/swap/';\n\nexport default {\n xsd: {\n decimal: `${XSD}decimal`,\n boolean: `${XSD}boolean`,\n double: `${XSD}double`,\n integer: `${XSD}integer`,\n string: `${XSD}string`,\n },\n rdf: {\n type: `${RDF}type`,\n nil: `${RDF}nil`,\n first: `${RDF}first`,\n rest: `${RDF}rest`,\n langString: `${RDF}langString`,\n },\n owl: {\n sameAs: 'http://www.w3.org/2002/07/owl#sameAs',\n },\n r: {\n forSome: `${SWAP}reify#forSome`,\n forAll: `${SWAP}reify#forAll`,\n },\n log: {\n implies: `${SWAP}log#implies`,\n isImpliedBy: `${SWAP}log#isImpliedBy`,\n },\n};\n","// **N3Lexer** tokenizes N3 documents.\nimport { Buffer } from 'buffer';\nimport namespaces from './IRIs';\n\nconst { xsd } = namespaces;\n\n// Regular expression and replacement string to escape N3 strings\nconst escapeSequence = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{8})|\\\\([^])/g;\nconst escapeReplacements = {\n '\\\\': '\\\\', \"'\": \"'\", '\"': '\"',\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'f': '\\f', 'b': '\\b',\n '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&',\n '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';', '=': '=',\n '/': '/', '?': '?', '#': '#', '@': '@', '%': '%',\n};\nconst illegalIriChars = /[\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]/;\n\nconst lineModeRegExps = {\n _iri: true,\n _unescapedIri: true,\n _simpleQuotedString: true,\n _langcode: true,\n _blank: true,\n _newline: true,\n _comment: true,\n _whitespace: true,\n _endOfFile: true,\n};\nconst invalidRegExp = /$0^/;\n\n// ## Constructor\nexport default class N3Lexer {\n constructor(options) {\n // ## Regular expressions\n // It's slightly faster to have these as properties than as in-scope variables\n this._iri = /^<((?:[^ <>{}\\\\]|\\\\[uU])+)>[ \\t]*/; // IRI with escape sequences; needs sanity check after unescaping\n this._unescapedIri = /^<([^\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]*)>[ \\t]*/; // IRI without escape sequences; no unescaping\n this._simpleQuotedString = /^\"([^\"\\\\\\r\\n]*)\"(?=[^\"])/; // string without escape sequences\n this._simpleApostropheString = /^'([^'\\\\\\r\\n]*)'(?=[^'])/;\n this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9\\-])/i;\n this._prefix = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:(?=[#\\s<])/;\n this._prefixed = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:((?:(?:[0-:A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])(?:(?:[\\.\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])*(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~]))?)?)(?:[ \\t]+|(?=\\.?[,;!\\^\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._variable = /^\\?(?:(?:[A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/;\n this._blank = /^_:((?:[0-9A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?:[ \\t]+|(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._number = /^[\\-+]?(?:(\\d+\\.\\d*|\\.?\\d+)[eE][\\-+]?|\\d*(\\.)?)\\d+(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>])/;\n this._boolean = /^(?:true|false)(?=[.,;\\s#()\\[\\]\\{\\}\"'<>])/;\n this._keyword = /^@[a-z]+(?=[\\s#<:])/i;\n this._sparqlKeyword = /^(?:PREFIX|BASE|GRAPH)(?=[\\s#<])/i;\n this._shortPredicates = /^a(?=[\\s#()\\[\\]\\{\\}\"'<>])/;\n this._newline = /^[ \\t]*(?:#[^\\n\\r]*)?(?:\\r\\n|\\n|\\r)[ \\t]*/;\n this._comment = /#([^\\n\\r]*)/;\n this._whitespace = /^[ \\t]+/;\n this._endOfFile = /^(?:#[^\\n\\r]*)?$/;\n options = options || {};\n\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n\n // In line mode (N-Triples or N-Quads), only simple features may be parsed\n if (this._lineMode = !!options.lineMode) {\n this._n3Mode = false;\n // Don't tokenize special literals\n for (const key in this) {\n if (!(key in lineModeRegExps) && this[key] instanceof RegExp)\n this[key] = invalidRegExp;\n }\n }\n // When not in line mode, enable N3 functionality by default\n else {\n this._n3Mode = options.n3 !== false;\n }\n // Don't output comment tokens by default\n this.comments = !!options.comments;\n // Cache the last tested closing position of long literals\n this._literalClosingPos = 0;\n }\n\n // ## Private methods\n\n // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback\n _tokenizeToEnd(callback, inputFinished) {\n // Continue parsing as far as possible; the loop will return eventually\n let input = this._input;\n let currentLineLength = input.length;\n while (true) {\n // Count and skip whitespace lines\n let whiteSpaceMatch, comment;\n while (whiteSpaceMatch = this._newline.exec(input)) {\n // Try to find a comment\n if (this.comments && (comment = this._comment.exec(whiteSpaceMatch[0])))\n emitToken('comment', comment[1], '', this._line, whiteSpaceMatch[0].length);\n // Advance the input\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n currentLineLength = input.length;\n this._line++;\n }\n // Skip whitespace on current line\n if (!whiteSpaceMatch && (whiteSpaceMatch = this._whitespace.exec(input)))\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n\n // Stop for now if we're at the end\n if (this._endOfFile.test(input)) {\n // If the input is finished, emit EOF\n if (inputFinished) {\n // Try to find a final comment\n if (this.comments && (comment = this._comment.exec(input)))\n emitToken('comment', comment[1], '', this._line, input.length);\n input = null;\n emitToken('eof', '', '', this._line, 0);\n }\n return this._input = input;\n }\n\n // Look for specific token types based on the first character\n const line = this._line, firstChar = input[0];\n let type = '', value = '', prefix = '',\n match = null, matchLength = 0, inconclusive = false;\n switch (firstChar) {\n case '^':\n // We need at least 3 tokens lookahead to distinguish ^^<IRI> and ^^pre:fixed\n if (input.length < 3)\n break;\n // Try to match a type\n else if (input[1] === '^') {\n this._previousMarker = '^^';\n // Move to type IRI or prefixed name\n input = input.substr(2);\n if (input[0] !== '<') {\n inconclusive = true;\n break;\n }\n }\n // If no type, it must be a path expression\n else {\n if (this._n3Mode) {\n matchLength = 1;\n type = '^';\n }\n break;\n }\n // Fall through in case the type is an IRI\n case '<':\n // Try to find a full IRI without escape sequences\n if (match = this._unescapedIri.exec(input))\n type = 'IRI', value = match[1];\n // Try to find a full IRI with escape sequences\n else if (match = this._iri.exec(input)) {\n value = this._unescape(match[1]);\n if (value === null || illegalIriChars.test(value))\n return reportSyntaxError(this);\n type = 'IRI';\n }\n // Try to find a nested triple\n else if (input.length > 1 && input[1] === '<')\n type = '<<', matchLength = 2;\n // Try to find a backwards implication arrow\n else if (this._n3Mode && input.length > 1 && input[1] === '=') {\n matchLength = 2;\n if (this._isImpliedBy) type = 'abbreviation', value = '<';\n else type = 'inverse', value = '>';\n }\n break;\n\n case '>':\n if (input.length > 1 && input[1] === '>')\n type = '>>', matchLength = 2;\n break;\n\n case '_':\n // Try to find a blank node. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a blank node.\n // Therefore, try inserting a space if we're at the end of the input.\n if ((match = this._blank.exec(input)) ||\n inputFinished && (match = this._blank.exec(`${input} `)))\n type = 'blank', prefix = '_', value = match[1];\n break;\n\n case '\"':\n // Try to find a literal without escape sequences\n if (match = this._simpleQuotedString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n break;\n\n case \"'\":\n if (!this._lineMode) {\n // Try to find a literal without escape sequences\n if (match = this._simpleApostropheString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n }\n break;\n\n case '?':\n // Try to find a variable\n if (this._n3Mode && (match = this._variable.exec(input)))\n type = 'var', value = match[0];\n break;\n\n case '@':\n // Try to find a language code\n if (this._previousMarker === 'literal' && (match = this._langcode.exec(input)))\n type = 'langcode', value = match[1];\n // Try to find a keyword\n else if (match = this._keyword.exec(input))\n type = match[0];\n break;\n\n case '.':\n // Try to find a dot as punctuation\n if (input.length === 1 ? inputFinished : (input[1] < '0' || input[1] > '9')) {\n type = '.';\n matchLength = 1;\n break;\n }\n // Fall through to numerical case (could be a decimal dot)\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '+':\n case '-':\n // Try to find a number. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a number.\n // Therefore, try inserting a space if we're at the end of the input.\n if (match = this._number.exec(input) ||\n inputFinished && (match = this._number.exec(`${input} `))) {\n type = 'literal', value = match[0];\n prefix = (typeof match[1] === 'string' ? xsd.double :\n (typeof match[2] === 'string' ? xsd.decimal : xsd.integer));\n }\n break;\n\n case 'B':\n case 'b':\n case 'p':\n case 'P':\n case 'G':\n case 'g':\n // Try to find a SPARQL-style keyword\n if (match = this._sparqlKeyword.exec(input))\n type = match[0].toUpperCase();\n else\n inconclusive = true;\n break;\n\n case 'f':\n case 't':\n // Try to match a boolean\n if (match = this._boolean.exec(input))\n type = 'literal', value = match[0], prefix = xsd.boolean;\n else\n inconclusive = true;\n break;\n\n case 'a':\n // Try to find an abbreviated predicate\n if (match = this._shortPredicates.exec(input))\n type = 'abbreviation', value = 'a';\n else\n inconclusive = true;\n break;\n\n case '=':\n // Try to find an implication arrow or equals sign\n if (this._n3Mode && input.length > 1) {\n type = 'abbreviation';\n if (input[1] !== '>')\n matchLength = 1, value = '=';\n else\n matchLength = 2, value = '>';\n }\n break;\n\n case '!':\n if (!this._n3Mode)\n break;\n case ',':\n case ';':\n case '[':\n case ']':\n case '(':\n case ')':\n case '}':\n if (!this._lineMode) {\n matchLength = 1;\n type = firstChar;\n }\n break;\n case '{':\n // We need at least 2 tokens lookahead to distinguish \"{|\" and \"{ \"\n if (!this._lineMode && input.length >= 2) {\n // Try to find a quoted triple annotation start\n if (input[1] === '|')\n type = '{|', matchLength = 2;\n else\n type = firstChar, matchLength = 1;\n }\n break;\n case '|':\n // We need 2 tokens lookahead to parse \"|}\"\n // Try to find a quoted triple annotation end\n if (input.length >= 2 && input[1] === '}')\n type = '|}', matchLength = 2;\n break;\n\n default:\n inconclusive = true;\n }\n\n // Some first characters do not allow an immediate decision, so inspect more\n if (inconclusive) {\n // Try to find a prefix\n if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') &&\n (match = this._prefix.exec(input)))\n type = 'prefix', value = match[1] || '';\n // Try to find a prefixed name. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a prefixed name.\n // Therefore, try inserting a space if we're at the end of the input.\n else if ((match = this._prefixed.exec(input)) ||\n inputFinished && (match = this._prefixed.exec(`${input} `)))\n type = 'prefixed', prefix = match[1] || '', value = this._unescape(match[2]);\n }\n\n // A type token is special: it can only be emitted after an IRI or prefixed name is read\n if (this._previousMarker === '^^') {\n switch (type) {\n case 'prefixed': type = 'type'; break;\n case 'IRI': type = 'typeIRI'; break;\n default: type = '';\n }\n }\n\n // What if nothing of the above was found?\n if (!type) {\n // We could be in streaming mode, and then we just wait for more input to arrive.\n // Otherwise, a syntax error has occurred in the input.\n // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal).\n if (inputFinished || (!/^'''|^\"\"\"/.test(input) && /\\n|\\r/.test(input)))\n return reportSyntaxError(this);\n else\n return this._input = input;\n }\n\n // Emit the parsed token\n const length = matchLength || match[0].length;\n const token = emitToken(type, value, prefix, line, length);\n this.previousToken = token;\n this._previousMarker = type;\n\n // Advance to next part to tokenize\n input = input.substr(length, input.length);\n }\n\n // Emits the token through the callback\n function emitToken(type, value, prefix, line, length) {\n const start = input ? currentLineLength - input.length : currentLineLength;\n const end = start + length;\n const token = { type, value, prefix, line, start, end };\n callback(null, token);\n return token;\n }\n // Signals the syntax error through the callback\n function reportSyntaxError(self) { callback(self._syntaxError(/^\\S*/.exec(input)[0])); }\n }\n\n // ### `_unescape` replaces N3 escape codes by their corresponding characters\n _unescape(item) {\n let invalid = false;\n const replaced = item.replace(escapeSequence, (sequence, unicode4, unicode8, escapedChar) => {\n // 4-digit unicode character\n if (typeof unicode4 === 'string')\n return String.fromCharCode(Number.parseInt(unicode4, 16));\n // 8-digit unicode character\n if (typeof unicode8 === 'string') {\n let charCode = Number.parseInt(unicode8, 16);\n return charCode <= 0xFFFF ? String.fromCharCode(Number.parseInt(unicode8, 16)) :\n String.fromCharCode(0xD800 + ((charCode -= 0x10000) >> 10), 0xDC00 + (charCode & 0x3FF));\n }\n // fixed escape sequence\n if (escapedChar in escapeReplacements)\n return escapeReplacements[escapedChar];\n // invalid escape sequence\n invalid = true;\n return '';\n });\n return invalid ? null : replaced;\n }\n\n // ### `_parseLiteral` parses a literal into an unescaped value\n _parseLiteral(input) {\n // Ensure we have enough lookahead to identify triple-quoted strings\n if (input.length >= 3) {\n // Identify the opening quote(s)\n const opening = input.match(/^(?:\"\"\"|\"|'''|'|)/)[0];\n const openingLength = opening.length;\n\n // Find the next candidate closing quotes\n let closingPos = Math.max(this._literalClosingPos, openingLength);\n while ((closingPos = input.indexOf(opening, closingPos)) > 0) {\n // Count backslashes right before the closing quotes\n let backslashCount = 0;\n while (input[closingPos - backslashCount - 1] === '\\\\')\n backslashCount++;\n\n // An even number of backslashes (in particular 0)\n // means these are actual, non-escaped closing quotes\n if (backslashCount % 2 === 0) {\n // Extract and unescape the value\n const raw = input.substring(openingLength, closingPos);\n const lines = raw.split(/\\r\\n|\\r|\\n/).length - 1;\n const matchLength = closingPos + openingLength;\n // Only triple-quoted strings can be multi-line\n if (openingLength === 1 && lines !== 0 ||\n openingLength === 3 && this._lineMode)\n break;\n this._line += lines;\n return { value: this._unescape(raw), matchLength };\n }\n closingPos++;\n }\n this._literalClosingPos = input.length - openingLength + 1;\n }\n return { value: '', matchLength: 0 };\n }\n\n // ### `_syntaxError` creates a syntax error for the given issue\n _syntaxError(issue) {\n this._input = null;\n const err = new Error(`Unexpected \"${issue}\" on line ${this._line}.`);\n err.context = {\n token: undefined,\n line: this._line,\n previousToken: this.previousToken,\n };\n return err;\n }\n\n // ### Strips off any starting UTF BOM mark.\n _readStartingBom(input) {\n return input.startsWith('\\ufeff') ? input.substr(1) : input;\n }\n\n // ## Public methods\n\n // ### `tokenize` starts the transformation of an N3 document into an array of tokens.\n // The input can be a string or a stream.\n tokenize(input, callback) {\n this._line = 1;\n\n // If the input is a string, continuously emit tokens through the callback until the end\n if (typeof input === 'string') {\n this._input = this._readStartingBom(input);\n // If a callback was passed, asynchronously call it\n if (typeof callback === 'function')\n queueMicrotask(() => this._tokenizeToEnd(callback, true));\n // If no callback was passed, tokenize synchronously and return\n else {\n const tokens = [];\n let error;\n this._tokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true);\n if (error) throw error;\n return tokens;\n }\n }\n // Otherwise, the input must be a stream\n else {\n this._pendingBuffer = null;\n if (typeof input.setEncoding === 'function')\n input.setEncoding('utf8');\n // Adds the data chunk to the buffer and parses as far as possible\n input.on('data', data => {\n if (this._input !== null && data.length !== 0) {\n // Prepend any previous pending writes\n if (this._pendingBuffer) {\n data = Buffer.concat([this._pendingBuffer, data]);\n this._pendingBuffer = null;\n }\n // Hold if the buffer ends in an incomplete unicode sequence\n if (data[data.length - 1] & 0x80) {\n this._pendingBuffer = data;\n }\n // Otherwise, tokenize as far as possible\n else {\n // Only read a BOM at the start\n if (typeof this._input === 'undefined')\n this._input = this._readStartingBom(typeof data === 'string' ? data : data.toString());\n else\n this._input += data;\n this._tokenizeToEnd(callback, false);\n }\n }\n });\n // Parses until the end\n input.on('end', () => {\n if (typeof this._input === 'string')\n this._tokenizeToEnd(callback, true);\n });\n input.on('error', callback);\n }\n }\n}\n","// N3.js implementations of the RDF/JS core data types\n// See http://rdf.js.org/data-model-spec/\n\nimport namespaces from './IRIs';\n\nconst { rdf, xsd } = namespaces;\n\n// eslint-disable-next-line prefer-const\nlet DEFAULTGRAPH;\nlet _blankNodeCounter = 0;\n\nconst escapedLiteral = /^\"(.*\".*)(?=\"[^\"]*$)/;\n\n// ## DataFactory singleton\nconst DataFactory = {\n namedNode,\n blankNode,\n variable,\n literal,\n defaultGraph,\n quad,\n triple: quad,\n fromTerm,\n fromQuad,\n};\nexport default DataFactory;\n\n// ## Term constructor\nexport class Term {\n constructor(id) {\n this.id = id;\n }\n\n // ### The value of this term\n get value() {\n return this.id;\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through ids\n if (other instanceof Term)\n return this.id === other.id;\n // Otherwise, compare term type and value\n return !!other && this.termType === other.termType &&\n this.value === other.value;\n }\n\n // ### Implement hashCode for Immutable.js, since we implement `equals`\n // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode()\n hashCode() {\n return 0;\n }\n\n // ### Returns a plain object representation of this term\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n };\n }\n}\n\n\n// ## NamedNode constructor\nexport class NamedNode extends Term {\n // ### The term type of this term\n get termType() {\n return 'NamedNode';\n }\n}\n\n// ## Literal constructor\nexport class Literal extends Term {\n // ### The term type of this term\n get termType() {\n return 'Literal';\n }\n\n // ### The text value of this literal\n get value() {\n return this.id.substring(1, this.id.lastIndexOf('\"'));\n }\n\n // ### The language of this literal\n get language() {\n // Find the last quotation mark (e.g., '\"abc\"@en-us')\n const id = this.id;\n let atPos = id.lastIndexOf('\"') + 1;\n // If \"@\" it follows, return the remaining substring; empty otherwise\n return atPos < id.length && id[atPos++] === '@' ? id.substr(atPos).toLowerCase() : '';\n }\n\n // ### The datatype IRI of this literal\n get datatype() {\n return new NamedNode(this.datatypeString);\n }\n\n // ### The datatype string of this literal\n get datatypeString() {\n // Find the last quotation mark (e.g., '\"abc\"^^http://ex.org/types#t')\n const id = this.id, dtPos = id.lastIndexOf('\"') + 1;\n const char = dtPos < id.length ? id[dtPos] : '';\n // If \"^\" it follows, return the remaining substring\n return char === '^' ? id.substr(dtPos + 2) :\n // If \"@\" follows, return rdf:langString; xsd:string otherwise\n (char !== '@' ? xsd.string : rdf.langString);\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both literals were created by this library,\n // equality can be computed through ids\n if (other instanceof Literal)\n return this.id === other.id;\n // Otherwise, compare term type, value, language, and datatype\n return !!other && !!other.datatype &&\n this.termType === other.termType &&\n this.value === other.value &&\n this.language === other.language &&\n this.datatype.value === other.datatype.value;\n }\n\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n language: this.language,\n datatype: { termType: 'NamedNode', value: this.datatypeString },\n };\n }\n}\n\n// ## BlankNode constructor\nexport class BlankNode extends Term {\n constructor(name) {\n super(`_:${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'BlankNode';\n }\n\n // ### The name of this blank node\n get value() {\n return this.id.substr(2);\n }\n}\n\nexport class Variable extends Term {\n constructor(name) {\n super(`?${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Variable';\n }\n\n // ### The name of this variable\n get value() {\n return this.id.substr(1);\n }\n}\n\n// ## DefaultGraph constructor\nexport class DefaultGraph extends Term {\n constructor() {\n super('');\n return DEFAULTGRAPH || this;\n }\n\n // ### The term type of this term\n get termType() {\n return 'DefaultGraph';\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through strict equality;\n // otherwise, compare term types.\n return (this === other) || (!!other && (this.termType === other.termType));\n }\n}\n\n// ## DefaultGraph singleton\nDEFAULTGRAPH = new DefaultGraph();\n\n// ### Constructs a term from the given internal string ID\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termFromId(id, factory, nested) {\n factory = factory || DataFactory;\n\n // Falsy value or empty string indicate the default graph\n if (!id)\n return factory.defaultGraph();\n\n // Identify the term type based on the first character\n switch (id[0]) {\n case '?':\n return factory.variable(id.substr(1));\n case '_':\n return factory.blankNode(id.substr(2));\n case '\"':\n // Shortcut for internal literals\n if (factory === DataFactory)\n return new Literal(id);\n // Literal without datatype or language\n if (id[id.length - 1] === '\"')\n return factory.literal(id.substr(1, id.length - 2));\n // Literal with datatype or language\n const endPos = id.lastIndexOf('\"', id.length - 1);\n return factory.literal(id.substr(1, endPos - 1),\n id[endPos + 1] === '@' ? id.substr(endPos + 2)\n : factory.namedNode(id.substr(endPos + 3)));\n case '[':\n id = JSON.parse(id);\n break;\n default:\n if (!nested || !Array.isArray(id)) {\n return factory.namedNode(id);\n }\n }\n return factory.quad(\n termFromId(id[0], factory, true),\n termFromId(id[1], factory, true),\n termFromId(id[2], factory, true),\n id[3] && termFromId(id[3], factory, true),\n );\n}\n\n// ### Constructs an internal string ID from the given term or ID string\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termToId(term, nested) {\n if (typeof term === 'string')\n return term;\n if (term instanceof Term && term.termType !== 'Quad')\n return term.id;\n if (!term)\n return DEFAULTGRAPH.id;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return term.value;\n case 'BlankNode': return `_:${term.value}`;\n case 'Variable': return `?${term.value}`;\n case 'DefaultGraph': return '';\n case 'Literal': return `\"${term.value}\"${\n term.language ? `@${term.language}` :\n (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`;\n case 'Quad':\n const res = [\n termToId(term.subject, true),\n termToId(term.predicate, true),\n termToId(term.object, true),\n ];\n if (term.graph && term.graph.termType !== 'DefaultGraph') {\n res.push(termToId(term.graph, true));\n }\n return nested ? res : JSON.stringify(res);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\n\n// ## Quad constructor\nexport class Quad extends Term {\n constructor(subject, predicate, object, graph) {\n super('');\n this._subject = subject;\n this._predicate = predicate;\n this._object = object;\n this._graph = graph || DEFAULTGRAPH;\n }\n\n // ### The term type of this term\n get termType() {\n return 'Quad';\n }\n\n get subject() {\n return this._subject;\n }\n\n get predicate() {\n return this._predicate;\n }\n\n get object() {\n return this._object;\n }\n\n get graph() {\n return this._graph;\n }\n\n // ### Returns a plain object representation of this quad\n toJSON() {\n return {\n termType: this.termType,\n subject: this._subject.toJSON(),\n predicate: this._predicate.toJSON(),\n object: this._object.toJSON(),\n graph: this._graph.toJSON(),\n };\n }\n\n // ### Returns whether this object represents the same quad as the other\n equals(other) {\n return !!other && this._subject.equals(other.subject) &&\n this._predicate.equals(other.predicate) &&\n this._object.equals(other.object) &&\n this._graph.equals(other.graph);\n }\n}\nexport { Quad as Triple };\n\n// ### Escapes the quotes within the given literal\nexport function escapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"/g, '\"\"')}`);\n}\n\n// ### Unescapes the quotes within the given literal\nexport function unescapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"\"/g, '\"')}`);\n}\n\n// ### Creates an IRI\nfunction namedNode(iri) {\n return new NamedNode(iri);\n}\n\n// ### Creates a blank node\nfunction blankNode(name) {\n return new BlankNode(name || `n3-${_blankNodeCounter++}`);\n}\n\n// ### Creates a literal\nfunction literal(value, languageOrDataType) {\n // Create a language-tagged string\n if (typeof languageOrDataType === 'string')\n return new Literal(`\"${value}\"@${languageOrDataType.toLowerCase()}`);\n\n // Automatically determine datatype for booleans and numbers\n let datatype = languageOrDataType ? languageOrDataType.value : '';\n if (datatype === '') {\n // Convert a boolean\n if (typeof value === 'boolean')\n datatype = xsd.boolean;\n // Convert an integer or double\n else if (typeof value === 'number') {\n if (Number.isFinite(value))\n datatype = Number.isInteger(value) ? xsd.integer : xsd.double;\n else {\n datatype = xsd.double;\n if (!Number.isNaN(value))\n value = value > 0 ? 'INF' : '-INF';\n }\n }\n }\n\n // Create a datatyped literal\n return (datatype === '' || datatype === xsd.string) ?\n new Literal(`\"${value}\"`) :\n new Literal(`\"${value}\"^^${datatype}`);\n}\n\n// ### Creates a variable\nfunction variable(name) {\n return new Variable(name);\n}\n\n// ### Returns the default graph\nfunction defaultGraph() {\n return DEFAULTGRAPH;\n}\n\n// ### Creates a quad\nfunction quad(subject, predicate, object, graph) {\n return new Quad(subject, predicate, object, graph);\n}\n\nexport function fromTerm(term) {\n if (term instanceof Term)\n return term;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return namedNode(term.value);\n case 'BlankNode': return blankNode(term.value);\n case 'Variable': return variable(term.value);\n case 'DefaultGraph': return DEFAULTGRAPH;\n case 'Literal': return literal(term.value, term.language || term.datatype);\n case 'Quad': return fromQuad(term);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\nexport function fromQuad(inQuad) {\n if (inQuad instanceof Quad)\n return inQuad;\n\n if (inQuad.termType !== 'Quad')\n throw new Error(`Unexpected termType: ${inQuad.termType}`);\n\n return quad(fromTerm(inQuad.subject), fromTerm(inQuad.predicate), fromTerm(inQuad.object), fromTerm(inQuad.graph));\n}\n","// **N3Parser** parses N3 documents.\nimport N3Lexer from './N3Lexer';\nimport N3DataFactory from './N3DataFactory';\nimport namespaces from './IRIs';\n\nlet blankNodePrefix = 0;\n\n// ## Constructor\nexport default class N3Parser {\n constructor(options) {\n this._contextStack = [];\n this._graph = null;\n\n // Set the document IRI\n options = options || {};\n this._setBase(options.baseIRI);\n options.factory && initDataFactory(this, options.factory);\n\n // Set supported features depending on the format\n const format = (typeof options.format === 'string') ?\n options.format.match(/\\w*$/)[0].toLowerCase() : '',\n isTurtle = /turtle/.test(format), isTriG = /trig/.test(format),\n isNTriples = /triple/.test(format), isNQuads = /quad/.test(format),\n isN3 = this._n3Mode = /n3/.test(format),\n isLineMode = isNTriples || isNQuads;\n if (!(this._supportsNamedGraphs = !(isTurtle || isN3)))\n this._readPredicateOrNamedGraph = this._readPredicate;\n // Support triples in other graphs\n this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n // Support nesting of triples\n this._supportsRDFStar = format === '' || /star|\\*$/.test(format);\n // Disable relative IRIs in N-Triples or N-Quads mode\n if (isLineMode)\n this._resolveRelativeIRI = iri => { return null; };\n this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' :\n options.blankNodePrefix.replace(/^(?!_:)/, '_:');\n this._lexer = options.lexer || new N3Lexer({ lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy });\n // Disable explicit quantifiers by default\n this._explicitQuantifiers = !!options.explicitQuantifiers;\n }\n\n // ## Static class methods\n\n // ### `_resetBlankNodePrefix` restarts blank node prefix identification\n static _resetBlankNodePrefix() {\n blankNodePrefix = 0;\n }\n\n // ## Private methods\n\n // ### `_setBase` sets the base IRI to resolve relative IRIs\n _setBase(baseIRI) {\n if (!baseIRI) {\n this._base = '';\n this._basePath = '';\n }\n else {\n // Remove fragment if present\n const fragmentPos = baseIRI.indexOf('#');\n if (fragmentPos >= 0)\n baseIRI = baseIRI.substr(0, fragmentPos);\n // Set base IRI and its components\n this._base = baseIRI;\n this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI :\n baseIRI.replace(/[^\\/?]*(?:\\?.*)?$/, '');\n baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(?:\\/\\/[^\\/]*)?/i);\n this._baseRoot = baseIRI[0];\n this._baseScheme = baseIRI[1];\n }\n }\n\n // ### `_saveContext` stores the current parsing context\n // when entering a new scope (list, blank node, formula)\n _saveContext(type, graph, subject, predicate, object) {\n const n3Mode = this._n3Mode;\n this._contextStack.push({\n type,\n subject, predicate, object, graph,\n inverse: n3Mode ? this._inversePredicate : false,\n blankPrefix: n3Mode ? this._prefixes._ : '',\n quantified: n3Mode ? this._quantified : null,\n });\n // The settings below only apply to N3 streams\n if (n3Mode) {\n // Every new scope resets the predicate direction\n this._inversePredicate = false;\n // In N3, blank nodes are scoped to a formula\n // (using a dot as separator, as a blank node label cannot start with it)\n this._prefixes._ = (this._graph ? `${this._graph.value}.` : '.');\n // Quantifiers are scoped to a formula\n this._quantified = Object.create(this._quantified);\n }\n }\n\n // ### `_restoreContext` restores the parent context\n // when leaving a scope (list, blank node, formula)\n _restoreContext(type, token) {\n // Obtain the previous context\n const context = this._contextStack.pop();\n if (!context || context.type !== type)\n return this._error(`Unexpected ${token.type}`, token);\n\n // Restore the quad of the previous context\n this._subject = context.subject;\n this._predicate = context.predicate;\n this._object = context.object;\n this._graph = context.graph;\n\n // Restore N3 context settings\n if (this._n3Mode) {\n this._inversePredicate = context.inverse;\n this._prefixes._ = context.blankPrefix;\n this._quantified = context.quantified;\n }\n }\n\n // ### `_readInTopContext` reads a token when in the top context\n _readInTopContext(token) {\n switch (token.type) {\n // If an EOF token arrives in the top context, signal that we're done\n case 'eof':\n if (this._graph !== null)\n return this._error('Unclosed graph', token);\n delete this._prefixes._;\n return this._callback(null, null, this._prefixes);\n // It could be a prefix declaration\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n // It could be a base declaration\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n // It could be a graph\n case '{':\n if (this._supportsNamedGraphs) {\n this._graph = '';\n this._subject = null;\n return this._readSubject;\n }\n case 'GRAPH':\n if (this._supportsNamedGraphs)\n return this._readNamedGraphLabel;\n // Otherwise, the next token must be a subject\n default:\n return this._readSubject(token);\n }\n }\n\n // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable\n _readEntity(token, quantifier) {\n let value;\n switch (token.type) {\n // Read a relative or absolute IRI\n case 'IRI':\n case 'typeIRI':\n const iri = this._resolveIRI(token.value);\n if (iri === null)\n return this._error('Invalid IRI', token);\n value = this._factory.namedNode(iri);\n break;\n // Read a prefixed name\n case 'type':\n case 'prefixed':\n const prefix = this._prefixes[token.prefix];\n if (prefix === undefined)\n return this._error(`Undefined prefix \"${token.prefix}:\"`, token);\n value = this._factory.namedNode(prefix + token.value);\n break;\n // Read a blank node\n case 'blank':\n value = this._factory.blankNode(this._prefixes[token.prefix] + token.value);\n break;\n // Read a variable\n case 'var':\n value = this._factory.variable(token.value.substr(1));\n break;\n // Everything else is not an entity\n default:\n return this._error(`Expected entity but got ${token.type}`, token);\n }\n // In N3 mode, replace the entity if it is quantified\n if (!quantifier && this._n3Mode && (value.id in this._quantified))\n value = this._quantified[value.id];\n return value;\n }\n\n // ### `_readSubject` reads a quad's subject\n _readSubject(token) {\n this._predicate = null;\n switch (token.type) {\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph,\n this._subject = this._factory.blankNode(), null, null);\n return this._readBlankNodeHead;\n case '(':\n // Start a new list\n this._saveContext('list', this._graph, this.RDF_NIL, null, null);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph,\n this._graph = this._factory.blankNode(), null, null);\n return this._readSubject;\n case '}':\n // No subject; the graph in which we are reading is closed instead\n return this._readPunctuation(token);\n case '@forSome':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forSome\"', token);\n this._subject = null;\n this._predicate = this.N3_FORSOME;\n this._quantifier = 'blankNode';\n return this._readQuantifierList;\n case '@forAll':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forAll\"', token);\n this._subject = null;\n this._predicate = this.N3_FORALL;\n this._quantifier = 'variable';\n return this._readQuantifierList;\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completeSubjectLiteral;\n }\n else\n this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n\n break;\n case '<<':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n this._saveContext('<<', this._graph, null, null, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the subject entity\n if ((this._subject = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the subject might be a path\n if (this._n3Mode)\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n\n // The next token must be a predicate,\n // or, if the subject was actually a graph IRI, a named graph\n return this._readPredicateOrNamedGraph;\n }\n\n // ### `_readPredicate` reads a quad's predicate\n _readPredicate(token) {\n const type = token.type;\n switch (type) {\n case 'inverse':\n this._inversePredicate = true;\n case 'abbreviation':\n this._predicate = this.ABBREVIATIONS[token.value];\n break;\n case '.':\n case ']':\n case '}':\n // Expected predicate didn't come, must have been trailing semicolon\n if (this._predicate === null)\n return this._error(`Unexpected ${type}`, token);\n this._subject = null;\n return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token);\n case ';':\n // Additional semicolons can be safely ignored\n return this._predicate !== null ? this._readPredicate :\n this._error('Expected predicate but got ;', token);\n case '[':\n if (this._n3Mode) {\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject,\n this._subject = this._factory.blankNode(), null);\n return this._readBlankNodeHead;\n }\n case 'blank':\n if (!this._n3Mode)\n return this._error('Disallowed blank node as predicate', token);\n default:\n if ((this._predicate = this._readEntity(token)) === undefined)\n return;\n }\n // The next token must be an object\n return this._readObject;\n }\n\n // ### `_readObject` reads a quad's object\n _readObject(token) {\n switch (token.type) {\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._readDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else\n this._object = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n break;\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject, this._predicate,\n this._subject = this._factory.blankNode());\n return this._readBlankNodeHead;\n case '(':\n // Start a new list\n this._saveContext('list', this._graph, this._subject, this._predicate, this.RDF_NIL);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n case '<<':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n this._saveContext('<<', this._graph, this._subject, this._predicate, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the object entity\n if ((this._object = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the object might be a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n return this._getContextEndReader();\n }\n\n // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph\n _readPredicateOrNamedGraph(token) {\n return token.type === '{' ? this._readGraph(token) : this._readPredicate(token);\n }\n\n // ### `_readGraph` reads a graph\n _readGraph(token) {\n if (token.type !== '{')\n return this._error(`Expected graph but got ${token.type}`, token);\n // The \"subject\" we read is actually the GRAPH's label\n this._graph = this._subject, this._subject = null;\n return this._readSubject;\n }\n\n // ### `_readBlankNodeHead` reads the head of a blank node\n _readBlankNodeHead(token) {\n if (token.type === ']') {\n this._subject = null;\n return this._readBlankNodeTail(token);\n }\n else {\n this._predicate = null;\n return this._readPredicate(token);\n }\n }\n\n // ### `_readBlankNodeTail` reads the end of a blank node\n _readBlankNodeTail(token) {\n if (token.type !== ']')\n return this._readBlankNodePunctuation(token);\n\n // Store blank node quad\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this blank node\n const empty = this._predicate === null;\n this._restoreContext('blank', token);\n // If the blank node was the object, restore previous context and read punctuation\n if (this._object !== null)\n return this._getContextEndReader();\n // If the blank node was the predicate, continue reading the object\n else if (this._predicate !== null)\n return this._readObject;\n // If the blank node was the subject, continue reading the predicate\n else\n // If the blank node was empty, it could be a named graph label\n return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank;\n }\n\n // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node\n _readPredicateAfterBlank(token) {\n switch (token.type) {\n case '.':\n case '}':\n // No predicate is coming if the triple is terminated here\n this._subject = null;\n return this._readPunctuation(token);\n default:\n return this._readPredicate(token);\n }\n }\n\n // ### `_readListItem` reads items from a list\n _readListItem(token) {\n let item = null, // The item of the list\n list = null, // The list itself\n next = this._readListItem; // The next function to execute\n const previousList = this._subject, // The previous list that contains this list\n stack = this._contextStack, // The stack of parent contexts\n parent = stack[stack.length - 1]; // The parent containing the current list\n\n switch (token.type) {\n case '[':\n // Stack the current list quad and start a new quad with a blank node as subject\n this._saveContext('blank', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST,\n this._subject = item = this._factory.blankNode());\n next = this._readBlankNodeHead;\n break;\n case '(':\n // Stack the current list quad and start a new list\n this._saveContext('list', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST, this.RDF_NIL);\n this._subject = null;\n break;\n case ')':\n // Closing the list; restore the parent context\n this._restoreContext('list', token);\n // If this list is contained within a parent list, return the membership quad here.\n // This will be `<parent list element> rdf:first <this list>.`.\n if (stack.length !== 0 && stack[stack.length - 1].type === 'list')\n this._emit(this._subject, this._predicate, this._object, this._graph);\n // Was this list the parent's subject?\n if (this._predicate === null) {\n // The next token is the predicate\n next = this._readPredicate;\n // No list tail if this was an empty list\n if (this._subject === this.RDF_NIL)\n return next;\n }\n // The list was in the parent context's object\n else {\n next = this._getContextEndReader();\n // No list tail if this was an empty list\n if (this._object === this.RDF_NIL)\n return next;\n }\n // Close the list by making the head nil\n list = this.RDF_NIL;\n break;\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n next = this._readListItemDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n item = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n next = this._getContextEndReader();\n }\n break;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n default:\n if ((item = this._readEntity(token)) === undefined)\n return;\n }\n\n // Create a new blank node if no item head was assigned yet\n if (list === null)\n this._subject = list = this._factory.blankNode();\n\n // Is this the first element of the list?\n if (previousList === null) {\n // This list is either the subject or the object of its parent\n if (parent.predicate === null)\n parent.subject = list;\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // If an item was read, add it to the list\n if (item !== null) {\n // In N3 mode, the item might be a path\n if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed')) {\n // Create a new context to add the item's path\n this._saveContext('item', this._graph, list, this.RDF_FIRST, item);\n this._subject = item, this._predicate = null;\n // _readPath will restore the context and output the item\n return this._getPathReader(this._readListItem);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n }\n return next;\n }\n\n // ### `_readDataTypeOrLang` reads an _optional_ datatype or language\n _readDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, false);\n }\n\n\n // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list\n _readListItemDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, true);\n }\n\n // ### `_completeLiteral` completes a literal with an optional datatype or language\n _completeLiteral(token) {\n // Create a simple string literal by default\n let literal = this._factory.literal(this._literalValue);\n\n switch (token.type) {\n // Create a datatyped literal\n case 'type':\n case 'typeIRI':\n const datatype = this._readEntity(token);\n if (datatype === undefined) return; // No datatype means an error occurred\n literal = this._factory.literal(this._literalValue, datatype);\n token = null;\n break;\n // Create a language-tagged string\n case 'langcode':\n literal = this._factory.literal(this._literalValue, token.value);\n token = null;\n break;\n }\n\n return { token, literal };\n }\n\n // Completes a literal in subject position\n _completeSubjectLiteral(token) {\n this._subject = this._completeLiteral(token).literal;\n return this._readPredicateOrNamedGraph;\n }\n\n // Completes a literal in object position\n _completeObjectLiteral(token, listItem) {\n const completed = this._completeLiteral(token);\n if (!completed)\n return;\n this._object = completed.literal;\n\n // If this literal was part of a list, write the item\n // (we could also check the context stack, but passing in a flag is faster)\n if (listItem)\n this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);\n // If the token was consumed, continue with the rest of the input\n if (completed.token === null)\n return this._getContextEndReader();\n // Otherwise, consume the token now\n else {\n this._readCallback = this._getContextEndReader();\n return this._readCallback(completed.token);\n }\n }\n\n // ### `_readFormulaTail` reads the end of a formula\n _readFormulaTail(token) {\n if (token.type !== '}')\n return this._readPunctuation(token);\n\n // Store the last quad of the formula\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this formula\n this._restoreContext('formula', token);\n // If the formula was the subject, continue reading the predicate.\n // If the formula was the object, read punctuation.\n return this._object === null ? this._readPredicate : this._getContextEndReader();\n }\n\n // ### `_readPunctuation` reads punctuation between quads or quad parts\n _readPunctuation(token) {\n let next, graph = this._graph;\n const subject = this._subject, inversePredicate = this._inversePredicate;\n switch (token.type) {\n // A closing brace ends a graph\n case '}':\n if (this._graph === null)\n return this._error('Unexpected graph closing', token);\n if (this._n3Mode)\n return this._readFormulaTail(token);\n this._graph = null;\n // A dot just ends the statement, without sharing anything with the next\n case '.':\n this._subject = null;\n next = this._contextStack.length ? this._readSubject : this._readInTopContext;\n if (inversePredicate) this._inversePredicate = false;\n break;\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // {| means that the current triple is annotated with predicate-object pairs.\n case '{|':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n // Continue using the last triple as quoted triple subject for the predicate-object pairs.\n const predicate = this._predicate, object = this._object;\n this._subject = this._factory.quad(subject, predicate, object, this.DEFAULTGRAPH);\n next = this._readPredicate;\n break;\n // |} means that the current quoted triple in annotation syntax is finalized.\n case '|}':\n if (this._subject.termType !== 'Quad')\n return this._error('Unexpected asserted triple closing', token);\n this._subject = null;\n next = this._readPunctuation;\n break;\n default:\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) {\n next = this._readQuadPunctuation;\n break;\n }\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n if (subject !== null) {\n const predicate = this._predicate, object = this._object;\n if (!inversePredicate)\n this._emit(subject, predicate, object, graph);\n else\n this._emit(object, predicate, subject, graph);\n }\n return next;\n }\n\n // ### `_readBlankNodePunctuation` reads punctuation in a blank node\n _readBlankNodePunctuation(token) {\n let next;\n switch (token.type) {\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n default:\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n this._emit(this._subject, this._predicate, this._object, this._graph);\n return next;\n }\n\n // ### `_readQuadPunctuation` reads punctuation after a quad\n _readQuadPunctuation(token) {\n if (token.type !== '.')\n return this._error('Expected dot to follow quad', token);\n return this._readInTopContext;\n }\n\n // ### `_readPrefix` reads the prefix of a prefix declaration\n _readPrefix(token) {\n if (token.type !== 'prefix')\n return this._error('Expected prefix to follow @prefix', token);\n this._prefix = token.value;\n return this._readPrefixIRI;\n }\n\n // ### `_readPrefixIRI` reads the IRI of a prefix declaration\n _readPrefixIRI(token) {\n if (token.type !== 'IRI')\n return this._error(`Expected IRI to follow prefix \"${this._prefix}:\"`, token);\n const prefixNode = this._readEntity(token);\n this._prefixes[this._prefix] = prefixNode.value;\n this._prefixCallback(this._prefix, prefixNode);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readBaseIRI` reads the IRI of a base declaration\n _readBaseIRI(token) {\n const iri = token.type === 'IRI' && this._resolveIRI(token.value);\n if (!iri)\n return this._error('Expected valid IRI to follow base declaration', token);\n this._setBase(iri);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readNamedGraphLabel` reads the label of a named graph\n _readNamedGraphLabel(token) {\n switch (token.type) {\n case 'IRI':\n case 'blank':\n case 'prefixed':\n return this._readSubject(token), this._readGraph;\n case '[':\n return this._readNamedGraphBlankLabel;\n default:\n return this._error('Invalid graph label', token);\n }\n }\n\n // ### `_readNamedGraphLabel` reads a blank node label of a named graph\n _readNamedGraphBlankLabel(token) {\n if (token.type !== ']')\n return this._error('Invalid graph label', token);\n this._subject = this._factory.blankNode();\n return this._readGraph;\n }\n\n // ### `_readDeclarationPunctuation` reads the punctuation of a declaration\n _readDeclarationPunctuation(token) {\n // SPARQL-style declarations don't have punctuation\n if (this._sparqlStyle) {\n this._sparqlStyle = false;\n return this._readInTopContext(token);\n }\n\n if (token.type !== '.')\n return this._error('Expected declaration to end with a dot', token);\n return this._readInTopContext;\n }\n\n // Reads a list of quantified symbols from a @forSome or @forAll statement\n _readQuantifierList(token) {\n let entity;\n switch (token.type) {\n case 'IRI':\n case 'prefixed':\n if ((entity = this._readEntity(token, true)) !== undefined)\n break;\n default:\n return this._error(`Unexpected ${token.type}`, token);\n }\n // Without explicit quantifiers, map entities to a quantified entity\n if (!this._explicitQuantifiers)\n this._quantified[entity.id] = this._factory[this._quantifier](this._factory.blankNode().value);\n // With explicit quantifiers, output the reified quantifier\n else {\n // If this is the first item, start a new quantifier list\n if (this._subject === null)\n this._emit(this._graph || this.DEFAULTGRAPH, this._predicate,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Otherwise, continue the previous list\n else\n this._emit(this._subject, this.RDF_REST,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH);\n }\n return this._readQuantifierPunctuation;\n }\n\n // Reads punctuation from a @forSome or @forAll statement\n _readQuantifierPunctuation(token) {\n // Read more quantifiers\n if (token.type === ',')\n return this._readQuantifierList;\n // End of the quantifier list\n else {\n // With explicit quantifiers, close the quantifier list\n if (this._explicitQuantifiers) {\n this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH);\n this._subject = null;\n }\n // Read a dot\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_getPathReader` reads a potential path and then resumes with the given function\n _getPathReader(afterPath) {\n this._afterPath = afterPath;\n return this._readPath;\n }\n\n // ### `_readPath` reads a potential path\n _readPath(token) {\n switch (token.type) {\n // Forward path\n case '!': return this._readForwardPath;\n // Backward path\n case '^': return this._readBackwardPath;\n // Not a path; resume reading where we left off\n default:\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n // If we were reading a list item, we still need to output it\n if (parent && parent.type === 'item') {\n // The list item is the remaining subejct after reading the path\n const item = this._subject;\n // Switch back to the context of the list\n this._restoreContext('item', token);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, item, this._graph);\n }\n return this._afterPath(token);\n }\n }\n\n // ### `_readForwardPath` reads a '!' path\n _readForwardPath(token) {\n let subject, predicate;\n const object = this._factory.blankNode();\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's object\n if (this._predicate === null)\n subject = this._subject, this._subject = object;\n // If we were reading an object, replace the subject by the path's object\n else\n subject = this._object, this._object = object;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readBackwardPath` reads a '^' path\n _readBackwardPath(token) {\n const subject = this._factory.blankNode();\n let predicate, object;\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's subject\n if (this._predicate === null)\n object = this._subject, this._subject = subject;\n // If we were reading an object, replace the subject by the path's subject\n else\n object = this._object, this._object = subject;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readRDFStarTailOrGraph` reads the graph of a nested RDF-star quad or the end of a nested RDF-star triple\n _readRDFStarTailOrGraph(token) {\n if (token.type !== '>>') {\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (this._graph = this._readEntity(token)) !== undefined)\n return this._readRDFStarTail;\n return this._error(`Expected >> to follow \"${this._object.id}\"`, token);\n }\n return this._readRDFStarTail(token);\n }\n\n // ### `_readRDFStarTail` reads the end of a nested RDF-star triple\n _readRDFStarTail(token) {\n if (token.type !== '>>')\n return this._error(`Expected >> but got ${token.type}`, token);\n // Read the quad and restore the previous context\n const quad = this._factory.quad(this._subject, this._predicate, this._object,\n this._graph || this.DEFAULTGRAPH);\n this._restoreContext('<<', token);\n // If the triple was the subject, continue by reading the predicate.\n if (this._subject === null) {\n this._subject = quad;\n return this._readPredicate;\n }\n // If the triple was the object, read context end.\n else {\n this._object = quad;\n return this._getContextEndReader();\n }\n }\n\n // ### `_getContextEndReader` gets the next reader function at the end of a context\n _getContextEndReader() {\n const contextStack = this._contextStack;\n if (!contextStack.length)\n return this._readPunctuation;\n\n switch (contextStack[contextStack.length - 1].type) {\n case 'blank':\n return this._readBlankNodeTail;\n case 'list':\n return this._readListItem;\n case 'formula':\n return this._readFormulaTail;\n case '<<':\n return this._readRDFStarTailOrGraph;\n }\n }\n\n // ### `_emit` sends a quad through the callback\n _emit(subject, predicate, object, graph) {\n this._callback(null, this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH));\n }\n\n // ### `_error` emits an error message through the callback\n _error(message, token) {\n const err = new Error(`${message} on line ${token.line}.`);\n err.context = {\n token: token,\n line: token.line,\n previousToken: this._lexer.previousToken,\n };\n this._callback(err);\n this._callback = noop;\n }\n\n // ### `_resolveIRI` resolves an IRI against the base path\n _resolveIRI(iri) {\n return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri);\n }\n\n // ### `_resolveRelativeIRI` resolves an IRI against the base path,\n // assuming that a base path has been set and that the IRI is indeed relative\n _resolveRelativeIRI(iri) {\n // An empty relative IRI indicates the base IRI\n if (!iri.length)\n return this._base;\n // Decide resolving strategy based in the first character\n switch (iri[0]) {\n // Resolve relative fragment IRIs against the base IRI\n case '#': return this._base + iri;\n // Resolve relative query string IRIs by replacing the query string\n case '?': return this._base.replace(/(?:\\?.*)?$/, iri);\n // Resolve root-relative IRIs at the root of the base IRI\n case '/':\n // Resolve scheme-relative IRIs to the scheme\n return (iri[1] === '/' ? this._baseScheme : this._baseRoot) + this._removeDotSegments(iri);\n // Resolve all other IRIs at the base IRI's path\n default:\n // Relative IRIs cannot contain a colon in the first path segment\n return (/^[^/:]*:/.test(iri)) ? null : this._removeDotSegments(this._basePath + iri);\n }\n }\n\n // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986\n _removeDotSegments(iri) {\n // Don't modify the IRI if it does not contain any dot segments\n if (!/(^|\\/)\\.\\.?($|[/#?])/.test(iri))\n return iri;\n\n // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../'\n const length = iri.length;\n let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/';\n\n while (i < length) {\n switch (next) {\n // The path starts with the first slash after the authority\n case ':':\n if (pathStart < 0) {\n // Skip two slashes before the authority\n if (iri[++i] === '/' && iri[++i] === '/')\n // Skip to slash after the authority\n while ((pathStart = i + 1) < length && iri[pathStart] !== '/')\n i = pathStart;\n }\n break;\n // Don't modify a query string or fragment\n case '?':\n case '#':\n i = length;\n break;\n // Handle '/.' or '/..' path segments\n case '/':\n if (iri[i + 1] === '.') {\n next = iri[++i + 1];\n switch (next) {\n // Remove a '/.' segment\n case '/':\n result += iri.substring(segmentStart, i - 1);\n segmentStart = i + 1;\n break;\n // Remove a trailing '/.' segment\n case undefined:\n case '?':\n case '#':\n return result + iri.substring(segmentStart, i) + iri.substr(i + 1);\n // Remove a '/..' segment\n case '.':\n next = iri[++i + 1];\n if (next === undefined || next === '/' || next === '?' || next === '#') {\n result += iri.substring(segmentStart, i - 2);\n // Try to remove the parent path from result\n if ((segmentStart = result.lastIndexOf('/')) >= pathStart)\n result = result.substr(0, segmentStart);\n // Remove a trailing '/..' segment\n if (next !== '/')\n return `${result}/${iri.substr(i + 1)}`;\n segmentStart = i + 1;\n }\n }\n }\n }\n next = iri[++i];\n }\n return result + iri.substring(segmentStart);\n }\n\n // ## Public methods\n\n // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.\n parse(input, quadCallback, prefixCallback) {\n // The second parameter accepts an object { onQuad: ..., onPrefix: ..., onComment: ...}\n // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well\n let onQuad, onPrefix, onComment;\n if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment)) {\n onQuad = quadCallback.onQuad;\n onPrefix = quadCallback.onPrefix;\n onComment = quadCallback.onComment;\n }\n else {\n onQuad = quadCallback;\n onPrefix = prefixCallback;\n }\n // The read callback is the next function to be executed when a token arrives.\n // We start reading in the top context.\n this._readCallback = this._readInTopContext;\n this._sparqlStyle = false;\n this._prefixes = Object.create(null);\n this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)\n : `b${blankNodePrefix++}_`;\n this._prefixCallback = onPrefix || noop;\n this._inversePredicate = false;\n this._quantified = Object.create(null);\n\n // Parse synchronously if no quad callback is given\n if (!onQuad) {\n const quads = [];\n let error;\n this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); };\n this._lexer.tokenize(input).every(token => {\n return this._readCallback = this._readCallback(token);\n });\n if (error) throw error;\n return quads;\n }\n\n let processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback)\n this._readCallback = this._readCallback(token);\n };\n\n // Enable checking for comments on every token when a commentCallback has been set\n if (onComment) {\n // Enable the lexer to return comments as tokens first (disabled by default)\n this._lexer.comments = true;\n // Patch the processNextToken function\n processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback) {\n if (token.type === 'comment')\n onComment(token.value);\n else\n this._readCallback = this._readCallback(token);\n }\n };\n }\n\n // Parse asynchronously otherwise, executing the read callback when a token arrives\n this._callback = onQuad;\n this._lexer.tokenize(input, processNextToken);\n }\n}\n\n// The empty function\nfunction noop() {}\n\n// Initializes the parser with the given data factory\nfunction initDataFactory(parser, factory) {\n parser._factory = factory;\n\n parser.DEFAULTGRAPH = factory.defaultGraph();\n\n // Set common named nodes\n parser.RDF_FIRST = factory.namedNode(namespaces.rdf.first);\n parser.RDF_REST = factory.namedNode(namespaces.rdf.rest);\n parser.RDF_NIL = factory.namedNode(namespaces.rdf.nil);\n parser.N3_FORALL = factory.namedNode(namespaces.r.forAll);\n parser.N3_FORSOME = factory.namedNode(namespaces.r.forSome);\n parser.ABBREVIATIONS = {\n 'a': factory.namedNode(namespaces.rdf.type),\n '=': factory.namedNode(namespaces.owl.sameAs),\n '>': factory.namedNode(namespaces.log.implies),\n '<': factory.namedNode(namespaces.log.isImpliedBy),\n };\n parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');\n}\ninitDataFactory(N3Parser.prototype, N3DataFactory);\n","// **N3Util** provides N3 utility functions.\n\nimport N3DataFactory from './N3DataFactory';\n\n// Tests whether the given term represents an IRI\nexport function isNamedNode(term) {\n return !!term && term.termType === 'NamedNode';\n}\n\n// Tests whether the given term represents a blank node\nexport function isBlankNode(term) {\n return !!term && term.termType === 'BlankNode';\n}\n\n// Tests whether the given term represents a literal\nexport function isLiteral(term) {\n return !!term && term.termType === 'Literal';\n}\n\n// Tests whether the given term represents a variable\nexport function isVariable(term) {\n return !!term && term.termType === 'Variable';\n}\n\n// Tests whether the given term represents a quad\nexport function isQuad(term) {\n return !!term && term.termType === 'Quad';\n}\n\n// Tests whether the given term represents the default graph\nexport function isDefaultGraph(term) {\n return !!term && term.termType === 'DefaultGraph';\n}\n\n// Tests whether the given quad is in the default graph\nexport function inDefaultGraph(quad) {\n return isDefaultGraph(quad.graph);\n}\n\n// Creates a function that prepends the given IRI to a local name\nexport function prefix(iri, factory) {\n return prefixes({ '': iri.value || iri }, factory)('');\n}\n\n// Creates a function that allows registering and expanding prefixes\nexport function prefixes(defaultPrefixes, factory) {\n // Add all of the default prefixes\n const prefixes = Object.create(null);\n for (const prefix in defaultPrefixes)\n processPrefix(prefix, defaultPrefixes[prefix]);\n // Set the default factory if none was specified\n factory = factory || N3DataFactory;\n\n // Registers a new prefix (if an IRI was specified)\n // or retrieves a function that expands an existing prefix (if no IRI was specified)\n function processPrefix(prefix, iri) {\n // Create a new prefix if an IRI is specified or the prefix doesn't exist\n if (typeof iri === 'string') {\n // Create a function that expands the prefix\n const cache = Object.create(null);\n prefixes[prefix] = local => {\n return cache[local] || (cache[local] = factory.namedNode(iri + local));\n };\n }\n else if (!(prefix in prefixes)) {\n throw new Error(`Unknown prefix: ${prefix}`);\n }\n return prefixes[prefix];\n }\n return processPrefix;\n}\n","export function escapeRegex(regex) {\n return regex.replace(/[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n}\n","import { escapeRegex } from './Util';\n\n// Do not handle base IRIs without scheme, and currently unsupported cases:\n// - file: IRIs (which could also use backslashes)\n// - IRIs containing /. or /.. or //\nconst BASE_UNSUPPORTED = /^:?[^:?#]*(?:[?#]|$)|^file:|^[^:]*:\\/*[^?#]+?\\/(?:\\.\\.?(?:\\/|$)|\\/)/i;\nconst SUFFIX_SUPPORTED = /^(?:(?:[^/?#]{3,}|\\.?[^/?#.]\\.?)(?:\\/[^/?#]{3,}|\\.?[^/?#.]\\.?)*\\/?)?(?:[?#]|$)/;\nconst CURRENT = './';\nconst PARENT = '../';\nconst QUERY = '?';\nconst FRAGMENT = '#';\n\nexport default class BaseIRI {\n constructor(base) {\n this.base = base;\n this._baseLength = 0;\n this._baseMatcher = null;\n this._pathReplacements = new Array(base.length + 1);\n }\n\n static supports(base) {\n return !BASE_UNSUPPORTED.test(base);\n }\n\n _getBaseMatcher() {\n if (this._baseMatcher)\n return this._baseMatcher;\n if (!BaseIRI.supports(this.base))\n return this._baseMatcher = /.^/;\n\n // Extract the scheme\n const scheme = /^[^:]*:\\/*/.exec(this.base)[0];\n const regexHead = ['^', escapeRegex(scheme)];\n const regexTail = [];\n\n // Generate a regex for every path segment\n const segments = [], segmenter = /[^/?#]*([/?#])/y;\n let segment, query = 0, fragment = 0, last = segmenter.lastIndex = scheme.length;\n while (!query && !fragment && (segment = segmenter.exec(this.base))) {\n // Truncate base resolution path at fragment start\n if (segment[1] === FRAGMENT)\n fragment = segmenter.lastIndex - 1;\n else {\n // Create regex that matches the segment\n regexHead.push(escapeRegex(segment[0]), '(?:');\n regexTail.push(')?');\n\n // Create dedicated query string replacement\n if (segment[1] !== QUERY)\n segments.push(last = segmenter.lastIndex);\n else {\n query = last = segmenter.lastIndex;\n fragment = this.base.indexOf(FRAGMENT, query);\n this._pathReplacements[query] = QUERY;\n }\n }\n }\n\n // Precalculate parent path substitutions\n for (let i = 0; i < segments.length; i++)\n this._pathReplacements[segments[i]] = PARENT.repeat(segments.length - i - 1);\n this._pathReplacements[segments[segments.length - 1]] = CURRENT;\n\n // Add the remainder of the base IRI (without fragment) to the regex\n this._baseLength = fragment > 0 ? fragment : this.base.length;\n regexHead.push(\n escapeRegex(this.base.substring(last, this._baseLength)),\n query ? '(?:#|$)' : '(?:[?#]|$)',\n );\n return this._baseMatcher = new RegExp([...regexHead, ...regexTail].join(''));\n }\n\n toRelative(iri) {\n // Unsupported or non-matching base IRI\n const match = this._getBaseMatcher().exec(iri);\n if (!match)\n return iri;\n\n // Exact base IRI match\n const length = match[0].length;\n if (length === this._baseLength && length === iri.length)\n return '';\n\n // Parent path match\n const parentPath = this._pathReplacements[length];\n if (parentPath) {\n const suffix = iri.substring(length);\n // Don't abbreviate unsupported path\n if (parentPath !== QUERY && !SUFFIX_SUPPORTED.test(suffix))\n return iri;\n // Omit ./ with fragment or query string\n if (parentPath === CURRENT && /^[^?#]/.test(suffix))\n return suffix;\n // Append suffix to relative parent path\n return parentPath + suffix;\n }\n\n // Fragment or query string, so include delimiter\n return iri.substring(length - 1);\n }\n}\n","// **N3Writer** writes N3 documents.\nimport namespaces from './IRIs';\nimport { default as N3DataFactory, Term } from './N3DataFactory';\nimport { isDefaultGraph } from './N3Util';\nimport BaseIRI from './BaseIRI';\nimport { escapeRegex } from './Util';\n\nconst DEFAULTGRAPH = N3DataFactory.defaultGraph();\n\nconst { rdf, xsd } = namespaces;\n\n// Characters in literals that require escaping\nconst escape = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019\\ud800-\\udbff]/,\n escapeAll = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\ud800-\\udbff][\\udc00-\\udfff]/g,\n escapedCharacters = {\n '\\\\': '\\\\\\\\', '\"': '\\\\\"', '\\t': '\\\\t',\n '\\n': '\\\\n', '\\r': '\\\\r', '\\b': '\\\\b', '\\f': '\\\\f',\n };\n\n// ## Placeholder class to represent already pretty-printed terms\nclass SerializedTerm extends Term {\n // Pretty-printed nodes are not equal to any other node\n // (e.g., [] does not equal [])\n equals(other) {\n return other === this;\n }\n}\n\n// ## Constructor\nexport default class N3Writer {\n constructor(outputStream, options) {\n // ### `_prefixRegex` matches a prefixed name or IRI that begins with one of the added prefixes\n this._prefixRegex = /$0^/;\n\n // Shift arguments if the first argument is not a stream\n if (outputStream && typeof outputStream.write !== 'function')\n options = outputStream, outputStream = null;\n options = options || {};\n this._lists = options.lists;\n\n // If no output stream given, send the output as string through the end callback\n if (!outputStream) {\n let output = '';\n this._outputStream = {\n write(chunk, encoding, done) { output += chunk; done && done(); },\n end: done => { done && done(null, output); },\n };\n this._endStream = true;\n }\n else {\n this._outputStream = outputStream;\n this._endStream = options.end === undefined ? true : !!options.end;\n }\n\n // Initialize writer, depending on the format\n this._subject = null;\n if (!(/triple|quad/i).test(options.format)) {\n this._lineMode = false;\n this._graph = DEFAULTGRAPH;\n this._prefixIRIs = Object.create(null);\n options.prefixes && this.addPrefixes(options.prefixes);\n if (options.baseIRI) {\n this._baseIri = new BaseIRI(options.baseIRI);\n }\n }\n else {\n this._lineMode = true;\n this._writeQuad = this._writeQuadLine;\n }\n }\n\n // ## Private methods\n\n // ### Whether the current graph is the default graph\n get _inDefaultGraph() {\n return DEFAULTGRAPH.equals(this._graph);\n }\n\n // ### `_write` writes the argument to the output stream\n _write(string, callback) {\n this._outputStream.write(string, 'utf8', callback);\n }\n\n // ### `_writeQuad` writes the quad to the output stream\n _writeQuad(subject, predicate, object, graph, done) {\n try {\n // Write the graph's label if it has changed\n if (!graph.equals(this._graph)) {\n // Close the previous graph and start the new one\n this._write((this._subject === null ? '' : (this._inDefaultGraph ? '.\\n' : '\\n}\\n')) +\n (DEFAULTGRAPH.equals(graph) ? '' : `${this._encodeIriOrBlank(graph)} {\\n`));\n this._graph = graph;\n this._subject = null;\n }\n // Don't repeat the subject if it's the same\n if (subject.equals(this._subject)) {\n // Don't repeat the predicate if it's the same\n if (predicate.equals(this._predicate))\n this._write(`, ${this._encodeObject(object)}`, done);\n // Same subject, different predicate\n else\n this._write(`;\\n ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n // Different subject; write the whole quad\n else\n this._write(`${(this._subject === null ? '' : '.\\n') +\n this._encodeSubject(this._subject = subject)} ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n catch (error) { done && done(error); }\n }\n\n // ### `_writeQuadLine` writes the quad to the output stream as a single line\n _writeQuadLine(subject, predicate, object, graph, done) {\n // Write the quad without prefixes\n delete this._prefixMatch;\n this._write(this.quadToString(subject, predicate, object, graph), done);\n }\n\n // ### `quadToString` serializes a quad as a string\n quadToString(subject, predicate, object, graph) {\n return `${this._encodeSubject(subject)} ${\n this._encodeIriOrBlank(predicate)} ${\n this._encodeObject(object)\n }${graph && graph.value ? ` ${this._encodeIriOrBlank(graph)} .\\n` : ' .\\n'}`;\n }\n\n // ### `quadsToString` serializes an array of quads as a string\n quadsToString(quads) {\n let quadsString = '';\n for (const quad of quads)\n quadsString += this.quadToString(quad.subject, quad.predicate, quad.object, quad.graph);\n return quadsString;\n }\n\n // ### `_encodeSubject` represents a subject\n _encodeSubject(entity) {\n return entity.termType === 'Quad' ?\n this._encodeQuad(entity) : this._encodeIriOrBlank(entity);\n }\n\n // ### `_encodeIriOrBlank` represents an IRI or blank node\n _encodeIriOrBlank(entity) {\n // A blank node or list is represented as-is\n if (entity.termType !== 'NamedNode') {\n // If it is a list head, pretty-print it\n if (this._lists && (entity.value in this._lists))\n entity = this.list(this._lists[entity.value]);\n return 'id' in entity ? entity.id : `_:${entity.value}`;\n }\n let iri = entity.value;\n // Use relative IRIs if requested and possible\n if (this._baseIri) {\n iri = this._baseIri.toRelative(iri);\n }\n // Escape special characters\n if (escape.test(iri))\n iri = iri.replace(escapeAll, characterReplacer);\n // Try to represent the IRI as prefixed name\n const prefixMatch = this._prefixRegex.exec(iri);\n return !prefixMatch ? `<${iri}>` :\n (!prefixMatch[1] ? iri : this._prefixIRIs[prefixMatch[1]] + prefixMatch[2]);\n }\n\n // ### `_encodeLiteral` represents a literal\n _encodeLiteral(literal) {\n // Escape special characters\n let value = literal.value;\n if (escape.test(value))\n value = value.replace(escapeAll, characterReplacer);\n\n // Write a language-tagged literal\n if (literal.language)\n return `\"${value}\"@${literal.language}`;\n\n // Write dedicated literals per data type\n if (this._lineMode) {\n // Only abbreviate strings in N-Triples or N-Quads\n if (literal.datatype.value === xsd.string)\n return `\"${value}\"`;\n }\n else {\n // Use common datatype abbreviations in Turtle or TriG\n switch (literal.datatype.value) {\n case xsd.string:\n return `\"${value}\"`;\n case xsd.boolean:\n if (value === 'true' || value === 'false')\n return value;\n break;\n case xsd.integer:\n if (/^[+-]?\\d+$/.test(value))\n return value;\n break;\n case xsd.decimal:\n if (/^[+-]?\\d*\\.\\d+$/.test(value))\n return value;\n break;\n case xsd.double:\n if (/^[+-]?(?:\\d+\\.\\d*|\\.?\\d+)[eE][+-]?\\d+$/.test(value))\n return value;\n break;\n }\n }\n\n // Write a regular datatyped literal\n return `\"${value}\"^^${this._encodeIriOrBlank(literal.datatype)}`;\n }\n\n // ### `_encodePredicate` represents a predicate\n _encodePredicate(predicate) {\n return predicate.value === rdf.type ? 'a' : this._encodeIriOrBlank(predicate);\n }\n\n // ### `_encodeObject` represents an object\n _encodeObject(object) {\n switch (object.termType) {\n case 'Quad':\n return this._encodeQuad(object);\n case 'Literal':\n return this._encodeLiteral(object);\n default:\n return this._encodeIriOrBlank(object);\n }\n }\n\n // ### `_encodeQuad` encodes an RDF-star quad\n _encodeQuad({ subject, predicate, object, graph }) {\n return `<<${\n this._encodeSubject(subject)} ${\n this._encodePredicate(predicate)} ${\n this._encodeObject(object)}${\n isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`}>>`;\n }\n\n // ### `_blockedWrite` replaces `_write` after the writer has been closed\n _blockedWrite() {\n throw new Error('Cannot write because the writer has been closed.');\n }\n\n // ### `addQuad` adds the quad to the output stream\n addQuad(subject, predicate, object, graph, done) {\n // The quad was given as an object, so shift parameters\n if (object === undefined)\n this._writeQuad(subject.subject, subject.predicate, subject.object, subject.graph, predicate);\n // The optional `graph` parameter was not provided\n else if (typeof graph === 'function')\n this._writeQuad(subject, predicate, object, DEFAULTGRAPH, graph);\n // The `graph` parameter was provided\n else\n this._writeQuad(subject, predicate, object, graph || DEFAULTGRAPH, done);\n }\n\n // ### `addQuads` adds the quads to the output stream\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `addPrefix` adds the prefix to the output stream\n addPrefix(prefix, iri, done) {\n const prefixes = {};\n prefixes[prefix] = iri;\n this.addPrefixes(prefixes, done);\n }\n\n // ### `addPrefixes` adds the prefixes to the output stream\n addPrefixes(prefixes, done) {\n // Ignore prefixes if not supported by the serialization\n if (!this._prefixIRIs)\n return done && done();\n\n // Write all new prefixes\n let hasPrefixes = false;\n for (let prefix in prefixes) {\n let iri = prefixes[prefix];\n if (typeof iri !== 'string')\n iri = iri.value;\n hasPrefixes = true;\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null, this._graph = '';\n }\n // Store and write the prefix\n this._prefixIRIs[iri] = (prefix += ':');\n this._write(`@prefix ${prefix} <${iri}>.\\n`);\n }\n // Recreate the prefix matcher\n if (hasPrefixes) {\n let IRIlist = '', prefixList = '';\n for (const prefixIRI in this._prefixIRIs) {\n IRIlist += IRIlist ? `|${prefixIRI}` : prefixIRI;\n prefixList += (prefixList ? '|' : '') + this._prefixIRIs[prefixIRI];\n }\n IRIlist = escapeRegex(IRIlist, /[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n this._prefixRegex = new RegExp(`^(?:${prefixList})[^\\/]*$|` +\n `^(${IRIlist})([_a-zA-Z0-9][\\\\-_a-zA-Z0-9]*)$`);\n }\n // End a prefix block with a newline\n this._write(hasPrefixes ? '\\n' : '', done);\n }\n\n // ### `blank` creates a blank node with the given content\n blank(predicate, object) {\n let children = predicate, child, length;\n // Empty blank node\n if (predicate === undefined)\n children = [];\n // Blank node passed as blank(Term(\"predicate\"), Term(\"object\"))\n else if (predicate.termType)\n children = [{ predicate: predicate, object: object }];\n // Blank node passed as blank({ predicate: predicate, object: object })\n else if (!('length' in predicate))\n children = [predicate];\n\n switch (length = children.length) {\n // Generate an empty blank node\n case 0:\n return new SerializedTerm('[]');\n // Generate a non-nested one-triple blank node\n case 1:\n child = children[0];\n if (!(child.object instanceof SerializedTerm))\n return new SerializedTerm(`[ ${this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)} ]`);\n // Generate a multi-triple or nested blank node\n default:\n let contents = '[';\n // Write all triples in order\n for (let i = 0; i < length; i++) {\n child = children[i];\n // Write only the object is the predicate is the same as the previous\n if (child.predicate.equals(predicate))\n contents += `, ${this._encodeObject(child.object)}`;\n // Otherwise, write the predicate and the object\n else {\n contents += `${(i ? ';\\n ' : '\\n ') +\n this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)}`;\n predicate = child.predicate;\n }\n }\n return new SerializedTerm(`${contents}\\n]`);\n }\n }\n\n // ### `list` creates a list node with the given content\n list(elements) {\n const length = elements && elements.length || 0, contents = new Array(length);\n for (let i = 0; i < length; i++)\n contents[i] = this._encodeObject(elements[i]);\n return new SerializedTerm(`(${contents.join(' ')})`);\n }\n\n // ### `end` signals the end of the output stream\n end(done) {\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null;\n }\n // Disallow further writing\n this._write = this._blockedWrite;\n\n // Try to end the underlying stream, ensuring done is called exactly one time\n let singleDone = done && ((error, result) => { singleDone = null, done(error, result); });\n if (this._endStream) {\n try { return this._outputStream.end(singleDone); }\n catch (error) { /* error closing stream */ }\n }\n singleDone && singleDone();\n }\n}\n\n// Replaces a character by its escaped version\nfunction characterReplacer(character) {\n // Replace a single character by its escaped version\n let result = escapedCharacters[character];\n if (result === undefined) {\n // Replace a single character with its 4-bit unicode escape sequence\n if (character.length === 1) {\n result = character.charCodeAt(0).toString(16);\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n // Replace a surrogate pair with its 8-bit unicode escape sequence\n else {\n result = ((character.charCodeAt(0) - 0xD800) * 0x400 +\n character.charCodeAt(1) + 0x2400).toString(16);\n result = '\\\\U00000000'.substr(0, 10 - result.length) + result;\n }\n }\n return result;\n}\n","// **N3Store** objects store N3 quads by graph in memory.\nimport { Readable } from 'readable-stream';\nimport { default as N3DataFactory, termToId, termFromId } from './N3DataFactory';\nimport namespaces from './IRIs';\nimport { isDefaultGraph } from './N3Util';\nimport N3Writer from './N3Writer';\n\nconst ITERATOR = Symbol('iter');\n\nfunction merge(target, source, depth = 4) {\n if (depth === 0)\n return Object.assign(target, source);\n\n for (const key in source)\n target[key] = merge(target[key] || Object.create(null), source[key], depth - 1);\n\n return target;\n}\n\n/**\n * Determines the intersection of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no intersection; this should\n * *not* be set as the value for an index.\n */\nfunction intersect(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n if (key in s2) {\n const intersection = depth === 0 ? null : intersect(s1[key], s2[key], depth - 1);\n if (intersection !== false) {\n target = target || Object.create(null);\n target[key] = intersection;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Determines the difference of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no difference; this should\n * *not* be set as the value for an index.\n */\nfunction difference(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n // When the key is not in the index, then none of the triples defined by s1[key] are\n // in s2 and so we want to copy them over to the resultant store.\n if (!(key in s2)) {\n target = target || Object.create(null);\n target[key] = depth === 0 ? null : merge({}, s1[key], depth - 1);\n }\n else if (depth !== 0) {\n const diff = difference(s1[key], s2[key], depth - 1);\n if (diff !== false) {\n target = target || Object.create(null);\n target[key] = diff;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n// ## Constructor\nexport class N3EntityIndex {\n constructor(options = {}) {\n this._id = 1;\n // `_ids` maps entities such as `http://xmlns.com/foaf/0.1/name` to numbers,\n // saving memory by using only numbers as keys in `_graphs`\n this._ids = Object.create(null);\n this._ids[''] = 1;\n // inverse of `_ids`\n this._entities = Object.create(null);\n this._entities[1] = '';\n // `_blankNodeIndex` is the index of the last automatically named blank node\n this._blankNodeIndex = 0;\n this._factory = options.factory || N3DataFactory;\n }\n\n _termFromId(id) {\n if (id[0] === '.') {\n const entities = this._entities;\n const terms = id.split('.');\n const q = this._factory.quad(\n this._termFromId(entities[terms[1]]),\n this._termFromId(entities[terms[2]]),\n this._termFromId(entities[terms[3]]),\n terms[4] && this._termFromId(entities[terms[4]]),\n );\n return q;\n }\n return termFromId(id, this._factory);\n }\n\n _termToNumericId(term) {\n if (term.termType === 'Quad') {\n const s = this._termToNumericId(term.subject),\n p = this._termToNumericId(term.predicate),\n o = this._termToNumericId(term.object);\n let g;\n\n return s && p && o && (isDefaultGraph(term.graph) || (g = this._termToNumericId(term.graph))) &&\n this._ids[g ? `.${s}.${p}.${o}.${g}` : `.${s}.${p}.${o}`];\n }\n return this._ids[termToId(term)];\n }\n\n _termToNewNumericId(term) {\n // This assumes that no graph term is present - we may wish to error if there is one\n const str = term && term.termType === 'Quad' ?\n `.${this._termToNewNumericId(term.subject)}.${this._termToNewNumericId(term.predicate)}.${this._termToNewNumericId(term.object)}${\n isDefaultGraph(term.graph) ? '' : `.${this._termToNewNumericId(term.graph)}`\n }`\n : termToId(term);\n\n return this._ids[str] || (this._ids[this._entities[++this._id] = str] = this._id);\n }\n\n createBlankNode(suggestedName) {\n let name, index;\n // Generate a name based on the suggested name\n if (suggestedName) {\n name = suggestedName = `_:${suggestedName}`, index = 1;\n while (this._ids[name])\n name = suggestedName + index++;\n }\n // Generate a generic blank node name\n else {\n do { name = `_:b${this._blankNodeIndex++}`; }\n while (this._ids[name]);\n }\n // Add the blank node to the entities, avoiding the generation of duplicates\n this._ids[name] = ++this._id;\n this._entities[this._id] = name;\n return this._factory.blankNode(name.substr(2));\n }\n}\n\n// ## Constructor\nexport default class N3Store {\n constructor(quads, options) {\n // The number of quads is initially zero\n this._size = 0;\n // `_graphs` contains subject, predicate, and object indexes per graph\n this._graphs = Object.create(null);\n\n // Shift parameters if `quads` is not given\n if (!options && quads && !quads[0] && !(typeof quads.match === 'function'))\n options = quads, quads = null;\n options = options || {};\n this._factory = options.factory || N3DataFactory;\n this._entityIndex = options.entityIndex || new N3EntityIndex({ factory: this._factory });\n this._entities = this._entityIndex._entities;\n this._termFromId = this._entityIndex._termFromId.bind(this._entityIndex);\n this._termToNumericId = this._entityIndex._termToNumericId.bind(this._entityIndex);\n this._termToNewNumericId = this._entityIndex._termToNewNumericId.bind(this._entityIndex);\n\n // Add quads if passed\n if (quads)\n this.addAll(quads);\n }\n\n // ## Public properties\n\n // ### `size` returns the number of quads in the store\n get size() {\n // Return the quad count if if was cached\n let size = this._size;\n if (size !== null)\n return size;\n\n // Calculate the number of quads by counting to the deepest level\n size = 0;\n const graphs = this._graphs;\n let subjects, subject;\n for (const graphKey in graphs)\n for (const subjectKey in (subjects = graphs[graphKey].subjects))\n for (const predicateKey in (subject = subjects[subjectKey]))\n size += Object.keys(subject[predicateKey]).length;\n return this._size = size;\n }\n\n // ## Private methods\n\n // ### `_addToIndex` adds a quad to a three-layered index.\n // Returns if the index has changed, if the entry did not already exist.\n _addToIndex(index0, key0, key1, key2) {\n // Create layers as necessary\n const index1 = index0[key0] || (index0[key0] = {});\n const index2 = index1[key1] || (index1[key1] = {});\n // Setting the key to _any_ value signals the presence of the quad\n const existed = key2 in index2;\n if (!existed)\n index2[key2] = null;\n return !existed;\n }\n\n // ### `_removeFromIndex` removes a quad from a three-layered index\n _removeFromIndex(index0, key0, key1, key2) {\n // Remove the quad from the index\n const index1 = index0[key0], index2 = index1[key1];\n delete index2[key2];\n\n // Remove intermediary index layers if they are empty\n for (const key in index2) return;\n delete index1[key1];\n for (const key in index1) return;\n delete index0[key0];\n }\n\n // ### `_findInIndex` finds a set of quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n // `name0`, `name1`, and `name2` are the names of the keys at each level,\n // used when reconstructing the resulting quad\n // (for instance: _subject_, _predicate_, and _object_).\n // Finally, `graphId` will be the graph of the created quads.\n *_findInIndex(index0, key0, key1, key2, name0, name1, name2, graphId) {\n let tmp, index1, index2;\n const entityKeys = this._entities;\n const graph = this._termFromId(entityKeys[graphId]);\n const parts = { subject: null, predicate: null, object: null };\n\n // If a key is specified, use only that part of index 0.\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n parts[name0] = this._termFromId(entityKeys[value0]);\n // If a key is specified, use only that part of index 1.\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n parts[name1] = this._termFromId(entityKeys[value1]);\n // If a key is specified, use only that part of index 2, if it exists.\n const values = key2 ? (key2 in index2 ? [key2] : []) : Object.keys(index2);\n // Create quads for all items found in index 2.\n for (let l = 0; l < values.length; l++) {\n parts[name2] = this._termFromId(entityKeys[values[l]]);\n yield this._factory.quad(parts.subject, parts.predicate, parts.object, graph);\n }\n }\n }\n }\n }\n }\n\n // ### `_loop` executes the callback on all keys of index 0\n _loop(index0, callback) {\n for (const key0 in index0)\n callback(key0);\n }\n\n // ### `_loopByKey0` executes the callback on all keys of a certain entry in index 0\n _loopByKey0(index0, key0, callback) {\n let index1, key1;\n if (index1 = index0[key0]) {\n for (key1 in index1)\n callback(key1);\n }\n }\n\n // ### `_loopByKey1` executes the callback on given keys of all entries in index 0\n _loopByKey1(index0, key1, callback) {\n let key0, index1;\n for (key0 in index0) {\n index1 = index0[key0];\n if (index1[key1])\n callback(key0);\n }\n }\n\n // ### `_loopBy2Keys` executes the callback on given keys of certain entries in index 2\n _loopBy2Keys(index0, key0, key1, callback) {\n let index1, index2, key2;\n if ((index1 = index0[key0]) && (index2 = index1[key1])) {\n for (key2 in index2)\n callback(key2);\n }\n }\n\n // ### `_countInIndex` counts matching quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n _countInIndex(index0, key0, key1, key2) {\n let count = 0, tmp, index1, index2;\n\n // If a key is specified, count only that part of index 0\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n // If a key is specified, count only that part of index 1\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n // If a key is specified, count the quad if it exists\n if (key2) (key2 in index2) && count++;\n // Otherwise, count all quads\n else count += Object.keys(index2).length;\n }\n }\n }\n }\n return count;\n }\n\n // ### `_getGraphs` returns an array with the given graph,\n // or all graphs if the argument is null or undefined.\n _getGraphs(graph) {\n graph = graph === '' ? 1 : (graph && (this._termToNumericId(graph) || -1));\n return typeof graph !== 'number' ? this._graphs : { [graph]: this._graphs[graph] };\n }\n\n // ### `_uniqueEntities` returns a function that accepts an entity ID\n // and passes the corresponding entity to callback if it hasn't occurred before.\n _uniqueEntities(callback) {\n const uniqueIds = Object.create(null);\n return id => {\n if (!(id in uniqueIds)) {\n uniqueIds[id] = true;\n callback(this._termFromId(this._entities[id], this._factory));\n }\n };\n }\n\n // ## Public methods\n\n // ### `add` adds the specified quad to the dataset.\n // Returns the dataset instance it was called on.\n // Existing quads, as defined in Quad.equals, will be ignored.\n add(quad) {\n this.addQuad(quad);\n return this;\n }\n\n // ### `addQuad` adds a new quad to the store.\n // Returns if the quad index has changed, if the quad did not already exist.\n addQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n graph = subject.graph, object = subject.object,\n predicate = subject.predicate, subject = subject.subject;\n\n // Convert terms to internal string representation\n graph = graph ? this._termToNewNumericId(graph) : 1;\n\n // Find the graph that will contain the triple\n let graphItem = this._graphs[graph];\n // Create the graph if it doesn't exist yet\n if (!graphItem) {\n graphItem = this._graphs[graph] = { subjects: {}, predicates: {}, objects: {} };\n // Freezing a graph helps subsequent `add` performance,\n // and properties will never be modified anyway\n Object.freeze(graphItem);\n }\n\n // Since entities can often be long IRIs, we avoid storing them in every index.\n // Instead, we have a separate index that maps entities to numbers,\n // which are then used as keys in the other indexes.\n subject = this._termToNewNumericId(subject);\n predicate = this._termToNewNumericId(predicate);\n object = this._termToNewNumericId(object);\n\n if (!this._addToIndex(graphItem.subjects, subject, predicate, object))\n return false;\n this._addToIndex(graphItem.predicates, predicate, object, subject);\n this._addToIndex(graphItem.objects, object, subject, predicate);\n\n // The cached quad count is now invalid\n this._size = null;\n return true;\n }\n\n // ### `addQuads` adds multiple quads to the store\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `delete` removes the specified quad from the dataset.\n // Returns the dataset instance it was called on.\n delete(quad) {\n this.removeQuad(quad);\n return this;\n }\n\n // ### `has` determines whether a dataset includes a certain quad or quad pattern.\n has(subjectOrQuad, predicate, object, graph) {\n if (subjectOrQuad && subjectOrQuad.subject)\n ({ subject: subjectOrQuad, predicate, object, graph } = subjectOrQuad);\n return !this.readQuads(subjectOrQuad, predicate, object, graph).next().done;\n }\n\n // ### `import` adds a stream of quads to the store\n import(stream) {\n stream.on('data', quad => { this.addQuad(quad); });\n return stream;\n }\n\n // ### `removeQuad` removes a quad from the store if it exists\n removeQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n ({ subject, predicate, object, graph } = subject);\n // Convert terms to internal string representation\n graph = graph ? this._termToNumericId(graph) : 1;\n\n // Find internal identifiers for all components\n // and verify the quad exists.\n const graphs = this._graphs;\n let graphItem, subjects, predicates;\n if (!(subject = subject && this._termToNumericId(subject)) || !(predicate = predicate && this._termToNumericId(predicate)) ||\n !(object = object && this._termToNumericId(object)) || !(graphItem = graphs[graph]) ||\n !(subjects = graphItem.subjects[subject]) ||\n !(predicates = subjects[predicate]) ||\n !(object in predicates))\n return false;\n\n // Remove it from all indexes\n this._removeFromIndex(graphItem.subjects, subject, predicate, object);\n this._removeFromIndex(graphItem.predicates, predicate, object, subject);\n this._removeFromIndex(graphItem.objects, object, subject, predicate);\n if (this._size !== null) this._size--;\n\n // Remove the graph if it is empty\n for (subject in graphItem.subjects) return true;\n delete graphs[graph];\n return true;\n }\n\n // ### `removeQuads` removes multiple quads from the store\n removeQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.removeQuad(quads[i]);\n }\n\n // ### `remove` removes a stream of quads from the store\n remove(stream) {\n stream.on('data', quad => { this.removeQuad(quad); });\n return stream;\n }\n\n // ### `removeMatches` removes all matching quads from the store\n // Setting any field to `undefined` or `null` indicates a wildcard.\n removeMatches(subject, predicate, object, graph) {\n const stream = new Readable({ objectMode: true });\n\n const iterable = this.readQuads(subject, predicate, object, graph);\n stream._read = size => {\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n stream.push(null);\n return;\n }\n stream.push(value);\n }\n };\n\n return this.remove(stream);\n }\n\n // ### `deleteGraph` removes all triples with the given graph from the store\n deleteGraph(graph) {\n return this.removeMatches(null, null, null, graph);\n }\n\n // ### `getQuads` returns an array of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getQuads(subject, predicate, object, graph) {\n return [...this.readQuads(subject, predicate, object, graph)];\n }\n\n /**\n * `readQuads` returns a generator of quads matching a pattern.\n * Setting any field to `undefined` or `null` indicates a wildcard.\n * @deprecated Use `match` instead.\n */\n *readQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, subjectId, predicateId,\n 'object', 'subject', 'predicate', graphId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n yield* this._findInIndex(content.subjects, subjectId, predicateId, null,\n 'subject', 'predicate', 'object', graphId);\n }\n else if (predicateId)\n // If only predicate and possibly object are given, the predicate index will be the fastest\n yield* this._findInIndex(content.predicates, predicateId, objectId, null,\n 'predicate', 'object', 'subject', graphId);\n else if (objectId)\n // If only object is given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, null, null,\n 'object', 'subject', 'predicate', graphId);\n else\n // If nothing is given, iterate subjects and predicates first\n yield* this._findInIndex(content.subjects, null, null, null,\n 'subject', 'predicate', 'object', graphId);\n }\n }\n }\n\n // ### `match` returns a new dataset that is comprised of all quads in the current instance matching the given arguments.\n // The logic described in Quad Matching is applied for each quad in this dataset to check if it should be included in the output dataset.\n // Note: This method always returns a new DatasetCore, even if that dataset contains no quads.\n // Note: Since a DatasetCore is an unordered set, the order of the quads within the returned sequence is arbitrary.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n // For backwards compatibility, the object return also implements the Readable stream interface.\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this, subject, predicate, object, graph, { entityIndex: this._entityIndex });\n }\n\n // ### `countQuads` returns the number of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n countQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let count = 0, content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return 0;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subject) {\n if (object)\n // If subject and object are given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n count += this._countInIndex(content.subjects, subjectId, predicateId, objectId);\n }\n else if (predicate) {\n // If only predicate and possibly object are given, the predicate index will be the fastest\n count += this._countInIndex(content.predicates, predicateId, objectId, subjectId);\n }\n else {\n // If only object is possibly given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n }\n }\n }\n return count;\n }\n\n // ### `forEach` executes the callback on all quads.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forEach(callback, subject, predicate, object, graph) {\n this.some(quad => {\n callback(quad, this);\n return false;\n }, subject, predicate, object, graph);\n }\n\n // ### `every` executes the callback on all quads,\n // and returns `true` if it returns truthy for all them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n every(callback, subject, predicate, object, graph) {\n return !this.some(quad => !callback(quad, this), subject, predicate, object, graph);\n }\n\n // ### `some` executes the callback on all quads,\n // and returns `true` if it returns truthy for any of them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n some(callback, subject, predicate, object, graph) {\n for (const quad of this.readQuads(subject, predicate, object, graph))\n if (callback(quad, this))\n return true;\n return false;\n }\n\n // ### `getSubjects` returns all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getSubjects(predicate, object, graph) {\n const results = [];\n this.forSubjects(s => { results.push(s); }, predicate, object, graph);\n return results;\n }\n\n // ### `forSubjects` executes the callback on all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forSubjects(callback, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, predicateId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (predicateId) {\n if (objectId)\n // If predicate and object are given, the POS index is best.\n this._loopBy2Keys(content.predicates, predicateId, objectId, callback);\n else\n // If only predicate is given, the SPO index is best.\n this._loopByKey1(content.subjects, predicateId, callback);\n }\n else if (objectId)\n // If only object is given, the OSP index is best.\n this._loopByKey0(content.objects, objectId, callback);\n else\n // If no params given, iterate all the subjects\n this._loop(content.subjects, callback);\n }\n }\n }\n\n // ### `getPredicates` returns all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getPredicates(subject, object, graph) {\n const results = [];\n this.forPredicates(p => { results.push(p); }, subject, object, graph);\n return results;\n }\n\n // ### `forPredicates` executes the callback on all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forPredicates(callback, subject, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the OSP index is best.\n this._loopBy2Keys(content.objects, objectId, subjectId, callback);\n else\n // If only subject is given, the SPO index is best.\n this._loopByKey0(content.subjects, subjectId, callback);\n }\n else if (objectId)\n // If only object is given, the POS index is best.\n this._loopByKey1(content.predicates, objectId, callback);\n else\n // If no params given, iterate all the predicates.\n this._loop(content.predicates, callback);\n }\n }\n }\n\n // ### `getObjects` returns all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getObjects(subject, predicate, graph) {\n const results = [];\n this.forObjects(o => { results.push(o); }, subject, predicate, graph);\n return results;\n }\n\n // ### `forObjects` executes the callback on all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forObjects(callback, subject, predicate, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (predicateId)\n // If subject and predicate are given, the SPO index is best.\n this._loopBy2Keys(content.subjects, subjectId, predicateId, callback);\n else\n // If only subject is given, the OSP index is best.\n this._loopByKey1(content.objects, subjectId, callback);\n }\n else if (predicateId)\n // If only predicate is given, the POS index is best.\n this._loopByKey0(content.predicates, predicateId, callback);\n else\n // If no params given, iterate all the objects.\n this._loop(content.objects, callback);\n }\n }\n }\n\n // ### `getGraphs` returns all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getGraphs(subject, predicate, object) {\n const results = [];\n this.forGraphs(g => { results.push(g); }, subject, predicate, object);\n return results;\n }\n\n // ### `forGraphs` executes the callback on all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forGraphs(callback, subject, predicate, object) {\n for (const graph in this._graphs) {\n this.some(quad => {\n callback(quad.graph);\n return true; // Halt iteration of some()\n }, subject, predicate, object, this._termFromId(this._entities[graph]));\n }\n }\n\n // ### `createBlankNode` creates a new blank node, returning its name\n createBlankNode(suggestedName) {\n return this._entityIndex.createBlankNode(suggestedName);\n }\n\n // ### `extractLists` finds and removes all list triples\n // and returns the items per list.\n extractLists({ remove = false, ignoreErrors = false } = {}) {\n const lists = {}; // has scalar keys so could be a simple Object\n const onError = ignoreErrors ? (() => true) :\n ((node, message) => { throw new Error(`${node.value} ${message}`); });\n\n // Traverse each list from its tail\n const tails = this.getQuads(null, namespaces.rdf.rest, namespaces.rdf.nil, null);\n const toRemove = remove ? [...tails] : [];\n tails.forEach(tailQuad => {\n const items = []; // the members found as objects of rdf:first quads\n let malformed = false; // signals whether the current list is malformed\n let head; // the head of the list (_:b1 in above example)\n let headPos; // set to subject or object when head is set\n const graph = tailQuad.graph; // make sure list is in exactly one graph\n\n // Traverse the list from tail to end\n let current = tailQuad.subject;\n while (current && !malformed) {\n const objectQuads = this.getQuads(null, null, current, null);\n const subjectQuads = this.getQuads(current, null, null, null);\n let quad, first = null, rest = null, parent = null;\n\n // Find the first and rest of this list node\n for (let i = 0; i < subjectQuads.length && !malformed; i++) {\n quad = subjectQuads[i];\n if (!quad.graph.equals(graph))\n malformed = onError(current, 'not confined to single graph');\n else if (head)\n malformed = onError(current, 'has non-list arcs out');\n\n // one rdf:first\n else if (quad.predicate.value === namespaces.rdf.first) {\n if (first)\n malformed = onError(current, 'has multiple rdf:first arcs');\n else\n toRemove.push(first = quad);\n }\n\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (rest)\n malformed = onError(current, 'has multiple rdf:rest arcs');\n else\n toRemove.push(rest = quad);\n }\n\n // alien triple\n else if (objectQuads.length)\n malformed = onError(current, 'can\\'t be subject and object');\n else {\n head = quad; // e.g. { (1 2 3) :p :o }\n headPos = 'subject';\n }\n }\n\n // { :s :p (1 2) } arrives here with no head\n // { (1 2) :p :o } arrives here with head set to the list.\n for (let i = 0; i < objectQuads.length && !malformed; ++i) {\n quad = objectQuads[i];\n if (head)\n malformed = onError(current, 'can\\'t have coreferences');\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (parent)\n malformed = onError(current, 'has incoming rdf:rest arcs');\n else\n parent = quad;\n }\n else {\n head = quad; // e.g. { :s :p (1 2) }\n headPos = 'object';\n }\n }\n\n // Store the list item and continue with parent\n if (!first)\n malformed = onError(current, 'has no list head');\n else\n items.unshift(first.object);\n current = parent && parent.subject;\n }\n\n // Don't remove any quads if the list is malformed\n if (malformed)\n remove = false;\n // Store the list under the value of its head\n else if (head)\n lists[head[headPos].value] = items;\n });\n\n // Remove list quads if requested\n if (remove)\n this.removeQuads(toRemove);\n return lists;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n addAll(quads) {\n if (quads instanceof DatasetCoreAndReadableStream)\n quads = quads.filtered;\n\n if (Array.isArray(quads))\n this.addQuads(quads);\n else if (quads instanceof N3Store && quads._entityIndex === this._entityIndex) {\n if (quads._size !== 0) {\n this._graphs = merge(this._graphs, quads._graphs);\n this._size = null; // Invalidate the cached size\n }\n }\n else {\n for (const quad of quads)\n this.add(quad);\n }\n return this;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n contains(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return true;\n\n if (!(other instanceof N3Store) || this._entityIndex !== other._entityIndex)\n return other.every(quad => this.has(quad));\n\n const g1 = this._graphs, g2 = other._graphs;\n let s1, s2, p1, p2, o1;\n for (const graph in g2) {\n if (!(s1 = g1[graph])) return false;\n s1 = s1.subjects;\n for (const subject in (s2 = g2[graph].subjects)) {\n if (!(p1 = s1[subject])) return false;\n for (const predicate in (p2 = s2[subject])) {\n if (!(o1 = p1[predicate])) return false;\n for (const object in p2[predicate])\n if (!(object in o1)) return false;\n }\n }\n }\n return true;\n }\n\n /**\n * This method removes the quads in the current dataset that match the given arguments.\n *\n * The logic described in {@link https://rdf.js.org/dataset-spec/#quad-matching|Quad Matching} is applied for each\n * quad in this dataset, to select the quads which will be deleted.\n *\n * @param subject The optional exact subject to match.\n * @param predicate The optional exact predicate to match.\n * @param object The optional exact object to match.\n * @param graph The optional exact graph to match.\n */\n deleteMatches(subject, predicate, object, graph) {\n for (const quad of this.match(subject, predicate, object, graph))\n this.removeQuad(quad);\n return this;\n }\n\n /**\n * Returns a new dataset that contains all quads from the current dataset that are not included in the given dataset.\n */\n difference(other) {\n if (other && other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return new N3Store({ entityIndex: this._entityIndex });\n\n if ((other instanceof N3Store) && other._entityIndex === this._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = difference(this._graphs, other._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => !other.has(quad));\n }\n\n /**\n * Returns true if the current dataset contains the same graph structure as the given dataset.\n *\n * Blank Nodes will be normalized.\n */\n equals(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n return other === this || (this.size === other.size && this.contains(other));\n }\n\n /**\n * Creates a new dataset with all the quads that pass the test implemented by the provided `iteratee`.\n *\n * This method is aligned with Array.prototype.filter() in ECMAScript-262.\n */\n filter(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n if (iteratee(quad, this))\n store.add(quad);\n return store;\n }\n\n /**\n * Returns a new dataset containing all quads from the current dataset that are also included in the given dataset.\n */\n intersection(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n return store;\n }\n else if ((other instanceof N3Store) && this._entityIndex === other._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = intersect(other._graphs, this._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => other.has(quad));\n }\n\n /**\n * Returns a new dataset containing all quads returned by applying `iteratee` to each quad in the current dataset.\n */\n map(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n store.add(iteratee(quad, this));\n return store;\n }\n\n /**\n * This method calls the `iteratee` method on each `quad` of the `Dataset`. The first time the `iteratee` method\n * is called, the `accumulator` value is the `initialValue`, or, if not given, equals the first quad of the `Dataset`.\n * The return value of each call to the `iteratee` method is used as the `accumulator` value for the next call.\n *\n * This method returns the return value of the last `iteratee` call.\n *\n * This method is aligned with `Array.prototype.reduce()` in ECMAScript-262.\n */\n reduce(callback, initialValue) {\n const iter = this.readQuads();\n let accumulator = initialValue === undefined ? iter.next().value : initialValue;\n for (const quad of iter)\n accumulator = callback(accumulator, quad, this);\n return accumulator;\n }\n\n /**\n * Returns the set of quads within the dataset as a host-language-native sequence, for example an `Array` in\n * ECMAScript-262.\n *\n * Since a `Dataset` is an unordered set, the order of the quads within the returned sequence is arbitrary.\n */\n toArray() {\n return this.getQuads();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset, preprocessed with the\n * {@link https://json-ld.github.io/normalization/spec/|RDF Dataset Normalization} algorithm.\n */\n toCanonical() {\n throw new Error('not implemented');\n }\n\n /**\n * Returns a stream that contains all quads of the dataset.\n */\n toStream() {\n return this.match();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset.\n *\n * No prior normalization is required, therefore the results for the same quads may vary depending on the `Dataset`\n * implementation.\n */\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n /**\n * Returns a new `Dataset` that is a concatenation of this dataset and the quads given as an argument.\n */\n union(quads) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n\n store.addAll(quads);\n return store;\n }\n\n // ### Store is an iterable.\n // Can be used where iterables are expected: for...of loops, array spread operator,\n // `yield*`, and destructuring assignment (order is not guaranteed).\n *[Symbol.iterator]() {\n yield* this.readQuads();\n }\n}\n\n/**\n * Returns a subset of the `index` with that part of the index\n * matching the `ids` array. `ids` contains 3 elements that are\n * either numerical ids; or `null`.\n *\n * `false` is returned when there are no matching indices; this should\n * *not* be set as the value for an index.\n */\nfunction indexMatch(index, ids, depth = 0) {\n const ind = ids[depth];\n if (ind && !(ind in index))\n return false;\n\n let target = false;\n for (const key in (ind ? { [ind]: index[ind] } : index)) {\n const result = depth === 2 ? null : indexMatch(index[key], ids, depth + 1);\n\n if (result !== false) {\n target = target || Object.create(null);\n target[key] = result;\n }\n }\n return target;\n}\n\n/**\n * A class that implements both DatasetCore and Readable.\n */\nclass DatasetCoreAndReadableStream extends Readable {\n constructor(n3Store, subject, predicate, object, graph, options) {\n super({ objectMode: true });\n Object.assign(this, { n3Store, subject, predicate, object, graph, options });\n }\n\n get filtered() {\n if (!this._filtered) {\n const { n3Store, graph, object, predicate, subject } = this;\n const newStore = this._filtered = new N3Store({ factory: n3Store._factory, entityIndex: this.options.entityIndex });\n\n let subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = newStore._termToNumericId(subject)) ||\n predicate && !(predicateId = newStore._termToNumericId(predicate)) ||\n object && !(objectId = newStore._termToNumericId(object)))\n return newStore;\n\n const graphs = n3Store._getGraphs(graph);\n for (const graphKey in graphs) {\n let subjects, predicates, objects, content;\n if (content = graphs[graphKey]) {\n if (!subjectId && predicateId) {\n if (predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n }\n else if (objectId) {\n if (objects = indexMatch(content.objects, [objectId, subjectId, predicateId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n }\n }\n else if (subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId])) {\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n\n if (subjects)\n newStore._graphs[graphKey] = { subjects, predicates, objects };\n }\n }\n newStore._size = null;\n }\n return this._filtered;\n }\n\n get size() {\n return this.filtered.size;\n }\n\n _read(size) {\n if (size > 0 && !this[ITERATOR])\n this[ITERATOR] = this[Symbol.iterator]();\n const iterable = this[ITERATOR];\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n this.push(null);\n return;\n }\n this.push(value);\n }\n }\n\n addAll(quads) {\n return this.filtered.addAll(quads);\n }\n\n contains(other) {\n return this.filtered.contains(other);\n }\n\n deleteMatches(subject, predicate, object, graph) {\n return this.filtered.deleteMatches(subject, predicate, object, graph);\n }\n\n difference(other) {\n return this.filtered.difference(other);\n }\n\n equals(other) {\n return this.filtered.equals(other);\n }\n\n every(callback, subject, predicate, object, graph) {\n return this.filtered.every(callback, subject, predicate, object, graph);\n }\n\n filter(iteratee) {\n return this.filtered.filter(iteratee);\n }\n\n forEach(callback, subject, predicate, object, graph) {\n return this.filtered.forEach(callback, subject, predicate, object, graph);\n }\n\n import(stream) {\n return this.filtered.import(stream);\n }\n\n intersection(other) {\n return this.filtered.intersection(other);\n }\n\n map(iteratee) {\n return this.filtered.map(iteratee);\n }\n\n some(callback, subject, predicate, object, graph) {\n return this.filtered.some(callback, subject, predicate, object, graph);\n }\n\n toCanonical() {\n return this.filtered.toCanonical();\n }\n\n toStream() {\n return this._filtered ?\n this._filtered.toStream()\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph);\n }\n\n union(quads) {\n return this._filtered ?\n this._filtered.union(quads)\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph).addAll(quads);\n }\n\n toArray() {\n return this._filtered ? this._filtered.toArray() : this.n3Store.getQuads(this.subject, this.predicate, this.object, this.graph);\n }\n\n reduce(callback, initialValue) {\n return this.filtered.reduce(callback, initialValue);\n }\n\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n add(quad) {\n return this.filtered.add(quad);\n }\n\n delete(quad) {\n return this.filtered.delete(quad);\n }\n\n has(quad) {\n return this.filtered.has(quad);\n }\n\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this.filtered, subject, predicate, object, graph, this.options);\n }\n\n *[Symbol.iterator]() {\n yield* this._filtered || this.n3Store.readQuads(this.subject, this.predicate, this.object, this.graph);\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeDotSegmentsOfPath = exports.removeDotSegments = exports.resolve = void 0;\n/**\n * Convert the given relative IRI to an absolute IRI\n * by taking into account the given optional baseIRI.\n *\n * @param {string} relativeIRI The relative IRI to convert to an absolute IRI.\n * @param {string} baseIRI The optional base IRI.\n * @return {string} an absolute IRI.\n */\nfunction resolve(relativeIRI, baseIRI) {\n baseIRI = baseIRI || '';\n const baseFragmentPos = baseIRI.indexOf('#');\n // Ignore any fragments in the base IRI\n if (baseFragmentPos > 0) {\n baseIRI = baseIRI.substr(0, baseFragmentPos);\n }\n // Convert empty value directly to base IRI\n if (!relativeIRI.length) {\n // At this point, the baseIRI MUST be absolute, otherwise we error\n if (baseIRI.indexOf(':') < 0) {\n throw new Error(`Found invalid baseIRI '${baseIRI}' for value '${relativeIRI}'`);\n }\n return baseIRI;\n }\n // If the value starts with a query character, concat directly (but strip the existing query)\n if (relativeIRI.startsWith('?')) {\n const baseQueryPos = baseIRI.indexOf('?');\n if (baseQueryPos > 0) {\n baseIRI = baseIRI.substr(0, baseQueryPos);\n }\n return baseIRI + relativeIRI;\n }\n // If the value starts with a fragment character, concat directly\n if (relativeIRI.startsWith('#')) {\n return baseIRI + relativeIRI;\n }\n // Ignore baseIRI if it is empty\n if (!baseIRI.length) {\n const relativeColonPos = relativeIRI.indexOf(':');\n if (relativeColonPos < 0) {\n throw new Error(`Found invalid relative IRI '${relativeIRI}' for a missing baseIRI`);\n }\n return removeDotSegmentsOfPath(relativeIRI, relativeColonPos);\n }\n // Ignore baseIRI if the value is absolute.\n // Per RFC 3986, a URI scheme cannot contain a '/', so if a '/' appears before the first ':',\n // the IRI is a relative path (not an absolute IRI).\n const valueColonPos = relativeIRI.indexOf(':');\n if (valueColonPos >= 0) {\n const valueSlashPos = relativeIRI.indexOf('/');\n if (valueSlashPos < 0 || valueColonPos < valueSlashPos) {\n return removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n }\n // At this point, the baseIRI MUST be absolute, otherwise we error\n const baseColonPos = baseIRI.indexOf(':');\n if (baseColonPos < 0) {\n throw new Error(`Found invalid baseIRI '${baseIRI}' for value '${relativeIRI}'`);\n }\n const baseIRIScheme = baseIRI.substr(0, baseColonPos + 1);\n // Inherit the baseIRI scheme if the value starts with '//'\n if (relativeIRI.indexOf('//') === 0) {\n return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n // Check cases where '://' occurs in the baseIRI, and where there is no '/' after a ':' anymore.\n let baseSlashAfterColonPos;\n if (baseIRI.indexOf('//', baseColonPos) === baseColonPos + 1) {\n // If there is no additional '/' after the '//'.\n baseSlashAfterColonPos = baseIRI.indexOf('/', baseColonPos + 3);\n if (baseSlashAfterColonPos < 0) {\n // If something other than a '/' follows the '://', append the value after a '/',\n // otherwise, prefix the value with only the baseIRI scheme.\n if (baseIRI.length > baseColonPos + 3) {\n return baseIRI + '/' + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n else {\n return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n }\n }\n else {\n // If there is not even a single '/' after the ':'\n baseSlashAfterColonPos = baseIRI.indexOf('/', baseColonPos + 1);\n if (baseSlashAfterColonPos < 0) {\n // If we don't have a '/' after the ':',\n // prefix the value with only the baseIRI scheme.\n return baseIRIScheme + removeDotSegmentsOfPath(relativeIRI, valueColonPos);\n }\n }\n // If the value starts with a '/', then prefix it with everything before the first effective slash of the base IRI.\n if (relativeIRI.indexOf('/') === 0) {\n return baseIRI.substr(0, baseSlashAfterColonPos) + removeDotSegments(relativeIRI);\n }\n let baseIRIPath = baseIRI.substr(baseSlashAfterColonPos);\n const baseIRILastSlashPos = baseIRIPath.lastIndexOf('/');\n // Ignore everything after the last '/' in the baseIRI path\n if (baseIRILastSlashPos >= 0 && baseIRILastSlashPos < baseIRIPath.length - 1) {\n baseIRIPath = baseIRIPath.substr(0, baseIRILastSlashPos + 1);\n // Also remove the first character of the relative path if it starts with '.' (and not '..' or './')\n // This change is only allowed if there is something else following the path\n if (relativeIRI[0] === '.' && relativeIRI[1] !== '.' && relativeIRI[1] !== '/' && relativeIRI[2]) {\n relativeIRI = relativeIRI.substr(1);\n }\n }\n // Prefix the value with the baseIRI path where\n relativeIRI = baseIRIPath + relativeIRI;\n // Remove dot segment from the IRI\n relativeIRI = removeDotSegments(relativeIRI);\n // Prefix our transformed value with the part of the baseIRI until the first '/' after the first ':'.\n return baseIRI.substr(0, baseSlashAfterColonPos) + relativeIRI;\n}\nexports.resolve = resolve;\n/**\n * Remove dot segments from the given path,\n * as described in https://www.ietf.org/rfc/rfc3986.txt (page 32).\n * @param {string} path An IRI path.\n * @return {string} A path, will always start with a '/'.\n */\nfunction removeDotSegments(path) {\n // Prepare a buffer with segments between each '/.\n // Each segment represents an array of characters.\n const segmentBuffers = [];\n let i = 0;\n while (i < path.length) {\n // Remove '/.' or '/..'\n switch (path[i]) {\n case '/':\n if (path[i + 1] === '.') {\n if (path[i + 2] === '.') {\n // Start a new segment if we find an invalid character after the '.'\n if (!isCharacterAllowedAfterRelativePathSegment(path[i + 3])) {\n segmentBuffers.push([]);\n i++;\n break;\n }\n // Go to parent directory,\n // so we remove a parent segment\n segmentBuffers.pop();\n // Ensure that we end with a slash if there is a trailing '/..'\n if (!path[i + 3]) {\n segmentBuffers.push([]);\n }\n i += 3;\n }\n else {\n // Start a new segment if we find an invalid character after the '.'\n if (!isCharacterAllowedAfterRelativePathSegment(path[i + 2])) {\n segmentBuffers.push([]);\n i++;\n break;\n }\n // Ensure that we end with a slash if there is a trailing '/.'\n if (!path[i + 2]) {\n segmentBuffers.push([]);\n }\n // Go to the current directory,\n // so we do nothing\n i += 2;\n }\n }\n else {\n // Start a new segment\n segmentBuffers.push([]);\n i++;\n }\n break;\n case '#':\n case '?':\n // Query and fragment string should be appended unchanged\n if (!segmentBuffers.length) {\n segmentBuffers.push([]);\n }\n segmentBuffers[segmentBuffers.length - 1].push(path.substr(i));\n // Break the while loop\n i = path.length;\n break;\n default:\n // Not a special character, just append it to our buffer\n if (!segmentBuffers.length) {\n segmentBuffers.push([]);\n }\n segmentBuffers[segmentBuffers.length - 1].push(path[i]);\n i++;\n break;\n }\n }\n return '/' + segmentBuffers.map((buffer) => buffer.join('')).join('/');\n}\nexports.removeDotSegments = removeDotSegments;\n/**\n * Removes dot segments of the given IRI.\n * @param {string} iri An IRI (or part of IRI).\n * @param {number} colonPosition The position of the first ':' in the IRI.\n * @return {string} The IRI where dot segments were removed.\n */\nfunction removeDotSegmentsOfPath(iri, colonPosition) {\n // Determine where we should start looking for the first '/' that indicates the start of the path\n let searchOffset = colonPosition + 1;\n if (colonPosition >= 0) {\n if (iri[colonPosition + 1] === '/' && iri[colonPosition + 2] === '/') {\n searchOffset = colonPosition + 3;\n }\n }\n else {\n if (iri[0] === '/' && iri[1] === '/') {\n searchOffset = 2;\n }\n }\n // Determine the path\n const pathSeparator = iri.indexOf('/', searchOffset);\n if (pathSeparator < 0) {\n return iri;\n }\n const base = iri.substr(0, pathSeparator);\n const path = iri.substr(pathSeparator);\n // Remove dot segments from the path\n return base + removeDotSegments(path);\n}\nexports.removeDotSegmentsOfPath = removeDotSegmentsOfPath;\nfunction isCharacterAllowedAfterRelativePathSegment(character) {\n return !character || character === '#' || character === '?' || character === '/';\n}\n//# sourceMappingURL=Resolve.js.map","\"use strict\";\n/**\n * Character classes and associated utilities for the 5th edition of XML 1.0.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//\n// Fragments.\n//\nexports.CHAR = \"\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return (c >= SPACE && c <= 0xD7FF) ||\n c === NL || c === CR || c === TAB ||\n (c >= 0xE000 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0x10FFFF);\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\nfunction isNameStartChar(c) {\n return ((c >= 0x41 && c <= 0x5A) ||\n (c >= 0x61 && c <= 0x7A) ||\n c === 0x3A ||\n c === 0x5F ||\n c === 0x200C ||\n c === 0x200D ||\n (c >= 0xC0 && c <= 0xD6) ||\n (c >= 0xD8 && c <= 0xF6) ||\n (c >= 0x00F8 && c <= 0x02FF) ||\n (c >= 0x0370 && c <= 0x037D) ||\n (c >= 0x037F && c <= 0x1FFF) ||\n (c >= 0x2070 && c <= 0x218F) ||\n (c >= 0x2C00 && c <= 0x2FEF) ||\n (c >= 0x3001 && c <= 0xD7FF) ||\n (c >= 0xF900 && c <= 0xFDCF) ||\n (c >= 0xFDF0 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0xEFFFF));\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) ||\n (c >= 0x30 && c <= 0x39) ||\n c === 0x2D ||\n c === 0x2E ||\n c === 0xB7 ||\n (c >= 0x0300 && c <= 0x036F) ||\n (c >= 0x203F && c <= 0x2040);\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=ed5.js.map","\"use strict\";\n/**\n * Character classes and associated utilities for the 2nd edition of XML 1.1.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//\n// Fragments.\n//\nexports.CHAR = \"\\u0001-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.RESTRICTED_CHAR = \"\\u0001-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u0084\\u0086-\\u009F\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.RESTRICTED_CHAR_RE = new RegExp(\"^[\" + exports.RESTRICTED_CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return (c >= 0x0001 && c <= 0xD7FF) ||\n (c >= 0xE000 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0x10FFFF);\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``.\n */\nfunction isRestrictedChar(c) {\n return (c >= 0x1 && c <= 0x8) ||\n c === 0xB ||\n c === 0xC ||\n (c >= 0xE && c <= 0x1F) ||\n (c >= 0x7F && c <= 0x84) ||\n (c >= 0x86 && c <= 0x9F);\n}\nexports.isRestrictedChar = isRestrictedChar;\n/**\n * Determines whether a codepoint matches the ``CHAR`` production and does not\n * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is\n * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster\n * than running the two-call equivalent.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR`` and does not match\n * ``RESTRICTED_CHAR``.\n */\nfunction isCharAndNotRestricted(c) {\n return (c === 0x9) ||\n (c === 0xA) ||\n (c === 0xD) ||\n (c > 0x1F && c < 0x7F) ||\n (c === 0x85) ||\n (c > 0x9F && c <= 0xD7FF) ||\n (c >= 0xE000 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0x10FFFF);\n}\nexports.isCharAndNotRestricted = isCharAndNotRestricted;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNameStartChar(c) {\n return ((c >= 0x41 && c <= 0x5A) ||\n (c >= 0x61 && c <= 0x7A) ||\n c === 0x3A ||\n c === 0x5F ||\n c === 0x200C ||\n c === 0x200D ||\n (c >= 0xC0 && c <= 0xD6) ||\n (c >= 0xD8 && c <= 0xF6) ||\n (c >= 0x00F8 && c <= 0x02FF) ||\n (c >= 0x0370 && c <= 0x037D) ||\n (c >= 0x037F && c <= 0x1FFF) ||\n (c >= 0x2070 && c <= 0x218F) ||\n (c >= 0x2C00 && c <= 0x2FEF) ||\n (c >= 0x3001 && c <= 0xD7FF) ||\n (c >= 0xF900 && c <= 0xFDCF) ||\n (c >= 0xFDF0 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0xEFFFF));\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) ||\n (c >= 0x30 && c <= 0x39) ||\n c === 0x2D ||\n c === 0x2E ||\n c === 0xB7 ||\n (c >= 0x0300 && c <= 0x036F) ||\n (c >= 0x203F && c <= 0x2040);\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=ed2.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SaxesParser = exports.EVENTS = void 0;\nconst ed5 = require(\"xmlchars/xml/1.0/ed5\");\nconst ed2 = require(\"xmlchars/xml/1.1/ed2\");\nconst NSed3 = require(\"xmlchars/xmlns/1.0/ed3\");\nvar isS = ed5.isS;\nvar isChar10 = ed5.isChar;\nvar isNameStartChar = ed5.isNameStartChar;\nvar isNameChar = ed5.isNameChar;\nvar S_LIST = ed5.S_LIST;\nvar NAME_RE = ed5.NAME_RE;\nvar isChar11 = ed2.isChar;\nvar isNCNameStartChar = NSed3.isNCNameStartChar;\nvar isNCNameChar = NSed3.isNCNameChar;\nvar NC_NAME_RE = NSed3.NC_NAME_RE;\nconst XML_NAMESPACE = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE = \"http://www.w3.org/2000/xmlns/\";\nconst rootNS = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n __proto__: null,\n xml: XML_NAMESPACE,\n xmlns: XMLNS_NAMESPACE,\n};\nconst XML_ENTITIES = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n __proto__: null,\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: \"\\\"\",\n apos: \"'\",\n};\n// EOC: end-of-chunk\nconst EOC = -1;\nconst NL_LIKE = -2;\nconst S_BEGIN = 0; // Initial state.\nconst S_BEGIN_WHITESPACE = 1; // leading whitespace\nconst S_DOCTYPE = 2; // <!DOCTYPE\nconst S_DOCTYPE_QUOTE = 3; // <!DOCTYPE \"//blah\nconst S_DTD = 4; // <!DOCTYPE \"//blah\" [ ...\nconst S_DTD_QUOTED = 5; // <!DOCTYPE \"//blah\" [ \"foo\nconst S_DTD_OPEN_WAKA = 6;\nconst S_DTD_OPEN_WAKA_BANG = 7;\nconst S_DTD_COMMENT = 8; // <!--\nconst S_DTD_COMMENT_ENDING = 9; // <!-- blah -\nconst S_DTD_COMMENT_ENDED = 10; // <!-- blah --\nconst S_DTD_PI = 11; // <?\nconst S_DTD_PI_ENDING = 12; // <?hi \"there\" ?\nconst S_TEXT = 13; // general stuff\nconst S_ENTITY = 14; // &amp and such\nconst S_OPEN_WAKA = 15; // <\nconst S_OPEN_WAKA_BANG = 16; // <!...\nconst S_COMMENT = 17; // <!--\nconst S_COMMENT_ENDING = 18; // <!-- blah -\nconst S_COMMENT_ENDED = 19; // <!-- blah --\nconst S_CDATA = 20; // <![CDATA[ something\nconst S_CDATA_ENDING = 21; // ]\nconst S_CDATA_ENDING_2 = 22; // ]]\nconst S_PI_FIRST_CHAR = 23; // <?hi, first char\nconst S_PI_REST = 24; // <?hi, rest of the name\nconst S_PI_BODY = 25; // <?hi there\nconst S_PI_ENDING = 26; // <?hi \"there\" ?\nconst S_XML_DECL_NAME_START = 27; // <?xml\nconst S_XML_DECL_NAME = 28; // <?xml foo\nconst S_XML_DECL_EQ = 29; // <?xml foo=\nconst S_XML_DECL_VALUE_START = 30; // <?xml foo=\nconst S_XML_DECL_VALUE = 31; // <?xml foo=\"bar\"\nconst S_XML_DECL_SEPARATOR = 32; // <?xml foo=\"bar\"\nconst S_XML_DECL_ENDING = 33; // <?xml ... ?\nconst S_OPEN_TAG = 34; // <strong\nconst S_OPEN_TAG_SLASH = 35; // <strong /\nconst S_ATTRIB = 36; // <a\nconst S_ATTRIB_NAME = 37; // <a foo\nconst S_ATTRIB_NAME_SAW_WHITE = 38; // <a foo _\nconst S_ATTRIB_VALUE = 39; // <a foo=\nconst S_ATTRIB_VALUE_QUOTED = 40; // <a foo=\"bar\nconst S_ATTRIB_VALUE_CLOSED = 41; // <a foo=\"bar\"\nconst S_ATTRIB_VALUE_UNQUOTED = 42; // <a foo=bar\nconst S_CLOSE_TAG = 43; // </a\nconst S_CLOSE_TAG_SAW_WHITE = 44; // </a >\nconst TAB = 9;\nconst NL = 0xA;\nconst CR = 0xD;\nconst SPACE = 0x20;\nconst BANG = 0x21;\nconst DQUOTE = 0x22;\nconst AMP = 0x26;\nconst SQUOTE = 0x27;\nconst MINUS = 0x2D;\nconst FORWARD_SLASH = 0x2F;\nconst SEMICOLON = 0x3B;\nconst LESS = 0x3C;\nconst EQUAL = 0x3D;\nconst GREATER = 0x3E;\nconst QUESTION = 0x3F;\nconst OPEN_BRACKET = 0x5B;\nconst CLOSE_BRACKET = 0x5D;\nconst NEL = 0x85;\nconst LS = 0x2028; // Line Separator\nconst isQuote = (c) => c === DQUOTE || c === SQUOTE;\nconst QUOTES = [DQUOTE, SQUOTE];\nconst DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER];\nconst DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET];\nconst XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST];\nconst ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS];\nfunction nsPairCheck(parser, prefix, uri) {\n switch (prefix) {\n case \"xml\":\n if (uri !== XML_NAMESPACE) {\n parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);\n }\n break;\n case \"xmlns\":\n if (uri !== XMLNS_NAMESPACE) {\n parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`);\n }\n break;\n default:\n }\n switch (uri) {\n case XMLNS_NAMESPACE:\n parser.fail(prefix === \"\" ?\n `the default namespace may not be set to ${uri}.` :\n `may not assign a prefix (even \"xmlns\") to the URI \\\n${XMLNS_NAMESPACE}.`);\n break;\n case XML_NAMESPACE:\n switch (prefix) {\n case \"xml\":\n // Assinging the XML namespace to \"xml\" is fine.\n break;\n case \"\":\n parser.fail(`the default namespace may not be set to ${uri}.`);\n break;\n default:\n parser.fail(\"may not assign the xml namespace to another prefix.\");\n }\n break;\n default:\n }\n}\nfunction nsMappingCheck(parser, mapping) {\n for (const local of Object.keys(mapping)) {\n nsPairCheck(parser, local, mapping[local]);\n }\n}\nconst isNCName = (name) => NC_NAME_RE.test(name);\nconst isName = (name) => NAME_RE.test(name);\nconst FORBIDDEN_START = 0;\nconst FORBIDDEN_BRACKET = 1;\nconst FORBIDDEN_BRACKET_BRACKET = 2;\n/**\n * The list of supported events.\n */\nexports.EVENTS = [\n \"xmldecl\",\n \"text\",\n \"processinginstruction\",\n \"doctype\",\n \"comment\",\n \"opentagstart\",\n \"attribute\",\n \"opentag\",\n \"closetag\",\n \"cdata\",\n \"error\",\n \"end\",\n \"ready\",\n];\nconst EVENT_NAME_TO_HANDLER_NAME = {\n xmldecl: \"xmldeclHandler\",\n text: \"textHandler\",\n processinginstruction: \"piHandler\",\n doctype: \"doctypeHandler\",\n comment: \"commentHandler\",\n opentagstart: \"openTagStartHandler\",\n attribute: \"attributeHandler\",\n opentag: \"openTagHandler\",\n closetag: \"closeTagHandler\",\n cdata: \"cdataHandler\",\n error: \"errorHandler\",\n end: \"endHandler\",\n ready: \"readyHandler\",\n};\n// eslint-disable-next-line @typescript-eslint/ban-types\nclass SaxesParser {\n /**\n * Indicates whether or not the parser is closed. If ``true``, wait for\n * the ``ready`` event to write again.\n */\n get closed() {\n return this._closed;\n }\n /**\n * @param opt The parser options.\n */\n constructor(opt) {\n this.opt = opt !== null && opt !== void 0 ? opt : {};\n this.fragmentOpt = !!this.opt.fragment;\n const xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns;\n this.trackPosition = this.opt.position !== false;\n this.fileName = this.opt.fileName;\n if (xmlnsOpt) {\n // This is the function we use to perform name checks on PIs and entities.\n // When namespaces are used, colons are not allowed in PI target names or\n // entity names. So the check depends on whether namespaces are used. See:\n //\n // https://www.w3.org/XML/xml-names-19990114-errata.html\n // NE08\n //\n this.nameStartCheck = isNCNameStartChar;\n this.nameCheck = isNCNameChar;\n this.isName = isNCName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsNS;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribNS;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n this.ns = Object.assign({ __proto__: null }, rootNS);\n const additional = this.opt.additionalNamespaces;\n if (additional != null) {\n nsMappingCheck(this, additional);\n Object.assign(this.ns, additional);\n }\n }\n else {\n this.nameStartCheck = isNameStartChar;\n this.nameCheck = isNameChar;\n this.isName = isName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsPlain;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribPlain;\n }\n //\n // The order of the members in this table needs to correspond to the state\n // numbers given to the states that correspond to the methods being recorded\n // here.\n //\n this.stateTable = [\n /* eslint-disable @typescript-eslint/unbound-method */\n this.sBegin,\n this.sBeginWhitespace,\n this.sDoctype,\n this.sDoctypeQuote,\n this.sDTD,\n this.sDTDQuoted,\n this.sDTDOpenWaka,\n this.sDTDOpenWakaBang,\n this.sDTDComment,\n this.sDTDCommentEnding,\n this.sDTDCommentEnded,\n this.sDTDPI,\n this.sDTDPIEnding,\n this.sText,\n this.sEntity,\n this.sOpenWaka,\n this.sOpenWakaBang,\n this.sComment,\n this.sCommentEnding,\n this.sCommentEnded,\n this.sCData,\n this.sCDataEnding,\n this.sCDataEnding2,\n this.sPIFirstChar,\n this.sPIRest,\n this.sPIBody,\n this.sPIEnding,\n this.sXMLDeclNameStart,\n this.sXMLDeclName,\n this.sXMLDeclEq,\n this.sXMLDeclValueStart,\n this.sXMLDeclValue,\n this.sXMLDeclSeparator,\n this.sXMLDeclEnding,\n this.sOpenTag,\n this.sOpenTagSlash,\n this.sAttrib,\n this.sAttribName,\n this.sAttribNameSawWhite,\n this.sAttribValue,\n this.sAttribValueQuoted,\n this.sAttribValueClosed,\n this.sAttribValueUnquoted,\n this.sCloseTag,\n this.sCloseTagSawWhite,\n /* eslint-enable @typescript-eslint/unbound-method */\n ];\n this._init();\n }\n _init() {\n var _a;\n this.openWakaBang = \"\";\n this.text = \"\";\n this.name = \"\";\n this.piTarget = \"\";\n this.entity = \"\";\n this.q = null;\n this.tags = [];\n this.tag = null;\n this.topNS = null;\n this.chunk = \"\";\n this.chunkPosition = 0;\n this.i = 0;\n this.prevI = 0;\n this.carriedFromPrevious = undefined;\n this.forbiddenState = FORBIDDEN_START;\n this.attribList = [];\n // The logic is organized so as to minimize the need to check\n // this.opt.fragment while parsing.\n const { fragmentOpt } = this;\n this.state = fragmentOpt ? S_TEXT : S_BEGIN;\n // We want these to be all true if we are dealing with a fragment.\n this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot =\n this.sawRoot = fragmentOpt;\n // An XML declaration is intially possible only when parsing whole\n // documents.\n this.xmlDeclPossible = !fragmentOpt;\n this.xmlDeclExpects = [\"version\"];\n this.entityReturnState = undefined;\n let { defaultXMLVersion } = this.opt;\n if (defaultXMLVersion === undefined) {\n if (this.opt.forceXMLVersion === true) {\n throw new Error(\"forceXMLVersion set but defaultXMLVersion is not set\");\n }\n defaultXMLVersion = \"1.0\";\n }\n this.setXMLVersion(defaultXMLVersion);\n this.positionAtNewLine = 0;\n this.doctype = false;\n this._closed = false;\n this.xmlDecl = {\n version: undefined,\n encoding: undefined,\n standalone: undefined,\n };\n this.line = 1;\n this.column = 0;\n this.ENTITIES = Object.create(XML_ENTITIES);\n (_a = this.readyHandler) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n /**\n * The stream position the parser is currently looking at. This field is\n * zero-based.\n *\n * This field is not based on counting Unicode characters but is to be\n * interpreted as a plain index into a JavaScript string.\n */\n get position() {\n return this.chunkPosition + this.i;\n }\n /**\n * The column number of the next character to be read by the parser. *\n * This field is zero-based. (The first column in a line is 0.)\n *\n * This field reports the index at which the next character would be in the\n * line if the line were represented as a JavaScript string. Note that this\n * *can* be different to a count based on the number of *Unicode characters*\n * due to how JavaScript handles astral plane characters.\n *\n * See [[column]] for a number that corresponds to a count of Unicode\n * characters.\n */\n get columnIndex() {\n return this.position - this.positionAtNewLine;\n }\n /**\n * Set an event listener on an event. The parser supports one handler per\n * event type. If you try to set an event handler over an existing handler,\n * the old handler is silently overwritten.\n *\n * @param name The event to listen to.\n *\n * @param handler The handler to set.\n */\n on(name, handler) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler;\n }\n /**\n * Unset an event handler.\n *\n * @parma name The event to stop listening to.\n */\n off(name) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined;\n }\n /**\n * Make an error object. The error object will have a message that contains\n * the ``fileName`` option passed at the creation of the parser. If position\n * tracking was turned on, it will also have line and column number\n * information.\n *\n * @param message The message describing the error to report.\n *\n * @returns An error object with a properly formatted message.\n */\n makeError(message) {\n var _a;\n let msg = (_a = this.fileName) !== null && _a !== void 0 ? _a : \"\";\n if (this.trackPosition) {\n if (msg.length > 0) {\n msg += \":\";\n }\n msg += `${this.line}:${this.column}`;\n }\n if (msg.length > 0) {\n msg += \": \";\n }\n return new Error(msg + message);\n }\n /**\n * Report a parsing error. This method is made public so that client code may\n * check for issues that are outside the scope of this project and can report\n * errors.\n *\n * @param message The error to report.\n *\n * @returns this\n */\n fail(message) {\n const err = this.makeError(message);\n const handler = this.errorHandler;\n if (handler === undefined) {\n throw err;\n }\n else {\n handler(err);\n }\n return this;\n }\n /**\n * Write a XML data to the parser.\n *\n * @param chunk The XML data to write.\n *\n * @returns this\n */\n // We do need object for the type here. Yes, it often causes problems\n // but not in this case.\n write(chunk) {\n if (this.closed) {\n return this.fail(\"cannot write after close; assign an onready handler.\");\n }\n let end = false;\n if (chunk === null) {\n // We cannot return immediately because carriedFromPrevious may need\n // processing.\n end = true;\n chunk = \"\";\n }\n else if (typeof chunk === \"object\") {\n chunk = chunk.toString();\n }\n // We checked if performing a pre-decomposition of the string into an array\n // of single complete characters (``Array.from(chunk)``) would be faster\n // than the current repeated calls to ``charCodeAt``. As of August 2018, it\n // isn't. (There may be Node-specific code that would perform faster than\n // ``Array.from`` but don't want to be dependent on Node.)\n if (this.carriedFromPrevious !== undefined) {\n // The previous chunk had char we must carry over.\n chunk = `${this.carriedFromPrevious}${chunk}`;\n this.carriedFromPrevious = undefined;\n }\n let limit = chunk.length;\n const lastCode = chunk.charCodeAt(limit - 1);\n if (!end &&\n // A trailing CR or surrogate must be carried over to the next\n // chunk.\n (lastCode === CR || (lastCode >= 0xD800 && lastCode <= 0xDBFF))) {\n // The chunk ends with a character that must be carried over. We cannot\n // know how to handle it until we get the next chunk or the end of the\n // stream. So save it for later.\n this.carriedFromPrevious = chunk[limit - 1];\n limit--;\n chunk = chunk.slice(0, limit);\n }\n const { stateTable } = this;\n this.chunk = chunk;\n this.i = 0;\n while (this.i < limit) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument\n stateTable[this.state].call(this);\n }\n this.chunkPosition += limit;\n return end ? this.end() : this;\n }\n /**\n * Close the current stream. Perform final well-formedness checks and reset\n * the parser tstate.\n *\n * @returns this\n */\n close() {\n return this.write(null);\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.0.\n *\n * @returns The character read.\n */\n getCode10() {\n const { chunk, i } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if (code >= SPACE || code === TAB) {\n return code;\n }\n switch (code) {\n case NL:\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR:\n // We may get NaN if we read past the end of the chunk, which is fine.\n if (chunk.charCodeAt(i + 1) === NL) {\n // A \\r\\n sequence is converted to \\n so we have to skip over the\n // next character. We already know it has a size of 1 so ++ is fine\n // here.\n this.i = i + 2;\n }\n // Otherwise, a \\r is just converted to \\n, so we don't have to skip\n // ahead.\n // In either case, \\r becomes \\n.\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n // If we get here, then code < SPACE and it is not NL CR or TAB.\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isChar10 that takes into account\n // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not\n // test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + ((code - 0xD800) * 0x400) +\n (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isChar10 that takes into account that in\n // this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.1.\n *\n * @returns {number} The character read.\n */\n getCode11() {\n const { chunk, i } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if ((code > 0x1F && code < 0x7F) || (code > 0x9F && code !== LS) ||\n code === TAB) {\n return code;\n }\n switch (code) {\n case NL: // 0xA\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR: { // 0xD\n // We may get NaN if we read past the end of the chunk, which is\n // fine.\n const next = chunk.charCodeAt(i + 1);\n if (next === NL || next === NEL) {\n // A CR NL or CR NEL sequence is converted to NL so we have to skip\n // over the next character. We already know it has a size of 1.\n this.i = i + 2;\n }\n // Otherwise, a CR is just converted to NL, no skip.\n }\n /* yes, fall through */\n case NEL: // 0x85\n case LS: // Ox2028\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context code > 0xDBFF and code <= 0xFFFF. So it\n // does not test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + ((code - 0xD800) * 0x400) +\n (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Like ``getCode`` but with the return value normalized so that ``NL`` is\n * returned for ``NL_LIKE``.\n */\n getCodeNorm() {\n const c = this.getCode();\n return c === NL_LIKE ? NL : c;\n }\n unget() {\n this.i = this.prevI;\n this.column--;\n }\n /**\n * Capture characters into a buffer until encountering one of a set of\n * characters.\n *\n * @param chars An array of codepoints. Encountering a character in the array\n * ends the capture. (``chars`` may safely contain ``NL``.)\n *\n * @return The character code that made the capture end, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureTo(chars) {\n let { i: start } = this;\n const { chunk } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n const isNLLike = c === NL_LIKE;\n const final = isNLLike ? NL : c;\n if (final === EOC || chars.includes(final)) {\n this.text += chunk.slice(start, this.prevI);\n return final;\n }\n if (isNLLike) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n }\n }\n }\n /**\n * Capture characters into a buffer until encountering a character.\n *\n * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT\n * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior.\n *\n * @return ``true`` if we ran into the character. Otherwise, we ran into the\n * end of the current chunk.\n */\n captureToChar(char) {\n let { i: start } = this;\n const { chunk } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let c = this.getCode();\n switch (c) {\n case NL_LIKE:\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n c = NL;\n break;\n case EOC:\n this.text += chunk.slice(start);\n return false;\n default:\n }\n if (c === char) {\n this.text += chunk.slice(start, this.prevI);\n return true;\n }\n }\n }\n /**\n * Capture characters that satisfy ``isNameChar`` into the ``name`` field of\n * this parser.\n *\n * @return The character code that made the test fail, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureNameChars() {\n const { chunk, i: start } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n if (c === EOC) {\n this.name += chunk.slice(start);\n return EOC;\n }\n // NL is not a name char so we don't have to test specifically for it.\n if (!isNameChar(c)) {\n this.name += chunk.slice(start, this.prevI);\n return c === NL_LIKE ? NL : c;\n }\n }\n }\n /**\n * Skip white spaces.\n *\n * @return The character that ended the skip, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n skipSpaces() {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC || !isS(c)) {\n return c;\n }\n }\n }\n setXMLVersion(version) {\n this.currentXMLVersion = version;\n /* eslint-disable @typescript-eslint/unbound-method */\n if (version === \"1.0\") {\n this.isChar = isChar10;\n this.getCode = this.getCode10;\n }\n else {\n this.isChar = isChar11;\n this.getCode = this.getCode11;\n }\n /* eslint-enable @typescript-eslint/unbound-method */\n }\n // STATE ENGINE METHODS\n // This needs to be a state separate from S_BEGIN_WHITESPACE because we want\n // to be sure never to come back to this state later.\n sBegin() {\n // We are essentially peeking at the first character of the chunk. Since\n // S_BEGIN can be in effect only when we start working on the first chunk,\n // the index at which we must look is necessarily 0. Note also that the\n // following test does not depend on decoding surrogates.\n // If the initial character is 0xFEFF, ignore it.\n if (this.chunk.charCodeAt(0) === 0xFEFF) {\n this.i++;\n this.column++;\n }\n this.state = S_BEGIN_WHITESPACE;\n }\n sBeginWhitespace() {\n // We need to know whether we've encountered spaces or not because as soon\n // as we run into a space, an XML declaration is no longer possible. Rather\n // than slow down skipSpaces even in places where we don't care whether it\n // skipped anything or not, we check whether prevI is equal to the value of\n // i from before we skip spaces.\n const iBefore = this.i;\n const c = this.skipSpaces();\n if (this.prevI !== iBefore) {\n this.xmlDeclPossible = false;\n }\n switch (c) {\n case LESS:\n this.state = S_OPEN_WAKA;\n // We could naively call closeText but in this state, it is not normal\n // to have text be filled with any data.\n if (this.text.length !== 0) {\n throw new Error(\"no-empty text at start\");\n }\n break;\n case EOC:\n break;\n default:\n this.unget();\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n sDoctype() {\n var _a;\n const c = this.captureTo(DOCTYPE_TERMINATOR);\n switch (c) {\n case GREATER: {\n (_a = this.doctypeHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n this.doctype = true; // just remember that we saw it.\n break;\n }\n case EOC:\n break;\n default:\n this.text += String.fromCodePoint(c);\n if (c === OPEN_BRACKET) {\n this.state = S_DTD;\n }\n else if (isQuote(c)) {\n this.state = S_DOCTYPE_QUOTE;\n this.q = c;\n }\n }\n }\n sDoctypeQuote() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.q = null;\n this.state = S_DOCTYPE;\n }\n }\n sDTD() {\n const c = this.captureTo(DTD_TERMINATOR);\n if (c === EOC) {\n return;\n }\n this.text += String.fromCodePoint(c);\n if (c === CLOSE_BRACKET) {\n this.state = S_DOCTYPE;\n }\n else if (c === LESS) {\n this.state = S_DTD_OPEN_WAKA;\n }\n else if (isQuote(c)) {\n this.state = S_DTD_QUOTED;\n this.q = c;\n }\n }\n sDTDQuoted() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.state = S_DTD;\n this.q = null;\n }\n }\n sDTDOpenWaka() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n switch (c) {\n case BANG:\n this.state = S_DTD_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n break;\n case QUESTION:\n this.state = S_DTD_PI;\n break;\n default:\n this.state = S_DTD;\n }\n }\n sDTDOpenWakaBang() {\n const char = String.fromCodePoint(this.getCodeNorm());\n const owb = this.openWakaBang += char;\n this.text += char;\n if (owb !== \"-\") {\n this.state = owb === \"--\" ? S_DTD_COMMENT : S_DTD;\n this.openWakaBang = \"\";\n }\n }\n sDTDComment() {\n if (this.captureToChar(MINUS)) {\n this.text += \"-\";\n this.state = S_DTD_COMMENT_ENDING;\n }\n }\n sDTDCommentEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT;\n }\n sDTDCommentEnded() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n }\n else {\n this.fail(\"malformed comment.\");\n // <!-- blah -- bloo --> will be recorded as\n // a comment of \" blah -- bloo \"\n this.state = S_DTD_COMMENT;\n }\n }\n sDTDPI() {\n if (this.captureToChar(QUESTION)) {\n this.text += \"?\";\n this.state = S_DTD_PI_ENDING;\n }\n }\n sDTDPIEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n }\n }\n sText() {\n //\n // We did try a version of saxes where the S_TEXT state was split in two\n // states: one for text inside the root element, and one for text\n // outside. This was avoiding having to test this.tags.length to decide\n // what implementation to actually use.\n //\n // Peformance testing on gigabyte-size files did not show any advantage to\n // using the two states solution instead of the current one. Conversely, it\n // made the code a bit more complicated elsewhere. For instance, a comment\n // can appear before the root element so when a comment ended it was\n // necessary to determine whether to return to the S_TEXT state or to the\n // new text-outside-root state.\n //\n if (this.tags.length !== 0) {\n this.handleTextInRoot();\n }\n else {\n this.handleTextOutsideRoot();\n }\n }\n sEntity() {\n // This is essentially a specialized version of captureToChar(SEMICOLON...)\n let { i: start } = this;\n const { chunk } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n loop: \n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case NL_LIKE:\n this.entity += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n break;\n case SEMICOLON: {\n const { entityReturnState } = this;\n const entity = this.entity + chunk.slice(start, this.prevI);\n this.state = entityReturnState;\n let parsed;\n if (entity === \"\") {\n this.fail(\"empty entity name.\");\n parsed = \"&;\";\n }\n else {\n parsed = this.parseEntity(entity);\n this.entity = \"\";\n }\n if (entityReturnState !== S_TEXT || this.textHandler !== undefined) {\n this.text += parsed;\n }\n // eslint-disable-next-line no-labels\n break loop;\n }\n case EOC:\n this.entity += chunk.slice(start);\n // eslint-disable-next-line no-labels\n break loop;\n default:\n }\n }\n }\n sOpenWaka() {\n // Reminder: a state handler is called with at least one character\n // available in the current chunk. So the first call to get code inside of\n // a state handler cannot return ``EOC``. That's why we don't test\n // for it.\n const c = this.getCode();\n // either a /, ?, !, or text is coming next.\n if (isNameStartChar(c)) {\n this.state = S_OPEN_TAG;\n this.unget();\n this.xmlDeclPossible = false;\n }\n else {\n switch (c) {\n case FORWARD_SLASH:\n this.state = S_CLOSE_TAG;\n this.xmlDeclPossible = false;\n break;\n case BANG:\n this.state = S_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n this.xmlDeclPossible = false;\n break;\n case QUESTION:\n this.state = S_PI_FIRST_CHAR;\n break;\n default:\n this.fail(\"disallowed character in tag name\");\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n }\n sOpenWakaBang() {\n this.openWakaBang += String.fromCodePoint(this.getCodeNorm());\n switch (this.openWakaBang) {\n case \"[CDATA[\":\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n this.state = S_CDATA;\n this.openWakaBang = \"\";\n break;\n case \"--\":\n this.state = S_COMMENT;\n this.openWakaBang = \"\";\n break;\n case \"DOCTYPE\":\n this.state = S_DOCTYPE;\n if (this.doctype || this.sawRoot) {\n this.fail(\"inappropriately located doctype declaration.\");\n }\n this.openWakaBang = \"\";\n break;\n default:\n // 7 happens to be the maximum length of the string that can possibly\n // match one of the cases above.\n if (this.openWakaBang.length >= 7) {\n this.fail(\"incorrect syntax.\");\n }\n }\n }\n sComment() {\n if (this.captureToChar(MINUS)) {\n this.state = S_COMMENT_ENDING;\n }\n }\n sCommentEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === MINUS) {\n this.state = S_COMMENT_ENDED;\n (_a = this.commentHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n }\n else {\n this.text += `-${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n }\n }\n sCommentEnded() {\n const c = this.getCodeNorm();\n if (c !== GREATER) {\n this.fail(\"malformed comment.\");\n // <!-- blah -- bloo --> will be recorded as\n // a comment of \" blah -- bloo \"\n this.text += `--${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n }\n else {\n this.state = S_TEXT;\n }\n }\n sCData() {\n if (this.captureToChar(CLOSE_BRACKET)) {\n this.state = S_CDATA_ENDING;\n }\n }\n sCDataEnding() {\n const c = this.getCodeNorm();\n if (c === CLOSE_BRACKET) {\n this.state = S_CDATA_ENDING_2;\n }\n else {\n this.text += `]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n sCDataEnding2() {\n var _a;\n const c = this.getCodeNorm();\n switch (c) {\n case GREATER: {\n (_a = this.cdataHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n break;\n }\n case CLOSE_BRACKET:\n this.text += \"]\";\n break;\n default:\n this.text += `]]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n // We need this separate state to check the first character fo the pi target\n // with this.nameStartCheck which allows less characters than this.nameCheck.\n sPIFirstChar() {\n const c = this.getCodeNorm();\n // This is first because in the case where the file is well-formed this is\n // the branch taken. We optimize for well-formedness.\n if (this.nameStartCheck(c)) {\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n }\n else if (c === QUESTION || isS(c)) {\n this.fail(\"processing instruction without a target.\");\n this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY;\n }\n else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n }\n }\n sPIRest() {\n // Capture characters into a piTarget while ``this.nameCheck`` run on the\n // character read returns true.\n const { chunk, i: start } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC) {\n this.piTarget += chunk.slice(start);\n return;\n }\n // NL cannot satisfy this.nameCheck so we don't have to test specifically\n // for it.\n if (!this.nameCheck(c)) {\n this.piTarget += chunk.slice(start, this.prevI);\n const isQuestion = c === QUESTION;\n if (isQuestion || isS(c)) {\n if (this.piTarget === \"xml\") {\n if (!this.xmlDeclPossible) {\n this.fail(\"an XML declaration must be at the start of the document.\");\n }\n this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START;\n }\n else {\n this.state = isQuestion ? S_PI_ENDING : S_PI_BODY;\n }\n }\n else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n }\n break;\n }\n }\n }\n sPIBody() {\n if (this.text.length === 0) {\n const c = this.getCodeNorm();\n if (c === QUESTION) {\n this.state = S_PI_ENDING;\n }\n else if (!isS(c)) {\n this.text = String.fromCodePoint(c);\n }\n }\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n else if (this.captureToChar(QUESTION)) {\n this.state = S_PI_ENDING;\n }\n }\n sPIEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n const { piTarget } = this;\n if (piTarget.toLowerCase() === \"xml\") {\n this.fail(\"the XML declaration must appear at the start of the document.\");\n }\n (_a = this.piHandler) === null || _a === void 0 ? void 0 : _a.call(this, {\n target: piTarget,\n body: this.text,\n });\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n }\n else if (c === QUESTION) {\n // We ran into ?? as part of a processing instruction. We initially took\n // the first ? as a sign that the PI was ending, but it is not. So we have\n // to add it to the body but we take the new ? as a sign that the PI is\n // ending.\n this.text += \"?\";\n }\n else {\n this.text += `?${String.fromCodePoint(c)}`;\n this.state = S_PI_BODY;\n }\n this.xmlDeclPossible = false;\n }\n sXMLDeclNameStart() {\n const c = this.skipSpaces();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (c !== EOC) {\n this.state = S_XML_DECL_NAME;\n this.name = String.fromCodePoint(c);\n }\n }\n sXMLDeclName() {\n const c = this.captureTo(XML_DECL_NAME_TERMINATOR);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.name += this.text;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (!(isS(c) || c === EQUAL)) {\n return;\n }\n this.name += this.text;\n this.text = \"\";\n if (!this.xmlDeclExpects.includes(this.name)) {\n switch (this.name.length) {\n case 0:\n this.fail(\"did not expect any more name/value pairs.\");\n break;\n case 1:\n this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);\n break;\n default:\n this.fail(`expected one of ${this.xmlDeclExpects.join(\", \")}`);\n }\n }\n this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ;\n }\n sXMLDeclEq() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (c !== EQUAL) {\n this.fail(\"value required.\");\n }\n this.state = S_XML_DECL_VALUE_START;\n }\n sXMLDeclValueStart() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (!isQuote(c)) {\n this.fail(\"value must be quoted.\");\n this.q = SPACE;\n }\n else {\n this.q = c;\n }\n this.state = S_XML_DECL_VALUE;\n }\n sXMLDeclValue() {\n const c = this.captureTo([this.q, QUESTION]);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (c === EOC) {\n return;\n }\n const value = this.text;\n this.text = \"\";\n switch (this.name) {\n case \"version\": {\n this.xmlDeclExpects = [\"encoding\", \"standalone\"];\n const version = value;\n this.xmlDecl.version = version;\n // This is the test specified by XML 1.0 but it is fine for XML 1.1.\n if (!/^1\\.[0-9]+$/.test(version)) {\n this.fail(\"version number must match /^1\\\\.[0-9]+$/.\");\n }\n // When forceXMLVersion is set, the XML declaration is ignored.\n else if (!this.opt.forceXMLVersion) {\n this.setXMLVersion(version);\n }\n break;\n }\n case \"encoding\":\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) {\n this.fail(\"encoding value must match \\\n/^[A-Za-z0-9][A-Za-z0-9._-]*$/.\");\n }\n this.xmlDeclExpects = [\"standalone\"];\n this.xmlDecl.encoding = value;\n break;\n case \"standalone\":\n if (value !== \"yes\" && value !== \"no\") {\n this.fail(\"standalone value must match \\\"yes\\\" or \\\"no\\\".\");\n }\n this.xmlDeclExpects = [];\n this.xmlDecl.standalone = value;\n break;\n default:\n // We don't need to raise an error here since we've already raised one\n // when checking what name was expected.\n }\n this.name = \"\";\n this.state = S_XML_DECL_SEPARATOR;\n }\n sXMLDeclSeparator() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (!isS(c)) {\n this.fail(\"whitespace required.\");\n this.unget();\n }\n this.state = S_XML_DECL_NAME_START;\n }\n sXMLDeclEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n if (this.piTarget !== \"xml\") {\n this.fail(\"processing instructions are not allowed before root.\");\n }\n else if (this.name !== \"version\" &&\n this.xmlDeclExpects.includes(\"version\")) {\n this.fail(\"XML declaration must contain a version.\");\n }\n (_a = this.xmldeclHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.xmlDecl);\n this.name = \"\";\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n }\n else {\n // We got here because the previous character was a ?, but the question\n // mark character is not valid inside any of the XML declaration\n // name/value pairs.\n this.fail(\"The character ? is disallowed anywhere in XML declarations.\");\n }\n this.xmlDeclPossible = false;\n }\n sOpenTag() {\n var _a;\n const c = this.captureNameChars();\n if (c === EOC) {\n return;\n }\n const tag = this.tag = {\n name: this.name,\n attributes: Object.create(null),\n };\n this.name = \"\";\n if (this.xmlnsOpt) {\n this.topNS = tag.ns = Object.create(null);\n }\n (_a = this.openTagStartHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n this.sawRoot = true;\n if (!this.fragmentOpt && this.closedRoot) {\n this.fail(\"documents may contain only one root.\");\n }\n switch (c) {\n case GREATER:\n this.openTag();\n break;\n case FORWARD_SLASH:\n this.state = S_OPEN_TAG_SLASH;\n break;\n default:\n if (!isS(c)) {\n this.fail(\"disallowed character in tag name.\");\n }\n this.state = S_ATTRIB;\n }\n }\n sOpenTagSlash() {\n if (this.getCode() === GREATER) {\n this.openSelfClosingTag();\n }\n else {\n this.fail(\"forward-slash in opening tag not followed by >.\");\n this.state = S_ATTRIB;\n }\n }\n sAttrib() {\n const c = this.skipSpaces();\n if (c === EOC) {\n return;\n }\n if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n }\n else if (c === GREATER) {\n this.openTag();\n }\n else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n }\n else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribName() {\n const c = this.captureNameChars();\n if (c === EQUAL) {\n this.state = S_ATTRIB_VALUE;\n }\n else if (isS(c)) {\n this.state = S_ATTRIB_NAME_SAW_WHITE;\n }\n else if (c === GREATER) {\n this.fail(\"attribute without value.\");\n this.pushAttrib(this.name, this.name);\n this.name = this.text = \"\";\n this.openTag();\n }\n else if (c !== EOC) {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribNameSawWhite() {\n const c = this.skipSpaces();\n switch (c) {\n case EOC:\n return;\n case EQUAL:\n this.state = S_ATTRIB_VALUE;\n break;\n default:\n this.fail(\"attribute without value.\");\n // Should we do this???\n // this.tag.attributes[this.name] = \"\";\n this.text = \"\";\n this.name = \"\";\n if (c === GREATER) {\n this.openTag();\n }\n else if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n }\n else {\n this.fail(\"disallowed character in attribute name.\");\n this.state = S_ATTRIB;\n }\n }\n }\n sAttribValue() {\n const c = this.getCodeNorm();\n if (isQuote(c)) {\n this.q = c;\n this.state = S_ATTRIB_VALUE_QUOTED;\n }\n else if (!isS(c)) {\n this.fail(\"unquoted attribute value.\");\n this.state = S_ATTRIB_VALUE_UNQUOTED;\n this.unget();\n }\n }\n sAttribValueQuoted() {\n // We deliberately do not use captureTo here. The specialized code we use\n // here is faster than using captureTo.\n const { q, chunk } = this;\n let { i: start } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case q:\n this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI));\n this.name = this.text = \"\";\n this.q = null;\n this.state = S_ATTRIB_VALUE_CLOSED;\n return;\n case AMP:\n this.text += chunk.slice(start, this.prevI);\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_QUOTED;\n return;\n case NL:\n case NL_LIKE:\n case TAB:\n this.text += `${chunk.slice(start, this.prevI)} `;\n start = this.i;\n break;\n case LESS:\n this.text += chunk.slice(start, this.prevI);\n this.fail(\"disallowed character.\");\n return;\n case EOC:\n this.text += chunk.slice(start);\n return;\n default:\n }\n }\n }\n sAttribValueClosed() {\n const c = this.getCodeNorm();\n if (isS(c)) {\n this.state = S_ATTRIB;\n }\n else if (c === GREATER) {\n this.openTag();\n }\n else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n }\n else if (isNameStartChar(c)) {\n this.fail(\"no whitespace between attributes.\");\n this.unget();\n this.state = S_ATTRIB_NAME;\n }\n else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribValueUnquoted() {\n // We don't do anything regarding EOL or space handling for unquoted\n // attributes. We already have failed by the time we get here, and the\n // contract that saxes upholds states that upon failure, it is not safe to\n // rely on the data passed to event handlers (other than\n // ``onerror``). Passing \"bad\" data is not a problem.\n const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);\n switch (c) {\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED;\n break;\n case LESS:\n this.fail(\"disallowed character.\");\n break;\n case EOC:\n break;\n default:\n if (this.text.includes(\"]]>\")) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n this.pushAttrib(this.name, this.text);\n this.name = this.text = \"\";\n if (c === GREATER) {\n this.openTag();\n }\n else {\n this.state = S_ATTRIB;\n }\n }\n }\n sCloseTag() {\n const c = this.captureNameChars();\n if (c === GREATER) {\n this.closeTag();\n }\n else if (isS(c)) {\n this.state = S_CLOSE_TAG_SAW_WHITE;\n }\n else if (c !== EOC) {\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n sCloseTagSawWhite() {\n switch (this.skipSpaces()) {\n case GREATER:\n this.closeTag();\n break;\n case EOC:\n break;\n default:\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n // END OF STATE ENGINE METHODS\n handleTextInRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for performing the ]]> check. A previous version of this code, checked\n // ``this.text`` for the presence of ]]>. It simplified the code but was\n // very costly when character data contained a lot of entities to be parsed.\n //\n // Since we are using a specialized loop, we also keep track of the presence\n // of ]]> in text data. The sequence ]]> is forbidden to appear as-is.\n //\n let { i: start, forbiddenState } = this;\n const { chunk, textHandler: handler } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n scanLoop: \n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case LESS: {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const { text } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n }\n else if (slice.length !== 0) {\n handler(slice);\n }\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n case CLOSE_BRACKET:\n switch (forbiddenState) {\n case FORBIDDEN_START:\n forbiddenState = FORBIDDEN_BRACKET;\n break;\n case FORBIDDEN_BRACKET:\n forbiddenState = FORBIDDEN_BRACKET_BRACKET;\n break;\n case FORBIDDEN_BRACKET_BRACKET:\n break;\n default:\n throw new Error(\"impossible state\");\n }\n break;\n case GREATER:\n if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n forbiddenState = FORBIDDEN_START;\n break;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n forbiddenState = FORBIDDEN_START;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break scanLoop;\n default:\n forbiddenState = FORBIDDEN_START;\n }\n }\n this.forbiddenState = forbiddenState;\n }\n handleTextOutsideRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for a specialized task. We keep track of the presence of non-space\n // characters in the text since these are errors when appearing outside the\n // document root element.\n let { i: start } = this;\n const { chunk, textHandler: handler } = this;\n let nonSpace = false;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n outRootLoop: \n // eslint-disable-next-line no-constant-condition\n while (true) {\n const code = this.getCode();\n switch (code) {\n case LESS: {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const { text } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n }\n else if (slice.length !== 0) {\n handler(slice);\n }\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n nonSpace = true;\n // eslint-disable-next-line no-labels\n break outRootLoop;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n default:\n if (!isS(code)) {\n nonSpace = true;\n }\n }\n }\n if (!nonSpace) {\n return;\n }\n // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags\n // to avoid reporting errors for every single character that is out of\n // place.\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n }\n pushAttribNS(name, value) {\n var _a;\n const { prefix, local } = this.qname(name);\n const attr = { name, prefix, local, value };\n this.attribList.push(attr);\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n if (prefix === \"xmlns\") {\n const trimmed = value.trim();\n if (this.currentXMLVersion === \"1.0\" && trimmed === \"\") {\n this.fail(\"invalid attempt to undefine prefix in XML 1.0\");\n }\n this.topNS[local] = trimmed;\n nsPairCheck(this, local, trimmed);\n }\n else if (name === \"xmlns\") {\n const trimmed = value.trim();\n this.topNS[\"\"] = trimmed;\n nsPairCheck(this, \"\", trimmed);\n }\n }\n pushAttribPlain(name, value) {\n var _a;\n const attr = { name, value };\n this.attribList.push(attr);\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n }\n /**\n * End parsing. This performs final well-formedness checks and resets the\n * parser to a clean state.\n *\n * @returns this\n */\n end() {\n var _a, _b;\n if (!this.sawRoot) {\n this.fail(\"document must contain a root element.\");\n }\n const { tags } = this;\n while (tags.length > 0) {\n const tag = tags.pop();\n this.fail(`unclosed tag: ${tag.name}`);\n }\n if ((this.state !== S_BEGIN) && (this.state !== S_TEXT)) {\n this.fail(\"unexpected end.\");\n }\n const { text } = this;\n if (text.length !== 0) {\n (_a = this.textHandler) === null || _a === void 0 ? void 0 : _a.call(this, text);\n this.text = \"\";\n }\n this._closed = true;\n (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this);\n this._init();\n return this;\n }\n /**\n * Resolve a namespace prefix.\n *\n * @param prefix The prefix to resolve.\n *\n * @returns The namespace URI or ``undefined`` if the prefix is not defined.\n */\n resolve(prefix) {\n var _a, _b;\n let uri = this.topNS[prefix];\n if (uri !== undefined) {\n return uri;\n }\n const { tags } = this;\n for (let index = tags.length - 1; index >= 0; index--) {\n uri = tags[index].ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n }\n uri = this.ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n return (_b = (_a = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a, prefix);\n }\n /**\n * Parse a qname into its prefix and local name parts.\n *\n * @param name The name to parse\n *\n * @returns\n */\n qname(name) {\n // This is faster than using name.split(\":\").\n const colon = name.indexOf(\":\");\n if (colon === -1) {\n return { prefix: \"\", local: name };\n }\n const local = name.slice(colon + 1);\n const prefix = name.slice(0, colon);\n if (prefix === \"\" || local === \"\" || local.includes(\":\")) {\n this.fail(`malformed name: ${name}.`);\n }\n return { prefix, local };\n }\n processAttribsNS() {\n var _a;\n const { attribList } = this;\n const tag = this.tag;\n {\n // add namespace info to tag\n const { prefix, local } = this.qname(tag.name);\n tag.prefix = prefix;\n tag.local = local;\n const uri = tag.uri = (_a = this.resolve(prefix)) !== null && _a !== void 0 ? _a : \"\";\n if (prefix !== \"\") {\n if (prefix === \"xmlns\") {\n this.fail(\"tags may not have \\\"xmlns\\\" as prefix.\");\n }\n if (uri === \"\") {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n tag.uri = prefix;\n }\n }\n }\n if (attribList.length === 0) {\n return;\n }\n const { attributes } = tag;\n const seen = new Set();\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (const attr of attribList) {\n const { name, prefix, local } = attr;\n let uri;\n let eqname;\n if (prefix === \"\") {\n uri = name === \"xmlns\" ? XMLNS_NAMESPACE : \"\";\n eqname = name;\n }\n else {\n uri = this.resolve(prefix);\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (uri === undefined) {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n uri = prefix;\n }\n eqname = `{${uri}}${local}`;\n }\n if (seen.has(eqname)) {\n this.fail(`duplicate attribute: ${eqname}.`);\n }\n seen.add(eqname);\n attr.uri = uri;\n attributes[name] = attr;\n }\n this.attribList = [];\n }\n processAttribsPlain() {\n const { attribList } = this;\n // eslint-disable-next-line prefer-destructuring\n const attributes = this.tag.attributes;\n for (const { name, value } of attribList) {\n if (attributes[name] !== undefined) {\n this.fail(`duplicate attribute: ${name}.`);\n }\n attributes[name] = value;\n }\n this.attribList = [];\n }\n /**\n * Handle a complete open tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onopentag``.\n */\n openTag() {\n var _a;\n this.processAttribs();\n const { tags } = this;\n const tag = this.tag;\n tag.isSelfClosing = false;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n tags.push(tag);\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete self-closing tag. This parser code calls this once it has\n * seen the whole tag. This method checks for well-formeness and then emits\n * ``onopentag`` and ``onclosetag``.\n */\n openSelfClosingTag() {\n var _a, _b, _c;\n this.processAttribs();\n const { tags } = this;\n const tag = this.tag;\n tag.isSelfClosing = true;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag);\n const top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null;\n if (top === null) {\n this.closedRoot = true;\n }\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete close tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onclosetag``.\n */\n closeTag() {\n const { tags, name } = this;\n // Our state after this will be S_TEXT, no matter what, and we can clear\n // tagName now.\n this.state = S_TEXT;\n this.name = \"\";\n if (name === \"\") {\n this.fail(\"weird empty close tag.\");\n this.text += \"</>\";\n return;\n }\n const handler = this.closeTagHandler;\n let l = tags.length;\n while (l-- > 0) {\n const tag = this.tag = tags.pop();\n this.topNS = tag.ns;\n handler === null || handler === void 0 ? void 0 : handler(tag);\n if (tag.name === name) {\n break;\n }\n this.fail(\"unexpected close tag.\");\n }\n if (l === 0) {\n this.closedRoot = true;\n }\n else if (l < 0) {\n this.fail(`unmatched closing tag: ${name}.`);\n this.text += `</${name}>`;\n }\n }\n /**\n * Resolves an entity. Makes any necessary well-formedness checks.\n *\n * @param entity The entity to resolve.\n *\n * @returns The parsed entity.\n */\n parseEntity(entity) {\n // startsWith would be significantly slower for this test.\n if (entity[0] !== \"#\") {\n const defined = this.ENTITIES[entity];\n if (defined !== undefined) {\n return defined;\n }\n this.fail(this.isName(entity) ? \"undefined entity.\" :\n \"disallowed character in entity name.\");\n return `&${entity};`;\n }\n let num = NaN;\n if (entity[1] === \"x\" && /^#x[0-9a-f]+$/i.test(entity)) {\n num = parseInt(entity.slice(2), 16);\n }\n else if (/^#[0-9]+$/.test(entity)) {\n num = parseInt(entity.slice(1), 10);\n }\n // The character reference is required to match the CHAR production.\n if (!this.isChar(num)) {\n this.fail(\"malformed character entity.\");\n return `&${entity};`;\n }\n return String.fromCodePoint(num);\n }\n}\nexports.SaxesParser = SaxesParser;\n//# sourceMappingURL=saxes.js.map","\"use strict\";\n/**\n * Character class utilities for XML NS 1.0 edition 3.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//\n// Fragments.\n//\n// tslint:disable-next-line:max-line-length\nexports.NC_NAME_START_CHAR = \"A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NC_NAME_CHAR = \"-\" + exports.NC_NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.NC_NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"]$\", \"u\");\nexports.NC_NAME_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_CHAR + \"]$\", \"u\");\nexports.NC_NAME_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"][\" + exports.NC_NAME_CHAR + \"]*$\", \"u\");\n/**\n * Determines whether a codepoint matches [[NC_NAME_START_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNCNameStartChar(c) {\n return ((c >= 0x41 && c <= 0x5A) ||\n c === 0x5F ||\n (c >= 0x61 && c <= 0x7A) ||\n (c >= 0xC0 && c <= 0xD6) ||\n (c >= 0xD8 && c <= 0xF6) ||\n (c >= 0x00F8 && c <= 0x02FF) ||\n (c >= 0x0370 && c <= 0x037D) ||\n (c >= 0x037F && c <= 0x1FFF) ||\n (c >= 0x200C && c <= 0x200D) ||\n (c >= 0x2070 && c <= 0x218F) ||\n (c >= 0x2C00 && c <= 0x2FEF) ||\n (c >= 0x3001 && c <= 0xD7FF) ||\n (c >= 0xF900 && c <= 0xFDCF) ||\n (c >= 0xFDF0 && c <= 0xFFFD) ||\n (c >= 0x10000 && c <= 0xEFFFF));\n}\nexports.isNCNameStartChar = isNCNameStartChar;\n/**\n * Determines whether a codepoint matches [[NC_NAME_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\nfunction isNCNameChar(c) {\n return isNCNameStartChar(c) ||\n (c === 0x2D ||\n c === 0x2E ||\n (c >= 0x30 && c <= 0x39) ||\n c === 0x00B7 ||\n (c >= 0x0300 && c <= 0x036F) ||\n (c >= 0x203F && c <= 0x2040));\n}\nexports.isNCNameChar = isNCNameChar;\n//# sourceMappingURL=ed3.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ParseError = void 0;\n/**\n * An error that includes line and column in the error message.\n */\nclass ParseError extends Error {\n constructor(parser, message) {\n const saxParser = parser.saxParser;\n super(parser.trackPosition ? `Line ${saxParser.line} column ${saxParser.column + 1}: ${message}` : message);\n }\n}\nexports.ParseError = ParseError;\n//# sourceMappingURL=ParseError.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BlankNode = void 0;\n/**\n * A term that represents an RDF blank node with a label.\n */\nclass BlankNode {\n constructor(value) {\n this.termType = 'BlankNode';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'BlankNode' && other.value === this.value;\n }\n}\nexports.BlankNode = BlankNode;\n//# sourceMappingURL=BlankNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultGraph = void 0;\n/**\n * A singleton term instance that represents the default graph.\n * It's only allowed to assign a DefaultGraph to the .graph property of a Quad.\n */\nclass DefaultGraph {\n constructor() {\n this.termType = 'DefaultGraph';\n this.value = '';\n // Private constructor\n }\n equals(other) {\n return !!other && other.termType === 'DefaultGraph';\n }\n}\nexports.DefaultGraph = DefaultGraph;\nDefaultGraph.INSTANCE = new DefaultGraph();\n//# sourceMappingURL=DefaultGraph.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NamedNode = void 0;\n/**\n * A term that contains an IRI.\n */\nclass NamedNode {\n constructor(value) {\n this.termType = 'NamedNode';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'NamedNode' && other.value === this.value;\n }\n}\nexports.NamedNode = NamedNode;\n//# sourceMappingURL=NamedNode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Literal = void 0;\nconst NamedNode_1 = require(\"./NamedNode\");\n/**\n * A term that represents an RDF literal, containing a string with an optional language tag or datatype.\n */\nclass Literal {\n constructor(value, languageOrDatatype) {\n this.termType = 'Literal';\n this.value = value;\n if (typeof languageOrDatatype === 'string') {\n this.language = languageOrDatatype;\n this.datatype = Literal.RDF_LANGUAGE_STRING;\n }\n else if (languageOrDatatype) {\n this.language = '';\n this.datatype = languageOrDatatype;\n }\n else {\n this.language = '';\n this.datatype = Literal.XSD_STRING;\n }\n }\n equals(other) {\n return !!other && other.termType === 'Literal' && other.value === this.value &&\n other.language === this.language && this.datatype.equals(other.datatype);\n }\n}\nexports.Literal = Literal;\nLiteral.RDF_LANGUAGE_STRING = new NamedNode_1.NamedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString');\nLiteral.XSD_STRING = new NamedNode_1.NamedNode('http://www.w3.org/2001/XMLSchema#string');\n//# sourceMappingURL=Literal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Quad = void 0;\n/**\n * An instance of DefaultGraph represents the default graph.\n * It's only allowed to assign a DefaultGraph to the .graph property of a Quad.\n */\nclass Quad {\n constructor(subject, predicate, object, graph) {\n this.termType = 'Quad';\n this.value = '';\n this.subject = subject;\n this.predicate = predicate;\n this.object = object;\n this.graph = graph;\n }\n equals(other) {\n // `|| !other.termType` is for backwards-compatibility with old factories without RDF* support.\n return !!other && (other.termType === 'Quad' || !other.termType) &&\n this.subject.equals(other.subject) &&\n this.predicate.equals(other.predicate) &&\n this.object.equals(other.object) &&\n this.graph.equals(other.graph);\n }\n}\nexports.Quad = Quad;\n//# sourceMappingURL=Quad.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Variable = void 0;\n/**\n * A term that represents a variable.\n */\nclass Variable {\n constructor(value) {\n this.termType = 'Variable';\n this.value = value;\n }\n equals(other) {\n return !!other && other.termType === 'Variable' && other.value === this.value;\n }\n}\nexports.Variable = Variable;\n//# sourceMappingURL=Variable.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataFactory = void 0;\nconst BlankNode_1 = require(\"./BlankNode\");\nconst DefaultGraph_1 = require(\"./DefaultGraph\");\nconst Literal_1 = require(\"./Literal\");\nconst NamedNode_1 = require(\"./NamedNode\");\nconst Quad_1 = require(\"./Quad\");\nconst Variable_1 = require(\"./Variable\");\nlet dataFactoryCounter = 0;\n/**\n * A factory for instantiating RDF terms and quads.\n */\nclass DataFactory {\n constructor(options) {\n this.blankNodeCounter = 0;\n options = options || {};\n this.blankNodePrefix = options.blankNodePrefix || `df_${dataFactoryCounter++}_`;\n }\n /**\n * @param value The IRI for the named node.\n * @return A new instance of NamedNode.\n * @see NamedNode\n */\n namedNode(value) {\n return new NamedNode_1.NamedNode(value);\n }\n /**\n * @param value The optional blank node identifier.\n * @return A new instance of BlankNode.\n * If the `value` parameter is undefined a new identifier\n * for the blank node is generated for each call.\n * @see BlankNode\n */\n blankNode(value) {\n return new BlankNode_1.BlankNode(value || `${this.blankNodePrefix}${this.blankNodeCounter++}`);\n }\n /**\n * @param value The literal value.\n * @param languageOrDatatype The optional language or datatype.\n * If `languageOrDatatype` is a NamedNode,\n * then it is used for the value of `NamedNode.datatype`.\n * Otherwise `languageOrDatatype` is used for the value\n * of `NamedNode.language`.\n * @return A new instance of Literal.\n * @see Literal\n */\n literal(value, languageOrDatatype) {\n return new Literal_1.Literal(value, languageOrDatatype);\n }\n /**\n * This method is optional.\n * @param value The variable name\n * @return A new instance of Variable.\n * @see Variable\n */\n variable(value) {\n return new Variable_1.Variable(value);\n }\n /**\n * @return An instance of DefaultGraph.\n */\n defaultGraph() {\n return DefaultGraph_1.DefaultGraph.INSTANCE;\n }\n /**\n * @param subject The quad subject term.\n * @param predicate The quad predicate term.\n * @param object The quad object term.\n * @param graph The quad graph term.\n * @return A new instance of Quad.\n * @see Quad\n */\n quad(subject, predicate, object, graph) {\n return new Quad_1.Quad(subject, predicate, object, graph || this.defaultGraph());\n }\n /**\n * Create a deep copy of the given term using this data factory.\n * @param original An RDF term.\n * @return A deep copy of the given term.\n */\n fromTerm(original) {\n // TODO: remove nasty any casts when this TS bug has been fixed:\n // https://github.com/microsoft/TypeScript/issues/26933\n switch (original.termType) {\n case 'NamedNode':\n return this.namedNode(original.value);\n case 'BlankNode':\n return this.blankNode(original.value);\n case 'Literal':\n if (original.language) {\n return this.literal(original.value, original.language);\n }\n if (!original.datatype.equals(Literal_1.Literal.XSD_STRING)) {\n return this.literal(original.value, this.fromTerm(original.datatype));\n }\n return this.literal(original.value);\n case 'Variable':\n return this.variable(original.value);\n case 'DefaultGraph':\n return this.defaultGraph();\n case 'Quad':\n return this.quad(this.fromTerm(original.subject), this.fromTerm(original.predicate), this.fromTerm(original.object), this.fromTerm(original.graph));\n }\n }\n /**\n * Create a deep copy of the given quad using this data factory.\n * @param original An RDF quad.\n * @return A deep copy of the given quad.\n */\n fromQuad(original) {\n return this.fromTerm(original);\n }\n /**\n * Reset the internal blank node counter.\n */\n resetBlankNodeCounter() {\n this.blankNodeCounter = 0;\n }\n}\nexports.DataFactory = DataFactory;\n//# sourceMappingURL=DataFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateIri = exports.IriValidationStrategy = void 0;\nfunction buildAbsoluteIriRfc3987Regex() {\n // The syntax is defined in https://www.rfc-editor.org/rfc/rfc3987#section-2.2\n // Rules are defined in reversed order\n const sub_delims_raw = `!$&'()*+,;=`;\n const sub_delims = `[${sub_delims_raw}]`;\n const pct_encoded = `%[a-fA-F0-9]{2}`;\n const dec_octet = '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';\n const ipv4address = `${dec_octet}\\\\.${dec_octet}\\\\.${dec_octet}\\\\.${dec_octet}`;\n const h16 = `[a-fA-F0-9]{1,4}`;\n const ls32 = `(${h16}:${h16}|${ipv4address})`;\n const ipv6address = `((${h16}:){6}${ls32}|::(${h16}:){5}${ls32}|(${h16})?::(${h16}:){4}${ls32}|((${h16}:){0,1}${h16})?::(${h16}:){3}${ls32}|((${h16}:){0,2}${h16})?::(${h16}:){2}${ls32}|((${h16}:){0,3}${h16})?::${h16}:${ls32}|((${h16}:){0,4}${h16})?::${ls32}|((${h16}:){0,5}${h16})?::${h16}|((${h16}:){0,6}${h16})?::)`;\n const ipvfuture = `v[a-fA-F0-9]+\\\\.(${sub_delims}|${sub_delims}|\":)+`;\n const ip_literal = `\\\\[(${ipv6address}|${ipvfuture})\\\\]`;\n const port = `[0-9]*`;\n const scheme = `[a-zA-Z][a-zA-Z0-9+\\\\-.]*`;\n const iprivate_raw = `\\u{E000}-\\u{F8FF}\\u{F0000}-\\u{FFFFD}\\u{100000}-\\u{10FFFD}`;\n const iprivate = `[${iprivate_raw}]`;\n const ucschar_raw = `\\u{A0}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFEF}\\u{10000}-\\u{1FFFD}\\u{20000}-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}\\u{50000}-\\u{5FFFD}\\u{60000}-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}\\u{90000}-\\u{9FFFD}\\u{A0000}-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}\\u{D0000}-\\u{DFFFD}\\u{E1000}-\\u{EFFFD}`;\n const iunreserved_raw = `a-zA-Z0-9\\\\-._~${ucschar_raw}`;\n const iunreserved = `[${iunreserved_raw}]`;\n const ipchar = `(${iunreserved}|${pct_encoded}|${sub_delims}|[:@])*`;\n const ifragment = `(${ipchar}|[\\\\/?])*`;\n const iquery = `(${ipchar}|${iprivate}|[\\\\/?])*`;\n const isegment_nz = `(${ipchar})+`;\n const isegment = `(${ipchar})*`;\n const ipath_empty = '';\n const ipath_rootless = `${isegment_nz}(\\\\/${isegment})*`;\n const ipath_absolute = `\\\\/(${isegment_nz}(\\\\/${isegment})*)?`;\n const ipath_abempty = `(\\\\/${isegment})*`;\n const ireg_name = `(${iunreserved}|${pct_encoded}|${sub_delims})*`;\n const ihost = `(${ip_literal}|${ipv4address}|${ireg_name})`;\n const iuserinfo = `(${iunreserved}|${pct_encoded}|${sub_delims}|:)*`;\n const iauthority = `(${iuserinfo}@)?${ihost}(:${port})?`;\n const ihier_part = `(\\\\/\\\\/${iauthority}${ipath_abempty}|${ipath_absolute}|${ipath_rootless}|${ipath_empty})`;\n const iri = `^${scheme}:${ihier_part}(\\\\?${iquery})?(#${ifragment})?$`;\n return new RegExp(iri, 'u');\n}\nconst STRICT_IRI_REGEX = buildAbsoluteIriRfc3987Regex();\n// eslint-disable-next-line no-control-regex\nconst PRAGMATIC_IRI_REGEX = /^[A-Za-z][\\d+-.A-Za-z]*:[^\\u0000-\\u0020\"<>\\\\^`{|}]*$/u;\n/**\n * Possible ways of validating an IRI\n */\nvar IriValidationStrategy;\n(function (IriValidationStrategy) {\n /**\n * Validates the IRI according to RFC 3987.\n */\n IriValidationStrategy[\"Strict\"] = \"strict\";\n /**\n * Validates that the IRI has a valid scheme and does not contain any character forbidden by the Turtle specification.\n */\n IriValidationStrategy[\"Pragmatic\"] = \"pragmatic\";\n /**\n * Does not validate the IRI at all.\n */\n IriValidationStrategy[\"None\"] = \"none\";\n})(IriValidationStrategy = exports.IriValidationStrategy || (exports.IriValidationStrategy = {}));\n/**\n * Validate a given IRI according to the given strategy.\n *\n * By default the IRI is fully validated according to RFC 3987.\n * But it is possible to do a lighter a faster validation using the \"pragmatic\" strategy.\n *\n * @param {string} iri a string that may be an IRI.\n * @param {IriValidationStrategy} strategy IRI validation strategy.\n * @return {Error | undefined} An error if the IRI is invalid, or undefined if it is valid.\n */\nfunction validateIri(iri, strategy = IriValidationStrategy.Strict) {\n switch (strategy) {\n case IriValidationStrategy.Strict:\n return STRICT_IRI_REGEX.test(iri) ? undefined : new Error(`Invalid IRI according to RFC 3987: '${iri}'`);\n case IriValidationStrategy.Pragmatic:\n return PRAGMATIC_IRI_REGEX.test(iri) ? undefined : new Error(`Invalid IRI according to RDF Turtle: '${iri}'`);\n case IriValidationStrategy.None:\n return undefined;\n default:\n return new Error(`Not supported validation strategy \"${strategy}\"`);\n }\n}\nexports.validateIri = validateIri;\n//# sourceMappingURL=Validate.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ParseType = exports.RdfXmlParser = void 0;\nconst relative_to_absolute_iri_1 = require(\"relative-to-absolute-iri\");\nconst saxes_1 = require(\"@rubensworks/saxes\");\nconst readable_stream_1 = require(\"readable-stream\");\nconst ParseError_1 = require(\"./ParseError\");\nconst rdf_data_factory_1 = require(\"rdf-data-factory\");\nconst validate_iri_1 = require(\"validate-iri\");\nclass RdfXmlParser extends readable_stream_1.Transform {\n constructor(args) {\n super({ readableObjectMode: true });\n this.activeTagStack = [];\n this.nodeIds = {};\n if (args) {\n Object.assign(this, args);\n this.options = args;\n }\n if (!this.dataFactory) {\n this.dataFactory = new rdf_data_factory_1.DataFactory();\n }\n if (!this.baseIRI) {\n this.baseIRI = '';\n }\n if (!this.defaultGraph) {\n this.defaultGraph = this.dataFactory.defaultGraph();\n }\n if (this.validateUri !== false) {\n this.validateUri = true;\n }\n if (!this.iriValidationStrategy) {\n this.iriValidationStrategy = this.validateUri ? validate_iri_1.IriValidationStrategy.Pragmatic : validate_iri_1.IriValidationStrategy.None;\n }\n this.saxParser = new saxes_1.SaxesParser({ xmlns: true, position: this.trackPosition });\n this.attachSaxListeners();\n }\n /**\n * Parses the given text stream into a quad stream.\n * @param {NodeJS.EventEmitter} stream A text stream.\n * @return {RDF.Stream} A quad stream.\n */\n import(stream) {\n const output = new readable_stream_1.PassThrough({ readableObjectMode: true });\n stream.on('error', (error) => parsed.emit('error', error));\n stream.on('data', (data) => output.push(data));\n stream.on('end', () => output.push(null));\n const parsed = output.pipe(new RdfXmlParser(this.options));\n return parsed;\n }\n _transform(chunk, encoding, callback) {\n try {\n this.saxParser.write(chunk);\n }\n catch (e) {\n return callback(e);\n }\n callback();\n }\n /**\n * Create a new parse error instance.\n * @param {string} message An error message.\n * @return {Error} An error instance.\n */\n newParseError(message) {\n return new ParseError_1.ParseError(this, message);\n }\n /**\n * Convert the given value to a IRI by taking into account the baseIRI.\n *\n * This will follow the RDF/XML spec for converting values with baseIRIs to a IRI.\n *\n * @param {string} value The value to convert to an IRI.\n * @param {IActiveTag} activeTag The active tag.\n * @return {NamedNode} an IRI.\n */\n valueToUri(value, activeTag) {\n return this.uriToNamedNode((0, relative_to_absolute_iri_1.resolve)(value, activeTag.baseIRI));\n }\n /**\n * Convert the given value URI string to a named node.\n *\n * This throw an error if the URI is invalid.\n *\n * @param {string} uri A URI string.\n * @return {NamedNode} a named node.\n */\n uriToNamedNode(uri) {\n // Validate URI\n const uriValidationResult = (0, validate_iri_1.validateIri)(uri, this.iriValidationStrategy);\n if (uriValidationResult instanceof Error) {\n throw this.newParseError(uriValidationResult.message);\n }\n return this.dataFactory.namedNode(uri);\n }\n /**\n * Validate the given value as an NCName: https://www.w3.org/TR/xml-names/#NT-NCName\n * If it is invalid, an error will thrown emitted.\n * @param {string} value A value.\n */\n validateNcname(value) {\n // Validate term as an NCName: https://www.w3.org/TR/xml-names/#NT-NCName\n if (!RdfXmlParser.NCNAME_MATCHER.test(value)) {\n throw this.newParseError(`Not a valid NCName: ${value}`);\n }\n }\n attachSaxListeners() {\n this.saxParser.on('error', (error) => this.emit('error', error));\n this.saxParser.on('opentag', this.onTag.bind(this));\n this.saxParser.on('text', this.onText.bind(this));\n this.saxParser.on('cdata', this.onText.bind(this));\n this.saxParser.on('closetag', this.onCloseTag.bind(this));\n this.saxParser.on('doctype', this.onDoctype.bind(this));\n }\n /**\n * Handle the given tag.\n * @param {SaxesTagNS} tag A SAX tag.\n */\n onTag(tag) {\n // Get parent tag\n const parentTag = this.activeTagStack.length\n ? this.activeTagStack[this.activeTagStack.length - 1] : null;\n let currentParseType = ParseType.RESOURCE;\n if (parentTag) {\n parentTag.hadChildren = true;\n currentParseType = parentTag.childrenParseType;\n }\n // Check if this tag needs to be converted to a string\n if (parentTag && parentTag.childrenStringTags) {\n // Convert this tag to a string\n const tagName = tag.name;\n let attributes = '';\n for (const attributeKey in tag.attributes) {\n attributes += ` ${attributeKey}=\"${tag.attributes[attributeKey].value}\"`;\n }\n const tagContents = `${tagName}${attributes}`;\n const tagString = `<${tagContents}>`;\n parentTag.childrenStringTags.push(tagString);\n // Inherit the array, so that deeper tags are appended to this same array\n const stringActiveTag = { childrenStringTags: parentTag.childrenStringTags };\n stringActiveTag.childrenStringEmitClosingTag = `</${tagName}>`;\n this.activeTagStack.push(stringActiveTag);\n // Halt any further processing\n return;\n }\n const activeTag = {};\n if (parentTag) {\n // Inherit language scope and baseIRI from parent\n activeTag.language = parentTag.language;\n activeTag.baseIRI = parentTag.baseIRI;\n }\n else {\n activeTag.baseIRI = this.baseIRI;\n }\n this.activeTagStack.push(activeTag);\n if (currentParseType === ParseType.RESOURCE) {\n this.onTagResource(tag, activeTag, parentTag, !parentTag);\n }\n else { // currentParseType === ParseType.PROPERTY\n this.onTagProperty(tag, activeTag, parentTag);\n }\n }\n /**\n * Handle the given node element in resource-mode.\n * @param {SaxesTagNS} tag A SAX tag.\n * @param {IActiveTag} activeTag The currently active tag.\n * @param {IActiveTag} parentTag The parent tag or null.\n * @param {boolean} rootTag If we are currently processing the root tag.\n */\n onTagResource(tag, activeTag, parentTag, rootTag) {\n activeTag.childrenParseType = ParseType.PROPERTY;\n // Assume that the current node is a _typed_ node (2.13), unless we find an rdf:Description as node name\n let typedNode = true;\n if (tag.uri === RdfXmlParser.RDF) {\n // Check forbidden property element names\n if (!rootTag && RdfXmlParser.FORBIDDEN_NODE_ELEMENTS.indexOf(tag.local) >= 0) {\n throw this.newParseError(`Illegal node element name: ${tag.local}`);\n }\n switch (tag.local) {\n case 'RDF':\n // Tags under <rdf:RDF> must always be resources\n activeTag.childrenParseType = ParseType.RESOURCE;\n case 'Description':\n typedNode = false;\n }\n }\n const predicates = [];\n const objects = [];\n // Collect all attributes as triples\n // Assign subject value only after all attributes have been processed, because baseIRI may change the final val\n let activeSubjectValue = null;\n let claimSubjectNodeId = false;\n let subjectValueBlank = false;\n let explicitType = null;\n for (const attributeKey in tag.attributes) {\n const attribute = tag.attributes[attributeKey];\n if (parentTag && attribute.uri === RdfXmlParser.RDF) {\n switch (attribute.local) {\n case 'about':\n if (activeSubjectValue) {\n throw this.newParseError(`Only one of rdf:about, rdf:nodeID and rdf:ID can be present, \\\nwhile ${attribute.value} and ${activeSubjectValue} where found.`);\n }\n activeSubjectValue = attribute.value;\n continue;\n case 'ID':\n if (activeSubjectValue) {\n throw this.newParseError(`Only one of rdf:about, rdf:nodeID and rdf:ID can be present, \\\nwhile ${attribute.value} and ${activeSubjectValue} where found.`);\n }\n this.validateNcname(attribute.value);\n activeSubjectValue = '#' + attribute.value;\n claimSubjectNodeId = true;\n continue;\n case 'nodeID':\n if (activeSubjectValue) {\n throw this.newParseError(`Only one of rdf:about, rdf:nodeID and rdf:ID can be present, \\\nwhile ${attribute.value} and ${activeSubjectValue} where found.`);\n }\n this.validateNcname(attribute.value);\n activeSubjectValue = attribute.value;\n subjectValueBlank = true;\n continue;\n case 'bagID':\n throw this.newParseError(`rdf:bagID is not supported.`);\n case 'type':\n // Emit the rdf:type later as named node instead of the default literal\n explicitType = attribute.value;\n continue;\n case 'aboutEach':\n throw this.newParseError(`rdf:aboutEach is not supported.`);\n case 'aboutEachPrefix':\n throw this.newParseError(`rdf:aboutEachPrefix is not supported.`);\n case 'li':\n throw this.newParseError(`rdf:li on node elements are not supported.`);\n }\n }\n else if (attribute.uri === RdfXmlParser.XML) {\n if (attribute.local === 'lang') {\n activeTag.language = attribute.value === '' ? null : attribute.value.toLowerCase();\n continue;\n }\n else if (attribute.local === 'base') {\n // SAX Parser does not expand xml:base, based on DOCTYPE, so we have to do it manually\n activeTag.baseIRI = (0, relative_to_absolute_iri_1.resolve)(attribute.value, activeTag.baseIRI);\n continue;\n }\n }\n // Interpret attributes at this point as properties on this node,\n // but we ignore attributes that have no prefix or known expanded URI\n if (attribute.prefix !== 'xml' && attribute.prefix !== 'xmlns'\n && (attribute.prefix !== '' || attribute.local !== 'xmlns')\n && attribute.uri) {\n predicates.push(this.uriToNamedNode(attribute.uri + attribute.local));\n objects.push(attribute.value);\n }\n }\n // Create the subject value _after_ all attributes have been processed\n if (activeSubjectValue !== null) {\n activeTag.subject = subjectValueBlank\n ? this.dataFactory.blankNode(activeSubjectValue) : this.valueToUri(activeSubjectValue, activeTag);\n if (claimSubjectNodeId) {\n this.claimNodeId(activeTag.subject);\n }\n }\n // Force the creation of a subject if it doesn't exist yet\n if (!activeTag.subject) {\n activeTag.subject = this.dataFactory.blankNode();\n }\n // Emit the type if we're at a typed node\n if (typedNode) {\n const type = this.uriToNamedNode(tag.uri + tag.local);\n this.emitTriple(activeTag.subject, this.dataFactory.namedNode(RdfXmlParser.RDF + 'type'), type, parentTag ? parentTag.reifiedStatementId : null);\n }\n if (parentTag) {\n // If the parent tag defined a predicate, add the current tag as property value\n if (parentTag.predicate) {\n if (parentTag.childrenCollectionSubject) {\n // RDF:List-based properties\n const linkTerm = this.dataFactory.blankNode();\n // Emit <x> <p> <current-chain> OR <previous-chain> <rdf:rest> <current-chain>\n this.emitTriple(parentTag.childrenCollectionSubject, parentTag.childrenCollectionPredicate, linkTerm, parentTag.reifiedStatementId);\n // Emit <current-chain> <rdf:first> value\n this.emitTriple(linkTerm, this.dataFactory.namedNode(RdfXmlParser.RDF + 'first'), activeTag.subject, activeTag.reifiedStatementId);\n // Store <current-chain> in the parent node\n parentTag.childrenCollectionSubject = linkTerm;\n parentTag.childrenCollectionPredicate = this.dataFactory.namedNode(RdfXmlParser.RDF + 'rest');\n }\n else { // !parentTag.predicateEmitted\n // Set-based properties\n this.emitTriple(parentTag.subject, parentTag.predicate, activeTag.subject, parentTag.reifiedStatementId);\n // Emit pending properties on the parent tag that had no defined subject yet.\n for (let i = 0; i < parentTag.predicateSubPredicates.length; i++) {\n this.emitTriple(activeTag.subject, parentTag.predicateSubPredicates[i], parentTag.predicateSubObjects[i], null);\n }\n // Cleanup so we don't emit them again when the parent tag is closed\n parentTag.predicateSubPredicates = [];\n parentTag.predicateSubObjects = [];\n parentTag.predicateEmitted = true;\n }\n }\n // Emit all collected triples\n for (let i = 0; i < predicates.length; i++) {\n const object = this.dataFactory.literal(objects[i], activeTag.datatype || activeTag.language);\n this.emitTriple(activeTag.subject, predicates[i], object, parentTag.reifiedStatementId);\n }\n // Emit the rdf:type as named node instead of literal\n if (explicitType) {\n this.emitTriple(activeTag.subject, this.dataFactory.namedNode(RdfXmlParser.RDF + 'type'), this.uriToNamedNode(explicitType), null);\n }\n }\n }\n /**\n * Handle the given property element in property-mode.\n * @param {SaxesTagNS} tag A SAX tag.\n * @param {IActiveTag} activeTag The currently active tag.\n * @param {IActiveTag} parentTag The parent tag or null.\n */\n onTagProperty(tag, activeTag, parentTag) {\n activeTag.childrenParseType = ParseType.RESOURCE;\n activeTag.subject = parentTag.subject; // Inherit parent subject\n if (tag.uri === RdfXmlParser.RDF && tag.local === 'li') {\n // Convert rdf:li to rdf:_x\n if (!parentTag.listItemCounter) {\n parentTag.listItemCounter = 1;\n }\n activeTag.predicate = this.uriToNamedNode(tag.uri + '_' + parentTag.listItemCounter++);\n }\n else {\n activeTag.predicate = this.uriToNamedNode(tag.uri + tag.local);\n }\n // Check forbidden property element names\n if (tag.uri === RdfXmlParser.RDF\n && RdfXmlParser.FORBIDDEN_PROPERTY_ELEMENTS.indexOf(tag.local) >= 0) {\n throw this.newParseError(`Illegal property element name: ${tag.local}`);\n }\n activeTag.predicateSubPredicates = [];\n activeTag.predicateSubObjects = [];\n let parseType = false;\n let attributedProperty = false;\n // Collect all attributes as triples\n // Assign subject value only after all attributes have been processed, because baseIRI may change the final val\n let activeSubSubjectValue = null;\n let subSubjectValueBlank = true;\n const predicates = [];\n const objects = [];\n for (const propertyAttributeKey in tag.attributes) {\n const propertyAttribute = tag.attributes[propertyAttributeKey];\n if (propertyAttribute.uri === RdfXmlParser.RDF) {\n switch (propertyAttribute.local) {\n case 'resource':\n if (activeSubSubjectValue) {\n throw this.newParseError(`Found both rdf:resource (${propertyAttribute.value}) and rdf:nodeID (${activeSubSubjectValue}).`);\n }\n if (parseType) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:resource (${propertyAttribute.value})`);\n }\n activeTag.hadChildren = true;\n activeSubSubjectValue = propertyAttribute.value;\n subSubjectValueBlank = false;\n continue;\n case 'datatype':\n if (attributedProperty) {\n throw this.newParseError(`Found both non-rdf:* property attributes and rdf:datatype (${propertyAttribute.value}).`);\n }\n if (parseType) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:datatype (${propertyAttribute.value})`);\n }\n activeTag.datatype = this.valueToUri(propertyAttribute.value, activeTag);\n continue;\n case 'nodeID':\n if (attributedProperty) {\n throw this.newParseError(`Found both non-rdf:* property attributes and rdf:nodeID (${propertyAttribute.value}).`);\n }\n if (activeTag.hadChildren) {\n throw this.newParseError(`Found both rdf:resource and rdf:nodeID (${propertyAttribute.value}).`);\n }\n if (parseType) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:nodeID (${propertyAttribute.value})`);\n }\n this.validateNcname(propertyAttribute.value);\n activeTag.hadChildren = true;\n activeSubSubjectValue = propertyAttribute.value;\n subSubjectValueBlank = true;\n continue;\n case 'bagID':\n throw this.newParseError(`rdf:bagID is not supported.`);\n case 'parseType':\n // Validation\n if (attributedProperty) {\n throw this.newParseError(`rdf:parseType is not allowed when non-rdf:* property attributes are present`);\n }\n if (activeTag.datatype) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:datatype (${activeTag.datatype.value})`);\n }\n if (activeSubSubjectValue) {\n throw this.newParseError(`rdf:parseType is not allowed on property elements with rdf:nodeID or rdf:resource (${activeSubSubjectValue})`);\n }\n if (propertyAttribute.value === 'Resource') {\n parseType = true;\n activeTag.childrenParseType = ParseType.PROPERTY;\n // Turn this property element into a node element\n const nestedBNode = this.dataFactory.blankNode();\n this.emitTriple(activeTag.subject, activeTag.predicate, nestedBNode, activeTag.reifiedStatementId);\n activeTag.subject = nestedBNode;\n activeTag.predicate = null;\n }\n else if (propertyAttribute.value === 'Collection') {\n parseType = true;\n // Interpret children as being part of an rdf:List\n activeTag.hadChildren = true;\n activeTag.childrenCollectionSubject = activeTag.subject;\n activeTag.childrenCollectionPredicate = activeTag.predicate;\n subSubjectValueBlank = false;\n }\n else if (propertyAttribute.value === 'Literal') {\n parseType = true;\n // Interpret children as being part of a literal string\n activeTag.childrenTagsToString = true;\n activeTag.childrenStringTags = [];\n }\n continue;\n case 'ID':\n this.validateNcname(propertyAttribute.value);\n activeTag.reifiedStatementId = this.valueToUri('#' + propertyAttribute.value, activeTag);\n this.claimNodeId(activeTag.reifiedStatementId);\n continue;\n }\n }\n else if (propertyAttribute.uri === RdfXmlParser.XML && propertyAttribute.local === 'lang') {\n activeTag.language = propertyAttribute.value === ''\n ? null : propertyAttribute.value.toLowerCase();\n continue;\n }\n // Interpret attributes at this point as properties via implicit blank nodes on the property,\n // but we ignore attributes that have no prefix or known expanded URI\n if (propertyAttribute.prefix !== 'xml' && propertyAttribute.prefix !== 'xmlns'\n && (propertyAttribute.prefix !== '' || propertyAttribute.local !== 'xmlns')\n && propertyAttribute.uri) {\n if (parseType || activeTag.datatype) {\n throw this.newParseError(`Found illegal rdf:* properties on property element with attribute: ${propertyAttribute.value}`);\n }\n activeTag.hadChildren = true;\n attributedProperty = true;\n predicates.push(this.uriToNamedNode(propertyAttribute.uri + propertyAttribute.local));\n objects.push(this.dataFactory.literal(propertyAttribute.value, activeTag.datatype || activeTag.language));\n }\n }\n // Create the subject value _after_ all attributes have been processed\n if (activeSubSubjectValue !== null) {\n const subjectParent = activeTag.subject;\n activeTag.subject = subSubjectValueBlank\n ? this.dataFactory.blankNode(activeSubSubjectValue) : this.valueToUri(activeSubSubjectValue, activeTag);\n this.emitTriple(subjectParent, activeTag.predicate, activeTag.subject, activeTag.reifiedStatementId);\n // Emit our buffered triples\n for (let i = 0; i < predicates.length; i++) {\n this.emitTriple(activeTag.subject, predicates[i], objects[i], null);\n }\n activeTag.predicateEmitted = true;\n }\n else if (subSubjectValueBlank) {\n // The current property element has no defined subject\n // Let's buffer the properties until the child node defines a subject,\n // or if the tag closes.\n activeTag.predicateSubPredicates = predicates;\n activeTag.predicateSubObjects = objects;\n activeTag.predicateEmitted = false;\n }\n }\n /**\n * Emit the given triple to the stream.\n * @param {Term} subject A subject term.\n * @param {Term} predicate A predicate term.\n * @param {Term} object An object term.\n * @param {Term} statementId An optional resource that identifies the triple.\n * If truthy, then the given triple will also be emitted reified.\n */\n emitTriple(subject, predicate, object, statementId) {\n this.push(this.dataFactory.quad(subject, predicate, object, this.defaultGraph));\n // Reify triple\n if (statementId) {\n this.push(this.dataFactory.quad(statementId, this.dataFactory.namedNode(RdfXmlParser.RDF + 'type'), this.dataFactory.namedNode(RdfXmlParser.RDF + 'Statement'), this.defaultGraph));\n this.push(this.dataFactory.quad(statementId, this.dataFactory.namedNode(RdfXmlParser.RDF + 'subject'), subject, this.defaultGraph));\n this.push(this.dataFactory.quad(statementId, this.dataFactory.namedNode(RdfXmlParser.RDF + 'predicate'), predicate, this.defaultGraph));\n this.push(this.dataFactory.quad(statementId, this.dataFactory.namedNode(RdfXmlParser.RDF + 'object'), object, this.defaultGraph));\n }\n }\n /**\n * Register the given term as a node ID.\n * If one was already registered, this will emit an error.\n *\n * This is used to check duplicate occurrences of rdf:ID in scope of the baseIRI.\n * @param {Term} term An RDF term.\n */\n claimNodeId(term) {\n if (!this.allowDuplicateRdfIds) {\n if (this.nodeIds[term.value]) {\n throw this.newParseError(`Found multiple occurrences of rdf:ID='${term.value}'.`);\n }\n this.nodeIds[term.value] = true;\n }\n }\n /**\n * Handle the given text string.\n * @param {string} text A parsed text string.\n */\n onText(text) {\n const activeTag = this.activeTagStack.length\n ? this.activeTagStack[this.activeTagStack.length - 1] : null;\n if (activeTag) {\n if (activeTag.childrenStringTags) {\n activeTag.childrenStringTags.push(text);\n }\n else if (activeTag.predicate) {\n activeTag.text = text;\n }\n }\n }\n /**\n * Handle the closing of the last tag.\n */\n onCloseTag() {\n const poppedTag = this.activeTagStack.pop();\n // If we were converting a tag to a string, and the tag was not self-closing, close it here.\n if (poppedTag.childrenStringEmitClosingTag) {\n poppedTag.childrenStringTags.push(poppedTag.childrenStringEmitClosingTag);\n }\n // Set the literal value if we were collecting XML tags to string\n if (poppedTag.childrenTagsToString) {\n poppedTag.datatype = this.dataFactory.namedNode(RdfXmlParser.RDF + 'XMLLiteral');\n poppedTag.text = poppedTag.childrenStringTags.join('');\n poppedTag.hadChildren = false; // Force a literal triple to be emitted hereafter\n }\n if (poppedTag.childrenCollectionSubject) {\n // Terminate the rdf:List\n this.emitTriple(poppedTag.childrenCollectionSubject, poppedTag.childrenCollectionPredicate, this.dataFactory.namedNode(RdfXmlParser.RDF + 'nil'), poppedTag.reifiedStatementId);\n }\n else if (poppedTag.predicate) {\n if (!poppedTag.hadChildren && poppedTag.childrenParseType !== ParseType.PROPERTY) {\n // Property element contains text\n this.emitTriple(poppedTag.subject, poppedTag.predicate, this.dataFactory.literal(poppedTag.text || '', poppedTag.datatype || poppedTag.language), poppedTag.reifiedStatementId);\n }\n else if (!poppedTag.predicateEmitted) {\n // Emit remaining properties on an anonymous property element\n const subject = this.dataFactory.blankNode();\n this.emitTriple(poppedTag.subject, poppedTag.predicate, subject, poppedTag.reifiedStatementId);\n for (let i = 0; i < poppedTag.predicateSubPredicates.length; i++) {\n this.emitTriple(subject, poppedTag.predicateSubPredicates[i], poppedTag.predicateSubObjects[i], null);\n }\n }\n }\n }\n /**\n * Fetch local DOCTYPE ENTITY's and make the parser recognise them.\n * @param {string} doctype The read doctype.\n */\n onDoctype(doctype) {\n doctype.replace(/<!ENTITY\\s+([^\\s]+)\\s+[\"']([^\"']+)[\"']\\s*>/g, (match, prefix, uri) => {\n this.saxParser.ENTITIES[prefix] = uri;\n return '';\n });\n }\n}\nexports.RdfXmlParser = RdfXmlParser;\nRdfXmlParser.MIME_TYPE = 'application/rdf+xml';\nRdfXmlParser.RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\nRdfXmlParser.XML = 'http://www.w3.org/XML/1998/namespace';\nRdfXmlParser.FORBIDDEN_NODE_ELEMENTS = [\n 'RDF',\n 'ID',\n 'about',\n 'bagID',\n 'parseType',\n 'resource',\n 'nodeID',\n 'li',\n 'aboutEach',\n 'aboutEachPrefix',\n];\nRdfXmlParser.FORBIDDEN_PROPERTY_ELEMENTS = [\n 'Description',\n 'RDF',\n 'ID',\n 'about',\n 'bagID',\n 'parseType',\n 'resource',\n 'nodeID',\n 'aboutEach',\n 'aboutEachPrefix',\n];\n// tslint:disable-next-line:max-line-length\nRdfXmlParser.NCNAME_MATCHER = /^([A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\u{F8}-\\u{2FF}\\u{370}-\\u{37D}\\u{37F}-\\u{1FFF}\\u{200C}-\\u{200D}\\u{2070}-\\u{218F}\\u{2C00}-\\u{2FEF}\\u{3001}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFFD}\\u{10000}-\\u{EFFFF}_])([A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\u{F8}-\\u{2FF}\\u{370}-\\u{37D}\\u{37F}-\\u{1FFF}\\u{200C}-\\u{200D}\\u{2070}-\\u{218F}\\u{2C00}-\\u{2FEF}\\u{3001}-\\u{D7FF}\\u{F900}-\\u{FDCF}\\u{FDF0}-\\u{FFFD}\\u{10000}-\\u{EFFFF}_\\-.0-9#xB7\\u{0300}-\\u{036F}\\u{203F}-\\u{2040}])*$/u;\nvar ParseType;\n(function (ParseType) {\n ParseType[ParseType[\"RESOURCE\"] = 0] = \"RESOURCE\";\n ParseType[ParseType[\"PROPERTY\"] = 1] = \"PROPERTY\";\n})(ParseType || (exports.ParseType = ParseType = {}));\n//# sourceMappingURL=RdfXmlParser.js.map","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":["async","loadContext","context","loadedUrls","Map","walk","definition","refChain","key","value","Object","entries","load","Array","isArray","definitions","mergePair","a","b","keys","length","result","k","v","currentContext","i","mergeContexts","Promise","all","map","e","includes","Error","join","newRefChain","slice","newContext","push","has","get","url","response","fetch","headers","Accept","json","jsonFetch","set","ns","base","local","SKOS","RDFS","DCT","DC","SDO","FOAF","labelPredicates","descriptionPredicates","RDF","XSD","SWAP","namespaces","xsd","decimal","boolean","double","integer","string","rdf","type","nil","first","rest","langString","owl","sameAs","r","forSome","forAll","log","implies","isImpliedBy","escapeSequence","escapeReplacements","n","t","f","_","$","illegalIriChars","lineModeRegExps","_iri","_unescapedIri","_simpleQuotedString","_langcode","_blank","_newline","_comment","_whitespace","_endOfFile","invalidRegExp","N3Lexer","constructor","options","this","_simpleApostropheString","_prefix","_prefixed","_variable","_number","_boolean","_keyword","_sparqlKeyword","_shortPredicates","_isImpliedBy","_lineMode","lineMode","_n3Mode","RegExp","n3","comments","_literalClosingPos","_tokenizeToEnd","callback","inputFinished","input","_input","currentLineLength","whiteSpaceMatch","comment","exec","emitToken","_line","substr","test","line","firstChar","prefix","match","matchLength","inconclusive","_previousMarker","_unescape","reportSyntaxError","_parseLiteral","toUpperCase","token","previousToken","start","end","self","_syntaxError","item","invalid","replaced","replace","sequence","unicode4","unicode8","escapedChar","String","fromCharCode","Number","parseInt","charCode","opening","openingLength","closingPos","Math","max","indexOf","backslashCount","raw","substring","lines","split","issue","err","undefined","_readStartingBom","startsWith","tokenize","tokens","error","queueMicrotask","_pendingBuffer","setEncoding","on","data","Buffer","concat","toString","DEFAULTGRAPH","_blankNodeCounter","DataFactory","namedNode","blankNode","variable","literal","defaultGraph","quad","triple","fromTerm","fromQuad","Term","id","equals","other","termType","hashCode","toJSON","Literal","lastIndexOf","language","atPos","toLowerCase","datatype","NamedNode","datatypeString","dtPos","char","name","super","termFromId","factory","nested","endPos","JSON","parse","termToId","term","res","subject","predicate","object","graph","stringify","_subject","_predicate","_object","_graph","iri","BlankNode","languageOrDataType","isFinite","isInteger","isNaN","Variable","Quad","inQuad","blankNodePrefix","N3Parser","_contextStack","_setBase","baseIRI","initDataFactory","format","isTurtle","isTriG","isNTriples","isNQuads","isN3","isLineMode","_supportsNamedGraphs","_readPredicateOrNamedGraph","_readPredicate","_supportsQuads","_supportsRDFStar","_resolveRelativeIRI","_blankNodePrefix","_lexer","lexer","_explicitQuantifiers","explicitQuantifiers","_resetBlankNodePrefix","fragmentPos","_base","_basePath","_baseRoot","_baseScheme","_saveContext","n3Mode","inverse","_inversePredicate","blankPrefix","_prefixes","quantified","_quantified","create","_restoreContext","pop","_error","_readInTopContext","_callback","_sparqlStyle","_readPrefix","_readBaseIRI","_readSubject","_readNamedGraphLabel","_readEntity","quantifier","_resolveIRI","_factory","_readBlankNodeHead","RDF_NIL","_readListItem","_readPunctuation","N3_FORSOME","_quantifier","_readQuantifierList","N3_FORALL","_literalValue","_completeSubjectLiteral","_getPathReader","ABBREVIATIONS","_readBlankNodeTail","_readObject","_readDataTypeOrLang","_getContextEndReader","_readGraph","_readBlankNodePunctuation","_emit","empty","_readPredicateAfterBlank","list","next","previousList","stack","parent","RDF_FIRST","_readListItemDataTypeOrLang","RDF_REST","_completeObjectLiteral","_completeLiteral","listItem","completed","_readCallback","_readFormulaTail","inversePredicate","_readQuadPunctuation","_readPrefixIRI","prefixNode","_prefixCallback","_readDeclarationPunctuation","_readNamedGraphBlankLabel","entity","QUANTIFIERS_GRAPH","_readQuantifierPunctuation","afterPath","_afterPath","_readPath","_readForwardPath","_readBackwardPath","_readRDFStarTailOrGraph","_readRDFStarTail","contextStack","message","noop","_removeDotSegments","pathStart","segmentStart","quadCallback","prefixCallback","onQuad","onPrefix","onComment","quads","every","processNextToken","parser","isDefaultGraph","escapeRegex","regex","prototype","N3DataFactory","BASE_UNSUPPORTED","SUFFIX_SUPPORTED","BaseIRI","_baseLength","_baseMatcher","_pathReplacements","supports","_getBaseMatcher","scheme","regexHead","regexTail","segments","segmenter","segment","query","fragment","last","lastIndex","repeat","toRelative","parentPath","suffix","escape","escapeAll","escapedCharacters","SerializedTerm","N3Writer","outputStream","_prefixRegex","write","_lists","lists","_outputStream","_endStream","output","chunk","encoding","done","_writeQuad","_writeQuadLine","_prefixIRIs","prefixes","addPrefixes","_baseIri","_inDefaultGraph","_write","_encodeIriOrBlank","_encodeObject","_encodePredicate","_encodeSubject","_prefixMatch","quadToString","quadsToString","quadsString","_encodeQuad","characterReplacer","prefixMatch","_encodeLiteral","_blockedWrite","addQuad","addQuads","addPrefix","hasPrefixes","IRIlist","prefixList","prefixIRI","blank","child","children","contents","elements","singleDone","character","charCodeAt","ITERATOR","Symbol","merge","target","source","depth","assign","intersect","s1","s2","intersection","difference","diff","N3EntityIndex","_id","_ids","_entities","_blankNodeIndex","_termFromId","entities","terms","_termToNumericId","s","p","o","g","_termToNewNumericId","str","createBlankNode","suggestedName","index","N3Store","_size","_graphs","_entityIndex","entityIndex","bind","addAll","size","graphs","subjects","graphKey","subjectKey","predicateKey","_addToIndex","index0","key0","key1","key2","index1","index2","existed","_removeFromIndex","_findInIndex","name0","name1","name2","graphId","tmp","entityKeys","parts","value0","value1","values","l","_loop","_loopByKey0","_loopByKey1","_loopBy2Keys","_countInIndex","count","_getGraphs","_uniqueEntities","uniqueIds","add","graphItem","predicates","objects","freeze","delete","removeQuad","subjectOrQuad","readQuads","import","stream","removeQuads","remove","removeMatches","Readable","objectMode","iterable","_read","deleteGraph","getQuads","content","subjectId","predicateId","objectId","DatasetCoreAndReadableStream","countQuads","forEach","some","getSubjects","results","forSubjects","getPredicates","forPredicates","getObjects","forObjects","getGraphs","forGraphs","extractLists","ignoreErrors","onError","node","tails","toRemove","tailQuad","items","head","headPos","malformed","current","objectQuads","subjectQuads","unshift","filtered","contains","g1","g2","p1","p2","o1","deleteMatches","store","filter","iteratee","reduce","initialValue","iter","accumulator","toArray","toCanonical","toStream","union","iterator","indexMatch","ids","ind","n3Store","_filtered","newStore","removeDotSegments","path","segmentBuffers","isCharacterAllowedAfterRelativePathSegment","buffer","removeDotSegmentsOfPath","colonPosition","searchOffset","pathSeparator","resolve","relativeIRI","baseFragmentPos","baseQueryPos","relativeColonPos","valueColonPos","valueSlashPos","baseColonPos","baseIRIScheme","baseSlashAfterColonPos","baseIRIPath","baseIRILastSlashPos","defineProperty","exports","CHAR","S","NAME_START_CHAR","NAME_CHAR","CHAR_RE","S_RE","NAME_START_CHAR_RE","NAME_CHAR_RE","NAME_RE","NMTOKEN_RE","isNameStartChar","c","S_LIST","isChar","isS","RESTRICTED_CHAR","RESTRICTED_CHAR_RE","isCharAndNotRestricted","saxes","SaxesParser","EVENTS","ed5","require$$0","ed2","require$$1","NSed3","isNCNameStartChar","NC_NAME_START_CHAR_RE","NC_NAME_START_CHAR","NC_NAME_CHAR_RE","NC_NAME_CHAR","NC_NAME_RE","isChar10","isNameChar","isChar11","isNCNameChar","XML_NAMESPACE","XMLNS_NAMESPACE","rootNS","__proto__","xml","XML_ENTITIES","gt","EOC","NL_LIKE","S_TEXT","S_XML_DECL_ENDING","NL","LESS","EQUAL","GREATER","CLOSE_BRACKET","DOCTYPE_TERMINATOR","QUOTES","DTD_TERMINATOR","XML_DECL_NAME_TERMINATOR","QUESTION","ATTRIB_VALUE_UNQUOTED_TERMINATOR","nsPairCheck","uri","fail","isNCName","isName","EVENT_NAME_TO_HANDLER_NAME","xmldecl","text","processinginstruction","opentagstart","closetag","cdata","ready","closed","_closed","opt","fragmentOpt","xmlnsOpt","xmlns","trackPosition","position","fileName","nameStartCheck","nameCheck","processAttribs","processAttribsNS","pushAttrib","pushAttribNS","additional","additionalNamespaces","mapping","nsMappingCheck","processAttribsPlain","pushAttribPlain","stateTable","sBegin","sBeginWhitespace","sDoctype","sDoctypeQuote","sDTD","sDTDQuoted","sDTDOpenWaka","sDTDOpenWakaBang","sDTDComment","sDTDCommentEnding","sDTDCommentEnded","sDTDPI","sDTDPIEnding","sText","sEntity","sOpenWaka","sOpenWakaBang","sComment","sCommentEnding","sCData","sCDataEnding","sCDataEnding2","sPIFirstChar","sPIRest","sPIBody","sPIEnding","sXMLDeclNameStart","sXMLDeclName","sXMLDeclEq","sXMLDeclValueStart","sXMLDeclValue","sXMLDeclSeparator","sXMLDeclEnding","sOpenTag","sOpenTagSlash","sAttribName","sAttribNameSawWhite","sAttribValueQuoted","sAttribValueClosed","sAttribValueUnquoted","sCloseTagSawWhite","_init","_a","openWakaBang","q","tags","tag","topNS","chunkPosition","prevI","carriedFromPrevious","forbiddenState","attribList","state","reportedTextBeforeRoot","reportedTextAfterRoot","closedRoot","sawRoot","xmlDeclPossible","xmlDeclExpects","entityReturnState","defaultXMLVersion","forceXMLVersion","setXMLVersion","positionAtNewLine","doctype","column","ENTITIES","readyHandler","call","columnIndex","handler","makeError","msg","limit","lastCode","close","code","final","captureTo","chars","getCode","isNLLike","captureToChar","getCodeNorm","version","currentXMLVersion","getCode10","getCode11","iBefore","skipSpaces","doctypeHandler","fromCodePoint","isQuote","owb","handleTextInRoot","handleTextOutsideRoot","parsed","parseEntity","textHandler","loop","unget","commentHandler","cdataHandler","piTarget","isQuestion","piHandler","body","xmlDecl","standalone","xmldeclHandler","captureNameChars","attributes","openTagStartHandler","openTag","openSelfClosingTag","ParseError_1","ParseError","hasRequiredBlankNode","BlankNode_1","DefaultGraph_1","DefaultGraph","hasRequiredNamedNode","NamedNode_1","hasRequiredLiteral","Literal_1","Literal$1","languageOrDatatype","RDF_LANGUAGE_STRING","XSD_STRING","Variable_1","DataFactory_1","require$$2","dataFactoryCounter","blankNodeCounter","Quad_1","original","validateIri","IriValidationStrategy","buildAbsoluteIriRfc3987Regex","pct_encoded","dec_octet","ipv4address","h16","ls32","iunreserved","sub_delims","isegment_nz","ipchar","isegment","PRAGMATIC_IRI_REGEX","requireRdfXmlParser","hasRequiredRdfXmlParser","RdfXmlParser_1","ParseType","RdfXmlParser","relative_to_absolute_iri_1","saxes_1","require$$3","rdf_data_factory_1","require$$4","validate_iri_1","require$$5","readable_stream_1","Transform","args","readableObjectMode","activeTagStack","nodeIds","dataFactory","validateUri","iriValidationStrategy","Pragmatic","None","saxParser","attachSaxListeners","PassThrough","emit","_transform","newParseError","activeTag","uriToNamedNode","uriValidationResult","validateNcname","onTag","onText","onCloseTag","onDoctype","parentTag","currentParseType","RESOURCE","hadChildren","childrenParseType","childrenStringTags","tagName","attributeKey","tagString","stringActiveTag","childrenStringEmitClosingTag","onTagResource","onTagProperty","rootTag","PROPERTY","typedNode","FORBIDDEN_NODE_ELEMENTS","claimSubjectNodeId","subjectValueBlank","explicitType","attribute","activeSubjectValue","XML","valueToUri","claimNodeId","emitTriple","reifiedStatementId","linkTerm","childrenCollectionSubject","childrenCollectionPredicate","predicateSubPredicates","predicateSubObjects","predicateEmitted","listItemCounter","FORBIDDEN_PROPERTY_ELEMENTS","parseType","attributedProperty","activeSubSubjectValue","propertyAttribute","propertyAttributeKey","subSubjectValueBlank","nestedBNode","childrenTagsToString","subjectParent","statementId","allowDuplicateRdfIds","MIME_TYPE","defaultFetchResourceOptions","fetchResourceCache","requestCache","N3_CONTENT_TYPES","Set","ACCEPT_HEADER","findInStore","subjectUri","userLangs","navigator","languages","from","Intl","DateTimeFormat","resolvedOptions","locale","_b","getUserLanguages","subj","N3.DataFactory","predUri","lang","find","qLang","noLang","en","parseTurtle","contentType","N3.Store","N3.Parser","reject","val","getSparqlQuery","fetchAndParse","fetchFn","ok","trim","jsonldMod","then","_shim_jsonld$1","doc","toRDF","parseJsonLd","parseRdfXml","_c","fetchAndParseDocument","docUrl","findResourceInStore","storePromise","label","description","fetchResource","mergedOptions","isHashUri","instance","fallbackRainbowInstances","fallbackRainbowInstance","rainbowURL","URL","searchParams","rainbowUrlStr","endpoint","fallbackSparqlEndpoints","fallbackSparqlEndpoint","formBody","URLSearchParams","method","actualFetchResource","defaultAugmentOptions","replaceElements","augment","rootElem","resolveTerm","useVocab","useBase","closestVocab","closestBase","resolvedId","resolvedTerm","idx","localPart","resolvedPrefix","findLiteralChildren","elem","walker","document","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","nodeElem","classList","FILTER_REJECT","FILTER_SKIP","nextNode","updateElement","resourceUri","setAttribute","resourceData","elemToUpdate","querySelector","textContent","title","catch","console","cause","finally","link","createElement","href","firstChild","appendChild","augmentInner","propElems","FILTER_ACCEPT","cur","findPropertyChildren","propElem","propertyName","getAttribute","resolvedProperty","newContextStack","valueElem","parentElement","propertyUri","literalElem","resolvedLiteral","L","ldContext","popupOptions","maxWidth","augmentOptions","onEachFeature","userOnEachFeature","geoJSONOptions","geoJSON","feature","layer","bindTooltip","permanent","properties","container","propertiesField","createLevel","addHeaders","entry","span","table","innerHTML","tbody","row","keyCell","valueCell","wrapper","createPropertiesTable","bindPopup","resolvedContext"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}