@graphy/content.nq.read
Advanced tools
Comparing version 3.2.2 to 4.0.0
393
main.js
@@ -5,6 +5,4 @@ | ||
const stream = require('@graphy/core.iso.stream'); | ||
const factory = require('@graphy/core.data.factory').raw; | ||
const factory = require('@graphy/core.data.factory'); | ||
const KT_DEFAULT_GRAPH = factory.defaultGraph(); | ||
const KT_RDFS_LANG_STRING = factory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'); | ||
@@ -26,2 +24,9 @@ const H_ESCAPES_JSON = { | ||
const unescape_literal = s => JSON.parse('"' | ||
+s | ||
.replace(R_UNICODE_8, F_REPLACE_UNICODE_ANY) | ||
.replace(R_ESCAPES, '$1$2') // no need to escape anything other than reserved characters | ||
.replace(/[\t"\f\u0008]/g, s_e => H_ESCAPES_JSON[s_e]) | ||
+'"'); | ||
const R_CLEAN = /\s*(?:#[^\n]*\n\s*)*\s*/y; | ||
@@ -35,2 +40,3 @@ const R_CLEAN_COMMENTS = /\s*(#[^\n]*\n\s*)*\s*/y; | ||
const RT_ABSOLUTE_IRI_VALID = /^[a-z][a-z0-9+\-.]*:([^\0-\x20<>"{}|^`\\]|\\u[A-Fa-f0-9]{4}|\\U[A-Fa-f0-9]{8})*$/; | ||
// eslint-disable-next-line no-misleading-character-class | ||
const RT_BLANK_NODE_LABEL_VALID = /^(?:[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u{02ff}\u{0370}-\u{037d}\u{037f}-\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])(?:(?:[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u{02ff}\u{0370}-\u{037d}\u{037f}-\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}.])*[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u{02ff}\u{0370}-\u{037d}\u{037f}-\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; | ||
@@ -67,2 +73,4 @@ const RT_ESCAPES_INVALID = /(?:(?:^|[^\\])(?:\\(?:\\\\)*[^"tbnrfuU\\_~.!$&'()*+,;=/?#@%-])(?:[^\\]|$))|\\u[^A-Fa-f0-9]{4}|\\U[^A-Fa-f0-9]{8}/; | ||
this.on('pipe', (ds_input) => { | ||
this._ds_input = ds_input; | ||
// input stream has encoding option; ensure stream encoding is utf8 | ||
@@ -105,3 +113,4 @@ if('function' === typeof ds_input.setEncoding) { | ||
class reader { | ||
class Reader { | ||
constructor(g_config) { | ||
@@ -112,4 +121,4 @@ let { | ||
// validate iris | ||
validate: b_validate=false, | ||
// relax validation | ||
relax: b_relax=false, | ||
@@ -120,2 +129,7 @@ // debug | ||
// adopt factory | ||
let dc_factory = this._dc_factory = factory.adopt(g_config.dataFactory || g_config.data_factory || factory.unfiltered); | ||
this._f_quad = dc_factory.quad; | ||
// fields | ||
@@ -129,51 +143,175 @@ Object.assign(this, { | ||
debug: b_debug, | ||
_b_debug: b_debug, | ||
validate: b_validate, | ||
_b_relax: b_relax, | ||
destroyed: false, | ||
_b_destroyed: false, | ||
}); | ||
this._kt_default_graph = dc_factory.defaultGraph(); | ||
this._kt_rdfs_lang_string = dc_factory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'); | ||
// clean regex | ||
let r_clean = R_CLEAN; | ||
if(g_config.relaxed) { | ||
console.warn((new Error(`no such option 'relaxed'; did you mean 'relax' ?`)).stack.replace(/^Error:/, 'Warning:')); | ||
} | ||
if('validate' in g_config) { | ||
console.warn((new Error(`option 'validate' has been removed and validation is now on by default. Use 'relax' option if you wish to disable validation.`)).stack.replace(/^Error:/, 'Warning:')); | ||
} | ||
// validation | ||
Object.assign(this, b_validate | ||
let k_self = this; | ||
Object.assign(this, !b_relax | ||
? { | ||
namedNode(s_iri) { | ||
if(!RT_ABSOLUTE_IRI_VALID.test(s_iri)) return this._error(`invalid absolute IRI: "${s_iri}"`); | ||
return factory.namedNode(s_iri); | ||
if(!RT_ABSOLUTE_IRI_VALID.test(s_iri)) return k_self._error(`Invalid absolute IRI: "${s_iri}"`); | ||
return dc_factory.namedNode(s_iri); | ||
}, | ||
blankNode(s_label) { | ||
if(!RT_BLANK_NODE_LABEL_VALID.test(s_label)) return this._error(`invalid blank node label: "${s_label}"`); | ||
return factory.blankNode(s_label); | ||
if(!RT_BLANK_NODE_LABEL_VALID.test(s_label)) return k_self._error(`Invalid blank node label: "${s_label}"`); | ||
return dc_factory.blankNode(s_label); | ||
}, | ||
literal(s_literal, b_unescape=false) { | ||
if(!RT_LITERAL_CONTENTS_VALID.test(s_literal)) return this._error(`invalid literal: "${s_literal}"`); | ||
simpleLiteral(s_contents) { | ||
if(!RT_LITERAL_CONTENTS_VALID.test(s_contents)) { | ||
return k_self._error(`Invalid simple-literal contents: "${s_contents}"`); | ||
} | ||
return dc_factory.simpleLiteral(s_contents); | ||
}, | ||
languagedLiteral(s_contents, s_language) { | ||
if(!RT_LITERAL_CONTENTS_VALID.test(s_contents)) { | ||
return k_self._error(`Invalid languaged-literal contents: "${s_contents}"`); | ||
} | ||
if(!RT_LANGUAGE_VALID.test(s_language)) { | ||
return k_self._error(`Invalid literal language tag: ${s_language}`); | ||
} | ||
return dc_factory.languagedLiteral(s_contents, s_language); | ||
}, | ||
datatypedLiteral(s_contents, p_datatype) { | ||
if(!RT_LITERAL_CONTENTS_VALID.test(s_contents)) { | ||
return k_self._error(`Invalid datatyped-literal contents: "${s_contents}"`); | ||
} | ||
return dc_factory.datatypedLiteral(s_contents, k_self.namedNode(p_datatype)); | ||
}, | ||
simpleLiteralE(s_contents) { | ||
if(!RT_LITERAL_CONTENTS_VALID.test(s_contents)) { | ||
return k_self._error(`Invalid simple-literal contents: "${s_contents}"`); | ||
} | ||
try { | ||
return factory.literal(b_unescape? JSON.parse('"' | ||
+s_literal | ||
.replace(R_UNICODE_8, F_REPLACE_UNICODE_ANY) | ||
.replace(R_ESCAPES, '$1$2') // no need to escape anything other than reserved characters | ||
.replace(/[\t"\f\u0008]/g, s => H_ESCAPES_JSON[s]) | ||
+'"'): s_literal); | ||
s_contents = unescape_literal(s_contents); | ||
} | ||
catch(e_parse) { | ||
return this._error(`invalid string literal: "${s_literal}"`); | ||
return this._error(`Invalid escaping within simple-literal contents: "${s_contents}"`); | ||
} | ||
return dc_factory.simpleLiteral(s_contents); | ||
}, | ||
languagedLiteralE(s_contents, s_language) { | ||
if(!RT_LITERAL_CONTENTS_VALID.test(s_contents)) { | ||
return k_self._error(`Invalid languaged-literal contents: "${s_contents}"`); | ||
} | ||
if(!RT_LANGUAGE_VALID.test(s_language)) { | ||
return k_self._error(`Invalid literal language tag: ${s_language}`); | ||
} | ||
try { | ||
s_contents = unescape_literal(s_contents); | ||
} | ||
catch(e_parse) { | ||
return this._error(`Invalid escaping within languaged-literal contents: "${s_contents}"`); | ||
} | ||
return dc_factory.languagedLiteral(s_contents, s_language); | ||
}, | ||
datatypedLiteralE(s_contents, p_datatype) { | ||
if(!RT_LITERAL_CONTENTS_VALID.test(s_contents)) { | ||
return k_self._error(`Invalid datatyped-literal contents: "${s_contents}"`); | ||
} | ||
try { | ||
s_contents = unescape_literal(s_contents); | ||
} | ||
catch(e_parse) { | ||
return this._error(`Invalid escaping within datatyped-literal contents: "${s_contents}"`); | ||
} | ||
return dc_factory.datatypedLiteral(s_contents, k_self.namedNode(p_datatype)); | ||
}, | ||
} | ||
: { | ||
namedNode: factory.namedNode, | ||
namedNode: dc_factory.namedNode, | ||
blankNode: factory.blankNode, | ||
blankNode: dc_factory.blankNode, | ||
literal: (s_literal, b_unescape) => factory.literal(b_unescape? JSON.parse('"' | ||
+s_literal | ||
.replace(R_UNICODE_8, F_REPLACE_UNICODE_ANY) | ||
.replace(R_ESCAPES, '$1$2') // no need to escape anything other than reserved characters | ||
.replace(/[\t"\f\u0008]/g, s => H_ESCAPES_JSON[s]) | ||
+'"'): s_literal), | ||
simpleLiteral: dc_factory.simpleLiteral, | ||
languagedLiteral: dc_factory.languagedLiteral, | ||
datatypedLiteral: (s_contents, p_datatype) => dc_factory.datatypedLiteral(s_contents, dc_factory.namedNode(p_datatype)), | ||
simpleLiteralE(s_contents) { | ||
try { | ||
s_contents = unescape_literal(s_contents); | ||
} | ||
catch(e_parse) { | ||
return this._error(`Invalid escaping within simple-literal contents: "${s_contents}"`); | ||
} | ||
return dc_factory.simpleLiteral(s_contents); | ||
}, | ||
languagedLiteralE(s_contents, s_language) { | ||
try { | ||
s_contents = unescape_literal(s_contents); | ||
} | ||
catch(e_parse) { | ||
return this._error(`Invalid escaping within languaged-literal contents: "${s_contents}"`); | ||
} | ||
return dc_factory.languagedLiteral(s_contents, s_language); | ||
}, | ||
datatypedLiteralE(s_contents, p_datatype) { | ||
try { | ||
s_contents = unescape_literal(s_contents); | ||
} | ||
catch(e_parse) { | ||
return this._error(`Invalid escaping within datatyped-literal contents: "${s_contents}"`); | ||
} | ||
return dc_factory.datatypedLiteral(s_contents, dc_factory.namedNode(p_datatype)); | ||
}, | ||
}); | ||
@@ -269,2 +407,7 @@ | ||
// destroy | ||
ds_transform._destroy = (...a_args) => { | ||
this.destroy(...a_args); | ||
}; | ||
// data event | ||
@@ -317,6 +460,8 @@ this.data = g_quad => ds_transform.push(g_quad); | ||
} | ||
ds_transform._graphy_reader = this; | ||
} | ||
_error(s_message) { | ||
this.destroyed = true; | ||
this._b_destroyed = true; | ||
throw new Error(s_message); | ||
@@ -344,62 +489,74 @@ } | ||
let fk_data = this.data; | ||
let f_quad = this._f_quad; | ||
let namedNode = this.namedNode; | ||
let blankNode = this.blankNode; | ||
let simpleLiteral = this.simpleLiteral; | ||
let languagedLiteral = this.languagedLiteral; | ||
let datatypedLiteral = this.datatypedLiteral; | ||
let simpleLiteralE = this.simpleLiteralE; | ||
let languagedLiteralE = this.languagedLiteralE; | ||
let datatypedLiteralE = this.datatypedLiteralE; | ||
let kt_default_graph = this._kt_default_graph; | ||
// match triples/quads | ||
// match triples/quads | ||
for(;;) { | ||
// prepare sticky regex index | ||
// prepare sticky regex index | ||
R_QUAD_ESCAPELESS_SP.lastIndex = i; | ||
// execute regex | ||
// execute regex | ||
let m_statement_e_sp = R_QUAD_ESCAPELESS_SP.exec(s); | ||
// regex was a match | ||
// regex was a match | ||
if(m_statement_e_sp) { | ||
// advance index | ||
// advance index | ||
i = R_QUAD_ESCAPELESS_SP.lastIndex; | ||
// prep object term | ||
let w_object; | ||
// prep object term | ||
let kt_object; | ||
// object term type is named node | ||
// object term type is named node | ||
if(m_statement_e_sp[4]) { | ||
let p_object = m_statement_e_sp[4].slice(1); | ||
w_object = this.namedNode(p_object); | ||
kt_object = namedNode(p_object); | ||
} | ||
// object term type is blank node | ||
// object term type is blank node | ||
else if(m_statement_e_sp[5]) { | ||
w_object = this.blankNode(m_statement_e_sp[5]); | ||
kt_object = blankNode(m_statement_e_sp[5]); | ||
} | ||
// object term type is literal | ||
// object term type is literal | ||
else { | ||
// contents | ||
w_object = this.literal(m_statement_e_sp[6], false); | ||
// contents | ||
let s_contents = m_statement_e_sp[6]; | ||
// set datatype if present | ||
// set datatype if present | ||
if(m_statement_e_sp[7]) { | ||
w_object.datatype = this.namedNode(m_statement_e_sp[7]); | ||
kt_object = datatypedLiteral(s_contents, m_statement_e_sp[7]); | ||
} | ||
// otherwise, set language tag if present | ||
// otherwise, set language tag if present | ||
else if(m_statement_e_sp[8]) { | ||
let s_language = w_object.language = m_statement_e_sp[8].toLowerCase(); | ||
if(this.validate && !RT_LANGUAGE_VALID.test(s_language)) return this._error(`invalid literal language tag: ${s_language}`); | ||
w_object.datatype = KT_RDFS_LANG_STRING; | ||
kt_object = languagedLiteral(s_contents, m_statement_e_sp[8].toLowerCase()); | ||
} | ||
// simple literal | ||
else { | ||
kt_object = simpleLiteral(s_contents); | ||
} | ||
} | ||
// emit data event | ||
// emit data event | ||
fk_data( | ||
factory.quad( | ||
f_quad( | ||
m_statement_e_sp[2] | ||
? this.blankNode(m_statement_e_sp[2]) | ||
: this.namedNode(m_statement_e_sp[1]), | ||
this.namedNode(m_statement_e_sp[3]), | ||
w_object, | ||
? blankNode(m_statement_e_sp[2]) | ||
: namedNode(m_statement_e_sp[1]), | ||
namedNode(m_statement_e_sp[3]), | ||
kt_object, | ||
m_statement_e_sp[9] | ||
? this.namedNode(m_statement_e_sp[9]) | ||
? namedNode(m_statement_e_sp[9]) | ||
: (m_statement_e_sp[10] | ||
? this.blankNode(m_statement_e_sp[10]) | ||
? blankNode(m_statement_e_sp[10]) | ||
: ('string' === typeof m_statement_e_sp[9] | ||
? this.namedNode(m_statement_e_sp[9]) | ||
: KT_DEFAULT_GRAPH)) | ||
) | ||
? namedNode(m_statement_e_sp[9]) | ||
: kt_default_graph)), | ||
), | ||
); | ||
// comments | ||
// comments | ||
if(this.emit_comments) { | ||
@@ -410,59 +567,61 @@ this.emit_comments(m_statement_e_sp[11]); | ||
else { | ||
// prepare sticky regex index | ||
// prepare sticky regex index | ||
R_QUAD.lastIndex = i; | ||
// execute regex | ||
// execute regex | ||
let m_statement = R_QUAD.exec(s); | ||
// regex was a match | ||
// regex was a match | ||
if(m_statement) { | ||
// advance index | ||
// advance index | ||
i = R_QUAD.lastIndex; | ||
// prep object term | ||
let w_object; | ||
// prep object term | ||
let kt_object; | ||
// object term type is named node | ||
// object term type is named node | ||
if(m_statement[4]) { | ||
let p_object = m_statement[4].slice(1); | ||
w_object = this.namedNode(RT_HAS_ESCAPES.test(p_object)? p_object.replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): p_object); | ||
kt_object = namedNode(RT_HAS_ESCAPES.test(p_object)? p_object.replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): p_object); | ||
} | ||
// object term type is blank node | ||
// object term type is blank node | ||
else if(m_statement[5]) { | ||
w_object = this.blankNode(RT_HAS_ESCAPES.test(m_statement[5])? m_statement[5].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[5]); | ||
kt_object = blankNode(RT_HAS_ESCAPES.test(m_statement[5])? m_statement[5].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[5]); | ||
} | ||
// object term type is literal | ||
// object term type is literal | ||
else { | ||
// contents | ||
w_object = this.literal(m_statement[6], true); | ||
// contents | ||
let s_contents = m_statement[6]; | ||
// set datatype if present | ||
// set datatype if present | ||
if(m_statement[7]) { | ||
w_object.datatype = this.namedNode(RT_HAS_ESCAPES.test(m_statement[7])? m_statement[7].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[7]); | ||
kt_object = datatypedLiteralE(s_contents, m_statement[7]); | ||
} | ||
// otherwise, set language tag if present | ||
// otherwise, set language tag if present | ||
else if(m_statement[8]) { | ||
let s_language = w_object.language = m_statement[8].toLowerCase(); | ||
if(this.validate && !RT_LANGUAGE_VALID.test(s_language)) return this._error(`invalid literal language tag: ${s_language}`); | ||
w_object.datatype = KT_RDFS_LANG_STRING; | ||
kt_object = languagedLiteralE(s_contents, m_statement[8].toLowerCase()); | ||
} | ||
// simple literal | ||
else { | ||
kt_object = simpleLiteralE(s_contents); | ||
} | ||
} | ||
// emit data event | ||
// emit data event | ||
fk_data( | ||
factory.quad( | ||
f_quad( | ||
m_statement[2] | ||
? this.blankNode(m_statement[2]) | ||
: this.namedNode(RT_HAS_ESCAPES.test(m_statement[1])? m_statement[1].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[1]), | ||
this.namedNode(RT_HAS_ESCAPES.test(m_statement[3])? m_statement[3].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[3]), | ||
w_object, | ||
? blankNode(m_statement[2]) | ||
: namedNode(RT_HAS_ESCAPES.test(m_statement[1])? m_statement[1].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[1]), | ||
namedNode(RT_HAS_ESCAPES.test(m_statement[3])? m_statement[3].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[3]), | ||
kt_object, | ||
m_statement[9] | ||
? this.namedNode(RT_HAS_ESCAPES.test(m_statement[9])? m_statement[9].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[9]) | ||
? namedNode(RT_HAS_ESCAPES.test(m_statement[9])? m_statement[9].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[9]) | ||
: (m_statement[10] | ||
? this.blankNode(m_statement[10]) | ||
? blankNode(m_statement[10]) | ||
: ('string' === typeof m_statement[9] | ||
? this.namedNode(RT_HAS_ESCAPES.test(m_statement[9])? m_statement[9].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[9]) | ||
: KT_DEFAULT_GRAPH)) | ||
) | ||
? namedNode(RT_HAS_ESCAPES.test(m_statement[9])? m_statement[9].replace(R_UNICODE_ANY, F_REPLACE_UNICODE_ANY): m_statement[9]) | ||
: kt_default_graph)), | ||
), | ||
); | ||
// comments | ||
// comments | ||
if(this.emit_comments) { | ||
@@ -473,14 +632,14 @@ this.emit_comments(m_statement[11]); | ||
else { | ||
// prepare sticky regex index | ||
// prepare sticky regex index | ||
R_EOL.lastIndex = i; | ||
if(R_EOL.exec(s)) { | ||
// advance index | ||
// advance index | ||
this.i = R_EOL.lastIndex; | ||
this._error(`invalid statement:\n${this.s.substr(0, 50)}\n ^ starting here`); | ||
this._error(`Failed to read statement:\n\`${this.s.substr(i, 80).replace(/\n/g, '\u23CE')} [...]\`\n ^ starting here`); | ||
// match counter: 2 | ||
// match counter: 2 | ||
} | ||
else { | ||
// break loop to retry on next chunk if eos | ||
// break loop to retry on next chunk if eos | ||
break; | ||
@@ -492,5 +651,15 @@ } | ||
// update unparsed data string | ||
// update unparsed data string | ||
this.s = s.substr(i); | ||
} | ||
destroy(e_destroy) { | ||
this.data = () => {}; | ||
if(!e_destroy && this._ds_input) { | ||
this._ds_input.destroy(e_destroy); | ||
} | ||
this.transform.demolish(e_destroy); | ||
} | ||
} | ||
@@ -502,23 +671,23 @@ | ||
// at least one argument | ||
// at least one argument | ||
if(a_args.length) { | ||
let z_arg_0 = a_args[0]; | ||
// string | ||
// string | ||
if('string' === typeof z_arg_0) { | ||
g_config.input = {string:z_arg_0}; | ||
} | ||
// null | ||
// null | ||
else if(null === z_arg_0) { | ||
g_config.input = null; | ||
} | ||
// node stream | ||
// node stream | ||
else if('function' === typeof z_arg_0.setEncoding) { | ||
g_config.input = {stream:z_arg_0}; | ||
} | ||
// config struct | ||
// config struct | ||
else if(z_arg_0 && 'object' === typeof z_arg_0 && '[object Object]' === Object.prototype.toString.call(z_arg_0)) { | ||
g_config = z_arg_0; | ||
// more args; invalid | ||
// more args; invalid | ||
if(a_args.length > 1) { | ||
@@ -528,3 +697,3 @@ throw new TypeError(`unexpected argument(s) after config struct: ${a_args.slice(1)}`); | ||
} | ||
// unknown | ||
// unknown | ||
else { | ||
@@ -534,8 +703,8 @@ throw new TypeError(`unexpected input type: ${z_arg_0}`); | ||
// more args | ||
// more args | ||
if(a_args.length > 1) { | ||
// copy onto struct | ||
// copy onto struct | ||
Object.assign(g_config, a_args[1]); | ||
// more args | ||
// more args | ||
if(a_args.length > 2) { | ||
@@ -548,3 +717,3 @@ throw new TypeError(`unexpected argument(s) after input and config struct: ${a_args.slice(2)}`); | ||
// create reader, return transform stream | ||
return (new reader(g_config)).transform; | ||
return (new Reader(g_config)).transform; | ||
}; |
{ | ||
"name": "@graphy/content.nq.read", | ||
"version": "3.2.2", | ||
"version": "4.0.0", | ||
"description": "Single-threaded RDF N-Quads content reader", | ||
@@ -26,5 +26,4 @@ "keywords": [ | ||
"dependencies": { | ||
"@graphy/core.data.factory": "^3.2.2", | ||
"@graphy/core.iso.stream": "^3.2.2", | ||
"uri-js": "^4.2.2" | ||
"@graphy/core.data.factory": "^4.0.0", | ||
"@graphy/core.iso.stream": "^4.0.0" | ||
}, | ||
@@ -34,2 +33,2 @@ "engines": { | ||
} | ||
} | ||
} |
20632
2
559
+ Added@graphy/core.data.factory@4.3.7(transitive)
+ Added@graphy/core.iso.stream@4.3.7(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedreadable-stream@3.6.2(transitive)
+ Addedsafe-buffer@5.2.1(transitive)
+ Addedstring_decoder@1.3.0(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
- Removeduri-js@^4.2.2
- Removed@graphy/core.data.factory@3.2.2(transitive)
- Removed@graphy/core.iso.stream@3.2.2(transitive)