n3 2.11.7 → 2.11.8

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.
@@ -9,12 +9,12 @@ var Ul=Object.create;var ar=Object.defineProperty,ql=Object.defineProperties,Wl=
9
9
  ${this._encodePredicate(this._predicate=r)} ${this._encodeObject(i)}`,s):this._write(`${(this._subject===null?"":`.
10
10
  `)+this._encodeSubject(this._subject=e)} ${this._encodePredicate(this._predicate=r)} ${this._encodeObject(i)}`,s)}catch(o){s&&s(o)}}_writeQuadLine(e,r,i,n,s){delete this._prefixMatch,this._write(this.quadToString(e,r,i,n),s)}quadToString(e,r,i,n){return`${this._encodeSubject(e)} ${r.termType==="Literal"?this._encodeLiteral(r):this._encodeIriOrBlank(r)} ${this._encodeObject(i)}${n&&!se(n)?` ${this._encodeIriOrBlank(n)} .
11
11
  `:` .
12
- `}`}quadsToString(e){let r="";for(let i of e)r+=this.quadToString(i.subject,i.predicate,i.object,i.graph);return r}_encodeSubject(e){switch(e.termType){case"Quad":return this._encodeQuad(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeIriOrBlank(e){if(e.termType!=="NamedNode")return this._lists&&e.value in this._lists&&(e=this.list(this._lists[e.value])),e instanceof V?e.id:e.termType==="Variable"?`?${e.value}`:`_:${e.value}`;let r=e.value;this._baseIri&&(r=this._baseIri.toRelative(r)),this._escape.test(r)&&(r=r.replace(this._escapeAll,this._characterReplacer));let i=this._hasPrefixes?this._prefixRegex.exec(r):null;return i?i[1]?this._prefixIRIs[i[1]]+i[2]:r:`<${r}>`}_encodeLiteral(e){let r=e.value;this._escape.test(r)&&(r=r.replace(this._escapeAll,this._characterReplacer));let i=e.language;if(i){let n=e.direction,s=n?`--${n}`:"";return`"${r}"@${i}${s}`}if(this._lineMode){if(e.datatype.value===dt.string)return`"${r}"`}else switch(e.datatype.value){case dt.string:return`"${r}"`;case dt.boolean:if(r==="true"||r==="false")return r;break;case dt.integer:if(/^[+-]?\d+$/.test(r))return r;break;case dt.decimal:if(/^[+-]?\d*\.\d+$/.test(r))return r;break;case dt.double:if(/^[+-]?(?:\d+\.\d*|\.?\d+)[eE][+-]?\d+$/.test(r))return r;break}return`"${r}"^^${this._encodeIriOrBlank(e.datatype)}`}_encodePredicate(e){switch(e.termType){case"NamedNode":return e.value===gu.type?"a":this._encodeIriOrBlank(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeObject(e){switch(e.termType){case"Quad":return this._encodeQuad(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeQuad({subject:e,predicate:r,object:i,graph:n}){let s=this._lineMode?" ":"";return`<<(${s}${this._encodeSubject(e)} ${this._encodePredicate(r)} ${this._encodeObject(i)}${se(n)?"":` ${this._encodeIriOrBlank(n)}`}${s})>>`}_blockedWrite(){throw new Error("Cannot write because the writer has been closed.")}addQuad(e,r,i,n,s){i===void 0?this._writeQuad(e.subject,e.predicate,e.object,e.graph,r):typeof n=="function"?this._writeQuad(e,r,i,Ut,n):this._writeQuad(e,r,i,n||Ut,s)}addQuads(e){for(let r=0;r<e.length;r++)this.addQuad(e[r])}addPrefix(e,r,i){let n={};n[e]=r,this.addPrefixes(n,i)}addPrefixes(e,r){if(!this._prefixIRIs)return r&&r();let i=!1;for(let n in e){let s=e[n];typeof s!="string"&&(s=s.value),i=!0,this._subject!==null&&(this._write(this._inDefaultGraph?`.
12
+ `}`}quadsToString(e){let r="";for(let i of e)r+=this.quadToString(i.subject,i.predicate,i.object,i.graph);return r}_encodeSubject(e){switch(e.termType){case"Quad":return this._encodeQuad(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeIriOrBlank(e){if(e.termType!=="NamedNode")return this._lists&&e.value in this._lists&&(e=this.list(this._lists[e.value])),e instanceof V?e.id:e.termType==="Variable"?`?${e.value}`:`_:${e.value}`;let r=e.value;this._baseIri&&(r=this._baseIri.toRelative(r)),this._escape.test(r)&&(r=r.replace(this._escapeAll,this._characterReplacer));let i=this._hasPrefixes?(this._prefixRegex||this._createPrefixRegex()).exec(r):null;return i?i[1]?this._prefixIRIs[i[1]]+i[2]:r:`<${r}>`}_encodeLiteral(e){let r=e.value;this._escape.test(r)&&(r=r.replace(this._escapeAll,this._characterReplacer));let i=e.language;if(i){let n=e.direction,s=n?`--${n}`:"";return`"${r}"@${i}${s}`}if(this._lineMode){if(e.datatype.value===dt.string)return`"${r}"`}else switch(e.datatype.value){case dt.string:return`"${r}"`;case dt.boolean:if(r==="true"||r==="false")return r;break;case dt.integer:if(/^[+-]?\d+$/.test(r))return r;break;case dt.decimal:if(/^[+-]?\d*\.\d+$/.test(r))return r;break;case dt.double:if(/^[+-]?(?:\d+\.\d*|\.?\d+)[eE][+-]?\d+$/.test(r))return r;break}return`"${r}"^^${this._encodeIriOrBlank(e.datatype)}`}_encodePredicate(e){switch(e.termType){case"NamedNode":return e.value===gu.type?"a":this._encodeIriOrBlank(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeObject(e){switch(e.termType){case"Quad":return this._encodeQuad(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeQuad({subject:e,predicate:r,object:i,graph:n}){let s=this._lineMode?" ":"";return`<<(${s}${this._encodeSubject(e)} ${this._encodePredicate(r)} ${this._encodeObject(i)}${se(n)?"":` ${this._encodeIriOrBlank(n)}`}${s})>>`}_blockedWrite(){throw new Error("Cannot write because the writer has been closed.")}addQuad(e,r,i,n,s){i===void 0?this._writeQuad(e.subject,e.predicate,e.object,e.graph,r):typeof n=="function"?this._writeQuad(e,r,i,Ut,n):this._writeQuad(e,r,i,n||Ut,s)}addQuads(e){for(let r=0;r<e.length;r++)this.addQuad(e[r])}addPrefix(e,r,i){let n={};n[e]=r,this.addPrefixes(n,i)}addPrefixes(e,r){if(!this._prefixIRIs)return r&&r();let i=!1;for(let n in e){let s=e[n];typeof s!="string"&&(s=s.value),i=!0,this._subject!==null&&(this._write(this._inDefaultGraph?`.
13
13
  `:`
14
14
  }
15
15
  `),this._subject=null,this._graph=""),this._prefixIRIs[s]=n+=":",this._prefixPatterns[s]=[Qe(s),Qe(n)],this._write(`@prefix ${n} <${s}>.
16
- `)}if(i){this._hasPrefixes=!0;let n="",s="";for(let o in this._prefixPatterns){let[a,l]=this._prefixPatterns[o];n+=n?`|${a}`:a,s+=s?`|${l}`:l}this._prefixRegex=new RegExp(`^(?:${s})[^/]*$|^(${n})([_a-zA-Z0-9](?:\\.?[\\-_a-zA-Z0-9])*)$`)}this._write(i?`
17
- `:"",r)}blank(e,r){let i=e,n,s;switch(e===void 0?i=[]:e.termType?i=[{predicate:e,object:r}]:"length"in e||(i=[e]),s=i.length){case 0:return new Ve("[]");case 1:if(n=i[0],!(n.object instanceof Ve))return new Ve(`[ ${this._encodePredicate(n.predicate)} ${this._encodeObject(n.object)} ]`);default:let o="[";for(let a=0;a<s;a++)n=i[a],n.predicate.equals(e)?o+=`, ${this._encodeObject(n.object)}`:(o+=`${(a?`;
16
+ `)}i&&(this._hasPrefixes=!0,this._prefixRegex=null),this._write(i?`
17
+ `:"",r)}_createPrefixRegex(){let e="",r="";for(let i in this._prefixPatterns){let[n,s]=this._prefixPatterns[i];e+=e?`|${n}`:n,r+=r?`|${s}`:s}return this._prefixRegex=new RegExp(`^(?:${r})[^/]*$|^(${e})([_a-zA-Z0-9](?:\\.?[\\-_a-zA-Z0-9])*)$`)}blank(e,r){let i=e,n,s;switch(e===void 0?i=[]:e.termType?i=[{predicate:e,object:r}]:"length"in e||(i=[e]),s=i.length){case 0:return new Ve("[]");case 1:if(n=i[0],!(n.object instanceof Ve))return new Ve(`[ ${this._encodePredicate(n.predicate)} ${this._encodeObject(n.object)} ]`);default:let o="[";for(let a=0;a<s;a++)n=i[a],n.predicate.equals(e)?o+=`, ${this._encodeObject(n.object)}`:(o+=`${(a?`;
18
18
  `:`
19
19
  `)+this._encodePredicate(n.predicate)} ${this._encodeObject(n.object)}`,e=n.predicate);return new Ve(`${o}
20
20
  ]`)}}list(e){let r=e&&e.length||0,i=new Array(r);for(let n=0;n<r;n++)i[n]=this._encodeObject(e[n]);return new Ve(`(${i.join(" ")})`)}end(e){this._subject!==null&&(this._write(this._inDefaultGraph?`.
package/browser/n3.min.js CHANGED
@@ -9,12 +9,12 @@ var N3=(()=>{var Wl=Object.create;var qt=Object.defineProperty,Gl=Object.defineP
9
9
  ${this._encodePredicate(this._predicate=r)} ${this._encodeObject(i)}`,s):this._write(`${(this._subject===null?"":`.
10
10
  `)+this._encodeSubject(this._subject=e)} ${this._encodePredicate(this._predicate=r)} ${this._encodeObject(i)}`,s)}catch(o){s&&s(o)}}_writeQuadLine(e,r,i,n,s){delete this._prefixMatch,this._write(this.quadToString(e,r,i,n),s)}quadToString(e,r,i,n){return`${this._encodeSubject(e)} ${r.termType==="Literal"?this._encodeLiteral(r):this._encodeIriOrBlank(r)} ${this._encodeObject(i)}${n&&!se(n)?` ${this._encodeIriOrBlank(n)} .
11
11
  `:` .
12
- `}`}quadsToString(e){let r="";for(let i of e)r+=this.quadToString(i.subject,i.predicate,i.object,i.graph);return r}_encodeSubject(e){switch(e.termType){case"Quad":return this._encodeQuad(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeIriOrBlank(e){if(e.termType!=="NamedNode")return this._lists&&e.value in this._lists&&(e=this.list(this._lists[e.value])),e instanceof Q?e.id:e.termType==="Variable"?`?${e.value}`:`_:${e.value}`;let r=e.value;this._baseIri&&(r=this._baseIri.toRelative(r)),this._escape.test(r)&&(r=r.replace(this._escapeAll,this._characterReplacer));let i=this._hasPrefixes?this._prefixRegex.exec(r):null;return i?i[1]?this._prefixIRIs[i[1]]+i[2]:r:`<${r}>`}_encodeLiteral(e){let r=e.value;this._escape.test(r)&&(r=r.replace(this._escapeAll,this._characterReplacer));let i=e.language;if(i){let n=e.direction,s=n?`--${n}`:"";return`"${r}"@${i}${s}`}if(this._lineMode){if(e.datatype.value===pt.string)return`"${r}"`}else switch(e.datatype.value){case pt.string:return`"${r}"`;case pt.boolean:if(r==="true"||r==="false")return r;break;case pt.integer:if(/^[+-]?\d+$/.test(r))return r;break;case pt.decimal:if(/^[+-]?\d*\.\d+$/.test(r))return r;break;case pt.double:if(/^[+-]?(?:\d+\.\d*|\.?\d+)[eE][+-]?\d+$/.test(r))return r;break}return`"${r}"^^${this._encodeIriOrBlank(e.datatype)}`}_encodePredicate(e){switch(e.termType){case"NamedNode":return e.value===mu.type?"a":this._encodeIriOrBlank(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeObject(e){switch(e.termType){case"Quad":return this._encodeQuad(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeQuad({subject:e,predicate:r,object:i,graph:n}){let s=this._lineMode?" ":"";return`<<(${s}${this._encodeSubject(e)} ${this._encodePredicate(r)} ${this._encodeObject(i)}${se(n)?"":` ${this._encodeIriOrBlank(n)}`}${s})>>`}_blockedWrite(){throw new Error("Cannot write because the writer has been closed.")}addQuad(e,r,i,n,s){i===void 0?this._writeQuad(e.subject,e.predicate,e.object,e.graph,r):typeof n=="function"?this._writeQuad(e,r,i,Vt,n):this._writeQuad(e,r,i,n||Vt,s)}addQuads(e){for(let r=0;r<e.length;r++)this.addQuad(e[r])}addPrefix(e,r,i){let n={};n[e]=r,this.addPrefixes(n,i)}addPrefixes(e,r){if(!this._prefixIRIs)return r&&r();let i=!1;for(let n in e){let s=e[n];typeof s!="string"&&(s=s.value),i=!0,this._subject!==null&&(this._write(this._inDefaultGraph?`.
12
+ `}`}quadsToString(e){let r="";for(let i of e)r+=this.quadToString(i.subject,i.predicate,i.object,i.graph);return r}_encodeSubject(e){switch(e.termType){case"Quad":return this._encodeQuad(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeIriOrBlank(e){if(e.termType!=="NamedNode")return this._lists&&e.value in this._lists&&(e=this.list(this._lists[e.value])),e instanceof Q?e.id:e.termType==="Variable"?`?${e.value}`:`_:${e.value}`;let r=e.value;this._baseIri&&(r=this._baseIri.toRelative(r)),this._escape.test(r)&&(r=r.replace(this._escapeAll,this._characterReplacer));let i=this._hasPrefixes?(this._prefixRegex||this._createPrefixRegex()).exec(r):null;return i?i[1]?this._prefixIRIs[i[1]]+i[2]:r:`<${r}>`}_encodeLiteral(e){let r=e.value;this._escape.test(r)&&(r=r.replace(this._escapeAll,this._characterReplacer));let i=e.language;if(i){let n=e.direction,s=n?`--${n}`:"";return`"${r}"@${i}${s}`}if(this._lineMode){if(e.datatype.value===pt.string)return`"${r}"`}else switch(e.datatype.value){case pt.string:return`"${r}"`;case pt.boolean:if(r==="true"||r==="false")return r;break;case pt.integer:if(/^[+-]?\d+$/.test(r))return r;break;case pt.decimal:if(/^[+-]?\d*\.\d+$/.test(r))return r;break;case pt.double:if(/^[+-]?(?:\d+\.\d*|\.?\d+)[eE][+-]?\d+$/.test(r))return r;break}return`"${r}"^^${this._encodeIriOrBlank(e.datatype)}`}_encodePredicate(e){switch(e.termType){case"NamedNode":return e.value===mu.type?"a":this._encodeIriOrBlank(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeObject(e){switch(e.termType){case"Quad":return this._encodeQuad(e);case"Literal":return this._encodeLiteral(e);default:return this._encodeIriOrBlank(e)}}_encodeQuad({subject:e,predicate:r,object:i,graph:n}){let s=this._lineMode?" ":"";return`<<(${s}${this._encodeSubject(e)} ${this._encodePredicate(r)} ${this._encodeObject(i)}${se(n)?"":` ${this._encodeIriOrBlank(n)}`}${s})>>`}_blockedWrite(){throw new Error("Cannot write because the writer has been closed.")}addQuad(e,r,i,n,s){i===void 0?this._writeQuad(e.subject,e.predicate,e.object,e.graph,r):typeof n=="function"?this._writeQuad(e,r,i,Vt,n):this._writeQuad(e,r,i,n||Vt,s)}addQuads(e){for(let r=0;r<e.length;r++)this.addQuad(e[r])}addPrefix(e,r,i){let n={};n[e]=r,this.addPrefixes(n,i)}addPrefixes(e,r){if(!this._prefixIRIs)return r&&r();let i=!1;for(let n in e){let s=e[n];typeof s!="string"&&(s=s.value),i=!0,this._subject!==null&&(this._write(this._inDefaultGraph?`.
13
13
  `:`
14
14
  }
15
15
  `),this._subject=null,this._graph=""),this._prefixIRIs[s]=n+=":",this._prefixPatterns[s]=[Ve(s),Ve(n)],this._write(`@prefix ${n} <${s}>.
16
- `)}if(i){this._hasPrefixes=!0;let n="",s="";for(let o in this._prefixPatterns){let[a,l]=this._prefixPatterns[o];n+=n?`|${a}`:a,s+=s?`|${l}`:l}this._prefixRegex=new RegExp(`^(?:${s})[^/]*$|^(${n})([_a-zA-Z0-9](?:\\.?[\\-_a-zA-Z0-9])*)$`)}this._write(i?`
17
- `:"",r)}blank(e,r){let i=e,n,s;switch(e===void 0?i=[]:e.termType?i=[{predicate:e,object:r}]:"length"in e||(i=[e]),s=i.length){case 0:return new He("[]");case 1:if(n=i[0],!(n.object instanceof He))return new He(`[ ${this._encodePredicate(n.predicate)} ${this._encodeObject(n.object)} ]`);default:let o="[";for(let a=0;a<s;a++)n=i[a],n.predicate.equals(e)?o+=`, ${this._encodeObject(n.object)}`:(o+=`${(a?`;
16
+ `)}i&&(this._hasPrefixes=!0,this._prefixRegex=null),this._write(i?`
17
+ `:"",r)}_createPrefixRegex(){let e="",r="";for(let i in this._prefixPatterns){let[n,s]=this._prefixPatterns[i];e+=e?`|${n}`:n,r+=r?`|${s}`:s}return this._prefixRegex=new RegExp(`^(?:${r})[^/]*$|^(${e})([_a-zA-Z0-9](?:\\.?[\\-_a-zA-Z0-9])*)$`)}blank(e,r){let i=e,n,s;switch(e===void 0?i=[]:e.termType?i=[{predicate:e,object:r}]:"length"in e||(i=[e]),s=i.length){case 0:return new He("[]");case 1:if(n=i[0],!(n.object instanceof He))return new He(`[ ${this._encodePredicate(n.predicate)} ${this._encodeObject(n.object)} ]`);default:let o="[";for(let a=0;a<s;a++)n=i[a],n.predicate.equals(e)?o+=`, ${this._encodeObject(n.object)}`:(o+=`${(a?`;
18
18
  `:`
19
19
  `)+this._encodePredicate(n.predicate)} ${this._encodeObject(n.object)}`,e=n.predicate);return new He(`${o}
20
20
  ]`)}}list(e){let r=e&&e.length||0,i=new Array(r);for(let n=0;n<r;n++)i[n]=this._encodeObject(e[n]);return new He(`(${i.join(" ")})`)}end(e){this._subject!==null&&(this._write(this._inDefaultGraph?`.
package/lib/N3Writer.js CHANGED
@@ -188,7 +188,7 @@ class N3Writer {
188
188
  // Escape special characters
189
189
  if (this._escape.test(iri)) iri = iri.replace(this._escapeAll, this._characterReplacer);
190
190
  // Try to represent the IRI as prefixed name, unless no prefixes were added
191
- const prefixMatch = this._hasPrefixes ? this._prefixRegex.exec(iri) : null;
191
+ const prefixMatch = this._hasPrefixes ? (this._prefixRegex || this._createPrefixRegex()).exec(iri) : null;
192
192
  return !prefixMatch ? `<${iri}>` : !prefixMatch[1] ? iri : this._prefixIRIs[prefixMatch[1]] + prefixMatch[2];
193
193
  }
194
194
 
@@ -319,22 +319,28 @@ class N3Writer {
319
319
  this._prefixPatterns[iri] = [(0, _Util.escapeRegex)(iri), (0, _Util.escapeRegex)(prefix)];
320
320
  this._write(`@prefix ${prefix} <${iri}>.\n`);
321
321
  }
322
- // Recreate the prefix matcher
322
+ // Recreate the prefix matcher when it is next needed, so that adding
323
+ // prefixes one by one does not rebuild it for every prefix
323
324
  if (hasPrefixes) {
324
325
  this._hasPrefixes = true;
325
- let IRIlist = '',
326
- prefixList = '';
327
- for (const prefixIRI in this._prefixPatterns) {
328
- const [IRIpattern, prefixPattern] = this._prefixPatterns[prefixIRI];
329
- IRIlist += IRIlist ? `|${IRIpattern}` : IRIpattern;
330
- prefixList += prefixList ? `|${prefixPattern}` : prefixPattern;
331
- }
332
- this._prefixRegex = new RegExp(`^(?:${prefixList})[^/]*$|` + `^(${IRIlist})([_a-zA-Z0-9](?:\\.?[\\-_a-zA-Z0-9])*)$`);
326
+ this._prefixRegex = null;
333
327
  }
334
328
  // End a prefix block with a newline
335
329
  this._write(hasPrefixes ? '\n' : '', done);
336
330
  }
337
331
 
332
+ // ### `_createPrefixRegex` creates the matcher for the current prefixes
333
+ _createPrefixRegex() {
334
+ let IRIlist = '',
335
+ prefixList = '';
336
+ for (const prefixIRI in this._prefixPatterns) {
337
+ const [IRIpattern, prefixPattern] = this._prefixPatterns[prefixIRI];
338
+ IRIlist += IRIlist ? `|${IRIpattern}` : IRIpattern;
339
+ prefixList += prefixList ? `|${prefixPattern}` : prefixPattern;
340
+ }
341
+ return this._prefixRegex = new RegExp(`^(?:${prefixList})[^/]*$|` + `^(${IRIlist})([_a-zA-Z0-9](?:\\.?[\\-_a-zA-Z0-9])*)$`);
342
+ }
343
+
338
344
  // ### `blank` creates a blank node with the given content
339
345
  blank(predicate, object) {
340
346
  let children = predicate,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n3",
3
- "version": "2.11.7",
3
+ "version": "2.11.8",
4
4
  "description": "Lightning fast, asynchronous, streaming Turtle / N3 / RDF library.",
5
5
  "author": "Ruben Verborgh <ruben.verborgh@gmail.com>",
6
6
  "keywords": [
package/src/N3Writer.js CHANGED
@@ -189,7 +189,7 @@ export default class N3Writer {
189
189
  if (this._escape.test(iri))
190
190
  iri = iri.replace(this._escapeAll, this._characterReplacer);
191
191
  // Try to represent the IRI as prefixed name, unless no prefixes were added
192
- const prefixMatch = this._hasPrefixes ? this._prefixRegex.exec(iri) : null;
192
+ const prefixMatch = this._hasPrefixes ? (this._prefixRegex || this._createPrefixRegex()).exec(iri) : null;
193
193
  return !prefixMatch ? `<${iri}>` :
194
194
  (!prefixMatch[1] ? iri : this._prefixIRIs[prefixMatch[1]] + prefixMatch[2]);
195
195
  }
@@ -333,22 +333,28 @@ export default class N3Writer {
333
333
  this._prefixPatterns[iri] = [escapeRegex(iri), escapeRegex(prefix)];
334
334
  this._write(`@prefix ${prefix} <${iri}>.\n`);
335
335
  }
336
- // Recreate the prefix matcher
336
+ // Recreate the prefix matcher when it is next needed, so that adding
337
+ // prefixes one by one does not rebuild it for every prefix
337
338
  if (hasPrefixes) {
338
339
  this._hasPrefixes = true;
339
- let IRIlist = '', prefixList = '';
340
- for (const prefixIRI in this._prefixPatterns) {
341
- const [IRIpattern, prefixPattern] = this._prefixPatterns[prefixIRI];
342
- IRIlist += IRIlist ? `|${IRIpattern}` : IRIpattern;
343
- prefixList += prefixList ? `|${prefixPattern}` : prefixPattern;
344
- }
345
- this._prefixRegex = new RegExp(`^(?:${prefixList})[^/]*$|` +
346
- `^(${IRIlist})([_a-zA-Z0-9](?:\\.?[\\-_a-zA-Z0-9])*)$`);
340
+ this._prefixRegex = null;
347
341
  }
348
342
  // End a prefix block with a newline
349
343
  this._write(hasPrefixes ? '\n' : '', done);
350
344
  }
351
345
 
346
+ // ### `_createPrefixRegex` creates the matcher for the current prefixes
347
+ _createPrefixRegex() {
348
+ let IRIlist = '', prefixList = '';
349
+ for (const prefixIRI in this._prefixPatterns) {
350
+ const [IRIpattern, prefixPattern] = this._prefixPatterns[prefixIRI];
351
+ IRIlist += IRIlist ? `|${IRIpattern}` : IRIpattern;
352
+ prefixList += prefixList ? `|${prefixPattern}` : prefixPattern;
353
+ }
354
+ return this._prefixRegex = new RegExp(`^(?:${prefixList})[^/]*$|` +
355
+ `^(${IRIlist})([_a-zA-Z0-9](?:\\.?[\\-_a-zA-Z0-9])*)$`);
356
+ }
357
+
352
358
  // ### `blank` creates a blank node with the given content
353
359
  blank(predicate, object) {
354
360
  let children = predicate, child, length;