From 93d8f44c718af97c5432671bfdc6c0ef2b10ae70 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 9 Dec 2019 15:30:09 +0100 Subject: [PATCH 001/165] Update example SPARQL datasources to public DBpedia endpoint --- README.md | 2 +- config/config-example-advanced.json | 2 +- config/config-example.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 25938549..6a65dbf8 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: "title": "DBpedia 3.9 (Virtuoso)", "type": "SparqlDatasource", "description": "DBpedia 3.9 with a Virtuoso back-end", - "settings": { "endpoint": "http://dbpedia.restdesc.org/", "defaultGraph": "http://dbpedia.org" } + "settings": { "endpoint": "https://dbpedia.org/sparql", "defaultGraph": "http://dbpedia.org" } } } } diff --git a/config/config-example-advanced.json b/config/config-example-advanced.json index af77151e..2bf88dc8 100644 --- a/config/config-example-advanced.json +++ b/config/config-example-advanced.json @@ -17,7 +17,7 @@ "title": "DBpedia 3.9 (Virtuoso)", "type": "SparqlDatasource", "description": "DBpedia 3.9 with a Virtuoso back-end", - "settings": { "endpoint": "http://dbpedia.restdesc.org/", "defaultGraph": "http://dbpedia.org" } + "settings": { "endpoint": "https://dbpedia.org/sparql", "defaultGraph": "http://dbpedia.org" } } }, diff --git a/config/config-example.json b/config/config-example.json index c217e22d..dc6933d8 100644 --- a/config/config-example.json +++ b/config/config-example.json @@ -12,7 +12,7 @@ "title": "DBpedia 3.9 (Virtuoso)", "type": "SparqlDatasource", "description": "DBpedia 3.9 with a Virtuoso back-end", - "settings": { "endpoint": "http://dbpedia.restdesc.org/", "defaultGraph": "http://dbpedia.org" } + "settings": { "endpoint": "https://dbpedia.org/sparql", "defaultGraph": "http://dbpedia.org" } } }, From f2547b18aaac74b1b3aa01ebfe46ea519d9d098f Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 14 Oct 2015 15:55:15 +0200 Subject: [PATCH 002/165] Implement Quad Pattern Fragments --- config/config-defaults.json | 5 +- .../QuadPatternFragmentsController.js | 40 ++++++ .../TriplePatternFragmentsController.js | 27 +++- lib/datasources/QuadMemoryDatasource.js | 40 ++++++ lib/datasources/TrigDatasource.js | 28 ++++ lib/routers/QuadPatternRouter.js | 53 +++++++ .../QuadPatternFragmentsHtmlView.js | 19 +++ .../QuadPatternFragmentsRdfView.js | 44 ++++++ .../quadpatternfragments/datasource.html | 4 + lib/views/quadpatternfragments/fragment.html | 132 ++++++++++++++++++ lib/views/quadpatternfragments/index.html | 26 ++++ .../TriplePatternFragmentsHtmlView.js | 10 +- .../TriplePatternFragmentsRdfView.js | 85 ++++++----- 13 files changed, 468 insertions(+), 45 deletions(-) create mode 100644 lib/controllers/QuadPatternFragmentsController.js create mode 100644 lib/datasources/QuadMemoryDatasource.js create mode 100644 lib/datasources/TrigDatasource.js create mode 100644 lib/routers/QuadPatternRouter.js create mode 100644 lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js create mode 100644 lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js create mode 100644 lib/views/quadpatternfragments/datasource.html create mode 100644 lib/views/quadpatternfragments/fragment.html create mode 100644 lib/views/quadpatternfragments/index.html diff --git a/config/config-defaults.json b/config/config-defaults.json index 6b14d9dc..65bfec24 100644 --- a/config/config-defaults.json +++ b/config/config-defaults.json @@ -15,11 +15,13 @@ "owl": "http://www.w3.org/2002/07/owl#", "xsd": "http://www.w3.org/2001/XMLSchema#", "hydra": "http://www.w3.org/ns/hydra/core#", - "void": "http://rdfs.org/ns/void#" + "void": "http://rdfs.org/ns/void#", + "sd": "http://www.w3.org/TR/sparql11-service-description/#" }, "routers": [ "DatasourceRouter", + "QuadPatternRouter", "TriplePatternRouter", "PageRouter" ], @@ -27,6 +29,7 @@ "controllers": [ "SummaryController", "TimegateController", + "QuadPatternFragmentsController", "TriplePatternFragmentsController", "AssetsController", "DereferenceController", diff --git a/lib/controllers/QuadPatternFragmentsController.js b/lib/controllers/QuadPatternFragmentsController.js new file mode 100644 index 00000000..164dacdf --- /dev/null +++ b/lib/controllers/QuadPatternFragmentsController.js @@ -0,0 +1,40 @@ +/*! @license ©2015 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ + +/** A QuadPatternFragmentsController responds to requests for fragments */ + +var TriplePatternFragmentsController = require('./TriplePatternFragmentsController'), + url = require('url'), + _ = require('lodash'), + N3Util = require('n3').Util, + Util = require('../Util'); + +// Creates a new QuadPatternFragmentsController +function QuadPatternFragmentsController(options) { + if (!(this instanceof QuadPatternFragmentsController)) + return new QuadPatternFragmentsController(options); + options = options || {}; + TriplePatternFragmentsController.call(this, options); + this._routers = options.routers || []; +} +TriplePatternFragmentsController.extend(QuadPatternFragmentsController); + +// The base name of the view to be used for this controller +QuadPatternFragmentsController.prototype._getViewName = function() { + return 'QuadPatternFragments'; +}; + +// Create the template url for requesting quad patterns +QuadPatternFragmentsController.prototype._createTemplateUrl = function(datasourceUrl) { + return datasourceUrl + '{?subject,predicate,object,graph}'; +}; + +// Create parameterized pattern string for quad patterns +QuadPatternFragmentsController.prototype._createPatternString = function(query) { + return '{ ' + + (query.subject ? '<' + query.subject + '> ' : '?s ') + + (query.predicate ? '<' + query.predicate + '> ' : '?p ') + + (N3Util.isIRI(query.object) ? '<' + query.object + '> ' : (query.object || '?o ')) + + (query.graph ? '<' + query.graph + '> ' : '?g' ) + ' }'; +}; + +module.exports = QuadPatternFragmentsController; diff --git a/lib/controllers/TriplePatternFragmentsController.js b/lib/controllers/TriplePatternFragmentsController.js index 11267212..41e5666d 100644 --- a/lib/controllers/TriplePatternFragmentsController.js +++ b/lib/controllers/TriplePatternFragmentsController.js @@ -17,6 +17,11 @@ function TriplePatternFragmentsController(options) { } Controller.extend(TriplePatternFragmentsController); +// The base name of the view to be used for this controller +TriplePatternFragmentsController.prototype._getViewName = function() { + return 'TriplePatternFragments'; +}; + // Try to serve the requested fragment TriplePatternFragmentsController.prototype._handleRequest = function (request, response, next) { // Create the query from the request by calling the fragment routers @@ -34,7 +39,7 @@ TriplePatternFragmentsController.prototype._handleRequest = function (request, r return next(); // Generate the query result - var view = this._negotiateView('TriplePatternFragments', request, response), + var view = this._negotiateView(this._getViewName(), request, response), settings = this._createFragmentMetadata(request, query, datasourceSettings); settings.results = datasourceSettings.datasource.select(query, function (error) { error && next(error); }); @@ -54,6 +59,19 @@ TriplePatternFragmentsController.prototype._handleRequest = function (request, r })(); }; +// Create the template url for requesting triple patterns +TriplePatternFragmentsController.prototype._createTemplateUrl = function(datasourceUrl) { + return datasourceUrl + '{?subject,predicate,object}'; +}; + +// Create parameterized pattern string for triple patterns +TriplePatternFragmentsController.prototype._createPatternString = function(query) { + return '{ ' + + (query.subject ? '<' + query.subject + '> ' : '?s ') + + (query.predicate ? '<' + query.predicate + '> ' : '?p ') + + (N3Util.isIRI(query.object) ? '<' + query.object + '> ' : (query.object || '?o')) + ' }'; +}; + // Creates metadata about the requested fragment TriplePatternFragmentsController.prototype._createFragmentMetadata = function (request, query, datasourceSettings) { @@ -70,16 +88,13 @@ function (request, query, datasourceSettings) { indexUrl = url.format(_.omit(requestUrl, 'search', 'query', 'pathname')) + '/'; // Generate a textual representation of the pattern - query.patternString = '{ ' + - (query.subject ? '<' + query.subject + '> ' : '?s ') + - (query.predicate ? '<' + query.predicate + '> ' : '?p ') + - (N3Util.isIRI(query.object) ? '<' + query.object + '> ' : (query.object || '?o')) + ' }'; + query.patternString = this._createPatternString(query); return { datasource: _.assign(_.omit(datasourceSettings, 'datasource'), { index: indexUrl + '#dataset', url: datasourceUrl + '#dataset', - templateUrl: datasourceUrl + '{?subject,predicate,object}', + templateUrl: this._createTemplateUrl(datasourceUrl), }), fragment: { url: fragmentUrl, diff --git a/lib/datasources/QuadMemoryDatasource.js b/lib/datasources/QuadMemoryDatasource.js new file mode 100644 index 00000000..eb726157 --- /dev/null +++ b/lib/datasources/QuadMemoryDatasource.js @@ -0,0 +1,40 @@ +/*! @license ©2014 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ + +/** A QuadMemoryDatasource queries a set of in-memory quads. */ + +var Datasource = require('./Datasource'), + N3Store = require('n3').Store; + +// Creates a new QuadMemoryDatasource +function QuadMemoryDatasource(options) { + if (!(this instanceof QuadMemoryDatasource)) + return new QuadMemoryDatasource(options); + Datasource.call(this, options); + + this._defaultGraph = options.defaultGraph || options.baseURL + "#defaultGraph"; + var quadStore = this._quadStore = new N3Store({ defaultGraph: this._defaultGraph }); + setImmediate(function (self) { + self._getAllQuads(function (s, p, o, g) { quadStore.addTriple(s, p, o, g); }, + function (error) { if (error) throw error; }); + }, this); +} +Datasource.extend(QuadMemoryDatasource, ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']); + +// Retrieves all triples in the datasource +QuadMemoryDatasource.prototype._getAllQuads = function (addQuad, done) { + throw new Error('_getAllQuads is not implemented'); +}; + +// Writes the results of the query to the given triple stream +QuadMemoryDatasource.prototype._executeQuery = function (query, quadStream, metadataCallback) { + var offset = query.offset || 0, limit = query.limit || Infinity, + quads = this._quadStore.findByIRI(query.subject, query.predicate, query.object, query.graph); + // Send the metadata + metadataCallback({ totalCount: quads.length }); + // Send the requested subset of triples + for (var i = offset, l = Math.min(offset + limit, quads.length); i < l; i++) + quadStream.push(quads[i]); + quadStream.push(null); +}; + +module.exports = QuadMemoryDatasource; diff --git a/lib/datasources/TrigDatasource.js b/lib/datasources/TrigDatasource.js new file mode 100644 index 00000000..204db0e3 --- /dev/null +++ b/lib/datasources/TrigDatasource.js @@ -0,0 +1,28 @@ +/*! @license ©2014 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ + +/** An TrigDatasource fetches data from a Trig document. */ + +var QuadMemoryDatasource = require('./QuadMemoryDatasource'), + N3Parser = require('n3').Parser; + +var ACCEPT = 'application/trig;q=1.0,application/n-quads;q=0.7,text/n3;q=0.6'; + +// Creates a new TurtleDatasource +function TrigDatasource(options) { + if (!(this instanceof TrigDatasource)) + return new TrigDatasource(options); + QuadMemoryDatasource.call(this, options); + this._url = options && (options.url || options.file); +} +QuadMemoryDatasource.extend(TrigDatasource); + +// Retrieves all triples from the document +TrigDatasource.prototype._getAllQuads = function (addQuad, done) { + var document = this._fetch({ url: this._url, headers: { accept: ACCEPT }}, done); + N3Parser._resetBlankNodeIds(); + new N3Parser().parse(document, function (error, quad) { + quad ? addQuad(quad) : done(error); + }); +}; + +module.exports = TrigDatasource; diff --git a/lib/routers/QuadPatternRouter.js b/lib/routers/QuadPatternRouter.js new file mode 100644 index 00000000..86a77fd3 --- /dev/null +++ b/lib/routers/QuadPatternRouter.js @@ -0,0 +1,53 @@ +/*! @license ©2014 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ + +/** A QuadPatternRouter routes basic quad patterns */ + +var iriMatcher = /^(][^"<>]*)>?$/; +var literalMatcher = /^("[^]*")(?:|\^\^]+)>?|@[a-z0-9\-]+)$/i; +var prefixedNameMatcher = /^([a-z0-9\-]*):([^\/#:]*)$/i; + +// Creates a new TriplePatternRouter +function QuadPatternRouter(config) { + if (!(this instanceof QuadPatternRouter)) + return new QuadPatternRouter(config); + this._prefixes = config && config.prefixes || {}; +} + +// Extracts triple pattern parameters from the request and add them to the query +QuadPatternRouter.prototype.extractQueryParams = function (request, query) { + var queryString = request.url && request.url.query, match, hasQuadPattern = false; + + // Try to extract a subject IRI + if (queryString.subject && (match = iriMatcher.exec(queryString.subject))) + hasQuadPattern = query.subject = match[1] ? match[2] : this._expandIRI(match[2]); + + // Try to extract a predicate IRI + if (queryString.predicate && (match = iriMatcher.exec(queryString.predicate))) + hasQuadPattern = query.predicate = match[1] ? match[2] : this._expandIRI(match[2]); + + // Try to extract an object + if (queryString.object) { + // The object can be an IRI… + if (match = iriMatcher.exec(queryString.object)) + hasQuadPattern = query.object = match[1] ? match[2] : this._expandIRI(match[2]); + // or the object can be a literal (with a type or language) + else if (match = literalMatcher.exec(queryString.object)) + hasQuadPattern = query.object = match[2] ? match[1] + '^^' + this._expandIRI(match[2]) : match[0]; + } + + // Try to extract a graph IRI + if (queryString.graph && (match = iriMatcher.exec(queryString.graph))) + hasQuadPattern = query.graph = match[1] ? match[2] : this._expandIRI(match[2]); + + // Indicate in the query whether the triple pattern feature was used + if (hasQuadPattern !== false) + (query.features || (query.features = {})).quadPattern = true; +}; + +// Expands a prefixed named into a full IRI +QuadPatternRouter.prototype._expandIRI = function (name) { + var match = prefixedNameMatcher.exec(name), prefix; + return match && (prefix = this._prefixes[match[1]]) ? prefix + match[2] : name; +}; + +module.exports = QuadPatternRouter; diff --git a/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js b/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js new file mode 100644 index 00000000..e50672df --- /dev/null +++ b/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js @@ -0,0 +1,19 @@ +/*! @license ©2015 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ + +/** A TriplePatternFragmentsHtmlView represents a Quad Pattern Fragment in HTML. */ + +var TriplePatternFragmentsHtmlView = require('../triplepatternfragments/TriplePatternFragmentsHtmlView'); + +// Creates a new QuadPatternFragmentsHtmlView +function QuadPatternFragmentsHtmlView(settings) { + if (!(this instanceof QuadPatternFragmentsHtmlView)) + return new QuadPatternFragmentsHtmlView(settings); + TriplePatternFragmentsHtmlView.call(this, settings, 'QuadPatternFragments'); +} +TriplePatternFragmentsHtmlView.extend(QuadPatternFragmentsHtmlView); + +QuadPatternFragmentsHtmlView.prototype._getViewDirectory = function() { + return 'quadpatternfragments/'; +}; + +module.exports = QuadPatternFragmentsHtmlView; diff --git a/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js new file mode 100644 index 00000000..5fd107d2 --- /dev/null +++ b/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -0,0 +1,44 @@ +/*! @license ©2015 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ + +/** A QuadPatternFragmentsRdfView represents a Quad Pattern Fragment in RDF. */ + +var TriplePatternFragmentsRdfView = require('../triplepatternfragments/TriplePatternFragmentsRdfView'); + +var rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + sd = 'http://www.w3.org/TR/sparql11-service-description/#', + xsd = 'http://www.w3.org/2001/XMLSchema#', + hydra = 'http://www.w3.org/ns/hydra/core#'; + +// Creates a new QuadPatternFragmentsRdfView +function QuadPatternFragmentsRdfView(settings) { + if (!(this instanceof QuadPatternFragmentsRdfView)) + return new QuadPatternFragmentsRdfView(settings); + TriplePatternFragmentsRdfView.call(this, settings, 'QuadPatternFragments'); +} +TriplePatternFragmentsRdfView.extend(QuadPatternFragmentsRdfView); + +// Generate the datasource metadata +QuadPatternFragmentsRdfView.prototype.sendDatasourceMetadata = function(metadata, fragment, query, datasource) { + TriplePatternFragmentsRdfView.prototype.sendDatasourceMetadata(metadata, fragment, query, datasource); + metadata(datasource.index, sd + 'defaultGraph', datasource.settings.defaultGraph); +}; + +// Generate the datasource controls +QuadPatternFragmentsRdfView.prototype.sendDatasourceControls = function(metadata, fragment, query, datasource) { + metadata(datasource.url, hydra + 'search', '_:quadPattern'); + metadata('_:quadPattern', hydra + 'template', '"' + datasource.templateUrl + '"'); + metadata('_:quadPattern', hydra + 'mapping', '_:subject'); + metadata('_:quadPattern', hydra + 'mapping', '_:predicate'); + metadata('_:quadPattern', hydra + 'mapping', '_:object'); + metadata('_:quadPattern', hydra + 'mapping', '_:graph'); + metadata('_:subject', hydra + 'variable', '"subject"'); + metadata('_:subject', hydra + 'property', rdf + 'subject'); + metadata('_:predicate', hydra + 'variable', '"predicate"'); + metadata('_:predicate', hydra + 'property', rdf + 'predicate'); + metadata('_:object', hydra + 'variable', '"object"'); + metadata('_:object', hydra + 'property', rdf + 'object'); + metadata('_:graph', hydra + 'variable', '"graph"'); + metadata('_:graph', hydra + 'property', sd + 'graph'); +}; + +module.exports = QuadPatternFragmentsRdfView; diff --git a/lib/views/quadpatternfragments/datasource.html b/lib/views/quadpatternfragments/datasource.html new file mode 100644 index 00000000..287d449c --- /dev/null +++ b/lib/views/quadpatternfragments/datasource.html @@ -0,0 +1,4 @@ +<% /*! @license ©2013 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ -%> +<% title = datasource.title + ' | ' + title %> +<% inherits('base') %> +<%- render('fragment') %> diff --git a/lib/views/quadpatternfragments/fragment.html b/lib/views/quadpatternfragments/fragment.html new file mode 100644 index 00000000..b6bee1f2 --- /dev/null +++ b/lib/views/quadpatternfragments/fragment.html @@ -0,0 +1,132 @@ +<% /*! @license ©2013 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ -%> +
+

<%= capitalizeFirst(datasource.title) %>

+ +
+
+ Query <%= datasource.title %> by quad pattern +
    +<% ['subject', 'predicate', 'object', 'graph'].forEach(function (component) { -%> +
  • + + value="<%= query[component] || '' %>" /> +
  • +<% }); -%> +
+
+

+ +

+
+
+ +<%- extensions.Info %> + +

Matches in <%= datasource.title %> for <%= query.patternString %>

+<% + var totalEstimate = metadata.totalCount, + offset = query.offset || 0, limit = query.limit || triples.length, + start = offset + 1, end = offset + triples.length, + hasPrev = offset > 0, hasNext = totalEstimate > end, + subject = query.subject, predicate = query.predicate, object = query.object, graph = query.graph; +%> +
+<% if (triples.length) { %> + Showing triples <%= formatNumber(start) %> to <%= formatNumber(end) %> of + <%= totalEstimate === end ? '' : '±' + %><%= + formatNumber(totalEstimate) + %> + with <%= + formatNumber(limit) + %> quads per page. + <% pageLinks(fragment); -%> +<% } else { %> +

+ <%= capitalizeFirst(datasource.title) %> contains + + no <% if (totalEstimate > 0) { %>more<% } %> + + quads that match this pattern. +

+<% } %> +
+ + +<% pageLinks(fragment); -%> + +<% +function capitalizeFirst(string) { + return string && !/[A-Z]/.test(string) ? string[0].toUpperCase() + string.slice(1) : string; +} + +function shorten(entity) { + return entity.match(/([^\/#]*)[\/#]?$/)[1] || entity; +} + +function formatNumber(number) { + return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + +function pageLinks(fragment) { + if (!hasPrev && !hasNext) return; +-%> + +<% +} +-%> + diff --git a/lib/views/quadpatternfragments/index.html b/lib/views/quadpatternfragments/index.html new file mode 100644 index 00000000..5ae82733 --- /dev/null +++ b/lib/views/quadpatternfragments/index.html @@ -0,0 +1,26 @@ +<% /*! @license ©2013 Ruben Taelman - Multimedia Lab / iMinds / Ghent University */ -%> +<% inherits('base') %> +<% +var rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + rdfs = 'http://www.w3.org/2000/01/rdf-schema#', + dc = 'http://purl.org/dc/terms/', + voID = 'http://rdfs.org/ns/void#'; +%> + +<% if (!query.features.quadPattern) { %> +
+

Available datasets

+

Browse the following datasets as Quad Pattern Fragments:

+
+ <% for (var datasourceName in datasources) { + var datasource = datasources[datasourceName]; + if (datasource.role === 'index') continue; %> +
<%= datasource.title %>
+
<%= datasource.description || ' ' %>
+ <% } %> +
+

The current dataset index contains metadata about these datasets.

+
+<% } %> + +<%- render('fragment') %> diff --git a/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js b/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js index 8445f5e0..ce4da3f1 100644 --- a/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js +++ b/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js @@ -4,13 +4,17 @@ var HtmlView = require('../HtmlView'); // Creates a new TriplePatternFragmentsHtmlView -function TriplePatternFragmentsHtmlView(settings) { +function TriplePatternFragmentsHtmlView(settings, viewNameOverride) { if (!(this instanceof TriplePatternFragmentsHtmlView)) return new TriplePatternFragmentsHtmlView(settings); - HtmlView.call(this, 'TriplePatternFragments', settings); + HtmlView.call(this, viewNameOverride || 'TriplePatternFragments', settings); } HtmlView.extend(TriplePatternFragmentsHtmlView); +TriplePatternFragmentsHtmlView.prototype._getViewDirectory = function() { + return 'triplepatternfragments/'; +}; + // Renders the view with the given settings to the response TriplePatternFragmentsHtmlView.prototype._render = function (settings, request, response, done) { // Read the data and metadata @@ -26,7 +30,7 @@ TriplePatternFragmentsHtmlView.prototype._render = function (settings, request, function renderHtml() { var template = settings.datasource.role === 'index' ? 'index' : 'datasource'; settings.extensions = { Before: null, After: null }; - self._renderTemplate('triplepatternfragments/' + template, settings, request, response, done); + self._renderTemplate(self._getViewDirectory() + template, settings, request, response, done); } }; diff --git a/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js b/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js index 61214b98..e12acbd8 100644 --- a/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js +++ b/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js @@ -10,27 +10,50 @@ var dcTerms = 'http://purl.org/dc/terms/', voID = 'http://rdfs.org/ns/void#'; // Creates a new TriplePatternFragmentsRdfView -function TriplePatternFragmentsRdfView(settings) { +function TriplePatternFragmentsRdfView(settings, viewNameOverride) { if (!(this instanceof TriplePatternFragmentsRdfView)) return new TriplePatternFragmentsRdfView(settings); - RdfView.call(this, 'TriplePatternFragments', settings); + RdfView.call(this, viewNameOverride || 'TriplePatternFragments', settings); } RdfView.extend(TriplePatternFragmentsRdfView); // Generates triples and quads by sending them to the data and/or metadata callbacks TriplePatternFragmentsRdfView.prototype._generateRdf = function (settings, data, metadata, done) { var datasource = settings.datasource, fragment = settings.fragment, query = settings.query, - results = settings.results, metadataDone = false; + self = this, results = settings.results, metadataDone = false; // Add data source metadata + self.sendDatasourceMetadata(metadata, fragment, query, datasource); + + // Add data source controls + self.sendDatasourceControls(metadata, fragment, query, datasource); + + // Add fragment metadata + results.getProperty('metadata', function (meta) { + self.sendFragmentMetadata(metadata, fragment, query, datasource, meta); + + // End if the data was also written + metadataDone = true; + results.ended && done(); + }); + + // Add data triples + results.on('data', data); + results.on('end', function () { metadataDone && done(); }); +}; + +// Generate the datasource metadata +TriplePatternFragmentsRdfView.prototype.sendDatasourceMetadata = function(metadata, fragment, query, datasource) { metadata(datasource.index, hydra + 'member', datasource.url); metadata(datasource.url, rdf + 'type', voID + 'Dataset'); metadata(datasource.url, rdf + 'type', hydra + 'Collection'); metadata(datasource.url, voID + 'subset', fragment.pageUrl); if (fragment.url !== fragment.pageUrl) metadata(datasource.url, voID + 'subset', fragment.url); +}; - // Add data source controls +// Generate the datasource controls +TriplePatternFragmentsRdfView.prototype.sendDatasourceControls = function(metadata, fragment, query, datasource) { metadata(datasource.url, hydra + 'search', '_:triplePattern'); metadata('_:triplePattern', hydra + 'template', '"' + datasource.templateUrl + '"'); metadata('_:triplePattern', hydra + 'variableRepresentation', hydra + 'ExplicitRepresentation'); @@ -43,40 +66,32 @@ TriplePatternFragmentsRdfView.prototype._generateRdf = function (settings, data, metadata('_:predicate', hydra + 'property', rdf + 'predicate'); metadata('_:object', hydra + 'variable', '"object"'); metadata('_:object', hydra + 'property', rdf + 'object'); +}; - // Add fragment metadata - results.getProperty('metadata', function (meta) { - // General fragment metadata - metadata(fragment.url, voID + 'subset', fragment.pageUrl); - metadata(fragment.pageUrl, rdf + 'type', hydra + 'PartialCollectionView'); - metadata(fragment.pageUrl, dcTerms + 'title', - '"Linked Data Fragment of ' + (datasource.title || '') + '"@en'); - metadata(fragment.pageUrl, dcTerms + 'description', - '"Triple Pattern Fragment of the \'' + (datasource.title || '') + '\' dataset ' + - 'containing triples matching the pattern ' + query.patternString + '."@en'); - metadata(fragment.pageUrl, dcTerms + 'source', datasource.url); - - // Total pattern matches count - var totalCount = meta.totalCount; - metadata(fragment.pageUrl, hydra + 'totalItems', '"' + totalCount + '"^^' + xsd + 'integer'); - metadata(fragment.pageUrl, voID + 'triples', '"' + totalCount + '"^^' + xsd + 'integer'); - - // Page metadata - metadata(fragment.pageUrl, hydra + 'itemsPerPage', '"' + query.limit + '"^^' + xsd + 'integer'); - metadata(fragment.pageUrl, hydra + 'first', fragment.firstPageUrl); - if (query.offset) - metadata(fragment.pageUrl, hydra + 'previous', fragment.previousPageUrl); - if (totalCount >= query.limit + (query.offset || 0)) - metadata(fragment.pageUrl, hydra + 'next', fragment.nextPageUrl); +// Generate the fragment metadata +TriplePatternFragmentsRdfView.prototype.sendFragmentMetadata = function(metadata, fragment, query, datasource, meta) { + // General fragment metadata + metadata(fragment.url, voID + 'subset', fragment.pageUrl); + metadata(fragment.pageUrl, rdf + 'type', hydra + 'PartialCollectionView'); + metadata(fragment.pageUrl, dcTerms + 'title', + '"Linked Data Fragment of ' + (datasource.title || '') + '"@en'); + metadata(fragment.pageUrl, dcTerms + 'description', + '"Triple Pattern Fragment of the \'' + (datasource.title || '') + '\' dataset ' + + 'containing triples matching the pattern ' + query.patternString + '."@en'); + metadata(fragment.pageUrl, dcTerms + 'source', datasource.url); - // End if the data was also written - metadataDone = true; - results.ended && done(); - }); + // Total pattern matches count + var totalCount = meta.totalCount; + metadata(fragment.pageUrl, hydra + 'totalItems', '"' + totalCount + '"^^' + xsd + 'integer'); + metadata(fragment.pageUrl, voID + 'triples', '"' + totalCount + '"^^' + xsd + 'integer'); - // Add fragment data - results.on('data', data); - results.on('end', function () { metadataDone && done(); }); + // Page metadata + metadata(fragment.pageUrl, hydra + 'itemsPerPage', '"' + query.limit + '"^^' + xsd + 'integer'); + metadata(fragment.pageUrl, hydra + 'first', fragment.firstPageUrl); + if (query.offset) + metadata(fragment.pageUrl, hydra + 'previous', fragment.previousPageUrl); + if (totalCount >= query.limit + (query.offset || 0)) + metadata(fragment.pageUrl, hydra + 'next', fragment.nextPageUrl); }; module.exports = TriplePatternFragmentsRdfView; From 21f5d231af4c0539f5a2470ec89451cde1327dc4 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 23 Oct 2015 13:21:49 +0200 Subject: [PATCH 003/165] Use properties instead of getters for simple values --- lib/controllers/QuadPatternFragmentsController.js | 4 +--- lib/controllers/TriplePatternFragmentsController.js | 6 ++---- .../quadpatternfragments/QuadPatternFragmentsHtmlView.js | 4 +--- .../TriplePatternFragmentsHtmlView.js | 6 ++---- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/lib/controllers/QuadPatternFragmentsController.js b/lib/controllers/QuadPatternFragmentsController.js index 164dacdf..8ad6f63e 100644 --- a/lib/controllers/QuadPatternFragmentsController.js +++ b/lib/controllers/QuadPatternFragmentsController.js @@ -19,9 +19,7 @@ function QuadPatternFragmentsController(options) { TriplePatternFragmentsController.extend(QuadPatternFragmentsController); // The base name of the view to be used for this controller -QuadPatternFragmentsController.prototype._getViewName = function() { - return 'QuadPatternFragments'; -}; +QuadPatternFragmentsController.prototype.viewName = 'QuadPatternFragments'; // Create the template url for requesting quad patterns QuadPatternFragmentsController.prototype._createTemplateUrl = function(datasourceUrl) { diff --git a/lib/controllers/TriplePatternFragmentsController.js b/lib/controllers/TriplePatternFragmentsController.js index 41e5666d..a135f7ff 100644 --- a/lib/controllers/TriplePatternFragmentsController.js +++ b/lib/controllers/TriplePatternFragmentsController.js @@ -18,9 +18,7 @@ function TriplePatternFragmentsController(options) { Controller.extend(TriplePatternFragmentsController); // The base name of the view to be used for this controller -TriplePatternFragmentsController.prototype._getViewName = function() { - return 'TriplePatternFragments'; -}; +TriplePatternFragmentsController.prototype.viewName = 'TriplePatternFragments'; // Try to serve the requested fragment TriplePatternFragmentsController.prototype._handleRequest = function (request, response, next) { @@ -39,7 +37,7 @@ TriplePatternFragmentsController.prototype._handleRequest = function (request, r return next(); // Generate the query result - var view = this._negotiateView(this._getViewName(), request, response), + var view = this._negotiateView(this.viewName, request, response), settings = this._createFragmentMetadata(request, query, datasourceSettings); settings.results = datasourceSettings.datasource.select(query, function (error) { error && next(error); }); diff --git a/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js b/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js index e50672df..b2aedada 100644 --- a/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js +++ b/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js @@ -12,8 +12,6 @@ function QuadPatternFragmentsHtmlView(settings) { } TriplePatternFragmentsHtmlView.extend(QuadPatternFragmentsHtmlView); -QuadPatternFragmentsHtmlView.prototype._getViewDirectory = function() { - return 'quadpatternfragments/'; -}; +QuadPatternFragmentsHtmlView.prototype.viewDirectory = 'quadpatternfragments/'; module.exports = QuadPatternFragmentsHtmlView; diff --git a/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js b/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js index ce4da3f1..fdd67383 100644 --- a/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js +++ b/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js @@ -11,9 +11,7 @@ function TriplePatternFragmentsHtmlView(settings, viewNameOverride) { } HtmlView.extend(TriplePatternFragmentsHtmlView); -TriplePatternFragmentsHtmlView.prototype._getViewDirectory = function() { - return 'triplepatternfragments/'; -}; +TriplePatternFragmentsHtmlView.prototype.viewDirectory = 'triplepatternfragments/'; // Renders the view with the given settings to the response TriplePatternFragmentsHtmlView.prototype._render = function (settings, request, response, done) { @@ -30,7 +28,7 @@ TriplePatternFragmentsHtmlView.prototype._render = function (settings, request, function renderHtml() { var template = settings.datasource.role === 'index' ? 'index' : 'datasource'; settings.extensions = { Before: null, After: null }; - self._renderTemplate(self._getViewDirectory() + template, settings, request, response, done); + self._renderTemplate(self.viewDirectory + template, settings, request, response, done); } }; From 37a780852c3cf5ae3f28062ec433dafe47e3c101 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 23 Oct 2015 13:32:22 +0200 Subject: [PATCH 004/165] Use `settings` to propagate view names instead of extra param --- .../quadpatternfragments/QuadPatternFragmentsHtmlView.js | 4 +++- lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js | 4 +++- .../triplepatternfragments/TriplePatternFragmentsHtmlView.js | 4 ++-- .../triplepatternfragments/TriplePatternFragmentsRdfView.js | 4 ++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js b/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js index b2aedada..61954b5d 100644 --- a/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js +++ b/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js @@ -8,7 +8,9 @@ var TriplePatternFragmentsHtmlView = require('../triplepatternfragments/TriplePa function QuadPatternFragmentsHtmlView(settings) { if (!(this instanceof QuadPatternFragmentsHtmlView)) return new QuadPatternFragmentsHtmlView(settings); - TriplePatternFragmentsHtmlView.call(this, settings, 'QuadPatternFragments'); + settings = settings || {}; + settings.viewNameOverride = 'QuadPatternFragments'; + TriplePatternFragmentsHtmlView.call(this, settings); } TriplePatternFragmentsHtmlView.extend(QuadPatternFragmentsHtmlView); diff --git a/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js index 5fd107d2..2bec0839 100644 --- a/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js +++ b/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -13,7 +13,9 @@ var rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', function QuadPatternFragmentsRdfView(settings) { if (!(this instanceof QuadPatternFragmentsRdfView)) return new QuadPatternFragmentsRdfView(settings); - TriplePatternFragmentsRdfView.call(this, settings, 'QuadPatternFragments'); + settings = settings || {}; + settings.viewNameOverride = 'QuadPatternFragments'; + TriplePatternFragmentsRdfView.call(this, settings); } TriplePatternFragmentsRdfView.extend(QuadPatternFragmentsRdfView); diff --git a/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js b/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js index fdd67383..ed2e6f37 100644 --- a/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js +++ b/lib/views/triplepatternfragments/TriplePatternFragmentsHtmlView.js @@ -4,10 +4,10 @@ var HtmlView = require('../HtmlView'); // Creates a new TriplePatternFragmentsHtmlView -function TriplePatternFragmentsHtmlView(settings, viewNameOverride) { +function TriplePatternFragmentsHtmlView(settings) { if (!(this instanceof TriplePatternFragmentsHtmlView)) return new TriplePatternFragmentsHtmlView(settings); - HtmlView.call(this, viewNameOverride || 'TriplePatternFragments', settings); + HtmlView.call(this, (settings || {}).viewNameOverride || 'TriplePatternFragments', settings); } HtmlView.extend(TriplePatternFragmentsHtmlView); diff --git a/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js b/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js index e12acbd8..7650c642 100644 --- a/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js +++ b/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js @@ -10,10 +10,10 @@ var dcTerms = 'http://purl.org/dc/terms/', voID = 'http://rdfs.org/ns/void#'; // Creates a new TriplePatternFragmentsRdfView -function TriplePatternFragmentsRdfView(settings, viewNameOverride) { +function TriplePatternFragmentsRdfView(settings) { if (!(this instanceof TriplePatternFragmentsRdfView)) return new TriplePatternFragmentsRdfView(settings); - RdfView.call(this, viewNameOverride || 'TriplePatternFragments', settings); + RdfView.call(this, (settings || {}).viewNameOverride || 'TriplePatternFragments', settings); } RdfView.extend(TriplePatternFragmentsRdfView); From 0fc359a6e97f206c66700724f81d801b29ccb346 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 23 Oct 2015 14:02:57 +0200 Subject: [PATCH 005/165] Fix broken TPF-only requests --- lib/controllers/QuadPatternFragmentsController.js | 5 +++++ lib/controllers/TriplePatternFragmentsController.js | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/controllers/QuadPatternFragmentsController.js b/lib/controllers/QuadPatternFragmentsController.js index 8ad6f63e..739100ac 100644 --- a/lib/controllers/QuadPatternFragmentsController.js +++ b/lib/controllers/QuadPatternFragmentsController.js @@ -21,6 +21,11 @@ TriplePatternFragmentsController.extend(QuadPatternFragmentsController); // The base name of the view to be used for this controller QuadPatternFragmentsController.prototype.viewName = 'QuadPatternFragments'; +// The required features the given datasource must have +QuadPatternFragmentsController.prototype.supportsDatasource = function(datasource) { + return datasource.supportedFeatures.triplePattern && datasource.supportedFeatures.quadPattern; +}; + // Create the template url for requesting quad patterns QuadPatternFragmentsController.prototype._createTemplateUrl = function(datasourceUrl) { return datasourceUrl + '{?subject,predicate,object,graph}'; diff --git a/lib/controllers/TriplePatternFragmentsController.js b/lib/controllers/TriplePatternFragmentsController.js index a135f7ff..a5961bb9 100644 --- a/lib/controllers/TriplePatternFragmentsController.js +++ b/lib/controllers/TriplePatternFragmentsController.js @@ -20,6 +20,11 @@ Controller.extend(TriplePatternFragmentsController); // The base name of the view to be used for this controller TriplePatternFragmentsController.prototype.viewName = 'TriplePatternFragments'; +// The required features the given datasource must have +TriplePatternFragmentsController.prototype.supportsDatasource = function(datasource) { + return datasource.supportedFeatures.triplePattern; +}; + // Try to serve the requested fragment TriplePatternFragmentsController.prototype._handleRequest = function (request, response, next) { // Create the query from the request by calling the fragment routers @@ -33,7 +38,9 @@ TriplePatternFragmentsController.prototype._handleRequest = function (request, r // Execute the query on the data source var datasourceSettings = query.features.datasource && this._datasources[query.datasource]; delete query.features.datasource; - if (!datasourceSettings || !datasourceSettings.datasource.supportsQuery(query)) + delete query.features.quadPattern; // Every tpf is a qpf, so ignore this feature here for tpf-specific datasources. + if (!datasourceSettings || !datasourceSettings.datasource.supportsQuery(query) + || !this.supportsDatasource(datasourceSettings.datasource)) return next(); // Generate the query result From 7e33595b9ae3bb784bd3f7b32c2eb5f9544dab89 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 2 Sep 2016 09:10:44 +0200 Subject: [PATCH 006/165] Fix lint errors --- .../QuadPatternFragmentsController.js | 25 ++++++++----------- .../TriplePatternFragmentsController.js | 20 +++++++-------- lib/datasources/QuadMemoryDatasource.js | 2 +- lib/datasources/TrigDatasource.js | 4 +-- .../QuadPatternFragmentsRdfView.js | 5 ++-- .../TriplePatternFragmentsRdfView.js | 6 ++--- 6 files changed, 29 insertions(+), 33 deletions(-) diff --git a/lib/controllers/QuadPatternFragmentsController.js b/lib/controllers/QuadPatternFragmentsController.js index 739100ac..fa34debd 100644 --- a/lib/controllers/QuadPatternFragmentsController.js +++ b/lib/controllers/QuadPatternFragmentsController.js @@ -3,16 +3,13 @@ /** A QuadPatternFragmentsController responds to requests for fragments */ var TriplePatternFragmentsController = require('./TriplePatternFragmentsController'), - url = require('url'), - _ = require('lodash'), - N3Util = require('n3').Util, - Util = require('../Util'); + N3Util = require('n3').Util; // Creates a new QuadPatternFragmentsController function QuadPatternFragmentsController(options) { if (!(this instanceof QuadPatternFragmentsController)) return new QuadPatternFragmentsController(options); - options = options || {}; + options = options || {}; TriplePatternFragmentsController.call(this, options); this._routers = options.routers || []; } @@ -22,22 +19,22 @@ TriplePatternFragmentsController.extend(QuadPatternFragmentsController); QuadPatternFragmentsController.prototype.viewName = 'QuadPatternFragments'; // The required features the given datasource must have -QuadPatternFragmentsController.prototype.supportsDatasource = function(datasource) { +QuadPatternFragmentsController.prototype.supportsDatasource = function (datasource) { return datasource.supportedFeatures.triplePattern && datasource.supportedFeatures.quadPattern; }; // Create the template url for requesting quad patterns -QuadPatternFragmentsController.prototype._createTemplateUrl = function(datasourceUrl) { - return datasourceUrl + '{?subject,predicate,object,graph}'; +QuadPatternFragmentsController.prototype._createTemplateUrl = function (datasourceUrl) { + return datasourceUrl + '{?subject,predicate,object,graph}'; }; // Create parameterized pattern string for quad patterns -QuadPatternFragmentsController.prototype._createPatternString = function(query) { - return '{ ' + - (query.subject ? '<' + query.subject + '> ' : '?s ') + - (query.predicate ? '<' + query.predicate + '> ' : '?p ') + - (N3Util.isIRI(query.object) ? '<' + query.object + '> ' : (query.object || '?o ')) + - (query.graph ? '<' + query.graph + '> ' : '?g' ) + ' }'; +QuadPatternFragmentsController.prototype._createPatternString = function (query) { + return '{ ' + + (query.subject ? '<' + query.subject + '> ' : '?s ') + + (query.predicate ? '<' + query.predicate + '> ' : '?p ') + + (N3Util.isIRI(query.object) ? '<' + query.object + '> ' : (query.object || '?o ')) + + (query.graph ? '<' + query.graph + '> ' : '?g ') + ' }'; }; module.exports = QuadPatternFragmentsController; diff --git a/lib/controllers/TriplePatternFragmentsController.js b/lib/controllers/TriplePatternFragmentsController.js index a5961bb9..cdce2e5a 100644 --- a/lib/controllers/TriplePatternFragmentsController.js +++ b/lib/controllers/TriplePatternFragmentsController.js @@ -21,7 +21,7 @@ Controller.extend(TriplePatternFragmentsController); TriplePatternFragmentsController.prototype.viewName = 'TriplePatternFragments'; // The required features the given datasource must have -TriplePatternFragmentsController.prototype.supportsDatasource = function(datasource) { +TriplePatternFragmentsController.prototype.supportsDatasource = function (datasource) { return datasource.supportedFeatures.triplePattern; }; @@ -39,8 +39,8 @@ TriplePatternFragmentsController.prototype._handleRequest = function (request, r var datasourceSettings = query.features.datasource && this._datasources[query.datasource]; delete query.features.datasource; delete query.features.quadPattern; // Every tpf is a qpf, so ignore this feature here for tpf-specific datasources. - if (!datasourceSettings || !datasourceSettings.datasource.supportsQuery(query) - || !this.supportsDatasource(datasourceSettings.datasource)) + if (!datasourceSettings || !datasourceSettings.datasource.supportsQuery(query) || + !this.supportsDatasource(datasourceSettings.datasource)) return next(); // Generate the query result @@ -65,16 +65,16 @@ TriplePatternFragmentsController.prototype._handleRequest = function (request, r }; // Create the template url for requesting triple patterns -TriplePatternFragmentsController.prototype._createTemplateUrl = function(datasourceUrl) { - return datasourceUrl + '{?subject,predicate,object}'; +TriplePatternFragmentsController.prototype._createTemplateUrl = function (datasourceUrl) { + return datasourceUrl + '{?subject,predicate,object}'; }; // Create parameterized pattern string for triple patterns -TriplePatternFragmentsController.prototype._createPatternString = function(query) { - return '{ ' + - (query.subject ? '<' + query.subject + '> ' : '?s ') + - (query.predicate ? '<' + query.predicate + '> ' : '?p ') + - (N3Util.isIRI(query.object) ? '<' + query.object + '> ' : (query.object || '?o')) + ' }'; +TriplePatternFragmentsController.prototype._createPatternString = function (query) { + return '{ ' + + (query.subject ? '<' + query.subject + '> ' : '?s ') + + (query.predicate ? '<' + query.predicate + '> ' : '?p ') + + (N3Util.isIRI(query.object) ? '<' + query.object + '> ' : (query.object || '?o')) + ' }'; }; // Creates metadata about the requested fragment diff --git a/lib/datasources/QuadMemoryDatasource.js b/lib/datasources/QuadMemoryDatasource.js index eb726157..c8e67b8b 100644 --- a/lib/datasources/QuadMemoryDatasource.js +++ b/lib/datasources/QuadMemoryDatasource.js @@ -11,7 +11,7 @@ function QuadMemoryDatasource(options) { return new QuadMemoryDatasource(options); Datasource.call(this, options); - this._defaultGraph = options.defaultGraph || options.baseURL + "#defaultGraph"; + this._defaultGraph = options.defaultGraph || options.baseURL + '#defaultGraph'; var quadStore = this._quadStore = new N3Store({ defaultGraph: this._defaultGraph }); setImmediate(function (self) { self._getAllQuads(function (s, p, o, g) { quadStore.addTriple(s, p, o, g); }, diff --git a/lib/datasources/TrigDatasource.js b/lib/datasources/TrigDatasource.js index 204db0e3..b5b8be8e 100644 --- a/lib/datasources/TrigDatasource.js +++ b/lib/datasources/TrigDatasource.js @@ -12,13 +12,13 @@ function TrigDatasource(options) { if (!(this instanceof TrigDatasource)) return new TrigDatasource(options); QuadMemoryDatasource.call(this, options); - this._url = options && (options.url || options.file); + this._url = options && (options.url || options.file); } QuadMemoryDatasource.extend(TrigDatasource); // Retrieves all triples from the document TrigDatasource.prototype._getAllQuads = function (addQuad, done) { - var document = this._fetch({ url: this._url, headers: { accept: ACCEPT }}, done); + var document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }, done); N3Parser._resetBlankNodeIds(); new N3Parser().parse(document, function (error, quad) { quad ? addQuad(quad) : done(error); diff --git a/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js index 2bec0839..4bee6d16 100644 --- a/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js +++ b/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -6,7 +6,6 @@ var TriplePatternFragmentsRdfView = require('../triplepatternfragments/TriplePat var rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', sd = 'http://www.w3.org/TR/sparql11-service-description/#', - xsd = 'http://www.w3.org/2001/XMLSchema#', hydra = 'http://www.w3.org/ns/hydra/core#'; // Creates a new QuadPatternFragmentsRdfView @@ -20,13 +19,13 @@ function QuadPatternFragmentsRdfView(settings) { TriplePatternFragmentsRdfView.extend(QuadPatternFragmentsRdfView); // Generate the datasource metadata -QuadPatternFragmentsRdfView.prototype.sendDatasourceMetadata = function(metadata, fragment, query, datasource) { +QuadPatternFragmentsRdfView.prototype.sendDatasourceMetadata = function (metadata, fragment, query, datasource) { TriplePatternFragmentsRdfView.prototype.sendDatasourceMetadata(metadata, fragment, query, datasource); metadata(datasource.index, sd + 'defaultGraph', datasource.settings.defaultGraph); }; // Generate the datasource controls -QuadPatternFragmentsRdfView.prototype.sendDatasourceControls = function(metadata, fragment, query, datasource) { +QuadPatternFragmentsRdfView.prototype.sendDatasourceControls = function (metadata, fragment, query, datasource) { metadata(datasource.url, hydra + 'search', '_:quadPattern'); metadata('_:quadPattern', hydra + 'template', '"' + datasource.templateUrl + '"'); metadata('_:quadPattern', hydra + 'mapping', '_:subject'); diff --git a/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js b/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js index 7650c642..e52b7a86 100644 --- a/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js +++ b/lib/views/triplepatternfragments/TriplePatternFragmentsRdfView.js @@ -43,7 +43,7 @@ TriplePatternFragmentsRdfView.prototype._generateRdf = function (settings, data, }; // Generate the datasource metadata -TriplePatternFragmentsRdfView.prototype.sendDatasourceMetadata = function(metadata, fragment, query, datasource) { +TriplePatternFragmentsRdfView.prototype.sendDatasourceMetadata = function (metadata, fragment, query, datasource) { metadata(datasource.index, hydra + 'member', datasource.url); metadata(datasource.url, rdf + 'type', voID + 'Dataset'); metadata(datasource.url, rdf + 'type', hydra + 'Collection'); @@ -53,7 +53,7 @@ TriplePatternFragmentsRdfView.prototype.sendDatasourceMetadata = function(metada }; // Generate the datasource controls -TriplePatternFragmentsRdfView.prototype.sendDatasourceControls = function(metadata, fragment, query, datasource) { +TriplePatternFragmentsRdfView.prototype.sendDatasourceControls = function (metadata, fragment, query, datasource) { metadata(datasource.url, hydra + 'search', '_:triplePattern'); metadata('_:triplePattern', hydra + 'template', '"' + datasource.templateUrl + '"'); metadata('_:triplePattern', hydra + 'variableRepresentation', hydra + 'ExplicitRepresentation'); @@ -69,7 +69,7 @@ TriplePatternFragmentsRdfView.prototype.sendDatasourceControls = function(metada }; // Generate the fragment metadata -TriplePatternFragmentsRdfView.prototype.sendFragmentMetadata = function(metadata, fragment, query, datasource, meta) { +TriplePatternFragmentsRdfView.prototype.sendFragmentMetadata = function (metadata, fragment, query, datasource, meta) { // General fragment metadata metadata(fragment.url, voID + 'subset', fragment.pageUrl); metadata(fragment.pageUrl, rdf + 'type', hydra + 'PartialCollectionView'); From 850fe5108002f7e393ba999d570897184d6ba68d Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 2 Sep 2016 09:25:02 +0200 Subject: [PATCH 007/165] Fix failing TPF controller tests --- test/controllers/TriplePatternFragmentsController-test.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/controllers/TriplePatternFragmentsController-test.js b/test/controllers/TriplePatternFragmentsController-test.js index 7a7df02e..091b3046 100644 --- a/test/controllers/TriplePatternFragmentsController-test.js +++ b/test/controllers/TriplePatternFragmentsController-test.js @@ -39,6 +39,7 @@ describe('TriplePatternFragmentsController', function () { datasource = { supportsQuery: sinon.stub().returns(true), select: sinon.stub().returns({ stream: 'items' }), + supportedFeatures: { triplePattern: true }, }; datasources = { 'my-datasource': { title: 'My data', datasource: datasource } }; view = new TriplePatternFragmentsRdfView(), @@ -181,6 +182,7 @@ describe('TriplePatternFragmentsController', function () { setImmediate(callback, {}); }, }), + supportedFeatures: { triplePattern: true }, }; var router = { extractQueryParams: function (request, query) { @@ -316,6 +318,7 @@ describe('TriplePatternFragmentsController', function () { var datasource = { supportsQuery: sinon.stub().returns(true), select: sinon.stub(), + supportedFeatures: { triplePattern: true }, }; var router = { extractQueryParams: function (request, query) { @@ -384,6 +387,7 @@ describe('TriplePatternFragmentsController', function () { datasource = { supportsQuery: sinon.stub().returns(true), select: sinon.stub().throws(error), + supportedFeatures: { triplePattern: true }, }; view = new TriplePatternFragmentsRdfView(), controller = new TriplePatternFragmentsController({ @@ -422,6 +426,7 @@ describe('TriplePatternFragmentsController', function () { datasource = { supportsQuery: sinon.stub().returns(true), select: function (query, callback) { setImmediate(callback.bind(null, error)); }, + supportedFeatures: { triplePattern: true }, }; view = new TriplePatternFragmentsRdfView(), view.render = sinon.stub(); // avoid writing a partial body From 9b6cd241ad3201cc572c921f25e60513fcded10b Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 2 Sep 2016 13:04:58 +0200 Subject: [PATCH 008/165] Add quad support to CompositeDatasource. A "graph" option can be added to the settings of each nested triples-only datasource, which indicates the graph in which the triples exist. If no "graph" option is added, the triples will be available in the default graph. If the nested datasource support quads, no "graph" option should be added, its graphs will be inherited. --- config/config-composite-quads.json | 49 +++++++++++++++++++ config/config-defaults.json | 2 +- .../TriplePatternFragmentsController.js | 2 +- lib/datasources/CompositeDatasource.js | 48 ++++++++++++++---- lib/datasources/MemoryDatasource.js | 4 +- lib/datasources/QuadMemoryDatasource.js | 28 ++++++----- lib/views/quadpatternfragments/fragment.html | 2 + .../TriplePatternFragmentsRdfView.js | 6 +-- test/assets/test.trig | 25 ++++++++++ test/datasources/CompositeDatasource-test.js | 46 +++++++++++++++-- 10 files changed, 180 insertions(+), 32 deletions(-) create mode 100644 config/config-composite-quads.json create mode 100755 test/assets/test.trig diff --git a/config/config-composite-quads.json b/config/config-composite-quads.json new file mode 100644 index 00000000..edf37aac --- /dev/null +++ b/config/config-composite-quads.json @@ -0,0 +1,49 @@ +{ + "title": "My Composite Linked Data Fragments server", + + "datasources": { + "test-composite": { + "title": "Composite Test", + "type": "CompositeDatasource", + "description": "A test quad composite datasource", + "settings": { + "references": [ "hdt", "ttl", "jsonld", "hdtext", "trig" ] + } + }, + "hdt": { + "hide": true, + "title": "HDT", + "type": "HdtDatasource", + "description": "A test HDT datasource", + "settings": { "file": "test/assets/test.hdt", "graph": "http://example.org/graph0" } + }, + "ttl": { + "hide": true, + "title": "Turtle", + "type": "TurtleDatasource", + "description": "A test turtle datasource", + "settings": { "file": "test/assets/test.ttl", "graph": "http://example.org/graph1" } + }, + "jsonld": { + "hide": true, + "title": "JSONLD", + "type": "JsonLdDatasource", + "description": "A test jsonld datasource", + "settings": { "file": "test/assets/test.jsonld", "graph": "http://example.org/graph2" } + }, + "hdtext": { + "hide": true, + "title": "HDT-EXT", + "type": "ExternalHdtDatasource", + "description": "A blank test HDT datasource", + "settings": { "file": "test/assets/test-blank.hdt", "graph": "http://example.org/graph3" } + }, + "trig": { + "hide": true, + "title": "Trig", + "type": "TrigDatasource", + "description": "A test Trig datasource", + "settings": { "file": "test/assets/test.trig" } + } + } +} diff --git a/config/config-defaults.json b/config/config-defaults.json index 65bfec24..24033f6d 100644 --- a/config/config-defaults.json +++ b/config/config-defaults.json @@ -29,8 +29,8 @@ "controllers": [ "SummaryController", "TimegateController", - "QuadPatternFragmentsController", "TriplePatternFragmentsController", + "QuadPatternFragmentsController", "AssetsController", "DereferenceController", "NotFoundController" diff --git a/lib/controllers/TriplePatternFragmentsController.js b/lib/controllers/TriplePatternFragmentsController.js index cdce2e5a..c6e9e73f 100644 --- a/lib/controllers/TriplePatternFragmentsController.js +++ b/lib/controllers/TriplePatternFragmentsController.js @@ -22,7 +22,7 @@ TriplePatternFragmentsController.prototype.viewName = 'TriplePatternFragments'; // The required features the given datasource must have TriplePatternFragmentsController.prototype.supportsDatasource = function (datasource) { - return datasource.supportedFeatures.triplePattern; + return datasource.supportedFeatures.triplePattern && !datasource.supportedFeatures.quadPattern; }; // Try to serve the requested fragment diff --git a/lib/datasources/CompositeDatasource.js b/lib/datasources/CompositeDatasource.js index fcfbbfd0..ff2d58bf 100644 --- a/lib/datasources/CompositeDatasource.js +++ b/lib/datasources/CompositeDatasource.js @@ -13,8 +13,10 @@ function CompositeDatasource(options) { if (!options.references) throw new Error("A CompositeDatasource requires a `references` array of datasource id's in its settings."); + this._defaultGraph = options.defaultGraph || options.baseURL + '#defaultGraph'; var allDatasources = options.datasources; this._datasources = {}; + this._datasourceGraphs = {}; this._datasourceNames = []; for (var i = 0; i < options.references.length; i++) { var datasourceName = options.references[i]; @@ -23,12 +25,13 @@ function CompositeDatasource(options) { throw new Error('No datasource ' + datasourceName + ' could be found!'); if (datasource.enabled !== false) { this._datasources[datasourceName] = datasource; + this._datasourceGraphs[datasourceName] = (this._datasources[datasourceName].settings || {}).graph || this._defaultGraph; this._datasourceNames.push(datasourceName); } } this._countCache = new LRU({ max: 1000, maxAge: 1000 * 60 * 60 * 3 }); } -Datasource.extend(CompositeDatasource); +Datasource.extend(CompositeDatasource, ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']); // Checks whether the data source can evaluate the given query CompositeDatasource.prototype.supportsQuery = function (query) { @@ -49,15 +52,24 @@ CompositeDatasource.prototype._getDatasourceById = function (datasourceIndex) { return this._datasources[this._datasourceNames[datasourceIndex]].datasource; }; +// Find a datasource's graph by datasource id inside this composition +CompositeDatasource.prototype._getDatasourceGraphById = function (datasourceIndex) { + return this._datasourceGraphs[this._datasourceNames[datasourceIndex]]; +}; + +CompositeDatasource.prototype._hasDatasourceMatchingGraph = function (datasource, datasourceIndex, query) { + return !query.graph || datasource.supportedFeatures.quadPattern || query.graph === this._getDatasourceGraphById(datasourceIndex); +}; + // Count the amount of triple in the query result to get an exact count. CompositeDatasource.prototype._getExactCount = function (datasource, query, callback) { // Try to find a cache match - var cacheKey = query.subject + '|' + query.predicate + '|' + query.object; + var cacheKey = query.subject + '|' + query.predicate + '|' + query.object + '|' + query.graph; var cache = this._countCache, count = cache.get(cacheKey); if (count) return setImmediate(callback, count); // Otherwise, count all the triples manually - var emptyQuery = { offset: 0, subject: query.subject, predicate: query.predicate, object: query.object }; + var emptyQuery = { offset: 0, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; var exactCount = 0; var triplesCounter = { _push: function (triple) { exactCount++; }, @@ -80,7 +92,7 @@ CompositeDatasource.prototype._getDatasourceInfo = function (query, absoluteOffs var self = this; var emptyQuery = { offset: 0, limit: 1, - subject: query.subject, predicate: query.predicate, object: query.object, + subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph, }; return findRecursive(0, absoluteOffset, -1, -1, 0, callback, true); @@ -90,6 +102,11 @@ CompositeDatasource.prototype._getDatasourceInfo = function (query, absoluteOffs callback(chosenDatasource, chosenOffset, totalCount, hasExactCount); else { var datasource = self._getDatasourceById(datasourceIndex); + + // If we are have a graph in our query, and this is a triple datasource, make sure it is in the requested graph + if (!self._hasDatasourceMatchingGraph(datasource, datasourceIndex, emptyQuery)) + return findRecursive(datasourceIndex + 1, offset, chosenDatasource, chosenOffset, totalCount, hasExactCount); + var metadataReader = { _push: noop, close: noop, @@ -134,6 +151,7 @@ CompositeDatasource.prototype._getDatasourceInfo = function (query, absoluteOffs CompositeDatasource.prototype._executeQuery = function (query, destination) { var offset = query.offset || 0, limit = query.limit || Infinity; var self = this; + var selfDatasource = this; this._getDatasourceInfo(query, offset, function (datasourceIndex, relativeOffset, totalCount, hasExactCount) { if (datasourceIndex < 0) { // No valid datasource has been found @@ -151,13 +169,20 @@ CompositeDatasource.prototype._executeQuery = function (query, destination) { // This is called after the last element has been pushed // If we haven't reached our limit, try to fill it with other datasource query results. - emitted += localEmittedCount; + emitted = localEmittedCount; datasourceIndex++; if (emitted < limit && datasourceIndex < self._datasourceNames.length) { var localLimit = limit - emitted; var subQuery = { offset: 0, limit: localLimit, - subject: query.subject, predicate: query.predicate, object: query.object }; - self._getDatasourceById(datasourceIndex)._executeQuery(subQuery, destination, noop); + subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; + destination.currentGraph = self._getDatasourceGraphById(datasourceIndex); + var datasource = self._getDatasourceById(datasourceIndex); + // If we are have a graph in our query, and this is a triple datasource, make sure it is in the requested graph, + // otherwise we skip this datasource + if (self._hasDatasourceMatchingGraph(datasource, datasourceIndex, subQuery)) + datasource._executeQuery(subQuery, destination); + else + destination.close(); return false; } else @@ -166,8 +191,9 @@ CompositeDatasource.prototype._executeQuery = function (query, destination) { // Initiate query to the first datasource. var subQuery = { offset: relativeOffset, limit: limit, - subject: query.subject, predicate: query.predicate, object: query.object }; - self._getDatasourceById(datasourceIndex)._executeQuery(subQuery, destination, noop); + subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; + destination.currentGraph = self._getDatasourceGraphById(datasourceIndex); + self._getDatasourceById(datasourceIndex)._executeQuery(subQuery, destination); } }); @@ -176,7 +202,9 @@ CompositeDatasource.prototype._executeQuery = function (query, destination) { function countItems(destination, closeCallback) { var count = 0, originalPush = destination._push, originalClose = destination.close; destination._push = function (element) { - count++; + if (element) count++; + if (element && (!element.graph || element.graph === selfDatasource._defaultGraph)) + element.graph = destination.currentGraph; originalPush.call(destination, element); }; destination.close = function () { diff --git a/lib/datasources/MemoryDatasource.js b/lib/datasources/MemoryDatasource.js index 849ca3cc..6abc6332 100644 --- a/lib/datasources/MemoryDatasource.js +++ b/lib/datasources/MemoryDatasource.js @@ -9,12 +9,14 @@ function MemoryDatasource(options) { if (!(this instanceof MemoryDatasource)) return new MemoryDatasource(options); Datasource.call(this, options); + + this._defaultGraph = options.defaultGraph || options.baseURL + '#defaultGraph'; } Datasource.extend(MemoryDatasource, ['triplePattern', 'limit', 'offset', 'totalCount']); // Prepares the datasource for querying MemoryDatasource.prototype._initialize = function (done) { - var tripleStore = this._tripleStore = new N3Store(); + var tripleStore = this._tripleStore = new N3Store({ defaultGraph: this._defaultGraph }); this._getAllTriples(function (s, p, o, g) { tripleStore.addTriple(s, p, o, g); }, done); }; diff --git a/lib/datasources/QuadMemoryDatasource.js b/lib/datasources/QuadMemoryDatasource.js index c8e67b8b..00cc9073 100644 --- a/lib/datasources/QuadMemoryDatasource.js +++ b/lib/datasources/QuadMemoryDatasource.js @@ -10,31 +10,35 @@ function QuadMemoryDatasource(options) { if (!(this instanceof QuadMemoryDatasource)) return new QuadMemoryDatasource(options); Datasource.call(this, options); - this._defaultGraph = options.defaultGraph || options.baseURL + '#defaultGraph'; - var quadStore = this._quadStore = new N3Store({ defaultGraph: this._defaultGraph }); - setImmediate(function (self) { - self._getAllQuads(function (s, p, o, g) { quadStore.addTriple(s, p, o, g); }, - function (error) { if (error) throw error; }); - }, this); } Datasource.extend(QuadMemoryDatasource, ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']); +// Prepares the datasource for querying +QuadMemoryDatasource.prototype._initialize = function (done) { + var quadStore = this._quadStore = new N3Store(); + this._getAllQuads(function (s, p, o, g) { quadStore.addTriple(s, p, o, g); }, done); +}; + // Retrieves all triples in the datasource QuadMemoryDatasource.prototype._getAllQuads = function (addQuad, done) { throw new Error('_getAllQuads is not implemented'); }; // Writes the results of the query to the given triple stream -QuadMemoryDatasource.prototype._executeQuery = function (query, quadStream, metadataCallback) { +QuadMemoryDatasource.prototype._executeQuery = function (query, destination) { var offset = query.offset || 0, limit = query.limit || Infinity, - quads = this._quadStore.findByIRI(query.subject, query.predicate, query.object, query.graph); + quads = this._quadStore.findByIRI(query.subject, query.predicate, query.object, + query.graph === this._defaultGraph ? this._quadStore.defaultGraph : query.graph); // Send the metadata - metadataCallback({ totalCount: quads.length }); + destination.setProperty('metadata', { totalCount: quads.length, hasExactCount: true }); // Send the requested subset of triples - for (var i = offset, l = Math.min(offset + limit, quads.length); i < l; i++) - quadStream.push(quads[i]); - quadStream.push(null); + for (var i = offset, l = Math.min(offset + limit, quads.length); i < l; i++) { + if (quads[i].graph === '') + quads[i].graph = this._defaultGraph; + destination._push(quads[i]); + } + destination.close(); }; module.exports = QuadMemoryDatasource; diff --git a/lib/views/quadpatternfragments/fragment.html b/lib/views/quadpatternfragments/fragment.html index b6bee1f2..f31c0988 100644 --- a/lib/views/quadpatternfragments/fragment.html +++ b/lib/views/quadpatternfragments/fragment.html @@ -5,6 +5,8 @@

<%= capitalizeFirst(datasource.title) %>
Query <%= datasource.title %> by quad pattern + +

@@ -67,17 +71,18 @@

Matches in <%= datasource.title %> for <%= query.pattern diff --git a/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js b/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js index 56b2aaba..f3e8cc29 100644 --- a/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js +++ b/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js @@ -1,7 +1,8 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* A SummaryHtmlViewExtension extends the Quad Pattern Fragments RDF view with a summary link. */ -var HtmlView = require('../HtmlView'); +var HtmlView = require('../HtmlView'), + path = require('path'); // Creates a new SummaryHtmlViewExtension function SummaryHtmlViewExtension(settings) { @@ -15,12 +16,12 @@ HtmlView.extend(SummaryHtmlViewExtension); SummaryHtmlViewExtension.prototype._render = function (settings, request, response, done) { // If summaries are enabled, connect the datasource to its summary // TODO: summary should be of/off per dataset - if (settings.summaries && settings.summaries.enabled) { + if (settings.summaries) { // TODO: summary URL should be generated by router settings.summary = { url: settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource), }; - this._renderTemplate('summary/summary-link', settings, request, response, done); + this._renderTemplate(path.join(__dirname, 'summary-link'), settings, request, response, done); } else done(); diff --git a/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js index 33368895..08d7eca5 100644 --- a/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js +++ b/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js @@ -17,7 +17,7 @@ RdfView.extend(SummaryRdfViewExtension); SummaryRdfViewExtension.prototype._generateRdf = function (settings, data, metadata, done) { // If summaries are enabled, connect the datasource to its summary // TODO: summary should be of/off per dataset - if (settings.summaries && settings.summaries.enabled) { + if (settings.summaries) { // TODO: summary URL should be generated by router metadata(settings.datasource.url, ds + 'hasDatasetSummary', settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource)); diff --git a/package-lock.json b/package-lock.json index 11d466df..80163b87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -293,6 +293,26 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, + "componentsjs": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/componentsjs/-/componentsjs-3.3.0.tgz", + "integrity": "sha512-0ETmraF8ClssNbGbZqp6kTSCwm8YBK6eFly34pglwiJo007HgVWdeXcsLttXsRtJbiVxA0Ox+A/mvjDfExES4A==", + "requires": { + "global-modules": "^1.0.0", + "jsonld": "^0.4.11", + "lodash": "^4.17.4", + "minimist": "^1.2.0", + "n3": "^0.9.1", + "requireg": "^0.1.7" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -376,6 +396,11 @@ } } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -633,6 +658,14 @@ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", "dev": true }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", @@ -770,6 +803,28 @@ "path-is-absolute": "^1.0.0" } }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", @@ -856,6 +911,14 @@ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -899,6 +962,11 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, "inquirer": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", @@ -1003,6 +1071,11 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1012,8 +1085,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isstream": { "version": "0.1.2", @@ -1165,8 +1237,7 @@ "minimist": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "optional": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mkdirp": { "version": "0.5.1", @@ -1237,9 +1308,9 @@ "dev": true }, "n3": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/n3/-/n3-0.7.0.tgz", - "integrity": "sha1-li0YYrVELI0LlAV1x3Av+aP/GcU=" + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/n3/-/n3-0.9.1.tgz", + "integrity": "sha1-QwtUfVjcc4FAjEV4TdgFgXGQOTI=" }, "nan": { "version": "2.11.0", @@ -1258,6 +1329,11 @@ "resolved": "https://registry.npmjs.org/negotiate/-/negotiate-1.0.1.tgz", "integrity": "sha1-NayLVnL3sF+qEL8CYTQusRIDcP0=" }, + "nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==" + }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -1328,6 +1404,11 @@ "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=", "optional": true }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1343,8 +1424,7 @@ "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" }, "performance-now": { "version": "2.1.0", @@ -1453,6 +1533,17 @@ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", "dev": true }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "readable-stream": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", @@ -1555,6 +1646,26 @@ "resolve-from": "^1.0.0" } }, + "requireg": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.1.8.tgz", + "integrity": "sha512-qjbwnviLXg4oZiAFEr1ExbevkUPaEiP1uPGSoFCVgCCcbo4PXv9SmiJpXNYmgTBCZ8fY1Jy+sk7F9/kPNepeDw==", + "requires": { + "nested-error-stacks": "~2.0.1", + "rc": "~1.2.7", + "resolve": "~1.7.1" + }, + "dependencies": { + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "requires": { + "path-parse": "^1.0.5" + } + } + } + }, "resolve": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", @@ -1564,6 +1675,15 @@ "path-parse": "^1.0.5" } }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", @@ -1746,8 +1866,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "superagent": { "version": "2.3.0", @@ -1985,7 +2104,6 @@ "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, "requires": { "isexe": "^2.0.0" } diff --git a/package.json b/package.json index 9e7ae628..3e2e919c 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,15 @@ "name": "ldf-server", "description": "Linked Data Fragments Server", "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/": "components/", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/config/": "config/" + }, "license": "MIT", "engines": { "node": ">=6.0" @@ -27,6 +36,7 @@ "jsonld": "^0.4.11", "lodash": "^2.4.2", "lru-cache": "^4.0.1", + "componentsjs": "3.3.0", "mime": "^1.3.4", "n3": "^0.9.0", "negotiate": "^1.0.1", diff --git a/test/controllers/Controller-test.js b/test/controllers/Controller-test.js index 59cf6405..89a6e4d2 100644 --- a/test/controllers/Controller-test.js +++ b/test/controllers/Controller-test.js @@ -1,5 +1,6 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var Controller = require('../../lib/controllers/Controller'); +var Controller = require('../../lib/controllers/Controller'), + UrlData = require('../../lib/UrlData'); var http = require('http'), request = require('supertest'), @@ -61,7 +62,7 @@ describe('Controller', function () { describe('A Controller instance without baseURL using Forwarded header', function () { var controller, client; before(function () { - controller = new Controller(); + controller = new Controller({ urlData: new UrlData({ baseURL: 'http://example.org:1234/base?c=d#f' }) }); sinon.spy(controller, '_handleRequest'); client = request.agent(new DummyServer(controller)); }); @@ -89,9 +90,9 @@ describe('Controller', function () { var request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); request.parsedUrl.should.deep.equal({ - protocol: 'https:', host: 'bar:8000', hostname: undefined, port: undefined, + protocol: 'https:', host: 'bar:8000', hostname: 'example.org', port: '1234', path: '/path?a=b', pathname: '/path', href: undefined, auth: undefined, - query: { a: 'b' }, search: undefined, hash: undefined, slashes: undefined, + query: { a: 'b' }, search: undefined, hash: undefined, slashes: true, }); }); @@ -146,7 +147,7 @@ describe('Controller', function () { describe('A Controller instance with baseURL', function () { var controller, client; before(function () { - controller = new Controller({ baseURL: 'http://example.org:1234/base?c=d#f' }); + controller = new Controller({ urlData: new UrlData({ baseURL: 'http://example.org:1234/base?c=d#f' }) }); sinon.spy(controller, '_handleRequest'); client = request.agent(new DummyServer(controller)); }); diff --git a/test/controllers/DereferenceController-test.js b/test/controllers/DereferenceController-test.js index 3b304127..0c457310 100644 --- a/test/controllers/DereferenceController-test.js +++ b/test/controllers/DereferenceController-test.js @@ -22,7 +22,7 @@ describe('DereferenceController', function () { describe('A DereferenceController instance', function () { var controller, client; before(function () { - controller = new DereferenceController({ dereference: { '/resource/': 'dbpedia/2014' } }); + controller = new DereferenceController({ dereference: { '/resource/': { path: 'dbpedia/2014' } } }); client = request.agent(new DummyServer(controller)); }); diff --git a/test/controllers/QuadPatternFragmentsController-test.js b/test/controllers/QuadPatternFragmentsController-test.js index 969b1011..3328bbea 100644 --- a/test/controllers/QuadPatternFragmentsController-test.js +++ b/test/controllers/QuadPatternFragmentsController-test.js @@ -6,7 +6,8 @@ var request = require('supertest'), http = require('http'); var QuadPatternFragmentsHtmlView = require('../../lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js'), - QuadPatternFragmentsRdfView = require('../../lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js'); + QuadPatternFragmentsRdfView = require('../../lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js'), + UrlData = require('../../lib/UrlData.js'); describe('QuadPatternFragmentsController', function () { describe('The QuadPatternFragmentsController module', function () { @@ -32,21 +33,22 @@ describe('QuadPatternFragmentsController', function () { extractQueryParams: sinon.spy(function (request, query) { query.features.datasource = true; query.features.other = true; - query.datasource = 'my-datasource'; + query.datasource = '/my-datasource'; query.other = 'other'; }), }; datasource = { + title: 'My data', supportsQuery: sinon.stub().returns(true), select: sinon.stub().returns({ stream: 'items' }), supportedFeatures: { quadPattern: true }, }; - datasources = { 'my-datasource': { title: 'My data', datasource: datasource } }; + datasources = { 'my-datasource': datasource }; view = new QuadPatternFragmentsRdfView(), sinon.spy(view, 'render'); prefixes = { a: 'a' }; controller = new QuadPatternFragmentsController({ - baseURL: 'https://example.org/base/?bar=foo', + urlData: new UrlData({ baseURL: 'https://example.org/base/?bar=foo' }), routers: [routerA, routerB, routerC], datasources: datasources, views: [view], @@ -127,28 +129,24 @@ describe('QuadPatternFragmentsController', function () { var query = routerC.extractQueryParams.firstCall.args[1]; var settings = view.render.firstCall.args[0]; - settings.should.deep.equal({ - datasource: { - title: 'My data', - index: 'https://example.org/#dataset', - url: 'https://example.org/my-datasource#dataset', - templateUrl: 'https://example.org/my-datasource{?subject,predicate,object,graph}', - supportsQuads: true, - }, - fragment: { - url: 'https://example.org/my-datasource?a=b&c=d', - pageUrl: 'https://example.org/my-datasource?a=b&c=d', - firstPageUrl: 'https://example.org/my-datasource?a=b&c=d&page=1', - nextPageUrl: 'https://example.org/my-datasource?a=b&c=d&page=2', - previousPageUrl: null, - }, - results: { - stream: 'items', - }, - prefixes: prefixes, - query: query, - datasources: datasources, + settings.datasource.should.have.property('title', 'My data'); + settings.datasource.should.have.property('index', 'https://example.org/#dataset'); + settings.datasource.should.have.property('url', 'https://example.org/my-datasource#dataset'); + settings.datasource.should.have.property('templateUrl', 'https://example.org/my-datasource{?subject,predicate,object,graph}'); + settings.datasource.should.have.property('supportsQuads', true); + settings.fragment.should.deep.equal({ + url: 'https://example.org/my-datasource?a=b&c=d', + pageUrl: 'https://example.org/my-datasource?a=b&c=d', + firstPageUrl: 'https://example.org/my-datasource?a=b&c=d&page=1', + nextPageUrl: 'https://example.org/my-datasource?a=b&c=d&page=2', + previousPageUrl: null, + }); + settings.results.should.deep.equal({ + stream: 'items', }); + settings.prefixes.should.deep.equal(prefixes); + settings.query.should.deep.equal(query); + settings.datasources.should.deep.equal({ '/my-datasource': datasource }); query.should.have.property('patternString', '{ ?s ?p ?o ?g. }'); }); }); @@ -188,7 +186,7 @@ describe('QuadPatternFragmentsController', function () { var router = { extractQueryParams: function (request, query) { query.features.datasource = true; - query.datasource = 'my-datasource'; + query.datasource = '/my-datasource'; }, }; htmlView = new QuadPatternFragmentsHtmlView(); @@ -197,7 +195,7 @@ describe('QuadPatternFragmentsController', function () { sinon.spy(rdfView, 'render'); controller = new QuadPatternFragmentsController({ routers: [router], - datasources: { 'my-datasource': { datasource: datasource } }, + datasources: { 'my-datasource': datasource }, views: [htmlView, rdfView], }); client = request.agent(new DummyServer(controller)); @@ -324,12 +322,12 @@ describe('QuadPatternFragmentsController', function () { var router = { extractQueryParams: function (request, query) { query.features.datasource = true; - query.datasource = 'my-datasource'; + query.datasource = '/my-datasource'; }, }; controller = new QuadPatternFragmentsController({ routers: [router], - datasources: { 'my-datasource': { datasource: datasource } }, + datasources: { 'my-datasource': datasource }, }); client = request.agent(new DummyServer(controller)); }); @@ -381,7 +379,7 @@ describe('QuadPatternFragmentsController', function () { router = { extractQueryParams: sinon.spy(function (request, query) { query.features.datasource = true; - query.datasource = 'my-datasource'; + query.datasource = '/my-datasource'; }), }; error = new Error('datasource error'), @@ -394,7 +392,7 @@ describe('QuadPatternFragmentsController', function () { controller = new QuadPatternFragmentsController({ routers: [router], views: [view], - datasources: { 'my-datasource': { datasource: datasource } }, + datasources: { '/my-datasource': datasource }, }); client = request.agent(new DummyServer(controller)); }); @@ -420,7 +418,7 @@ describe('QuadPatternFragmentsController', function () { router = { extractQueryParams: sinon.spy(function (request, query) { query.features.datasource = true; - query.datasource = 'my-datasource'; + query.datasource = '/my-datasource'; }), }; error = new Error('datasource error'), @@ -434,7 +432,7 @@ describe('QuadPatternFragmentsController', function () { controller = new QuadPatternFragmentsController({ routers: [router], views: [view], - datasources: { 'my-datasource': { datasource: datasource } }, + datasources: { 'my-datasource': datasource }, }); client = request.agent(new DummyServer(controller)); }); diff --git a/test/controllers/SummaryController-test.js b/test/controllers/SummaryController-test.js index 67110f22..dfcfa095 100644 --- a/test/controllers/SummaryController-test.js +++ b/test/controllers/SummaryController-test.js @@ -28,7 +28,7 @@ describe('SummaryController', function () { before(function () { controller = new SummaryController({ views: [new SummaryRdfView()], - summaries: { dir: '../../test/assets' }, + summaries: { dir: path.join(__dirname, '/../assets') }, prefixes: { ds: 'http://semweb.mmlab.be/ns/datasummaries#', rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', diff --git a/test/datasources/CompositeDatasource-test.js b/test/datasources/CompositeDatasource-test.js index 2c7b312f..66098a30 100644 --- a/test/datasources/CompositeDatasource-test.js +++ b/test/datasources/CompositeDatasource-test.js @@ -22,6 +22,7 @@ describe('CompositeDatasource', function () { var datasource = datasources[datasourceId]; var DatasourceType = datasource.datasourceType; datasource.datasource = new DatasourceType(datasource.settings); + datasource.datasource.initialize(); }); var references = Object.keys(datasources); var totalSize = Object.keys(datasources).reduce(function (acc, key) { @@ -57,6 +58,7 @@ describe('CompositeDatasource', function () { function getDatasource() { return datasource; } before(function (done) { datasource = new CompositeDatasource({ datasources: datasources, references: references }); + datasource.initialize(); datasource.on('initialized', done); }); after(function (done) { @@ -136,12 +138,12 @@ describe('CompositeDatasource', function () { itShouldExecute(getDatasource, 'a query for the default graph', { graph: '', limit: 10, features: { quadPattern: true, limit: true } }, - 10, 271); + 10, 266); itShouldExecute(getDatasource, 'a query for the default graph without a limit', { graph: '', features: { quadPattern: true, limit: true } }, - 271, 271); + 266, 266); itShouldExecute(getDatasource, 'a query for graph0', diff --git a/test/datasources/Datasource-test.js b/test/datasources/Datasource-test.js index 7d61ae6e..e2185612 100644 --- a/test/datasources/Datasource-test.js +++ b/test/datasources/Datasource-test.js @@ -32,6 +32,7 @@ describe('Datasource', function () { describe('A Datasource instance', function () { var datasource = new Datasource(); + datasource.initialize(); it('should not indicate support for any features', function () { datasource.supportedFeatures.should.deep.equal({}); @@ -131,6 +132,7 @@ describe('Datasource', function () { }); datasource.on('initialized', initializedListener = sinon.stub()); datasource.on('error', errorListener = sinon.stub()); + datasource.initialize(); }); describe('after construction', function () { @@ -192,6 +194,7 @@ describe('Datasource', function () { datasource._initialize = sinon.stub().throws(error); datasource.on('initialized', initializedListener = sinon.stub()); datasource.on('error', errorListener = sinon.stub()); + datasource.initialize(); }); describe('after the initializer calls the callback', function () { @@ -222,6 +225,7 @@ describe('Datasource', function () { datasource._initialize = sinon.stub().callsArgWith(0, error); datasource.on('initialized', initializedListener = sinon.stub()); datasource.on('error', errorListener = sinon.stub()); + datasource.initialize(); }); describe('after the initializer calls the callback', function () { @@ -251,6 +255,7 @@ describe('Datasource', function () { value: { a: true, b: true, c: false }, }); datasource._executeQuery = sinon.stub(); + datasource.initialize(); it('should support the empty query', function () { datasource.supportsQuery({}).should.be.true; @@ -295,6 +300,7 @@ describe('Datasource', function () { enumerable: true, value: { custom: true }, }); + datasource.initialize(); datasource._executeQuery = sinon.spy(function (query, destination) { destination._push({ subject: 's', predicate: 'p', object: 'o1' }); destination._push({ subject: 's', predicate: 'p', object: 'o2', graph: '' }); diff --git a/test/datasources/HdtDatasource-test.js b/test/datasources/HdtDatasource-test.js index 5ddf1aaa..c6dea18e 100644 --- a/test/datasources/HdtDatasource-test.js +++ b/test/datasources/HdtDatasource-test.js @@ -15,18 +15,21 @@ describe('HdtDatasource', function () { it('should be an HdtDatasource constructor', function (done) { var instance = new HdtDatasource({ file: exampleHdtFile }); + instance.initialize(); instance.should.be.an.instanceof(HdtDatasource); instance.close(done); }); it('should create HdtDatasource objects', function (done) { var instance = HdtDatasource({ file: exampleHdtFile }); + instance.initialize(); instance.should.be.an.instanceof(HdtDatasource); instance.close(done); }); it('should create Datasource objects', function (done) { var instance = new HdtDatasource({ file: exampleHdtFile }); + instance.initialize(); instance.should.be.an.instanceof(Datasource); instance.close(done); }); @@ -37,6 +40,7 @@ describe('HdtDatasource', function () { function getDatasource() { return datasource; } before(function (done) { datasource = new HdtDatasource({ file: exampleHdtFile }); + datasource.initialize(); datasource.on('initialized', done); }); after(function (done) { @@ -99,6 +103,7 @@ describe('HdtDatasource', function () { function getDatasource() { return datasource; } before(function (done) { datasource = new HdtDatasource({ file: exampleHdtFileWithBlanks }); + datasource.initialize(); datasource.on('initialized', done); }); after(function (done) { @@ -150,6 +155,7 @@ describe('HdtDatasource', function () { file: exampleHdtFileWithBlanks, blankNodePrefix: 'http://example.org/.well-known/genid/', }); + datasource.initialize(); datasource.on('initialized', done); }); after(function (done) { diff --git a/test/datasources/JsonLdDatasource-test.js b/test/datasources/JsonLdDatasource-test.js index 51d064ac..17261c6d 100644 --- a/test/datasources/JsonLdDatasource-test.js +++ b/test/datasources/JsonLdDatasource-test.js @@ -33,6 +33,7 @@ describe('JsonLdDatasource', function () { describe('A JsonLdDatasource instance for an example JsonLd file', function () { var datasource = new JsonLdDatasource({ url: exampleJsonLdUrl }); + datasource.initialize(); after(function (done) { datasource.close(done); }); itShouldExecute(datasource, diff --git a/test/datasources/N3Datasource-test.js b/test/datasources/N3Datasource-test.js index 09c9a8b1..b884782d 100644 --- a/test/datasources/N3Datasource-test.js +++ b/test/datasources/N3Datasource-test.js @@ -33,6 +33,7 @@ describe('N3Datasource', function () { describe('A N3Datasource instance for an example Turtle file', function () { var datasource = new N3Datasource({ url: exampleTurtleUrl }); + datasource.initialize(); after(function (done) { datasource.close(done); }); itShouldExecute(datasource, diff --git a/test/datasources/SparqlDatasource-test.js b/test/datasources/SparqlDatasource-test.js index 2690d53f..26b6d421 100644 --- a/test/datasources/SparqlDatasource-test.js +++ b/test/datasources/SparqlDatasource-test.js @@ -32,6 +32,7 @@ describe('SparqlDatasource', function () { describe('A SparqlDatasource instance', function () { var request = sinon.stub(); var datasource = new SparqlDatasource({ endpoint: 'http://ex.org/sparql', request: request }); + datasource.initialize(); it('should indicate support for its features', function () { datasource.supportedFeatures.should.deep.equal({ diff --git a/test/routers/DatasourceRouter-test.js b/test/routers/DatasourceRouter-test.js index 1fe8ae3a..6e468878 100644 --- a/test/routers/DatasourceRouter-test.js +++ b/test/routers/DatasourceRouter-test.js @@ -27,53 +27,81 @@ describe('DatasourceRouter', function () { 'http://example.org', 'should extract the index datasource', { a: 1 }, - { a: 1, features: { datasource: true }, datasource: '' }, + { a: 1, features: { datasource: true }, datasource: '/' }, ], [ 'a root URL without query parameters', 'http://example.org/', 'should extract the index datasource', { a: 1 }, - { a: 1, features: { datasource: true }, datasource: '' }, + { a: 1, features: { datasource: true }, datasource: '/' }, ], [ 'a root URL with query parameters', 'http://example.org/?a=b&c=d', 'should extract the index datasource', { a: 1 }, - { a: 1, features: { datasource: true }, datasource: '' }, + { a: 1, features: { datasource: true }, datasource: '/' }, ], [ 'a URL with word characters without query parameters', 'http://example.org/mydatasource', 'should extract the datasource', { a: 1 }, - { a: 1, features: { datasource: true }, datasource: 'mydatasource' }, + { a: 1, features: { datasource: true }, datasource: '/mydatasource' }, ], [ 'a URL with word characters with query parameters', 'http://example.org/mydatasource?a=b&c=d', 'should extract the datasource', { a: 1 }, - { a: 1, features: { datasource: true }, datasource: 'mydatasource' }, + { a: 1, features: { datasource: true }, datasource: '/mydatasource' }, ], [ 'a URL with word and non-word characters without query parameters', 'http://example.org/my/data-source', 'should extract the datasource', { a: 1 }, - { a: 1, features: { datasource: true }, datasource: 'my/data-source' }, + { a: 1, features: { datasource: true }, datasource: '/my/data-source' }, ], [ 'a URL with word and non-word characters with query parameters', 'http://example.org/my/data-source?a=b&c=d', 'should extract the datasource', { a: 1 }, - { a: 1, features: { datasource: true }, datasource: 'my/data-source' }, + { a: 1, features: { datasource: true }, datasource: '/my/data-source' }, ], ] .forEach(function (args) { test.extractQueryParams.apply(router, args); }); }); }); }); + + describe('A DatasourceRouter instance with a base URL', function () { + var router = new DatasourceRouter({ + urlData: { baseURLPath: '/my/base/' }, + }); + + describe('extractUrlParams', function () { + describe('with an existing query', function () { + [ + [ + 'a root URL', + 'http://example.org/my/base/', + 'should extract the index datasource', + { a: 1 }, + { a: 1, features: { datasource: true }, datasource: '/' }, + ], + [ + 'a non-root URL', + 'http://example.org/my/base/other/path', + 'should extract the index datasource', + { a: 1 }, + { a: 1, features: { datasource: true }, datasource: '/other/path' }, + ], + ] + .forEach(function (args) { test.extractQueryParams.apply(router, args); }); + }); + }); + }); }); From ba56ef5bda6ca3bc22042da6630954e4e751c514 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 26 Feb 2020 10:29:36 +0100 Subject: [PATCH 051/165] Setup monorepo with lerna, #103 --- .gitignore | 3 + .gitlab-ci.yml | 17 - .travis.yml | 9 +- AUTHORS | 1 + LICENSE.txt | 2 +- README.md | 183 +- lerna.json | 21 + package-lock.json | 2149 ------ package.json | 67 +- Dockerfile => packages/core/Dockerfile | 0 packages/core/README.md | 209 + {assets => packages/core/assets}/favicon.ico | Bin .../core/assets}/images/logo.svg | 0 .../core/assets}/styles/ldf-server.css | 0 {bin => packages/core/bin}/.eslintrc | 0 {bin => packages/core/bin}/generate-summary | 0 {bin => packages/core/bin}/ldf-server | 0 .../core/components}/Controller.jsonld | 0 .../core/components}/Controller/Assets.jsonld | 0 .../components}/Controller/Dereference.jsonld | 0 .../components}/Controller/NotFound.jsonld | 0 .../Controller/QuadPatternFragments.jsonld | 0 .../components}/Controller/Summary.jsonld | 0 .../components}/Controller/Timegate.jsonld | 0 .../components}/ControllerExtension.jsonld | 0 .../ControllerExtension/Memento.jsonld | 0 .../ControllerExtension/WebId.jsonld | 0 .../core/components}/Datasource.jsonld | 0 .../components}/Datasource/Composite.jsonld | 0 .../core/components}/Datasource/Empty.jsonld | 0 .../core/components}/Datasource/Hdt.jsonld | 0 .../core/components}/Datasource/Index.jsonld | 0 .../core/components}/Datasource/JsonLd.jsonld | 0 .../core/components}/Datasource/Memory.jsonld | 0 .../core/components}/Datasource/N3.jsonld | 0 .../core/components}/Datasource/NQuads.jsonld | 0 .../components}/Datasource/NTriples.jsonld | 0 .../core/components}/Datasource/Sparql.jsonld | 0 .../core/components}/Datasource/Trig.jsonld | 0 .../core/components}/Datasource/Turtle.jsonld | 0 .../core/components}/Router.jsonld | 0 .../core/components}/Router/Datasource.jsonld | 0 .../core/components}/Router/Page.jsonld | 0 .../components}/Router/QuadPattern.jsonld | 0 .../core/components}/Server.jsonld | 0 .../core/components}/UrlData.jsonld | 0 .../core/components}/View.jsonld | 0 .../core/components}/View/Collection.jsonld | 0 .../core/components}/View/Html.jsonld | 0 .../core/components}/View/Html/Error.jsonld | 0 .../components}/View/Html/Forbidden.jsonld | 0 .../components}/View/Html/NotFound.jsonld | 0 .../core/components}/View/Html/Qpf.jsonld | 0 .../components}/View/Html/Qpf/Memento.jsonld | 0 .../components}/View/Html/Qpf/Summary.jsonld | 0 .../core/components}/View/Rdf.jsonld | 0 .../core/components}/View/Rdf/Error.jsonld | 0 .../core/components}/View/Rdf/NotFound.jsonld | 0 .../core/components}/View/Rdf/Qpf.jsonld | 0 .../components}/View/Rdf/Qpf/Summary.jsonld | 0 .../core/components}/View/Rdf/Summary.jsonld | 0 .../core/components}/components.jsonld | 0 .../core/components}/context.jsonld | 0 .../core/config}/certs/localhost-ca.crt | 0 .../core/config}/certs/localhost-ca.key | 0 .../core/config}/certs/localhost-client.crt | 0 .../core/config}/certs/localhost-client.key | 0 .../core/config}/certs/localhost-client.p12 | Bin .../core/config}/certs/localhost-server.crt | 0 .../core/config}/certs/localhost-server.key | 0 .../config}/certs/make-client-certificates.sh | 0 .../config}/certs/make-server-certificates.sh | 0 .../core/config}/certs/webid.cnf | 0 .../core/config}/certs/webid.ttl | 0 .../core/config}/config-defaults.json | 0 .../core/config}/config-example-advanced.json | 0 .../config}/config-example-composite.json | 0 .../core/config}/config-example-memento.json | 0 .../core/config}/config-example.json | 0 .../core/config}/sets/controllers.json | 0 .../core/config}/sets/datasources.json | 0 .../core/config}/sets/prefixes.json | 0 .../core/config}/sets/routers.json | 0 .../core/config}/sets/views.json | 0 .../core/lib}/LinkedDataFragmentsServer.js | 0 .../lib}/LinkedDataFragmentsServerWorker.js | 0 {lib => packages/core/lib}/UrlData.js | 0 {lib => packages/core/lib}/Util.js | 0 .../core/lib}/controllers/AssetsController.js | 0 .../core/lib}/controllers/Controller.js | 0 .../lib}/controllers/DereferenceController.js | 0 .../core/lib}/controllers/ErrorController.js | 0 .../controllers/MementoControllerExtension.js | 0 .../lib}/controllers/NotFoundController.js | 0 .../QuadPatternFragmentsController.js | 0 .../lib}/controllers/SummaryController.js | 0 .../lib}/controllers/TimegateController.js | 0 .../controllers/WebIDControllerExtension.js | 0 .../lib}/datasources/CompositeDatasource.js | 0 .../core/lib}/datasources/Datasource.js | 0 .../core/lib}/datasources/EmptyDatasource.js | 0 .../lib}/datasources/ExternalHdtDatasource.js | 0 .../core/lib}/datasources/HdtDatasource.js | 0 .../core/lib}/datasources/IndexDatasource.js | 0 .../core/lib}/datasources/JsonLdDatasource.js | 0 .../core/lib}/datasources/MemoryDatasource.js | 0 .../core/lib}/datasources/N3Datasource.js | 0 .../core/lib}/datasources/NQuadsDatasource.js | 0 .../lib}/datasources/NTriplesDatasource.js | 0 .../core/lib}/datasources/SparqlDatasource.js | 0 .../core/lib}/datasources/TrigDatasource.js | 0 .../core/lib}/datasources/TurtleDatasource.js | 0 .../core/lib}/routers/DatasourceRouter.js | 0 .../core/lib}/routers/PageRouter.js | 0 .../core/lib}/routers/QuadPatternRouter.js | 0 {lib => packages/core/lib}/views/HtmlView.js | 0 {lib => packages/core/lib}/views/RdfView.js | 0 {lib => packages/core/lib}/views/View.js | 0 .../core/lib}/views/ViewCollection.js | 0 {lib => packages/core/lib}/views/base.html | 0 .../core/lib}/views/error/ErrorHtmlView.js | 0 .../core/lib}/views/error/ErrorRdfView.js | 0 .../core/lib}/views/error/error.html | 0 .../lib}/views/forbidden/ForbiddenHtmlView.js | 0 .../core/lib}/views/forbidden/forbidden.html | 0 .../QuadPatternFragmentsHtmlView-Memento.js | 0 .../lib}/views/memento/memento-details.html | 0 .../lib}/views/notfound/NotFoundHtmlView.js | 0 .../lib}/views/notfound/NotFoundRdfView.js | 0 .../core/lib}/views/notfound/notfound.html | 0 .../QuadPatternFragmentsHtmlView.js | 0 .../QuadPatternFragmentsRdfView.js | 0 .../quadpatternfragments/datasource.html | 0 .../views/quadpatternfragments/fragment.html | 0 .../views/quadpatternfragments/index.html | 0 .../QuadPatternFragmentsHtmlView-Summary.js | 0 .../QuadPatternFragmentsRdfView-Summary.js | 0 .../core/lib}/views/summary/SummaryRdfView.js | 0 .../core/lib}/views/summary/summary-link.html | 0 module.js => packages/core/module.js | 0 packages/core/package.json | 53 + {test => packages/core/test}/.eslintrc | 0 .../test}/LinkedDataFragmentsServer-test.js | 0 .../basic-fragment-metadata-last.jsonld | 0 .../assets/basic-fragment-metadata-last.nq | 0 .../assets/basic-fragment-metadata-last.nt | 0 .../assets/basic-fragment-metadata-last.trig | 0 .../assets/basic-fragment-metadata-last.ttl | 0 .../core/test}/assets/basic-fragment.jsonld | 0 .../core/test}/assets/basic-fragment.nq | 0 .../core/test}/assets/basic-fragment.nt | 0 .../core/test}/assets/basic-fragment.trig | 0 .../core/test}/assets/basic-fragment.ttl | 0 .../core/test}/assets/empty-fragment.jsonld | 0 .../core/test}/assets/empty-fragment.nq | 0 .../core/test}/assets/empty-fragment.nt | 0 .../core/test}/assets/empty-fragment.trig | 0 .../core/test}/assets/empty-fragment.ttl | 0 .../test}/assets/sparql-quads-response.json | 0 .../core/test}/assets/summary.nt | 0 .../core/test}/assets/summary.ttl | 0 .../core/test}/assets/test-blank.hdt | Bin .../core/test}/assets/test-blank.ttl | 0 {test => packages/core/test}/assets/test.hdt | Bin .../core/test}/assets/test.jsonld | 0 {test => packages/core/test}/assets/test.trig | 0 {test => packages/core/test}/assets/test.ttl | 0 .../controllers/AssetsController-test.js | 0 .../core/test}/controllers/Controller-test.js | 0 .../controllers/DereferenceController-test.js | 0 .../core/test}/controllers/DummyServer.js | 0 .../controllers/NotFoundController-test.js | 0 .../QuadPatternFragmentsController-test.js | 0 .../controllers/SummaryController-test.js | 0 .../datasources/CompositeDatasource-test.js | 0 .../core/test}/datasources/Datasource-test.js | 0 .../test}/datasources/HdtDatasource-test.js | 0 .../datasources/JsonLdDatasource-test.js | 0 .../test}/datasources/N3Datasource-test.js | 0 .../datasources/SparqlDatasource-test.js | 0 {test => packages/core/test}/mocha.opts | 0 .../test}/routers/DatasourceRouter-test.js | 0 .../core/test}/routers/PageRouter-test.js | 0 .../test}/routers/QuadPatternRouter-test.js | 0 {test => packages/core/test}/test-setup.js | 0 .../core/test}/views/View-test.js | 0 .../core/test}/views/ViewCollection-test.js | 0 .../QuadPatternFragmentsRdfView-test.js | 0 yarn.lock | 5976 +++++++++++++++++ 189 files changed, 6315 insertions(+), 2375 deletions(-) delete mode 100644 .gitlab-ci.yml create mode 100644 lerna.json delete mode 100644 package-lock.json rename Dockerfile => packages/core/Dockerfile (100%) create mode 100644 packages/core/README.md rename {assets => packages/core/assets}/favicon.ico (100%) rename {assets => packages/core/assets}/images/logo.svg (100%) rename {assets => packages/core/assets}/styles/ldf-server.css (100%) rename {bin => packages/core/bin}/.eslintrc (100%) rename {bin => packages/core/bin}/generate-summary (100%) rename {bin => packages/core/bin}/ldf-server (100%) rename {components => packages/core/components}/Controller.jsonld (100%) rename {components => packages/core/components}/Controller/Assets.jsonld (100%) rename {components => packages/core/components}/Controller/Dereference.jsonld (100%) rename {components => packages/core/components}/Controller/NotFound.jsonld (100%) rename {components => packages/core/components}/Controller/QuadPatternFragments.jsonld (100%) rename {components => packages/core/components}/Controller/Summary.jsonld (100%) rename {components => packages/core/components}/Controller/Timegate.jsonld (100%) rename {components => packages/core/components}/ControllerExtension.jsonld (100%) rename {components => packages/core/components}/ControllerExtension/Memento.jsonld (100%) rename {components => packages/core/components}/ControllerExtension/WebId.jsonld (100%) rename {components => packages/core/components}/Datasource.jsonld (100%) rename {components => packages/core/components}/Datasource/Composite.jsonld (100%) rename {components => packages/core/components}/Datasource/Empty.jsonld (100%) rename {components => packages/core/components}/Datasource/Hdt.jsonld (100%) rename {components => packages/core/components}/Datasource/Index.jsonld (100%) rename {components => packages/core/components}/Datasource/JsonLd.jsonld (100%) rename {components => packages/core/components}/Datasource/Memory.jsonld (100%) rename {components => packages/core/components}/Datasource/N3.jsonld (100%) rename {components => packages/core/components}/Datasource/NQuads.jsonld (100%) rename {components => packages/core/components}/Datasource/NTriples.jsonld (100%) rename {components => packages/core/components}/Datasource/Sparql.jsonld (100%) rename {components => packages/core/components}/Datasource/Trig.jsonld (100%) rename {components => packages/core/components}/Datasource/Turtle.jsonld (100%) rename {components => packages/core/components}/Router.jsonld (100%) rename {components => packages/core/components}/Router/Datasource.jsonld (100%) rename {components => packages/core/components}/Router/Page.jsonld (100%) rename {components => packages/core/components}/Router/QuadPattern.jsonld (100%) rename {components => packages/core/components}/Server.jsonld (100%) rename {components => packages/core/components}/UrlData.jsonld (100%) rename {components => packages/core/components}/View.jsonld (100%) rename {components => packages/core/components}/View/Collection.jsonld (100%) rename {components => packages/core/components}/View/Html.jsonld (100%) rename {components => packages/core/components}/View/Html/Error.jsonld (100%) rename {components => packages/core/components}/View/Html/Forbidden.jsonld (100%) rename {components => packages/core/components}/View/Html/NotFound.jsonld (100%) rename {components => packages/core/components}/View/Html/Qpf.jsonld (100%) rename {components => packages/core/components}/View/Html/Qpf/Memento.jsonld (100%) rename {components => packages/core/components}/View/Html/Qpf/Summary.jsonld (100%) rename {components => packages/core/components}/View/Rdf.jsonld (100%) rename {components => packages/core/components}/View/Rdf/Error.jsonld (100%) rename {components => packages/core/components}/View/Rdf/NotFound.jsonld (100%) rename {components => packages/core/components}/View/Rdf/Qpf.jsonld (100%) rename {components => packages/core/components}/View/Rdf/Qpf/Summary.jsonld (100%) rename {components => packages/core/components}/View/Rdf/Summary.jsonld (100%) rename {components => packages/core/components}/components.jsonld (100%) rename {components => packages/core/components}/context.jsonld (100%) rename {config => packages/core/config}/certs/localhost-ca.crt (100%) rename {config => packages/core/config}/certs/localhost-ca.key (100%) rename {config => packages/core/config}/certs/localhost-client.crt (100%) rename {config => packages/core/config}/certs/localhost-client.key (100%) rename {config => packages/core/config}/certs/localhost-client.p12 (100%) rename {config => packages/core/config}/certs/localhost-server.crt (100%) rename {config => packages/core/config}/certs/localhost-server.key (100%) rename {config => packages/core/config}/certs/make-client-certificates.sh (100%) rename {config => packages/core/config}/certs/make-server-certificates.sh (100%) rename {config => packages/core/config}/certs/webid.cnf (100%) rename {config => packages/core/config}/certs/webid.ttl (100%) rename {config => packages/core/config}/config-defaults.json (100%) rename {config => packages/core/config}/config-example-advanced.json (100%) rename {config => packages/core/config}/config-example-composite.json (100%) rename {config => packages/core/config}/config-example-memento.json (100%) rename {config => packages/core/config}/config-example.json (100%) rename {config => packages/core/config}/sets/controllers.json (100%) rename {config => packages/core/config}/sets/datasources.json (100%) rename {config => packages/core/config}/sets/prefixes.json (100%) rename {config => packages/core/config}/sets/routers.json (100%) rename {config => packages/core/config}/sets/views.json (100%) rename {lib => packages/core/lib}/LinkedDataFragmentsServer.js (100%) rename {lib => packages/core/lib}/LinkedDataFragmentsServerWorker.js (100%) rename {lib => packages/core/lib}/UrlData.js (100%) rename {lib => packages/core/lib}/Util.js (100%) rename {lib => packages/core/lib}/controllers/AssetsController.js (100%) rename {lib => packages/core/lib}/controllers/Controller.js (100%) rename {lib => packages/core/lib}/controllers/DereferenceController.js (100%) rename {lib => packages/core/lib}/controllers/ErrorController.js (100%) rename {lib => packages/core/lib}/controllers/MementoControllerExtension.js (100%) rename {lib => packages/core/lib}/controllers/NotFoundController.js (100%) rename {lib => packages/core/lib}/controllers/QuadPatternFragmentsController.js (100%) rename {lib => packages/core/lib}/controllers/SummaryController.js (100%) rename {lib => packages/core/lib}/controllers/TimegateController.js (100%) rename {lib => packages/core/lib}/controllers/WebIDControllerExtension.js (100%) rename {lib => packages/core/lib}/datasources/CompositeDatasource.js (100%) rename {lib => packages/core/lib}/datasources/Datasource.js (100%) rename {lib => packages/core/lib}/datasources/EmptyDatasource.js (100%) rename {lib => packages/core/lib}/datasources/ExternalHdtDatasource.js (100%) rename {lib => packages/core/lib}/datasources/HdtDatasource.js (100%) rename {lib => packages/core/lib}/datasources/IndexDatasource.js (100%) rename {lib => packages/core/lib}/datasources/JsonLdDatasource.js (100%) rename {lib => packages/core/lib}/datasources/MemoryDatasource.js (100%) rename {lib => packages/core/lib}/datasources/N3Datasource.js (100%) rename {lib => packages/core/lib}/datasources/NQuadsDatasource.js (100%) rename {lib => packages/core/lib}/datasources/NTriplesDatasource.js (100%) rename {lib => packages/core/lib}/datasources/SparqlDatasource.js (100%) rename {lib => packages/core/lib}/datasources/TrigDatasource.js (100%) rename {lib => packages/core/lib}/datasources/TurtleDatasource.js (100%) rename {lib => packages/core/lib}/routers/DatasourceRouter.js (100%) rename {lib => packages/core/lib}/routers/PageRouter.js (100%) rename {lib => packages/core/lib}/routers/QuadPatternRouter.js (100%) rename {lib => packages/core/lib}/views/HtmlView.js (100%) rename {lib => packages/core/lib}/views/RdfView.js (100%) rename {lib => packages/core/lib}/views/View.js (100%) rename {lib => packages/core/lib}/views/ViewCollection.js (100%) rename {lib => packages/core/lib}/views/base.html (100%) rename {lib => packages/core/lib}/views/error/ErrorHtmlView.js (100%) rename {lib => packages/core/lib}/views/error/ErrorRdfView.js (100%) rename {lib => packages/core/lib}/views/error/error.html (100%) rename {lib => packages/core/lib}/views/forbidden/ForbiddenHtmlView.js (100%) rename {lib => packages/core/lib}/views/forbidden/forbidden.html (100%) rename {lib => packages/core/lib}/views/memento/QuadPatternFragmentsHtmlView-Memento.js (100%) rename {lib => packages/core/lib}/views/memento/memento-details.html (100%) rename {lib => packages/core/lib}/views/notfound/NotFoundHtmlView.js (100%) rename {lib => packages/core/lib}/views/notfound/NotFoundRdfView.js (100%) rename {lib => packages/core/lib}/views/notfound/notfound.html (100%) rename {lib => packages/core/lib}/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js (100%) rename {lib => packages/core/lib}/views/quadpatternfragments/QuadPatternFragmentsRdfView.js (100%) rename {lib => packages/core/lib}/views/quadpatternfragments/datasource.html (100%) rename {lib => packages/core/lib}/views/quadpatternfragments/fragment.html (100%) rename {lib => packages/core/lib}/views/quadpatternfragments/index.html (100%) rename {lib => packages/core/lib}/views/summary/QuadPatternFragmentsHtmlView-Summary.js (100%) rename {lib => packages/core/lib}/views/summary/QuadPatternFragmentsRdfView-Summary.js (100%) rename {lib => packages/core/lib}/views/summary/SummaryRdfView.js (100%) rename {lib => packages/core/lib}/views/summary/summary-link.html (100%) rename module.js => packages/core/module.js (100%) create mode 100644 packages/core/package.json rename {test => packages/core/test}/.eslintrc (100%) rename {test => packages/core/test}/LinkedDataFragmentsServer-test.js (100%) rename {test => packages/core/test}/assets/basic-fragment-metadata-last.jsonld (100%) rename {test => packages/core/test}/assets/basic-fragment-metadata-last.nq (100%) rename {test => packages/core/test}/assets/basic-fragment-metadata-last.nt (100%) rename {test => packages/core/test}/assets/basic-fragment-metadata-last.trig (100%) rename {test => packages/core/test}/assets/basic-fragment-metadata-last.ttl (100%) rename {test => packages/core/test}/assets/basic-fragment.jsonld (100%) rename {test => packages/core/test}/assets/basic-fragment.nq (100%) rename {test => packages/core/test}/assets/basic-fragment.nt (100%) rename {test => packages/core/test}/assets/basic-fragment.trig (100%) rename {test => packages/core/test}/assets/basic-fragment.ttl (100%) rename {test => packages/core/test}/assets/empty-fragment.jsonld (100%) rename {test => packages/core/test}/assets/empty-fragment.nq (100%) rename {test => packages/core/test}/assets/empty-fragment.nt (100%) rename {test => packages/core/test}/assets/empty-fragment.trig (100%) rename {test => packages/core/test}/assets/empty-fragment.ttl (100%) rename {test => packages/core/test}/assets/sparql-quads-response.json (100%) rename {test => packages/core/test}/assets/summary.nt (100%) rename {test => packages/core/test}/assets/summary.ttl (100%) rename {test => packages/core/test}/assets/test-blank.hdt (100%) rename {test => packages/core/test}/assets/test-blank.ttl (100%) rename {test => packages/core/test}/assets/test.hdt (100%) rename {test => packages/core/test}/assets/test.jsonld (100%) rename {test => packages/core/test}/assets/test.trig (100%) rename {test => packages/core/test}/assets/test.ttl (100%) rename {test => packages/core/test}/controllers/AssetsController-test.js (100%) rename {test => packages/core/test}/controllers/Controller-test.js (100%) rename {test => packages/core/test}/controllers/DereferenceController-test.js (100%) rename {test => packages/core/test}/controllers/DummyServer.js (100%) rename {test => packages/core/test}/controllers/NotFoundController-test.js (100%) rename {test => packages/core/test}/controllers/QuadPatternFragmentsController-test.js (100%) rename {test => packages/core/test}/controllers/SummaryController-test.js (100%) rename {test => packages/core/test}/datasources/CompositeDatasource-test.js (100%) rename {test => packages/core/test}/datasources/Datasource-test.js (100%) rename {test => packages/core/test}/datasources/HdtDatasource-test.js (100%) rename {test => packages/core/test}/datasources/JsonLdDatasource-test.js (100%) rename {test => packages/core/test}/datasources/N3Datasource-test.js (100%) rename {test => packages/core/test}/datasources/SparqlDatasource-test.js (100%) rename {test => packages/core/test}/mocha.opts (100%) rename {test => packages/core/test}/routers/DatasourceRouter-test.js (100%) rename {test => packages/core/test}/routers/PageRouter-test.js (100%) rename {test => packages/core/test}/routers/QuadPatternRouter-test.js (100%) rename {test => packages/core/test}/test-setup.js (100%) rename {test => packages/core/test}/views/View-test.js (100%) rename {test => packages/core/test}/views/ViewCollection-test.js (100%) rename {test => packages/core/test}/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js (100%) create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index b74c8407..0c13fec2 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ config.json config/*.json !config/config-defaults.json !config/config-example*.json + +# Ignore dev environment files +.idea diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 5f939d08..00000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,17 +0,0 @@ -image: node:latest - -before_script: - - npm install - -cache: - key: "$CI_COMMIT_REF_SLUG.$NODE_VERSION" - paths: - - node_modules/ - -test_all: - script: - - npm test - -test_lint: - script: - - npm run lint diff --git a/.travis.yml b/.travis.yml index ad25e0ce..8dedaf3d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,12 @@ language: node_js node_js: - "6" - "8" - - "node" + - "10" + - "12" +install: yarn install --pure-lockfile script: - - npm run lint - - npm test + - yarn run lint + - yarn test env: - CXX=g++-4.8 addons: @@ -15,5 +17,6 @@ addons: packages: - g++-4.8 cache: + yarn: true directories: - node_modules diff --git a/AUTHORS b/AUTHORS index 253f5390..ec4a146d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,2 +1,3 @@ Ruben Verborgh (http://ruben.verborgh.org/) Miel Vander Sande +Ruben Taelman diff --git a/LICENSE.txt b/LICENSE.txt index 3746cfa3..d0fdb948 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright © 2013–2016 Ruben Verborgh, Miel Vander Sande +Copyright © 2013–now Ruben Verborgh, Miel Vander Sande, Ruben Taelman Ghent University – imec, Belgium Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/README.md b/README.md index 433d66f9..7f1ad9fc 100644 --- a/README.md +++ b/README.md @@ -29,178 +29,49 @@ Each Triple Pattern Fragment offers: An example server is available at [data.linkeddatafragments.org](http://data.linkeddatafragments.org/). +TODO: briefly explain configurations -## Install the server - -This server requires [Node.js](http://nodejs.org/) 4.0 or higher -and is tested on OSX and Linux. -To install, execute: -```bash -$ [sudo] npm install -g ldf-server -``` - - -## Use the server - -### Configure the data sources - -First, create a configuration file `config.json` similar to `config/config-example.json`, -in which you detail your data sources. -For example, this configuration uses an [HDT file](http://www.rdfhdt.org/) -and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: -```json -{ - "title": "My Linked Data Fragments server", - "datasources": { - "dbpedia": { - "title": "DBpedia 2014", - "type": "HdtDatasource", - "description": "DBpedia 2014 with an HDT back-end", - "settings": { "file": "data/dbpedia2014.hdt" } - }, - "dbpedia-sparql": { - "title": "DBpedia 3.9 (Virtuoso)", - "type": "SparqlDatasource", - "description": "DBpedia 3.9 with a Virtuoso back-end", - "settings": { "endpoint": "https://dbpedia.org/sparql", "defaultGraph": "http://dbpedia.org" } - } - } -} -``` - -The following sources are supported out of the box: -- HDT files ([`HdtDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/HdtDatasource.js) with `file` setting) -- N-Triples documents ([`NTriplesDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/NTriplesDatasource.js) with `url` setting) -- Turtle documents ([`TurtleDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/TurtleDatasource.js) with `url` setting) -- N-Quads documents ([`NQuadsDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/NQuadsDatasource.js) with `url` setting) -- TriG documents ([`TrigDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/TrigDatasource.js) with `url` setting) -- JSON-LD documents ([`JsonLdDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/JsonLdDatasource.js) with `url` setting) -- SPARQL endpoints ([`SparqlDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/SparqlDatasource.js) with `endpoint` and optionally `defaultGraph` settings) - -Support for new sources is possible by implementing the [`Datasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/Datasource.js) interface. - -### Start the server - -After creating a configuration file, execute -```bash -$ ldf-server config.json 5000 4 -``` -Here, `5000` is the HTTP port on which the server will listen, -and `4` the number of worker processes. - -Now visit `http://localhost:5000/` in your browser. +**If you just want to use this server, have a look at these default configurations**: +* TODO -### Reload running server +This repository should be used by LDF Server module **developers** as it contains multiple LDF Server modules that can be composed. +This repository is managed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) +using [Lerna](https://lernajs.io/). -You can reload the server without any downtime -in order to load a new configuration or version. -
-In order to do this, you need the process ID of the server master process. -
-One possibility to obtain this are the server logs: -```bash -$ bin/ldf-server config.json -Master 28106 running. -Worker 28107 running on http://localhost:3000/. -``` - -If you send the server a `SIGHUP` signal: -```bash -$ kill -s SIGHUP 28106 -``` -it will reload by replacing its workers. - -Note that crashed or killed workers are always replaced automatically. - -### _(Optional)_ Set up a reverse proxy - -A typical Linked Data Fragments server will be exposed -on a public domain or subdomain along with other applications. -Therefore, you need to configure the server to run behind an HTTP reverse proxy. -
-To set this up, configure the server's public URL in your server's `config.json`: -```json -{ - "title": "My Linked Data Fragments server", - "baseURL": "http://data.example.org/", - "datasources": { … } -} -``` -Then configure your reverse proxy to pass requests to your server. -Here's an example for [nginx](http://nginx.org/): -```nginx -server { - server_name data.example.org; - - location / { - proxy_pass http://127.0.0.1:3000$request_uri; - proxy_set_header Host $http_host; - proxy_pass_header Server; - } -} -``` -Change the value `3000` into the port on which your Linked Data Fragments server runs. - -If you would like to proxy the data in a subfolder such as `http://example.org/my/data`, -modify the `baseURL` in your `config.json` to `"http://example.org/my/data"` -and change `location` from `/` to `/my/data` (excluding a trailing slash). - -### _(Optional)_ Running under HTTPS - -HTTPS can be enabled in two ways: natively by the server, or through a proxy (explained above). - -With native HTTPS, the server will establish the SSL layer. Set the following values in your config file to enable this: +## Install the server - { - "protocol": "https", - "ssl": { - "keys" : { - "key": "./private-key-server.key.pem", - "ca": ["./root-ca.crt.pem"], - "cert": "./server-certificate.crt.pem" - } - } - } - - If `protocol`is not specified, it will derive the protocol from the `baseURL`. Hence, HTTPS can also be enabled as such: +TODO: basic installation, and refer to packages for more details - { - "baseURL": "https://data.example.org/", - "ssl": { - "keys" : { - "key": "./private-key-server.key.pem", - "ca": ["./root-ca.crt.pem"], - "cert": "./server-certificate.crt.pem" - } - } - } +## Use the server -If you decide to let a proxy handle HTTPS, use this configuration to run the server as `http`, but construct links as `https` (so clients don't break): +TODO: basic usage, and refer to packages for more details - { - "protocol": "http", - "baseURL": "https://data.example.org/", - } +## Development Setup +If you want to develop new features +or use the (potentially unstable) in-development version, +you can set up a development environment for this server. -### _(Optional)_ Running in a Docker container +LDF Server requires [Node.JS](http://nodejs.org/) 6.0 or higher and the [Yarn](https://yarnpkg.com/en/) package manager. +LDF Server is tested on OSX, Linux and Windows. -If you want to rapidly deploy the server as a microservice, you can build a [Docker](https://www.docker.com/) container as follows: +This project can be setup by cloning and installing it as follows: ```bash -$ docker build -t ldf-server . -``` -After that, you can run your newly created container: -```bash -$ docker run -p 3000:3000 -t -i --rm -v $(pwd)/config.json:/tmp/config.json ldf-server /tmp/config.json +$ git clone https://github.com/LinkedDataFragments/Server.js.git +$ cd comunica +$ yarn install ``` -### _(Optional)_ Host historical version of datasets +**Note: `npm install` is not supported at the moment, as this project makes use of Yarn's [workspaces](https://yarnpkg.com/lang/en/docs/workspaces/) functionality** -You can [enable the Memento protocol](https://github.com/LinkedDataFragments/Server.js/wiki/Configuring-Memento) to offer different versions of an evolving dataset. +This will install the dependencies of all modules, and bootstrap the Lerna monorepo. +After that, all [LDF Server packages](https://github.com/LinkedDataFragments/Server.js/tree/master/packages) are available in the `packages/` folder +and can be used in a development environment. -## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/). +Furthermore, this will add [pre-commit hooks](https://www.npmjs.com/package/pre-commit) +to build, lint and test. +These hooks can temporarily be disabled at your own risk by adding the `-n` flag to the commit command. ## License The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/lerna.json b/lerna.json new file mode 100644 index 00000000..0f0d8b6a --- /dev/null +++ b/lerna.json @@ -0,0 +1,21 @@ +{ + "lerna": "3.4.0", + "command": { + "publish": { + "ignoreChanges": [ + "*.md" + ], + "message": "Bump to release version %s", + "allowBranch": "master", + "npmClient": "npm" + } + }, + "packages": [ + "packages/*" + ], + "useWorkspaces": true, + "version": "2.2.5", + "loglevel": "success", + "registry": "https://registry.npmjs.org/", + "npmClient": "yarn" +} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 80163b87..00000000 --- a/package-lock.json +++ /dev/null @@ -1,2149 +0,0 @@ -{ - "name": "ldf-server", - "version": "2.2.5", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "access-log": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/access-log/-/access-log-0.3.9.tgz", - "integrity": "sha1-AcJpW6fn0y21KI7z8U5k1nGfOtE=", - "optional": true, - "requires": { - "strftime": "~0.6.2" - } - }, - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "asynciterator": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-1.1.1.tgz", - "integrity": "sha512-NLWjVfwc/I1k/aS9eLH/zfxnN6Ci/WHJiJCfwHcyLlPUnYIY2WHDMYycBIpobyi3qCVGYdqTY4NV0LFURbqZ/g==", - "requires": { - "immediate": "^3.2.3" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dev": true, - "requires": { - "assertion-error": "^1.0.1", - "deep-eql": "^0.1.3", - "type-detect": "^1.0.0" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "componentsjs": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/componentsjs/-/componentsjs-3.3.0.tgz", - "integrity": "sha512-0ETmraF8ClssNbGbZqp6kTSCwm8YBK6eFly34pglwiJo007HgVWdeXcsLttXsRtJbiVxA0Ox+A/mvjDfExES4A==", - "requires": { - "global-modules": "^1.0.0", - "jsonld": "^0.4.11", - "lodash": "^4.17.4", - "minimist": "^1.2.0", - "n3": "^0.9.1", - "requireg": "^0.1.7" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "cookiejar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", - "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - } - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "es5-ext": { - "version": "0.10.41", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", - "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-promise": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", - "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=" - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, - "requires": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.5.2", - "debug": "^2.1.1", - "doctrine": "^2.0.0", - "escope": "^3.6.0", - "espree": "^3.4.0", - "esquery": "^1.0.0", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - } - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", - "dev": true, - "requires": { - "samsam": "~1.1" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", - "dev": true - }, - "forwarded-parse": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.0.tgz", - "integrity": "sha512-as9a7Xelt0CvdUy7/qxrY73dZq2vMx49F556fwjjFrUyzq5uHHfeLgD2cCq/6P4ZvusGZzjD6aL2NdgGdS5Cew==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "hdt": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/hdt/-/hdt-2.1.3.tgz", - "integrity": "sha512-DIkMZs9tsgYuLgil8y7hvq1k42yAwGygb5BLUgcahPBsPkMhnYoXo4Pd8ruKk39ApPzGR8KBL943k3EUlcbuaQ==", - "optional": true, - "requires": { - "minimist": "^1.1.0", - "n3": "^0.11.2", - "nan": "^2.10.0" - }, - "dependencies": { - "n3": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/n3/-/n3-0.11.3.tgz", - "integrity": "sha512-Hk5GSXBeAZrYoqi+NeS/U0H47Hx0Lzj7K6nLWCZpC9E04iUwEwBcrlMb/5foAli7QF4newPNQQQGgM6IAxTxGg==", - "optional": true - } - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - } - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonld": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-0.4.12.tgz", - "integrity": "sha1-oC8gXVNBQU3xtthBTxuWenEgc+g=", - "requires": { - "es6-promise": "^2.0.0", - "pkginfo": "~0.4.0", - "request": "^2.61.0", - "xmldom": "0.1.19" - } - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" - }, - "lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", - "dev": true - }, - "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, - "n3": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/n3/-/n3-0.9.1.tgz", - "integrity": "sha1-QwtUfVjcc4FAjEV4TdgFgXGQOTI=" - }, - "nan": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", - "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiate": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/negotiate/-/negotiate-1.0.1.tgz", - "integrity": "sha1-NayLVnL3sF+qEL8CYTQusRIDcP0=" - }, - "nested-error-stacks": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", - "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", - "dev": true - }, - "parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=", - "optional": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkginfo": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", - "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "pre-commit": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz", - "integrity": "sha1-287g7p3nI15X95xW186UZBpp7sY=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "spawn-sync": "^1.0.15", - "which": "1.2.x" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qejs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/qejs/-/qejs-3.0.5.tgz", - "integrity": "sha1-x46rpc7wX0jeM1PJ0HrWkv+otJI=", - "requires": { - "q": "0.8.x" - }, - "dependencies": { - "q": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/q/-/q-0.8.12.tgz", - "integrity": "sha1-kWKpHhGBnEvNp9oVz1/vqtB3iCM=" - } - } - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "~1.37.0" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "requireg": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.1.8.tgz", - "integrity": "sha512-qjbwnviLXg4oZiAFEr1ExbevkUPaEiP1uPGSoFCVgCCcbo4PXv9SmiJpXNYmgTBCZ8fY1Jy+sk7F9/kPNepeDw==", - "requires": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "dependencies": { - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "^1.0.5" - } - } - } - }, - "resolve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", - "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "^1.3.0" - } - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "sinon": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", - "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", - "dev": true, - "requires": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": ">=0.10.3 <1" - } - }, - "sinon-chai": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", - "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "dev": true, - "requires": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "strftime": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.6.2.tgz", - "integrity": "sha1-2kwSBzzr7jzWD0ghlAzCexnTSKE=", - "optional": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "superagent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-2.3.0.tgz", - "integrity": "sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU=", - "dev": true, - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.0.6", - "debug": "^2.2.0", - "extend": "^3.0.0", - "form-data": "1.0.0-rc4", - "formidable": "^1.0.17", - "methods": "^1.1.1", - "mime": "^1.3.4", - "qs": "^6.1.0", - "readable-stream": "^2.0.5" - }, - "dependencies": { - "form-data": { - "version": "1.0.0-rc4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", - "integrity": "sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14=", - "dev": true, - "requires": { - "async": "^1.5.2", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.10" - } - } - } - }, - "supertest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-2.0.1.tgz", - "integrity": "sha1-oFgIHXiPFRXUcA11Aogea3WeRM0=", - "dev": true, - "requires": { - "methods": "1.x", - "superagent": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", - "slice-ansi": "0.0.4", - "string-width": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "uritemplate": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/uritemplate/-/uritemplate-0.3.4.tgz", - "integrity": "sha1-BdCoU/+8iw9Jqj1NKtd3sNHuBww=" - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "requires": { - "isexe": "^2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "xmldom": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", - "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } -} diff --git a/package.json b/package.json index 3e2e919c..facdc90c 100644 --- a/package.json +++ b/package.json @@ -1,58 +1,16 @@ { - "name": "ldf-server", - "description": "Linked Data Fragments Server", - "version": "2.2.5", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/": "components/", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/config/": "config/" - }, - "license": "MIT", + "private": true, + "repository": "https://github.com/LinkedDataFragments/Server.js/", + "workspaces": [ + "packages/*" + ], "engines": { "node": ">=6.0" }, - "bin": { - "ldf-server": "./bin/ldf-server" - }, - "main": "module.js", - "repository": { - "type": "git", - "url": "git@github.com:LinkedDataFragments/Server.js.git" - }, - "bugs": { - "url": "https://github.com/LinkedDataFragments/Server.js/issues" - }, - "scripts": { - "test": "mocha", - "lint": "eslint bin/* lib test" - }, - "dependencies": { - "asynciterator": "^1.1.0", - "forwarded-parse": "^2.0.0", - "jsonld": "^0.4.11", - "lodash": "^2.4.2", - "lru-cache": "^4.0.1", - "componentsjs": "3.3.0", - "mime": "^1.3.4", - "n3": "^0.9.0", - "negotiate": "^1.0.1", - "q": "^1.4.1", - "qejs": "^3.0.5", - "request": "^2.88.0", - "uritemplate": "^0.3.4" - }, - "optionalDependencies": { - "access-log": "^0.3.9", - "hdt": "^2.1.3", - "parse-cache-control": "^1.0.1" - }, "devDependencies": { "chai": "^3.5.0", "eslint": "^3.4.0", + "lerna": "^3.4.0", "mocha": "^5.2.0", "pre-commit": "^1.1.3", "sinon": "^1.17.4", @@ -62,5 +20,16 @@ "pre-commit": [ "lint", "test" - ] + ], + "scripts": { + "test-changed": "lerna run test --since HEAD", + "lint-changed": "lerna run lint --since HEAD", + "test": "lerna run test", + "test-ci": "lerna run test", + "lint": "lerna run lint", + "clean": "rm -rf ./node_modules && rm -rf ./packages/*/node_modules", + "publish": "lerna publish", + "publish-bare": "lerna exec -- npm publish --silent", + "postinstall": "lerna run prepare" + } } diff --git a/Dockerfile b/packages/core/Dockerfile similarity index 100% rename from Dockerfile rename to packages/core/Dockerfile diff --git a/packages/core/README.md b/packages/core/README.md new file mode 100644 index 00000000..433d66f9 --- /dev/null +++ b/packages/core/README.md @@ -0,0 +1,209 @@ +# Linked Data Fragments Server + + +[![Build Status](https://travis-ci.org/LinkedDataFragments/Server.js.svg?branch=master)](https://travis-ci.org/LinkedDataFragments/Server.js) +[![npm version](https://badge.fury.io/js/ldf-server.svg)](https://www.npmjs.com/package/ldf-server) +[![Docker Automated Build](https://img.shields.io/docker/automated/linkeddatafragments/server.js.svg)](https://hub.docker.com/r/linkeddatafragments/server.js/) +[![DOI](https://zenodo.org/badge/16891600.svg)](https://zenodo.org/badge/latestdoi/16891600) + +On today's Web, Linked Data is published in different ways, +which include [data dumps](http://downloads.dbpedia.org/3.9/en/), +[subject pages](http://dbpedia.org/page/Linked_data), +and [results of SPARQL queries](http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=CONSTRUCT+%7B+%3Fp+a+dbpedia-owl%3AArtist+%7D%0D%0AWHERE+%7B+%3Fp+a+dbpedia-owl%3AArtist+%7D&format=text%2Fturtle). +We call each such part a [**Linked Data Fragment**](http://linkeddatafragments.org/). + +The issue with the current Linked Data Fragments +is that they are either so powerful that their servers suffer from low availability rates +([as is the case with SPARQL](http://sw.deri.org/~aidanh/docs/epmonitorISWC.pdf)), +or either don't allow efficient querying. + +Instead, this server offers **[Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)**. +Each Triple Pattern Fragment offers: + +- **data** that corresponds to a _triple pattern_ + _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=rdf%3Atype&object=dbpedia-owl%3ARestaurant))_. +- **metadata** that consists of the (approximate) total triple count + _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=rdf%3Atype&object=))_. +- **controls** that lead to all other fragments of the same dataset + _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=&object=%22John%22%40en))_. + +An example server is available at [data.linkeddatafragments.org](http://data.linkeddatafragments.org/). + + +## Install the server + +This server requires [Node.js](http://nodejs.org/) 4.0 or higher +and is tested on OSX and Linux. +To install, execute: +```bash +$ [sudo] npm install -g ldf-server +``` + + +## Use the server + +### Configure the data sources + +First, create a configuration file `config.json` similar to `config/config-example.json`, +in which you detail your data sources. +For example, this configuration uses an [HDT file](http://www.rdfhdt.org/) +and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: +```json +{ + "title": "My Linked Data Fragments server", + "datasources": { + "dbpedia": { + "title": "DBpedia 2014", + "type": "HdtDatasource", + "description": "DBpedia 2014 with an HDT back-end", + "settings": { "file": "data/dbpedia2014.hdt" } + }, + "dbpedia-sparql": { + "title": "DBpedia 3.9 (Virtuoso)", + "type": "SparqlDatasource", + "description": "DBpedia 3.9 with a Virtuoso back-end", + "settings": { "endpoint": "https://dbpedia.org/sparql", "defaultGraph": "http://dbpedia.org" } + } + } +} +``` + +The following sources are supported out of the box: +- HDT files ([`HdtDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/HdtDatasource.js) with `file` setting) +- N-Triples documents ([`NTriplesDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/NTriplesDatasource.js) with `url` setting) +- Turtle documents ([`TurtleDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/TurtleDatasource.js) with `url` setting) +- N-Quads documents ([`NQuadsDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/NQuadsDatasource.js) with `url` setting) +- TriG documents ([`TrigDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/TrigDatasource.js) with `url` setting) +- JSON-LD documents ([`JsonLdDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/JsonLdDatasource.js) with `url` setting) +- SPARQL endpoints ([`SparqlDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/SparqlDatasource.js) with `endpoint` and optionally `defaultGraph` settings) + +Support for new sources is possible by implementing the [`Datasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/Datasource.js) interface. + +### Start the server + +After creating a configuration file, execute +```bash +$ ldf-server config.json 5000 4 +``` +Here, `5000` is the HTTP port on which the server will listen, +and `4` the number of worker processes. + +Now visit `http://localhost:5000/` in your browser. + +### Reload running server + +You can reload the server without any downtime +in order to load a new configuration or version. +
+In order to do this, you need the process ID of the server master process. +
+One possibility to obtain this are the server logs: +```bash +$ bin/ldf-server config.json +Master 28106 running. +Worker 28107 running on http://localhost:3000/. +``` + +If you send the server a `SIGHUP` signal: +```bash +$ kill -s SIGHUP 28106 +``` +it will reload by replacing its workers. + +Note that crashed or killed workers are always replaced automatically. + +### _(Optional)_ Set up a reverse proxy + +A typical Linked Data Fragments server will be exposed +on a public domain or subdomain along with other applications. +Therefore, you need to configure the server to run behind an HTTP reverse proxy. +
+To set this up, configure the server's public URL in your server's `config.json`: +```json +{ + "title": "My Linked Data Fragments server", + "baseURL": "http://data.example.org/", + "datasources": { … } +} +``` +Then configure your reverse proxy to pass requests to your server. +Here's an example for [nginx](http://nginx.org/): +```nginx +server { + server_name data.example.org; + + location / { + proxy_pass http://127.0.0.1:3000$request_uri; + proxy_set_header Host $http_host; + proxy_pass_header Server; + } +} +``` +Change the value `3000` into the port on which your Linked Data Fragments server runs. + +If you would like to proxy the data in a subfolder such as `http://example.org/my/data`, +modify the `baseURL` in your `config.json` to `"http://example.org/my/data"` +and change `location` from `/` to `/my/data` (excluding a trailing slash). + +### _(Optional)_ Running under HTTPS + +HTTPS can be enabled in two ways: natively by the server, or through a proxy (explained above). + +With native HTTPS, the server will establish the SSL layer. Set the following values in your config file to enable this: + + { + "protocol": "https", + "ssl": { + "keys" : { + "key": "./private-key-server.key.pem", + "ca": ["./root-ca.crt.pem"], + "cert": "./server-certificate.crt.pem" + } + } + } + + If `protocol`is not specified, it will derive the protocol from the `baseURL`. Hence, HTTPS can also be enabled as such: + + { + "baseURL": "https://data.example.org/", + "ssl": { + "keys" : { + "key": "./private-key-server.key.pem", + "ca": ["./root-ca.crt.pem"], + "cert": "./server-certificate.crt.pem" + } + } + } + +If you decide to let a proxy handle HTTPS, use this configuration to run the server as `http`, but construct links as `https` (so clients don't break): + + { + "protocol": "http", + "baseURL": "https://data.example.org/", + } + + +### _(Optional)_ Running in a Docker container + +If you want to rapidly deploy the server as a microservice, you can build a [Docker](https://www.docker.com/) container as follows: + +```bash +$ docker build -t ldf-server . +``` +After that, you can run your newly created container: +```bash +$ docker run -p 3000:3000 -t -i --rm -v $(pwd)/config.json:/tmp/config.json ldf-server /tmp/config.json +``` + +### _(Optional)_ Host historical version of datasets + +You can [enable the Memento protocol](https://github.com/LinkedDataFragments/Server.js/wiki/Configuring-Memento) to offer different versions of an evolving dataset. + +## License +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/). + +## License +The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/assets/favicon.ico b/packages/core/assets/favicon.ico similarity index 100% rename from assets/favicon.ico rename to packages/core/assets/favicon.ico diff --git a/assets/images/logo.svg b/packages/core/assets/images/logo.svg similarity index 100% rename from assets/images/logo.svg rename to packages/core/assets/images/logo.svg diff --git a/assets/styles/ldf-server.css b/packages/core/assets/styles/ldf-server.css similarity index 100% rename from assets/styles/ldf-server.css rename to packages/core/assets/styles/ldf-server.css diff --git a/bin/.eslintrc b/packages/core/bin/.eslintrc similarity index 100% rename from bin/.eslintrc rename to packages/core/bin/.eslintrc diff --git a/bin/generate-summary b/packages/core/bin/generate-summary similarity index 100% rename from bin/generate-summary rename to packages/core/bin/generate-summary diff --git a/bin/ldf-server b/packages/core/bin/ldf-server similarity index 100% rename from bin/ldf-server rename to packages/core/bin/ldf-server diff --git a/components/Controller.jsonld b/packages/core/components/Controller.jsonld similarity index 100% rename from components/Controller.jsonld rename to packages/core/components/Controller.jsonld diff --git a/components/Controller/Assets.jsonld b/packages/core/components/Controller/Assets.jsonld similarity index 100% rename from components/Controller/Assets.jsonld rename to packages/core/components/Controller/Assets.jsonld diff --git a/components/Controller/Dereference.jsonld b/packages/core/components/Controller/Dereference.jsonld similarity index 100% rename from components/Controller/Dereference.jsonld rename to packages/core/components/Controller/Dereference.jsonld diff --git a/components/Controller/NotFound.jsonld b/packages/core/components/Controller/NotFound.jsonld similarity index 100% rename from components/Controller/NotFound.jsonld rename to packages/core/components/Controller/NotFound.jsonld diff --git a/components/Controller/QuadPatternFragments.jsonld b/packages/core/components/Controller/QuadPatternFragments.jsonld similarity index 100% rename from components/Controller/QuadPatternFragments.jsonld rename to packages/core/components/Controller/QuadPatternFragments.jsonld diff --git a/components/Controller/Summary.jsonld b/packages/core/components/Controller/Summary.jsonld similarity index 100% rename from components/Controller/Summary.jsonld rename to packages/core/components/Controller/Summary.jsonld diff --git a/components/Controller/Timegate.jsonld b/packages/core/components/Controller/Timegate.jsonld similarity index 100% rename from components/Controller/Timegate.jsonld rename to packages/core/components/Controller/Timegate.jsonld diff --git a/components/ControllerExtension.jsonld b/packages/core/components/ControllerExtension.jsonld similarity index 100% rename from components/ControllerExtension.jsonld rename to packages/core/components/ControllerExtension.jsonld diff --git a/components/ControllerExtension/Memento.jsonld b/packages/core/components/ControllerExtension/Memento.jsonld similarity index 100% rename from components/ControllerExtension/Memento.jsonld rename to packages/core/components/ControllerExtension/Memento.jsonld diff --git a/components/ControllerExtension/WebId.jsonld b/packages/core/components/ControllerExtension/WebId.jsonld similarity index 100% rename from components/ControllerExtension/WebId.jsonld rename to packages/core/components/ControllerExtension/WebId.jsonld diff --git a/components/Datasource.jsonld b/packages/core/components/Datasource.jsonld similarity index 100% rename from components/Datasource.jsonld rename to packages/core/components/Datasource.jsonld diff --git a/components/Datasource/Composite.jsonld b/packages/core/components/Datasource/Composite.jsonld similarity index 100% rename from components/Datasource/Composite.jsonld rename to packages/core/components/Datasource/Composite.jsonld diff --git a/components/Datasource/Empty.jsonld b/packages/core/components/Datasource/Empty.jsonld similarity index 100% rename from components/Datasource/Empty.jsonld rename to packages/core/components/Datasource/Empty.jsonld diff --git a/components/Datasource/Hdt.jsonld b/packages/core/components/Datasource/Hdt.jsonld similarity index 100% rename from components/Datasource/Hdt.jsonld rename to packages/core/components/Datasource/Hdt.jsonld diff --git a/components/Datasource/Index.jsonld b/packages/core/components/Datasource/Index.jsonld similarity index 100% rename from components/Datasource/Index.jsonld rename to packages/core/components/Datasource/Index.jsonld diff --git a/components/Datasource/JsonLd.jsonld b/packages/core/components/Datasource/JsonLd.jsonld similarity index 100% rename from components/Datasource/JsonLd.jsonld rename to packages/core/components/Datasource/JsonLd.jsonld diff --git a/components/Datasource/Memory.jsonld b/packages/core/components/Datasource/Memory.jsonld similarity index 100% rename from components/Datasource/Memory.jsonld rename to packages/core/components/Datasource/Memory.jsonld diff --git a/components/Datasource/N3.jsonld b/packages/core/components/Datasource/N3.jsonld similarity index 100% rename from components/Datasource/N3.jsonld rename to packages/core/components/Datasource/N3.jsonld diff --git a/components/Datasource/NQuads.jsonld b/packages/core/components/Datasource/NQuads.jsonld similarity index 100% rename from components/Datasource/NQuads.jsonld rename to packages/core/components/Datasource/NQuads.jsonld diff --git a/components/Datasource/NTriples.jsonld b/packages/core/components/Datasource/NTriples.jsonld similarity index 100% rename from components/Datasource/NTriples.jsonld rename to packages/core/components/Datasource/NTriples.jsonld diff --git a/components/Datasource/Sparql.jsonld b/packages/core/components/Datasource/Sparql.jsonld similarity index 100% rename from components/Datasource/Sparql.jsonld rename to packages/core/components/Datasource/Sparql.jsonld diff --git a/components/Datasource/Trig.jsonld b/packages/core/components/Datasource/Trig.jsonld similarity index 100% rename from components/Datasource/Trig.jsonld rename to packages/core/components/Datasource/Trig.jsonld diff --git a/components/Datasource/Turtle.jsonld b/packages/core/components/Datasource/Turtle.jsonld similarity index 100% rename from components/Datasource/Turtle.jsonld rename to packages/core/components/Datasource/Turtle.jsonld diff --git a/components/Router.jsonld b/packages/core/components/Router.jsonld similarity index 100% rename from components/Router.jsonld rename to packages/core/components/Router.jsonld diff --git a/components/Router/Datasource.jsonld b/packages/core/components/Router/Datasource.jsonld similarity index 100% rename from components/Router/Datasource.jsonld rename to packages/core/components/Router/Datasource.jsonld diff --git a/components/Router/Page.jsonld b/packages/core/components/Router/Page.jsonld similarity index 100% rename from components/Router/Page.jsonld rename to packages/core/components/Router/Page.jsonld diff --git a/components/Router/QuadPattern.jsonld b/packages/core/components/Router/QuadPattern.jsonld similarity index 100% rename from components/Router/QuadPattern.jsonld rename to packages/core/components/Router/QuadPattern.jsonld diff --git a/components/Server.jsonld b/packages/core/components/Server.jsonld similarity index 100% rename from components/Server.jsonld rename to packages/core/components/Server.jsonld diff --git a/components/UrlData.jsonld b/packages/core/components/UrlData.jsonld similarity index 100% rename from components/UrlData.jsonld rename to packages/core/components/UrlData.jsonld diff --git a/components/View.jsonld b/packages/core/components/View.jsonld similarity index 100% rename from components/View.jsonld rename to packages/core/components/View.jsonld diff --git a/components/View/Collection.jsonld b/packages/core/components/View/Collection.jsonld similarity index 100% rename from components/View/Collection.jsonld rename to packages/core/components/View/Collection.jsonld diff --git a/components/View/Html.jsonld b/packages/core/components/View/Html.jsonld similarity index 100% rename from components/View/Html.jsonld rename to packages/core/components/View/Html.jsonld diff --git a/components/View/Html/Error.jsonld b/packages/core/components/View/Html/Error.jsonld similarity index 100% rename from components/View/Html/Error.jsonld rename to packages/core/components/View/Html/Error.jsonld diff --git a/components/View/Html/Forbidden.jsonld b/packages/core/components/View/Html/Forbidden.jsonld similarity index 100% rename from components/View/Html/Forbidden.jsonld rename to packages/core/components/View/Html/Forbidden.jsonld diff --git a/components/View/Html/NotFound.jsonld b/packages/core/components/View/Html/NotFound.jsonld similarity index 100% rename from components/View/Html/NotFound.jsonld rename to packages/core/components/View/Html/NotFound.jsonld diff --git a/components/View/Html/Qpf.jsonld b/packages/core/components/View/Html/Qpf.jsonld similarity index 100% rename from components/View/Html/Qpf.jsonld rename to packages/core/components/View/Html/Qpf.jsonld diff --git a/components/View/Html/Qpf/Memento.jsonld b/packages/core/components/View/Html/Qpf/Memento.jsonld similarity index 100% rename from components/View/Html/Qpf/Memento.jsonld rename to packages/core/components/View/Html/Qpf/Memento.jsonld diff --git a/components/View/Html/Qpf/Summary.jsonld b/packages/core/components/View/Html/Qpf/Summary.jsonld similarity index 100% rename from components/View/Html/Qpf/Summary.jsonld rename to packages/core/components/View/Html/Qpf/Summary.jsonld diff --git a/components/View/Rdf.jsonld b/packages/core/components/View/Rdf.jsonld similarity index 100% rename from components/View/Rdf.jsonld rename to packages/core/components/View/Rdf.jsonld diff --git a/components/View/Rdf/Error.jsonld b/packages/core/components/View/Rdf/Error.jsonld similarity index 100% rename from components/View/Rdf/Error.jsonld rename to packages/core/components/View/Rdf/Error.jsonld diff --git a/components/View/Rdf/NotFound.jsonld b/packages/core/components/View/Rdf/NotFound.jsonld similarity index 100% rename from components/View/Rdf/NotFound.jsonld rename to packages/core/components/View/Rdf/NotFound.jsonld diff --git a/components/View/Rdf/Qpf.jsonld b/packages/core/components/View/Rdf/Qpf.jsonld similarity index 100% rename from components/View/Rdf/Qpf.jsonld rename to packages/core/components/View/Rdf/Qpf.jsonld diff --git a/components/View/Rdf/Qpf/Summary.jsonld b/packages/core/components/View/Rdf/Qpf/Summary.jsonld similarity index 100% rename from components/View/Rdf/Qpf/Summary.jsonld rename to packages/core/components/View/Rdf/Qpf/Summary.jsonld diff --git a/components/View/Rdf/Summary.jsonld b/packages/core/components/View/Rdf/Summary.jsonld similarity index 100% rename from components/View/Rdf/Summary.jsonld rename to packages/core/components/View/Rdf/Summary.jsonld diff --git a/components/components.jsonld b/packages/core/components/components.jsonld similarity index 100% rename from components/components.jsonld rename to packages/core/components/components.jsonld diff --git a/components/context.jsonld b/packages/core/components/context.jsonld similarity index 100% rename from components/context.jsonld rename to packages/core/components/context.jsonld diff --git a/config/certs/localhost-ca.crt b/packages/core/config/certs/localhost-ca.crt similarity index 100% rename from config/certs/localhost-ca.crt rename to packages/core/config/certs/localhost-ca.crt diff --git a/config/certs/localhost-ca.key b/packages/core/config/certs/localhost-ca.key similarity index 100% rename from config/certs/localhost-ca.key rename to packages/core/config/certs/localhost-ca.key diff --git a/config/certs/localhost-client.crt b/packages/core/config/certs/localhost-client.crt similarity index 100% rename from config/certs/localhost-client.crt rename to packages/core/config/certs/localhost-client.crt diff --git a/config/certs/localhost-client.key b/packages/core/config/certs/localhost-client.key similarity index 100% rename from config/certs/localhost-client.key rename to packages/core/config/certs/localhost-client.key diff --git a/config/certs/localhost-client.p12 b/packages/core/config/certs/localhost-client.p12 similarity index 100% rename from config/certs/localhost-client.p12 rename to packages/core/config/certs/localhost-client.p12 diff --git a/config/certs/localhost-server.crt b/packages/core/config/certs/localhost-server.crt similarity index 100% rename from config/certs/localhost-server.crt rename to packages/core/config/certs/localhost-server.crt diff --git a/config/certs/localhost-server.key b/packages/core/config/certs/localhost-server.key similarity index 100% rename from config/certs/localhost-server.key rename to packages/core/config/certs/localhost-server.key diff --git a/config/certs/make-client-certificates.sh b/packages/core/config/certs/make-client-certificates.sh similarity index 100% rename from config/certs/make-client-certificates.sh rename to packages/core/config/certs/make-client-certificates.sh diff --git a/config/certs/make-server-certificates.sh b/packages/core/config/certs/make-server-certificates.sh similarity index 100% rename from config/certs/make-server-certificates.sh rename to packages/core/config/certs/make-server-certificates.sh diff --git a/config/certs/webid.cnf b/packages/core/config/certs/webid.cnf similarity index 100% rename from config/certs/webid.cnf rename to packages/core/config/certs/webid.cnf diff --git a/config/certs/webid.ttl b/packages/core/config/certs/webid.ttl similarity index 100% rename from config/certs/webid.ttl rename to packages/core/config/certs/webid.ttl diff --git a/config/config-defaults.json b/packages/core/config/config-defaults.json similarity index 100% rename from config/config-defaults.json rename to packages/core/config/config-defaults.json diff --git a/config/config-example-advanced.json b/packages/core/config/config-example-advanced.json similarity index 100% rename from config/config-example-advanced.json rename to packages/core/config/config-example-advanced.json diff --git a/config/config-example-composite.json b/packages/core/config/config-example-composite.json similarity index 100% rename from config/config-example-composite.json rename to packages/core/config/config-example-composite.json diff --git a/config/config-example-memento.json b/packages/core/config/config-example-memento.json similarity index 100% rename from config/config-example-memento.json rename to packages/core/config/config-example-memento.json diff --git a/config/config-example.json b/packages/core/config/config-example.json similarity index 100% rename from config/config-example.json rename to packages/core/config/config-example.json diff --git a/config/sets/controllers.json b/packages/core/config/sets/controllers.json similarity index 100% rename from config/sets/controllers.json rename to packages/core/config/sets/controllers.json diff --git a/config/sets/datasources.json b/packages/core/config/sets/datasources.json similarity index 100% rename from config/sets/datasources.json rename to packages/core/config/sets/datasources.json diff --git a/config/sets/prefixes.json b/packages/core/config/sets/prefixes.json similarity index 100% rename from config/sets/prefixes.json rename to packages/core/config/sets/prefixes.json diff --git a/config/sets/routers.json b/packages/core/config/sets/routers.json similarity index 100% rename from config/sets/routers.json rename to packages/core/config/sets/routers.json diff --git a/config/sets/views.json b/packages/core/config/sets/views.json similarity index 100% rename from config/sets/views.json rename to packages/core/config/sets/views.json diff --git a/lib/LinkedDataFragmentsServer.js b/packages/core/lib/LinkedDataFragmentsServer.js similarity index 100% rename from lib/LinkedDataFragmentsServer.js rename to packages/core/lib/LinkedDataFragmentsServer.js diff --git a/lib/LinkedDataFragmentsServerWorker.js b/packages/core/lib/LinkedDataFragmentsServerWorker.js similarity index 100% rename from lib/LinkedDataFragmentsServerWorker.js rename to packages/core/lib/LinkedDataFragmentsServerWorker.js diff --git a/lib/UrlData.js b/packages/core/lib/UrlData.js similarity index 100% rename from lib/UrlData.js rename to packages/core/lib/UrlData.js diff --git a/lib/Util.js b/packages/core/lib/Util.js similarity index 100% rename from lib/Util.js rename to packages/core/lib/Util.js diff --git a/lib/controllers/AssetsController.js b/packages/core/lib/controllers/AssetsController.js similarity index 100% rename from lib/controllers/AssetsController.js rename to packages/core/lib/controllers/AssetsController.js diff --git a/lib/controllers/Controller.js b/packages/core/lib/controllers/Controller.js similarity index 100% rename from lib/controllers/Controller.js rename to packages/core/lib/controllers/Controller.js diff --git a/lib/controllers/DereferenceController.js b/packages/core/lib/controllers/DereferenceController.js similarity index 100% rename from lib/controllers/DereferenceController.js rename to packages/core/lib/controllers/DereferenceController.js diff --git a/lib/controllers/ErrorController.js b/packages/core/lib/controllers/ErrorController.js similarity index 100% rename from lib/controllers/ErrorController.js rename to packages/core/lib/controllers/ErrorController.js diff --git a/lib/controllers/MementoControllerExtension.js b/packages/core/lib/controllers/MementoControllerExtension.js similarity index 100% rename from lib/controllers/MementoControllerExtension.js rename to packages/core/lib/controllers/MementoControllerExtension.js diff --git a/lib/controllers/NotFoundController.js b/packages/core/lib/controllers/NotFoundController.js similarity index 100% rename from lib/controllers/NotFoundController.js rename to packages/core/lib/controllers/NotFoundController.js diff --git a/lib/controllers/QuadPatternFragmentsController.js b/packages/core/lib/controllers/QuadPatternFragmentsController.js similarity index 100% rename from lib/controllers/QuadPatternFragmentsController.js rename to packages/core/lib/controllers/QuadPatternFragmentsController.js diff --git a/lib/controllers/SummaryController.js b/packages/core/lib/controllers/SummaryController.js similarity index 100% rename from lib/controllers/SummaryController.js rename to packages/core/lib/controllers/SummaryController.js diff --git a/lib/controllers/TimegateController.js b/packages/core/lib/controllers/TimegateController.js similarity index 100% rename from lib/controllers/TimegateController.js rename to packages/core/lib/controllers/TimegateController.js diff --git a/lib/controllers/WebIDControllerExtension.js b/packages/core/lib/controllers/WebIDControllerExtension.js similarity index 100% rename from lib/controllers/WebIDControllerExtension.js rename to packages/core/lib/controllers/WebIDControllerExtension.js diff --git a/lib/datasources/CompositeDatasource.js b/packages/core/lib/datasources/CompositeDatasource.js similarity index 100% rename from lib/datasources/CompositeDatasource.js rename to packages/core/lib/datasources/CompositeDatasource.js diff --git a/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js similarity index 100% rename from lib/datasources/Datasource.js rename to packages/core/lib/datasources/Datasource.js diff --git a/lib/datasources/EmptyDatasource.js b/packages/core/lib/datasources/EmptyDatasource.js similarity index 100% rename from lib/datasources/EmptyDatasource.js rename to packages/core/lib/datasources/EmptyDatasource.js diff --git a/lib/datasources/ExternalHdtDatasource.js b/packages/core/lib/datasources/ExternalHdtDatasource.js similarity index 100% rename from lib/datasources/ExternalHdtDatasource.js rename to packages/core/lib/datasources/ExternalHdtDatasource.js diff --git a/lib/datasources/HdtDatasource.js b/packages/core/lib/datasources/HdtDatasource.js similarity index 100% rename from lib/datasources/HdtDatasource.js rename to packages/core/lib/datasources/HdtDatasource.js diff --git a/lib/datasources/IndexDatasource.js b/packages/core/lib/datasources/IndexDatasource.js similarity index 100% rename from lib/datasources/IndexDatasource.js rename to packages/core/lib/datasources/IndexDatasource.js diff --git a/lib/datasources/JsonLdDatasource.js b/packages/core/lib/datasources/JsonLdDatasource.js similarity index 100% rename from lib/datasources/JsonLdDatasource.js rename to packages/core/lib/datasources/JsonLdDatasource.js diff --git a/lib/datasources/MemoryDatasource.js b/packages/core/lib/datasources/MemoryDatasource.js similarity index 100% rename from lib/datasources/MemoryDatasource.js rename to packages/core/lib/datasources/MemoryDatasource.js diff --git a/lib/datasources/N3Datasource.js b/packages/core/lib/datasources/N3Datasource.js similarity index 100% rename from lib/datasources/N3Datasource.js rename to packages/core/lib/datasources/N3Datasource.js diff --git a/lib/datasources/NQuadsDatasource.js b/packages/core/lib/datasources/NQuadsDatasource.js similarity index 100% rename from lib/datasources/NQuadsDatasource.js rename to packages/core/lib/datasources/NQuadsDatasource.js diff --git a/lib/datasources/NTriplesDatasource.js b/packages/core/lib/datasources/NTriplesDatasource.js similarity index 100% rename from lib/datasources/NTriplesDatasource.js rename to packages/core/lib/datasources/NTriplesDatasource.js diff --git a/lib/datasources/SparqlDatasource.js b/packages/core/lib/datasources/SparqlDatasource.js similarity index 100% rename from lib/datasources/SparqlDatasource.js rename to packages/core/lib/datasources/SparqlDatasource.js diff --git a/lib/datasources/TrigDatasource.js b/packages/core/lib/datasources/TrigDatasource.js similarity index 100% rename from lib/datasources/TrigDatasource.js rename to packages/core/lib/datasources/TrigDatasource.js diff --git a/lib/datasources/TurtleDatasource.js b/packages/core/lib/datasources/TurtleDatasource.js similarity index 100% rename from lib/datasources/TurtleDatasource.js rename to packages/core/lib/datasources/TurtleDatasource.js diff --git a/lib/routers/DatasourceRouter.js b/packages/core/lib/routers/DatasourceRouter.js similarity index 100% rename from lib/routers/DatasourceRouter.js rename to packages/core/lib/routers/DatasourceRouter.js diff --git a/lib/routers/PageRouter.js b/packages/core/lib/routers/PageRouter.js similarity index 100% rename from lib/routers/PageRouter.js rename to packages/core/lib/routers/PageRouter.js diff --git a/lib/routers/QuadPatternRouter.js b/packages/core/lib/routers/QuadPatternRouter.js similarity index 100% rename from lib/routers/QuadPatternRouter.js rename to packages/core/lib/routers/QuadPatternRouter.js diff --git a/lib/views/HtmlView.js b/packages/core/lib/views/HtmlView.js similarity index 100% rename from lib/views/HtmlView.js rename to packages/core/lib/views/HtmlView.js diff --git a/lib/views/RdfView.js b/packages/core/lib/views/RdfView.js similarity index 100% rename from lib/views/RdfView.js rename to packages/core/lib/views/RdfView.js diff --git a/lib/views/View.js b/packages/core/lib/views/View.js similarity index 100% rename from lib/views/View.js rename to packages/core/lib/views/View.js diff --git a/lib/views/ViewCollection.js b/packages/core/lib/views/ViewCollection.js similarity index 100% rename from lib/views/ViewCollection.js rename to packages/core/lib/views/ViewCollection.js diff --git a/lib/views/base.html b/packages/core/lib/views/base.html similarity index 100% rename from lib/views/base.html rename to packages/core/lib/views/base.html diff --git a/lib/views/error/ErrorHtmlView.js b/packages/core/lib/views/error/ErrorHtmlView.js similarity index 100% rename from lib/views/error/ErrorHtmlView.js rename to packages/core/lib/views/error/ErrorHtmlView.js diff --git a/lib/views/error/ErrorRdfView.js b/packages/core/lib/views/error/ErrorRdfView.js similarity index 100% rename from lib/views/error/ErrorRdfView.js rename to packages/core/lib/views/error/ErrorRdfView.js diff --git a/lib/views/error/error.html b/packages/core/lib/views/error/error.html similarity index 100% rename from lib/views/error/error.html rename to packages/core/lib/views/error/error.html diff --git a/lib/views/forbidden/ForbiddenHtmlView.js b/packages/core/lib/views/forbidden/ForbiddenHtmlView.js similarity index 100% rename from lib/views/forbidden/ForbiddenHtmlView.js rename to packages/core/lib/views/forbidden/ForbiddenHtmlView.js diff --git a/lib/views/forbidden/forbidden.html b/packages/core/lib/views/forbidden/forbidden.html similarity index 100% rename from lib/views/forbidden/forbidden.html rename to packages/core/lib/views/forbidden/forbidden.html diff --git a/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js b/packages/core/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js similarity index 100% rename from lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js rename to packages/core/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js diff --git a/lib/views/memento/memento-details.html b/packages/core/lib/views/memento/memento-details.html similarity index 100% rename from lib/views/memento/memento-details.html rename to packages/core/lib/views/memento/memento-details.html diff --git a/lib/views/notfound/NotFoundHtmlView.js b/packages/core/lib/views/notfound/NotFoundHtmlView.js similarity index 100% rename from lib/views/notfound/NotFoundHtmlView.js rename to packages/core/lib/views/notfound/NotFoundHtmlView.js diff --git a/lib/views/notfound/NotFoundRdfView.js b/packages/core/lib/views/notfound/NotFoundRdfView.js similarity index 100% rename from lib/views/notfound/NotFoundRdfView.js rename to packages/core/lib/views/notfound/NotFoundRdfView.js diff --git a/lib/views/notfound/notfound.html b/packages/core/lib/views/notfound/notfound.html similarity index 100% rename from lib/views/notfound/notfound.html rename to packages/core/lib/views/notfound/notfound.html diff --git a/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js b/packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js similarity index 100% rename from lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js rename to packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js diff --git a/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js similarity index 100% rename from lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js rename to packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js diff --git a/lib/views/quadpatternfragments/datasource.html b/packages/core/lib/views/quadpatternfragments/datasource.html similarity index 100% rename from lib/views/quadpatternfragments/datasource.html rename to packages/core/lib/views/quadpatternfragments/datasource.html diff --git a/lib/views/quadpatternfragments/fragment.html b/packages/core/lib/views/quadpatternfragments/fragment.html similarity index 100% rename from lib/views/quadpatternfragments/fragment.html rename to packages/core/lib/views/quadpatternfragments/fragment.html diff --git a/lib/views/quadpatternfragments/index.html b/packages/core/lib/views/quadpatternfragments/index.html similarity index 100% rename from lib/views/quadpatternfragments/index.html rename to packages/core/lib/views/quadpatternfragments/index.html diff --git a/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js b/packages/core/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js similarity index 100% rename from lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js rename to packages/core/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js diff --git a/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/packages/core/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js similarity index 100% rename from lib/views/summary/QuadPatternFragmentsRdfView-Summary.js rename to packages/core/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js diff --git a/lib/views/summary/SummaryRdfView.js b/packages/core/lib/views/summary/SummaryRdfView.js similarity index 100% rename from lib/views/summary/SummaryRdfView.js rename to packages/core/lib/views/summary/SummaryRdfView.js diff --git a/lib/views/summary/summary-link.html b/packages/core/lib/views/summary/summary-link.html similarity index 100% rename from lib/views/summary/summary-link.html rename to packages/core/lib/views/summary/summary-link.html diff --git a/module.js b/packages/core/module.js similarity index 100% rename from module.js rename to packages/core/module.js diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 00000000..b3097b7d --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,53 @@ +{ + "name": "ldf-server", + "description": "Linked Data Fragments Server", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/": "components/", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/config/": "config/" + }, + "license": "MIT", + "engines": { + "node": ">=6.0" + }, + "bin": { + "ldf-server": "./bin/ldf-server" + }, + "main": "module.js", + "repository": { + "type": "git", + "url": "git@github.com:LinkedDataFragments/Server.js.git" + }, + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "asynciterator": "^1.1.0", + "forwarded-parse": "^2.0.0", + "jsonld": "^0.4.11", + "lodash": "^2.4.2", + "lru-cache": "^4.0.1", + "componentsjs": "3.3.0", + "mime": "^1.3.4", + "n3": "^0.9.0", + "negotiate": "^1.0.1", + "q": "^1.4.1", + "qejs": "^3.0.5", + "request": "^2.88.0", + "uritemplate": "^0.3.4" + }, + "optionalDependencies": { + "access-log": "^0.3.9", + "hdt": "^2.1.3", + "parse-cache-control": "^1.0.1" + } +} diff --git a/test/.eslintrc b/packages/core/test/.eslintrc similarity index 100% rename from test/.eslintrc rename to packages/core/test/.eslintrc diff --git a/test/LinkedDataFragmentsServer-test.js b/packages/core/test/LinkedDataFragmentsServer-test.js similarity index 100% rename from test/LinkedDataFragmentsServer-test.js rename to packages/core/test/LinkedDataFragmentsServer-test.js diff --git a/test/assets/basic-fragment-metadata-last.jsonld b/packages/core/test/assets/basic-fragment-metadata-last.jsonld similarity index 100% rename from test/assets/basic-fragment-metadata-last.jsonld rename to packages/core/test/assets/basic-fragment-metadata-last.jsonld diff --git a/test/assets/basic-fragment-metadata-last.nq b/packages/core/test/assets/basic-fragment-metadata-last.nq similarity index 100% rename from test/assets/basic-fragment-metadata-last.nq rename to packages/core/test/assets/basic-fragment-metadata-last.nq diff --git a/test/assets/basic-fragment-metadata-last.nt b/packages/core/test/assets/basic-fragment-metadata-last.nt similarity index 100% rename from test/assets/basic-fragment-metadata-last.nt rename to packages/core/test/assets/basic-fragment-metadata-last.nt diff --git a/test/assets/basic-fragment-metadata-last.trig b/packages/core/test/assets/basic-fragment-metadata-last.trig similarity index 100% rename from test/assets/basic-fragment-metadata-last.trig rename to packages/core/test/assets/basic-fragment-metadata-last.trig diff --git a/test/assets/basic-fragment-metadata-last.ttl b/packages/core/test/assets/basic-fragment-metadata-last.ttl similarity index 100% rename from test/assets/basic-fragment-metadata-last.ttl rename to packages/core/test/assets/basic-fragment-metadata-last.ttl diff --git a/test/assets/basic-fragment.jsonld b/packages/core/test/assets/basic-fragment.jsonld similarity index 100% rename from test/assets/basic-fragment.jsonld rename to packages/core/test/assets/basic-fragment.jsonld diff --git a/test/assets/basic-fragment.nq b/packages/core/test/assets/basic-fragment.nq similarity index 100% rename from test/assets/basic-fragment.nq rename to packages/core/test/assets/basic-fragment.nq diff --git a/test/assets/basic-fragment.nt b/packages/core/test/assets/basic-fragment.nt similarity index 100% rename from test/assets/basic-fragment.nt rename to packages/core/test/assets/basic-fragment.nt diff --git a/test/assets/basic-fragment.trig b/packages/core/test/assets/basic-fragment.trig similarity index 100% rename from test/assets/basic-fragment.trig rename to packages/core/test/assets/basic-fragment.trig diff --git a/test/assets/basic-fragment.ttl b/packages/core/test/assets/basic-fragment.ttl similarity index 100% rename from test/assets/basic-fragment.ttl rename to packages/core/test/assets/basic-fragment.ttl diff --git a/test/assets/empty-fragment.jsonld b/packages/core/test/assets/empty-fragment.jsonld similarity index 100% rename from test/assets/empty-fragment.jsonld rename to packages/core/test/assets/empty-fragment.jsonld diff --git a/test/assets/empty-fragment.nq b/packages/core/test/assets/empty-fragment.nq similarity index 100% rename from test/assets/empty-fragment.nq rename to packages/core/test/assets/empty-fragment.nq diff --git a/test/assets/empty-fragment.nt b/packages/core/test/assets/empty-fragment.nt similarity index 100% rename from test/assets/empty-fragment.nt rename to packages/core/test/assets/empty-fragment.nt diff --git a/test/assets/empty-fragment.trig b/packages/core/test/assets/empty-fragment.trig similarity index 100% rename from test/assets/empty-fragment.trig rename to packages/core/test/assets/empty-fragment.trig diff --git a/test/assets/empty-fragment.ttl b/packages/core/test/assets/empty-fragment.ttl similarity index 100% rename from test/assets/empty-fragment.ttl rename to packages/core/test/assets/empty-fragment.ttl diff --git a/test/assets/sparql-quads-response.json b/packages/core/test/assets/sparql-quads-response.json similarity index 100% rename from test/assets/sparql-quads-response.json rename to packages/core/test/assets/sparql-quads-response.json diff --git a/test/assets/summary.nt b/packages/core/test/assets/summary.nt similarity index 100% rename from test/assets/summary.nt rename to packages/core/test/assets/summary.nt diff --git a/test/assets/summary.ttl b/packages/core/test/assets/summary.ttl similarity index 100% rename from test/assets/summary.ttl rename to packages/core/test/assets/summary.ttl diff --git a/test/assets/test-blank.hdt b/packages/core/test/assets/test-blank.hdt similarity index 100% rename from test/assets/test-blank.hdt rename to packages/core/test/assets/test-blank.hdt diff --git a/test/assets/test-blank.ttl b/packages/core/test/assets/test-blank.ttl similarity index 100% rename from test/assets/test-blank.ttl rename to packages/core/test/assets/test-blank.ttl diff --git a/test/assets/test.hdt b/packages/core/test/assets/test.hdt similarity index 100% rename from test/assets/test.hdt rename to packages/core/test/assets/test.hdt diff --git a/test/assets/test.jsonld b/packages/core/test/assets/test.jsonld similarity index 100% rename from test/assets/test.jsonld rename to packages/core/test/assets/test.jsonld diff --git a/test/assets/test.trig b/packages/core/test/assets/test.trig similarity index 100% rename from test/assets/test.trig rename to packages/core/test/assets/test.trig diff --git a/test/assets/test.ttl b/packages/core/test/assets/test.ttl similarity index 100% rename from test/assets/test.ttl rename to packages/core/test/assets/test.ttl diff --git a/test/controllers/AssetsController-test.js b/packages/core/test/controllers/AssetsController-test.js similarity index 100% rename from test/controllers/AssetsController-test.js rename to packages/core/test/controllers/AssetsController-test.js diff --git a/test/controllers/Controller-test.js b/packages/core/test/controllers/Controller-test.js similarity index 100% rename from test/controllers/Controller-test.js rename to packages/core/test/controllers/Controller-test.js diff --git a/test/controllers/DereferenceController-test.js b/packages/core/test/controllers/DereferenceController-test.js similarity index 100% rename from test/controllers/DereferenceController-test.js rename to packages/core/test/controllers/DereferenceController-test.js diff --git a/test/controllers/DummyServer.js b/packages/core/test/controllers/DummyServer.js similarity index 100% rename from test/controllers/DummyServer.js rename to packages/core/test/controllers/DummyServer.js diff --git a/test/controllers/NotFoundController-test.js b/packages/core/test/controllers/NotFoundController-test.js similarity index 100% rename from test/controllers/NotFoundController-test.js rename to packages/core/test/controllers/NotFoundController-test.js diff --git a/test/controllers/QuadPatternFragmentsController-test.js b/packages/core/test/controllers/QuadPatternFragmentsController-test.js similarity index 100% rename from test/controllers/QuadPatternFragmentsController-test.js rename to packages/core/test/controllers/QuadPatternFragmentsController-test.js diff --git a/test/controllers/SummaryController-test.js b/packages/core/test/controllers/SummaryController-test.js similarity index 100% rename from test/controllers/SummaryController-test.js rename to packages/core/test/controllers/SummaryController-test.js diff --git a/test/datasources/CompositeDatasource-test.js b/packages/core/test/datasources/CompositeDatasource-test.js similarity index 100% rename from test/datasources/CompositeDatasource-test.js rename to packages/core/test/datasources/CompositeDatasource-test.js diff --git a/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js similarity index 100% rename from test/datasources/Datasource-test.js rename to packages/core/test/datasources/Datasource-test.js diff --git a/test/datasources/HdtDatasource-test.js b/packages/core/test/datasources/HdtDatasource-test.js similarity index 100% rename from test/datasources/HdtDatasource-test.js rename to packages/core/test/datasources/HdtDatasource-test.js diff --git a/test/datasources/JsonLdDatasource-test.js b/packages/core/test/datasources/JsonLdDatasource-test.js similarity index 100% rename from test/datasources/JsonLdDatasource-test.js rename to packages/core/test/datasources/JsonLdDatasource-test.js diff --git a/test/datasources/N3Datasource-test.js b/packages/core/test/datasources/N3Datasource-test.js similarity index 100% rename from test/datasources/N3Datasource-test.js rename to packages/core/test/datasources/N3Datasource-test.js diff --git a/test/datasources/SparqlDatasource-test.js b/packages/core/test/datasources/SparqlDatasource-test.js similarity index 100% rename from test/datasources/SparqlDatasource-test.js rename to packages/core/test/datasources/SparqlDatasource-test.js diff --git a/test/mocha.opts b/packages/core/test/mocha.opts similarity index 100% rename from test/mocha.opts rename to packages/core/test/mocha.opts diff --git a/test/routers/DatasourceRouter-test.js b/packages/core/test/routers/DatasourceRouter-test.js similarity index 100% rename from test/routers/DatasourceRouter-test.js rename to packages/core/test/routers/DatasourceRouter-test.js diff --git a/test/routers/PageRouter-test.js b/packages/core/test/routers/PageRouter-test.js similarity index 100% rename from test/routers/PageRouter-test.js rename to packages/core/test/routers/PageRouter-test.js diff --git a/test/routers/QuadPatternRouter-test.js b/packages/core/test/routers/QuadPatternRouter-test.js similarity index 100% rename from test/routers/QuadPatternRouter-test.js rename to packages/core/test/routers/QuadPatternRouter-test.js diff --git a/test/test-setup.js b/packages/core/test/test-setup.js similarity index 100% rename from test/test-setup.js rename to packages/core/test/test-setup.js diff --git a/test/views/View-test.js b/packages/core/test/views/View-test.js similarity index 100% rename from test/views/View-test.js rename to packages/core/test/views/View-test.js diff --git a/test/views/ViewCollection-test.js b/packages/core/test/views/ViewCollection-test.js similarity index 100% rename from test/views/ViewCollection-test.js rename to packages/core/test/views/ViewCollection-test.js diff --git a/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js b/packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js similarity index 100% rename from test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js rename to packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..61bdf0cd --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5976 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@evocateur/libnpmaccess@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" + integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + +"@evocateur/libnpmpublish@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" + integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + semver "^5.5.1" + ssri "^6.0.1" + +"@evocateur/npm-registry-fetch@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" + integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.1.2" + +"@evocateur/pacote@^9.6.3": + version "9.6.5" + resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" + integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + bluebird "^3.5.3" + cacache "^12.0.3" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.5.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.4.4" + npm-pick-manifest "^3.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.3" + safe-buffer "^5.2.0" + semver "^5.7.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +"@lerna/add@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309" + integrity sha512-AnH1oRIEEg/VDa3SjYq4x1/UglEAvrZuV0WssHUMN81RTZgQk3we+Mv3qZNddrZ/fBcZu2IAdN/EQ3+ie2JxKQ== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/bootstrap" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + npm-package-arg "^6.1.0" + p-map "^2.1.0" + semver "^6.2.0" + +"@lerna/bootstrap@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.20.0.tgz#635d71046830f208e851ab429a63da1747589e37" + integrity sha512-Wylullx3uthKE7r4izo09qeRGL20Y5yONlQEjPCfnbxCC2Elu+QcPu4RC6kqKQ7b+g7pdC3OOgcHZjngrwr5XQ== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/has-npm-version" "3.16.5" + "@lerna/npm-install" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/symlink-binary" "3.17.0" + "@lerna/symlink-dependencies" "3.17.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + get-port "^4.2.0" + multimatch "^3.0.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + read-package-tree "^5.1.6" + semver "^6.2.0" + +"@lerna/changed@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.20.0.tgz#66b97ebd6c8f8d207152ee524a0791846a9097ae" + integrity sha512-+hzMFSldbRPulZ0vbKk6RD9f36gaH3Osjx34wrrZ62VB4pKmjyuS/rxVYkCA3viPLHoiIw2F8zHM5BdYoDSbjw== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/check-working-tree@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" + integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== + dependencies: + "@lerna/collect-uncommitted" "3.16.5" + "@lerna/describe-ref" "3.16.5" + "@lerna/validation-error" "3.13.0" + +"@lerna/child-process@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" + integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== + dependencies: + chalk "^2.3.1" + execa "^1.0.0" + strong-log-transformer "^2.0.0" + +"@lerna/clean@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.20.0.tgz#ba777e373ddeae63e57860df75d47a9e5264c5b2" + integrity sha512-9ZdYrrjQvR5wNXmHfDsfjWjp0foOkCwKe3hrckTzkAeQA1ibyz5llGwz5e1AeFrV12e2/OLajVqYfe+qdkZUgg== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.16.5" + p-map "^2.1.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + +"@lerna/cli@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" + integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== + dependencies: + "@lerna/global-options" "3.13.0" + dedent "^0.7.0" + npmlog "^4.1.2" + yargs "^14.2.2" + +"@lerna/collect-uncommitted@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" + integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== + dependencies: + "@lerna/child-process" "3.16.5" + chalk "^2.3.1" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/collect-updates@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" + integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/describe-ref" "3.16.5" + minimatch "^3.0.4" + npmlog "^4.1.2" + slash "^2.0.0" + +"@lerna/command@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.5.tgz#14c6d2454adbfd365f8027201523e6c289cd3cd9" + integrity sha512-36EnqR59yaTU4HrR1C9XDFti2jRx0BgpIUBeWn129LZZB8kAB3ov1/dJNa1KcNRKp91DncoKHLY99FZ6zTNpMQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/package-graph" "3.18.5" + "@lerna/project" "3.18.0" + "@lerna/validation-error" "3.13.0" + "@lerna/write-log-file" "3.13.0" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^1.0.0" + is-ci "^2.0.0" + npmlog "^4.1.2" + +"@lerna/conventional-commits@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.18.5.tgz#08efd2e5b45acfaf3f151a53a3ec7ecade58a7bc" + integrity sha512-qcvXIEJ3qSgalxXnQ7Yxp5H9Ta5TVyai6vEor6AAEHc20WiO7UIdbLDCxBtiiHMdGdpH85dTYlsoYUwsCJu3HQ== + dependencies: + "@lerna/validation-error" "3.13.0" + conventional-changelog-angular "^5.0.3" + conventional-changelog-core "^3.1.6" + conventional-recommended-bump "^5.0.0" + fs-extra "^8.1.0" + get-stream "^4.0.0" + lodash.template "^4.5.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + semver "^6.2.0" + +"@lerna/create-symlink@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" + integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== + dependencies: + "@zkochan/cmd-shim" "^3.1.0" + fs-extra "^8.1.0" + npmlog "^4.1.2" + +"@lerna/create@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.5.tgz#11ac539f069248eaf7bc4c42e237784330f4fc47" + integrity sha512-cHpjocbpKmLopCuZFI7cKEM3E/QY8y+yC7VtZ4FQRSaLU8D8i2xXtXmYaP1GOlVNavji0iwoXjuNpnRMInIr2g== + dependencies: + "@evocateur/pacote" "^9.6.3" + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + "@lerna/npm-conf" "3.16.0" + "@lerna/validation-error" "3.13.0" + camelcase "^5.0.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + globby "^9.2.0" + init-package-json "^1.10.3" + npm-package-arg "^6.1.0" + p-reduce "^1.0.0" + pify "^4.0.1" + semver "^6.2.0" + slash "^2.0.0" + validate-npm-package-license "^3.0.3" + validate-npm-package-name "^3.0.0" + whatwg-url "^7.0.0" + +"@lerna/describe-ref@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" + integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + +"@lerna/diff@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.5.tgz#e9e2cb882f84d5b84f0487c612137305f07accbc" + integrity sha512-u90lGs+B8DRA9Z/2xX4YaS3h9X6GbypmGV6ITzx9+1Ga12UWGTVlKaCXBgONMBjzJDzAQOK8qPTwLA57SeBLgA== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + "@lerna/validation-error" "3.13.0" + npmlog "^4.1.2" + +"@lerna/exec@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.20.0.tgz#29f0c01aee2340eb46f90706731fef2062a49639" + integrity sha512-pS1mmC7kzV668rHLWuv31ClngqeXjeHC8kJuM+W2D6IpUVMGQHLcCTYLudFgQsuKGVpl0DGNYG+sjLhAPiiu6A== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/filter-options@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" + integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== + dependencies: + "@lerna/collect-updates" "3.20.0" + "@lerna/filter-packages" "3.18.0" + dedent "^0.7.0" + figgy-pudding "^3.5.1" + npmlog "^4.1.2" + +"@lerna/filter-packages@3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" + integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== + dependencies: + "@lerna/validation-error" "3.13.0" + multimatch "^3.0.0" + npmlog "^4.1.2" + +"@lerna/get-npm-exec-opts@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" + integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== + dependencies: + npmlog "^4.1.2" + +"@lerna/get-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" + integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== + dependencies: + fs-extra "^8.1.0" + ssri "^6.0.1" + tar "^4.4.8" + +"@lerna/github-client@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.5.tgz#2eb0235c3bf7a7e5d92d73e09b3761ab21f35c2e" + integrity sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw== + dependencies: + "@lerna/child-process" "3.16.5" + "@octokit/plugin-enterprise-rest" "^3.6.1" + "@octokit/rest" "^16.28.4" + git-url-parse "^11.1.2" + npmlog "^4.1.2" + +"@lerna/gitlab-client@3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" + integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== + dependencies: + node-fetch "^2.5.0" + npmlog "^4.1.2" + whatwg-url "^7.0.0" + +"@lerna/global-options@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" + integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== + +"@lerna/has-npm-version@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" + integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== + dependencies: + "@lerna/child-process" "3.16.5" + semver "^6.2.0" + +"@lerna/import@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.5.tgz#a9c7d8601870729851293c10abd18b3707f7ba5e" + integrity sha512-PH0WVLEgp+ORyNKbGGwUcrueW89K3Iuk/DDCz8mFyG2IG09l/jOF0vzckEyGyz6PO5CMcz4TI1al/qnp3FrahQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/validation-error" "3.13.0" + dedent "^0.7.0" + fs-extra "^8.1.0" + p-map-series "^1.0.0" + +"@lerna/info@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.20.0.tgz#3a5212f3029f2bc6255f9533bdf4bcb120ef329a" + integrity sha512-Rsz+KQF9mczbGUbPTrtOed1N0C+cA08Qz0eX/oI+NNjvsryZIju/o7uedG4I3P55MBiAioNrJI88fHH3eTgYug== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/output" "3.13.0" + envinfo "^7.3.1" + +"@lerna/init@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.5.tgz#86dd0b2b3290755a96975069b5cb007f775df9f5" + integrity sha512-oCwipWrha98EcJAHm8AGd2YFFLNI7AW9AWi0/LbClj1+XY9ah+uifXIgYGfTk63LbgophDd8936ZEpHMxBsbAg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/command" "3.18.5" + fs-extra "^8.1.0" + p-map "^2.1.0" + write-json-file "^3.2.0" + +"@lerna/link@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.5.tgz#f24347e4f0b71d54575bd37cfa1794bc8ee91b18" + integrity sha512-xTN3vktJpkT7Nqc3QkZRtHO4bT5NvuLMtKNIBDkks0HpGxC9PRyyqwOoCoh1yOGbrWIuDezhfMg3Qow+6I69IQ== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/package-graph" "3.18.5" + "@lerna/symlink-dependencies" "3.17.0" + p-map "^2.1.0" + slash "^2.0.0" + +"@lerna/list@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.20.0.tgz#7e67cc29c5cf661cfd097e8a7c2d3dcce7a81029" + integrity sha512-fXTicPrfioVnRzknyPawmYIVkzDRBaQqk9spejS1S3O1DOidkihK0xxNkr8HCVC0L22w6f92g83qWDp2BYRUbg== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/listable" "3.18.5" + "@lerna/output" "3.13.0" + +"@lerna/listable@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" + integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== + dependencies: + "@lerna/query-graph" "3.18.5" + chalk "^2.3.1" + columnify "^1.5.4" + +"@lerna/log-packed@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" + integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== + dependencies: + byte-size "^5.0.1" + columnify "^1.5.4" + has-unicode "^2.0.1" + npmlog "^4.1.2" + +"@lerna/npm-conf@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" + integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== + dependencies: + config-chain "^1.1.11" + pify "^4.0.1" + +"@lerna/npm-dist-tag@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" + integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== + dependencies: + "@evocateur/npm-registry-fetch" "^4.0.0" + "@lerna/otplease" "3.18.5" + figgy-pudding "^3.5.1" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + +"@lerna/npm-install@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" + integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + signal-exit "^3.0.2" + write-pkg "^3.1.0" + +"@lerna/npm-publish@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" + integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== + dependencies: + "@evocateur/libnpmpublish" "^1.2.2" + "@lerna/otplease" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + pify "^4.0.1" + read-package-json "^2.0.13" + +"@lerna/npm-run-script@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" + integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== + dependencies: + "@lerna/child-process" "3.16.5" + "@lerna/get-npm-exec-opts" "3.13.0" + npmlog "^4.1.2" + +"@lerna/otplease@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" + integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== + dependencies: + "@lerna/prompt" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/output@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" + integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== + dependencies: + npmlog "^4.1.2" + +"@lerna/pack-directory@3.16.4": + version "3.16.4" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" + integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== + dependencies: + "@lerna/get-packed" "3.16.0" + "@lerna/package" "3.16.0" + "@lerna/run-lifecycle" "3.16.2" + figgy-pudding "^3.5.1" + npm-packlist "^1.4.4" + npmlog "^4.1.2" + tar "^4.4.10" + temp-write "^3.4.0" + +"@lerna/package-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" + integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== + dependencies: + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/validation-error" "3.13.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + semver "^6.2.0" + +"@lerna/package@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" + integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== + dependencies: + load-json-file "^5.3.0" + npm-package-arg "^6.1.0" + write-pkg "^3.1.0" + +"@lerna/prerelease-id-from-version@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" + integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== + dependencies: + semver "^6.2.0" + +"@lerna/profiler@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" + integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== + dependencies: + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npmlog "^4.1.2" + upath "^1.2.0" + +"@lerna/project@3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.18.0.tgz#56feee01daeb42c03cbdf0ed8a2a10cbce32f670" + integrity sha512-+LDwvdAp0BurOAWmeHE3uuticsq9hNxBI0+FMHiIai8jrygpJGahaQrBYWpwbshbQyVLeQgx3+YJdW2TbEdFWA== + dependencies: + "@lerna/package" "3.16.0" + "@lerna/validation-error" "3.13.0" + cosmiconfig "^5.1.0" + dedent "^0.7.0" + dot-prop "^4.2.0" + glob-parent "^5.0.0" + globby "^9.2.0" + load-json-file "^5.3.0" + npmlog "^4.1.2" + p-map "^2.1.0" + resolve-from "^4.0.0" + write-json-file "^3.2.0" + +"@lerna/prompt@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" + integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== + dependencies: + inquirer "^6.2.0" + npmlog "^4.1.2" + +"@lerna/publish@3.20.2": + version "3.20.2" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.20.2.tgz#a45d29813099b3249657ea913d0dc3f8ebc5cc2e" + integrity sha512-N7Y6PdhJ+tYQPdI1tZum8W25cDlTp4D6brvRacKZusweWexxaopbV8RprBaKexkEX/KIbncuADq7qjDBdQHzaA== + dependencies: + "@evocateur/libnpmaccess" "^3.1.2" + "@evocateur/npm-registry-fetch" "^4.0.0" + "@evocateur/pacote" "^9.6.3" + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/describe-ref" "3.16.5" + "@lerna/log-packed" "3.16.0" + "@lerna/npm-conf" "3.16.0" + "@lerna/npm-dist-tag" "3.18.5" + "@lerna/npm-publish" "3.18.5" + "@lerna/otplease" "3.18.5" + "@lerna/output" "3.13.0" + "@lerna/pack-directory" "3.16.4" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + "@lerna/version" "3.20.2" + figgy-pudding "^3.5.1" + fs-extra "^8.1.0" + npm-package-arg "^6.1.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^2.1.0" + p-pipe "^1.2.0" + semver "^6.2.0" + +"@lerna/pulse-till-done@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" + integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== + dependencies: + npmlog "^4.1.2" + +"@lerna/query-graph@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" + integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== + dependencies: + "@lerna/package-graph" "3.18.5" + figgy-pudding "^3.5.1" + +"@lerna/resolve-symlink@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" + integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== + dependencies: + fs-extra "^8.1.0" + npmlog "^4.1.2" + read-cmd-shim "^1.0.1" + +"@lerna/rimraf-dir@3.16.5": + version "3.16.5" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" + integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== + dependencies: + "@lerna/child-process" "3.16.5" + npmlog "^4.1.2" + path-exists "^3.0.0" + rimraf "^2.6.2" + +"@lerna/run-lifecycle@3.16.2": + version "3.16.2" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" + integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== + dependencies: + "@lerna/npm-conf" "3.16.0" + figgy-pudding "^3.5.1" + npm-lifecycle "^3.1.2" + npmlog "^4.1.2" + +"@lerna/run-topologically@3.18.5": + version "3.18.5" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" + integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== + dependencies: + "@lerna/query-graph" "3.18.5" + figgy-pudding "^3.5.1" + p-queue "^4.0.0" + +"@lerna/run@3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.20.0.tgz#a479f7c42bdf9ebabb3a1e5a2bdebb7a8d201151" + integrity sha512-9U3AqeaCeB7KsGS9oyKNp62s9vYoULg/B4cqXTKZkc+OKL6QOEjYHYVSBcMK9lUXrMjCjDIuDSX3PnTCPxQ2Dw== + dependencies: + "@lerna/command" "3.18.5" + "@lerna/filter-options" "3.20.0" + "@lerna/npm-run-script" "3.16.5" + "@lerna/output" "3.13.0" + "@lerna/profiler" "3.20.0" + "@lerna/run-topologically" "3.18.5" + "@lerna/timer" "3.13.0" + "@lerna/validation-error" "3.13.0" + p-map "^2.1.0" + +"@lerna/symlink-binary@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" + integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/package" "3.16.0" + fs-extra "^8.1.0" + p-map "^2.1.0" + +"@lerna/symlink-dependencies@3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" + integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== + dependencies: + "@lerna/create-symlink" "3.16.2" + "@lerna/resolve-symlink" "3.16.0" + "@lerna/symlink-binary" "3.17.0" + fs-extra "^8.1.0" + p-finally "^1.0.0" + p-map "^2.1.0" + p-map-series "^1.0.0" + +"@lerna/timer@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" + integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== + +"@lerna/validation-error@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" + integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== + dependencies: + npmlog "^4.1.2" + +"@lerna/version@3.20.2": + version "3.20.2" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.20.2.tgz#3709141c0f537741d9bc10cb24f56897bcb30428" + integrity sha512-ckBJMaBWc+xJen0cMyCE7W67QXLLrc0ELvigPIn8p609qkfNM0L0CF803MKxjVOldJAjw84b8ucNWZLvJagP/Q== + dependencies: + "@lerna/check-working-tree" "3.16.5" + "@lerna/child-process" "3.16.5" + "@lerna/collect-updates" "3.20.0" + "@lerna/command" "3.18.5" + "@lerna/conventional-commits" "3.18.5" + "@lerna/github-client" "3.16.5" + "@lerna/gitlab-client" "3.15.0" + "@lerna/output" "3.13.0" + "@lerna/prerelease-id-from-version" "3.16.0" + "@lerna/prompt" "3.18.5" + "@lerna/run-lifecycle" "3.16.2" + "@lerna/run-topologically" "3.18.5" + "@lerna/validation-error" "3.13.0" + chalk "^2.3.1" + dedent "^0.7.0" + load-json-file "^5.3.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + p-map "^2.1.0" + p-pipe "^1.2.0" + p-reduce "^1.0.0" + p-waterfall "^1.0.0" + semver "^6.2.0" + slash "^2.0.0" + temp-write "^3.4.0" + write-json-file "^3.2.0" + +"@lerna/write-log-file@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" + integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== + dependencies: + npmlog "^4.1.2" + write-file-atomic "^2.3.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@octokit/auth-token@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" + integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg== + dependencies: + "@octokit/types" "^2.0.0" + +"@octokit/endpoint@^5.5.0": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.5.3.tgz#0397d1baaca687a4c8454ba424a627699d97c978" + integrity sha512-EzKwkwcxeegYYah5ukEeAI/gYRLv2Y9U5PpIsseGSFDk+G3RbipQGBs8GuYS1TLCtQaqoO66+aQGtITPalxsNQ== + dependencies: + "@octokit/types" "^2.0.0" + is-plain-object "^3.0.0" + universal-user-agent "^5.0.0" + +"@octokit/plugin-enterprise-rest@^3.6.1": + version "3.6.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" + integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== + dependencies: + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" + integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== + +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== + dependencies: + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" + +"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.3.2" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.2.tgz#1ca8b90a407772a1ee1ab758e7e0aced213b9883" + integrity sha512-7NPJpg19wVQy1cs2xqXjjRq/RmtSomja/VSWnptfYwuBxLdbYh2UjhGi0Wx7B1v5Iw5GKhfFDQL7jM7SSp7K2g== + dependencies: + "@octokit/endpoint" "^5.5.0" + "@octokit/request-error" "^1.0.1" + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + is-plain-object "^3.0.0" + node-fetch "^2.3.0" + once "^1.4.0" + universal-user-agent "^5.0.0" + +"@octokit/rest@^16.28.4": + version "16.43.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" + integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.2.0.tgz#ddb0a90cf3e9624ae97e09d16f21f4c4a682d3be" + integrity sha512-iEeW3XlkxeM/CObeoYvbUv24Oe+DldGofY+3QyeJ5XKKA6B+V94ePk14EDCarseWdMs6afKZPv3dFq8C+SY5lw== + dependencies: + "@types/node" ">= 8" + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*", "@types/node@>= 8": + version "13.7.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" + integrity sha512-eyK7MWD0R1HqVTp+PtwRgFeIsemzuj4gBFSQxfPHY5iMjS7474e5wq+VFgTcdpyHeNxyKSaetYAjdMLJlKoWqA== + +"@zkochan/cmd-shim@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" + integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== + dependencies: + is-windows "^1.0.0" + mkdirp-promise "^5.0.1" + mz "^2.5.0" + +JSONStream@^1.0.4, JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +access-log@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/access-log/-/access-log-0.3.9.tgz#01c2695ba7e7d32db5288ef3f14e64d6719f3ad1" + integrity sha1-AcJpW6fn0y21KI7z8U5k1nGfOtE= + dependencies: + strftime "~0.6.2" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^5.5.0: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +ajv-keywords@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw= + +ajv@^4.7.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^6.5.5: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= + +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-differ@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" + integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + +array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assertion-error@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +asynciterator@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-1.1.1.tgz#8d1c06a0436410186ebc889e0b36060fa62b1821" + integrity sha512-NLWjVfwc/I1k/aS9eLH/zfxnN6Ci/WHJiJCfwHcyLlPUnYIY2WHDMYycBIpobyi3qCVGYdqTY4NV0LFURbqZ/g== + dependencies: + immediate "^3.2.3" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + +babel-code-frame@^6.16.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +before-after-hook@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + +cacache@^12.0.0, cacache@^12.0.3: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chai@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + integrity sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc= + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.3.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= + dependencies: + restore-cursor "^1.0.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +compare-func@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= + dependencies: + array-ify "^1.0.0" + dot-prop "^3.0.0" + +component-emitter@^1.2.0, component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +componentsjs@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/componentsjs/-/componentsjs-3.3.0.tgz#6f881b3889212f0a153636bf9f87de4b3d82743e" + integrity sha512-0ETmraF8ClssNbGbZqp6kTSCwm8YBK6eFly34pglwiJo007HgVWdeXcsLttXsRtJbiVxA0Ox+A/mvjDfExES4A== + dependencies: + global-modules "^1.0.0" + jsonld "^0.4.11" + lodash "^4.17.4" + minimist "^1.2.0" + n3 "^0.9.1" + requireg "^0.1.7" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +conventional-changelog-angular@^5.0.3: + version "5.0.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" + integrity sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA== + dependencies: + compare-func "^1.3.1" + q "^1.5.1" + +conventional-changelog-core@^3.1.6: + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" + integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== + dependencies: + conventional-changelog-writer "^4.0.6" + conventional-commits-parser "^3.0.3" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^2.0.3" + lodash "^4.2.1" + normalize-package-data "^2.3.5" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^3.0.0" + +conventional-changelog-preset-loader@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz#580fa8ab02cef22c24294d25e52d7ccd247a9a6a" + integrity sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ== + +conventional-changelog-writer@^4.0.6: + version "4.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" + integrity sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw== + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^2.0.2" + dateformat "^3.0.0" + handlebars "^4.4.0" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^5.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^3.0.0" + +conventional-commits-filter@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" + integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.0.3: + version "3.0.8" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" + integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^5.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" + integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.1.1" + conventional-commits-filter "^2.0.2" + conventional-commits-parser "^3.0.3" + git-raw-commits "2.0.0" + git-semver-tags "^2.0.3" + meow "^4.0.0" + q "^1.5.1" + +cookiejar@^2.0.6: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= + dependencies: + number-is-nan "^1.0.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^2.1.1, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + integrity sha1-71WKyrjeJSBs1xOQbXTlaTDrafI= + dependencies: + type-detect "0.1.1" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +doctrine@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= + dependencies: + is-obj "^1.0.0" + +dot-prop@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +envinfo@^7.3.1: + version "7.5.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" + integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1: + version "1.17.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" + integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-promise@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc" + integrity sha1-lu258v2wGZWCKyY92KratnSBgbw= + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint@^3.4.0: + version "3.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" + integrity sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw= + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.5.2" + debug "^2.1.1" + doctrine "^2.0.0" + escope "^3.6.0" + espree "^3.4.0" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.14.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~2.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.4.0: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" + integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@1.0.0-rc4: + version "1.0.0-rc4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc4.tgz#05ac6bc22227b43e4461f488161554699d4f8b5e" + integrity sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14= + dependencies: + async "^1.5.2" + combined-stream "^1.0.5" + mime-types "^2.1.10" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formatio@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9" + integrity sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek= + dependencies: + samsam "~1.1" + +formidable@^1.0.17: + version "1.2.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== + +forwarded-parse@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/forwarded-parse/-/forwarded-parse-2.1.0.tgz#1ae9d7a4be3af884f74d936d856f7d8c6abd0439" + integrity sha512-as9a7Xelt0CvdUy7/qxrY73dZq2vMx49F556fwjjFrUyzq5uHHfeLgD2cCq/6P4ZvusGZzjD6aL2NdgGdS5Cew== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +generate-function@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA= + dependencies: + is-property "^1.0.0" + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-port@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" + integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^4.0.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" + integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== + dependencies: + meow "^4.0.0" + semver "^6.0.0" + +git-up@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" + integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + +git-url-parse@^11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" + integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== + dependencies: + git-up "^4.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= + dependencies: + ini "^1.3.2" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^9.14.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +handlebars@^4.4.0: + version "4.7.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" + integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hdt@^2.1.3: + version "2.2.2" + resolved "https://registry.yarnpkg.com/hdt/-/hdt-2.2.2.tgz#4e570250a42043050a345dc7b84d2838c40fa7ca" + integrity sha512-CaGQ6z/ncMgL9BXBAbBcjAxEZhozfQKXFi/1Ov2gz7WwYH3muv1PGsml7r8FdhtErRf45owKkITEfpJ2h8+64w== + dependencies: + minimist "^1.1.0" + n3 "^0.11.2" + nan "^2.14.0" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.6" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.6.tgz#3a6e6d0324c5371fc8c7ba7175e1e5d14578724d" + integrity sha512-Kp6rShEsCHhF5dD3EWKdkgVA8ix90oSUJ0VY4g9goxxa0+f4lx63muTftn0mlJ/+8IESGWyKnP//V2D7S4ZbIQ== + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@^0.4.24, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +ignore@^3.2.0: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.3: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +immediate@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + integrity sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34= + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +inquirer@^6.2.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +ip@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-generator-function@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-my-ip-valid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== + +is-my-json-valid@^2.10.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a" + integrity sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA== + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" + integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== + dependencies: + isobject "^4.0.0" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-property@^1.0.0, is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= + +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-ssh@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" + integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + dependencies: + protocols "^1.1.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isobject@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.13.1, js-yaml@^3.5.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsonld@^0.4.11: + version "0.4.12" + resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-0.4.12.tgz#a02f205d5341414df1b6d8414f1b967a712073e8" + integrity sha1-oC8gXVNBQU3xtthBTxuWenEgc+g= + dependencies: + es6-promise "^2.0.0" + pkginfo "~0.4.0" + request "^2.61.0" + xmldom "0.1.19" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +lerna@^3.4.0: + version "3.20.2" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.20.2.tgz#abf84e73055fe84ee21b46e64baf37b496c24864" + integrity sha512-bjdL7hPLpU3Y8CBnw/1ys3ynQMUjiK6l9iDWnEGwFtDy48Xh5JboR9ZJwmKGCz9A/sarVVIGwf1tlRNKUG9etA== + dependencies: + "@lerna/add" "3.20.0" + "@lerna/bootstrap" "3.20.0" + "@lerna/changed" "3.20.0" + "@lerna/clean" "3.20.0" + "@lerna/cli" "3.18.5" + "@lerna/create" "3.18.5" + "@lerna/diff" "3.18.5" + "@lerna/exec" "3.20.0" + "@lerna/import" "3.18.5" + "@lerna/info" "3.20.0" + "@lerna/init" "3.18.5" + "@lerna/link" "3.18.5" + "@lerna/list" "3.20.0" + "@lerna/publish" "3.20.2" + "@lerna/run" "3.20.0" + "@lerna/version" "3.20.2" + import-local "^2.0.0" + npmlog "^4.1.2" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.0.2, lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + integrity sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4= + +lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +lolex@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" + integrity sha1-fD2mL/yzDw9agKJWbKJORdigHzE= + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +macos-release@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" + integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + +merge2@^1.2.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + +methods@1.x, methods@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-types@^2.1.10, mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@^1.3.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*: + version "1.0.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" + integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== + +mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mocha@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== + dependencies: + browser-stdout "1.3.1" + commander "2.15.1" + debug "3.1.0" + diff "3.5.0" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.5" + he "1.1.1" + minimatch "3.0.4" + mkdirp "0.5.1" + supports-color "5.4.0" + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multimatch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" + integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== + dependencies: + array-differ "^2.0.3" + array-union "^1.0.2" + arrify "^1.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA= + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +n3@^0.11.2: + version "0.11.3" + resolved "https://registry.yarnpkg.com/n3/-/n3-0.11.3.tgz#8e587495240dd21408c2c3aae385ec1651a837f8" + integrity sha512-Hk5GSXBeAZrYoqi+NeS/U0H47Hx0Lzj7K6nLWCZpC9E04iUwEwBcrlMb/5foAli7QF4newPNQQQGgM6IAxTxGg== + +n3@^0.9.0, n3@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/n3/-/n3-0.9.1.tgz#430b547d58dc7381408c45784dd8058171903932" + integrity sha1-QwtUfVjcc4FAjEV4TdgFgXGQOTI= + +nan@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiate@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/negotiate/-/negotiate-1.0.1.tgz#35ac8b5672f7b05faa10bf0261342eb1120370fd" + integrity sha1-NayLVnL3sF+qEL8CYTQusRIDcP0= + +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nested-error-stacks@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" + integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch-npm@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" + integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@^2.3.0, node-fetch@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-gyp@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" + integrity sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-lifecycle@^3.1.2: + version "3.1.4" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" + integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + +os-shim@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4, osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= + dependencies: + p-reduce "^1.0.0" + +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-pipe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= + +p-queue@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" + integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== + dependencies: + eventemitter3 "^3.1.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-waterfall@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= + dependencies: + p-reduce "^1.0.0" + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha1-juqz5U+laSD+Fro493+iGqzC104= + +parse-github-repo-url@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" + integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + +parse-url@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" + integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.5, path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkginfo@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" + integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +pre-commit@^1.1.3: + version "1.2.2" + resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" + integrity sha1-287g7p3nI15X95xW186UZBpp7sY= + dependencies: + cross-spawn "^5.0.1" + spawn-sync "^1.0.15" + which "1.2.x" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.7" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" + integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@0.8.x: + version "0.8.12" + resolved "https://registry.yarnpkg.com/q/-/q-0.8.12.tgz#9162a91e11819c4bcda7da15cf5fefaad0778823" + integrity sha1-kWKpHhGBnEvNp9oVz1/vqtB3iCM= + +q@^1.4.1, q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qejs@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/qejs/-/qejs-3.0.5.tgz#c78eaba5cef05f48de3353c9d07ad692ffa8b492" + integrity sha1-x46rpc7wX0jeM1PJ0HrWkv+otJI= + dependencies: + q "0.8.x" + +qs@^6.1.0: + version "6.9.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" + integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +rc@~1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-cmd-shim@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@^5.1.6: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read@1, read@~1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +"readable-stream@2 || 3", readable-stream@^3.0.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + integrity sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.61.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requireg@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/requireg/-/requireg-0.1.8.tgz#75c1d495294fa5ddfd51e4fcca4965c44f1ed8b1" + integrity sha512-qjbwnviLXg4oZiAFEr1ExbevkUPaEiP1uPGSoFCVgCCcbo4PXv9SmiJpXNYmgTBCZ8fY1Jy+sk7F9/kPNepeDw== + dependencies: + nested-error-stacks "~2.0.1" + rc "~1.2.7" + resolve "~1.7.1" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.10.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + +resolve@~1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + integrity sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw== + dependencies: + path-parse "^1.0.5" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + integrity sha1-yK1KXhEGYeQCp9IbUw4AnyX444k= + dependencies: + once "^1.3.0" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI= + +rxjs@^6.4.0: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +samsam@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" + integrity sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc= + +samsam@~1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621" + integrity sha1-n1CHQZtNCR8jJXHn+lLpCw9VJiE= + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shelljs@^0.7.5: + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" + integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM= + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +sinon-chai@^2.8.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.14.0.tgz#da7dd4cc83cd6a260b67cca0f7a9fdae26a1205d" + integrity sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ== + +sinon@^1.17.4: + version "1.17.7" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf" + integrity sha1-RUKk9JugxFwF6y6d2dID4rjv4L8= + dependencies: + formatio "1.1.1" + lolex "1.3.2" + samsam "1.1.2" + util ">=0.10.3 <1" + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + +slide@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-sync@^1.0.15: + version "1.0.15" + resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" + integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY= + dependencies: + concat-stream "^1.4.7" + os-shim "^0.1.2" + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strftime@~0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/strftime/-/strftime-0.6.2.tgz#da4c12073cebee3cd60f4821940cc27b19d348a1" + integrity sha1-2kwSBzzr7jzWD0ghlAzCexnTSKE= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +strong-log-transformer@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + +superagent@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-2.3.0.tgz#703529a0714e57e123959ddefbce193b2e50d115" + integrity sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU= + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.0.6" + debug "^2.2.0" + extend "^3.0.0" + form-data "1.0.0-rc4" + formidable "^1.0.17" + methods "^1.1.1" + mime "^1.3.4" + qs "^6.1.0" + readable-stream "^2.0.5" + +supertest@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-2.0.1.tgz#a058081d788f1515d4700d7502881e6b759e44cd" + integrity sha1-oFgIHXiPFRXUcA11Aogea3WeRM0= + dependencies: + methods "1.x" + superagent "^2.0.0" + +supports-color@5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== + dependencies: + has-flag "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + integrity sha1-K7xULw/amGGnVdOUf+/Ys/UThV8= + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + +tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +temp-write@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^3.0.0" + temp-dir "^1.0.0" + uuid "^3.0.1" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + +through2@^2.0.0, through2@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" + integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== + dependencies: + readable-stream "2 || 3" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + +tslib@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" + integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + integrity sha1-C6XsKohWQORw6k6FBZcZANrFiCI= + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + integrity sha1-diIXzAbbJY7EiQihKY6LlRIejqI= + +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^3.1.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" + integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== + dependencies: + commander "~2.20.3" + source-map "~0.6.1" + +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +umask@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== + dependencies: + os-name "^3.1.0" + +universal-user-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" + integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== + dependencies: + os-name "^3.1.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +uritemplate@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/uritemplate/-/uritemplate-0.3.4.tgz#05d0a853ffbc8b0f49aa3d4d2ad777b0d1ee070c" + integrity sha1-BdCoU/+8iw9Jqj1NKtd3sNHuBww= + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8= + dependencies: + os-homedir "^1.0.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +"util@>=0.10.3 <1": + version "0.12.2" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.2.tgz#54adb634c9e7c748707af2bf5a8c7ab640cbba2b" + integrity sha512-XE+MkWQvglYa+IOfBt5UFG93EmncEMP23UqpgDvVZVFBPxwmkK10QRp6pgU4xICPnWRf/t0zPv4noYSUq9gqUQ== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + safe-buffer "^5.1.2" + +uuid@^3.0.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1.2.x: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + integrity sha1-mofEN48D6CfOyvGs31bHNsAcFOU= + dependencies: + isexe "^2.0.0" + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +windows-release@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" + integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== + dependencies: + execa "^1.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-json-file@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-pkg@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== + dependencies: + sort-keys "^2.0.0" + write-json-file "^2.2.0" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + +xmldom@0.1.19: + version "0.1.19" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" + integrity sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw= + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" + integrity sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^14.2.2: + version "14.2.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" + integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.0" From d41af8ac824a2ff8282a4c03513ae58d055c2b72 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 26 Feb 2020 10:34:40 +0100 Subject: [PATCH 052/165] Bump required Node version to 10 --- .travis.yml | 2 -- README.md | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8dedaf3d..e4eb4428 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,5 @@ language: node_js node_js: - - "6" - - "8" - "10" - "12" install: yarn install --pure-lockfile diff --git a/README.md b/README.md index 7f1ad9fc..8f8eae56 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ If you want to develop new features or use the (potentially unstable) in-development version, you can set up a development environment for this server. -LDF Server requires [Node.JS](http://nodejs.org/) 6.0 or higher and the [Yarn](https://yarnpkg.com/en/) package manager. +LDF Server requires [Node.JS](http://nodejs.org/) 10.0 or higher and the [Yarn](https://yarnpkg.com/en/) package manager. LDF Server is tested on OSX, Linux and Windows. This project can be setup by cloning and installing it as follows: diff --git a/package.json b/package.json index facdc90c..797d21f0 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "packages/*" ], "engines": { - "node": ">=6.0" + "node": ">=10.0" }, "devDependencies": { "chai": "^3.5.0", From 943801885c65c10dde19ccf183ae513f248a797d Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 26 Feb 2020 10:49:34 +0100 Subject: [PATCH 053/165] Use 3.x.x URI for core package --- packages/core/components/Controller.jsonld | 2 +- packages/core/components/Controller/Assets.jsonld | 2 +- .../core/components/Controller/Dereference.jsonld | 2 +- packages/core/components/Controller/NotFound.jsonld | 2 +- .../Controller/QuadPatternFragments.jsonld | 2 +- packages/core/components/Controller/Summary.jsonld | 2 +- packages/core/components/Controller/Timegate.jsonld | 2 +- packages/core/components/ControllerExtension.jsonld | 2 +- .../components/ControllerExtension/Memento.jsonld | 2 +- .../components/ControllerExtension/WebId.jsonld | 2 +- packages/core/components/Datasource.jsonld | 2 +- .../core/components/Datasource/Composite.jsonld | 2 +- packages/core/components/Datasource/Empty.jsonld | 2 +- packages/core/components/Datasource/Hdt.jsonld | 2 +- packages/core/components/Datasource/Index.jsonld | 2 +- packages/core/components/Datasource/JsonLd.jsonld | 2 +- packages/core/components/Datasource/Memory.jsonld | 2 +- packages/core/components/Datasource/N3.jsonld | 2 +- packages/core/components/Datasource/NQuads.jsonld | 2 +- packages/core/components/Datasource/NTriples.jsonld | 2 +- packages/core/components/Datasource/Sparql.jsonld | 2 +- packages/core/components/Datasource/Trig.jsonld | 2 +- packages/core/components/Datasource/Turtle.jsonld | 2 +- packages/core/components/Router.jsonld | 2 +- packages/core/components/Router/Datasource.jsonld | 2 +- packages/core/components/Router/Page.jsonld | 2 +- packages/core/components/Router/QuadPattern.jsonld | 2 +- packages/core/components/Server.jsonld | 2 +- packages/core/components/UrlData.jsonld | 2 +- packages/core/components/View.jsonld | 2 +- packages/core/components/View/Collection.jsonld | 2 +- packages/core/components/View/Html.jsonld | 2 +- packages/core/components/View/Html/Error.jsonld | 2 +- packages/core/components/View/Html/Forbidden.jsonld | 2 +- packages/core/components/View/Html/NotFound.jsonld | 2 +- packages/core/components/View/Html/Qpf.jsonld | 2 +- .../core/components/View/Html/Qpf/Memento.jsonld | 2 +- .../core/components/View/Html/Qpf/Summary.jsonld | 2 +- packages/core/components/View/Rdf.jsonld | 2 +- packages/core/components/View/Rdf/Error.jsonld | 2 +- packages/core/components/View/Rdf/NotFound.jsonld | 2 +- packages/core/components/View/Rdf/Qpf.jsonld | 2 +- .../core/components/View/Rdf/Qpf/Summary.jsonld | 2 +- packages/core/components/View/Rdf/Summary.jsonld | 2 +- packages/core/components/components.jsonld | 2 +- packages/core/components/context.jsonld | 2 +- packages/core/config/config-defaults.json | 2 +- packages/core/config/config-example.json | 2 +- packages/core/config/sets/controllers.json | 2 +- packages/core/config/sets/datasources.json | 2 +- packages/core/config/sets/prefixes.json | 2 +- packages/core/config/sets/routers.json | 2 +- packages/core/config/sets/views.json | 2 +- packages/core/package.json | 13 +++++-------- 54 files changed, 58 insertions(+), 61 deletions(-) diff --git a/packages/core/components/Controller.jsonld b/packages/core/components/Controller.jsonld index 0dd93157..a774821a 100644 --- a/packages/core/components/Controller.jsonld +++ b/packages/core/components/Controller.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Controller/Assets.jsonld b/packages/core/components/Controller/Assets.jsonld index a68afb89..5188e1dd 100644 --- a/packages/core/components/Controller/Assets.jsonld +++ b/packages/core/components/Controller/Assets.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Controller/Dereference.jsonld b/packages/core/components/Controller/Dereference.jsonld index 5a68bf9a..4bd8ceaa 100644 --- a/packages/core/components/Controller/Dereference.jsonld +++ b/packages/core/components/Controller/Dereference.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Controller/NotFound.jsonld b/packages/core/components/Controller/NotFound.jsonld index f59b91b8..2422f833 100644 --- a/packages/core/components/Controller/NotFound.jsonld +++ b/packages/core/components/Controller/NotFound.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Controller/QuadPatternFragments.jsonld b/packages/core/components/Controller/QuadPatternFragments.jsonld index 11c22a43..7eaddf06 100644 --- a/packages/core/components/Controller/QuadPatternFragments.jsonld +++ b/packages/core/components/Controller/QuadPatternFragments.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Controller/Summary.jsonld b/packages/core/components/Controller/Summary.jsonld index 723aedef..428ce300 100644 --- a/packages/core/components/Controller/Summary.jsonld +++ b/packages/core/components/Controller/Summary.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Controller/Timegate.jsonld b/packages/core/components/Controller/Timegate.jsonld index d70c4ce7..56314a60 100644 --- a/packages/core/components/Controller/Timegate.jsonld +++ b/packages/core/components/Controller/Timegate.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@graph": [ { diff --git a/packages/core/components/ControllerExtension.jsonld b/packages/core/components/ControllerExtension.jsonld index 7027a37a..3ce50cd8 100644 --- a/packages/core/components/ControllerExtension.jsonld +++ b/packages/core/components/ControllerExtension.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/ControllerExtension/Memento.jsonld b/packages/core/components/ControllerExtension/Memento.jsonld index 027915d4..d82c8507 100644 --- a/packages/core/components/ControllerExtension/Memento.jsonld +++ b/packages/core/components/ControllerExtension/Memento.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/ControllerExtension/WebId.jsonld b/packages/core/components/ControllerExtension/WebId.jsonld index 43d7f54f..d50e8e18 100644 --- a/packages/core/components/ControllerExtension/WebId.jsonld +++ b/packages/core/components/ControllerExtension/WebId.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource.jsonld b/packages/core/components/Datasource.jsonld index 504218a3..b1c37b5c 100644 --- a/packages/core/components/Datasource.jsonld +++ b/packages/core/components/Datasource.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/Composite.jsonld b/packages/core/components/Datasource/Composite.jsonld index 6d107173..e2f3317f 100644 --- a/packages/core/components/Datasource/Composite.jsonld +++ b/packages/core/components/Datasource/Composite.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/Empty.jsonld b/packages/core/components/Datasource/Empty.jsonld index c56c5e90..8896c252 100644 --- a/packages/core/components/Datasource/Empty.jsonld +++ b/packages/core/components/Datasource/Empty.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/Hdt.jsonld b/packages/core/components/Datasource/Hdt.jsonld index 40ff5544..2fd78df5 100644 --- a/packages/core/components/Datasource/Hdt.jsonld +++ b/packages/core/components/Datasource/Hdt.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/Index.jsonld b/packages/core/components/Datasource/Index.jsonld index bf7546bd..13612824 100644 --- a/packages/core/components/Datasource/Index.jsonld +++ b/packages/core/components/Datasource/Index.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/JsonLd.jsonld b/packages/core/components/Datasource/JsonLd.jsonld index 429454e4..a7d4084b 100644 --- a/packages/core/components/Datasource/JsonLd.jsonld +++ b/packages/core/components/Datasource/JsonLd.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/Memory.jsonld b/packages/core/components/Datasource/Memory.jsonld index 4560b097..2d1b5704 100644 --- a/packages/core/components/Datasource/Memory.jsonld +++ b/packages/core/components/Datasource/Memory.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/N3.jsonld b/packages/core/components/Datasource/N3.jsonld index d449ba8c..e7d8928c 100644 --- a/packages/core/components/Datasource/N3.jsonld +++ b/packages/core/components/Datasource/N3.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/NQuads.jsonld b/packages/core/components/Datasource/NQuads.jsonld index 305f6564..01082893 100644 --- a/packages/core/components/Datasource/NQuads.jsonld +++ b/packages/core/components/Datasource/NQuads.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/NTriples.jsonld b/packages/core/components/Datasource/NTriples.jsonld index caa20d30..4a2c6024 100644 --- a/packages/core/components/Datasource/NTriples.jsonld +++ b/packages/core/components/Datasource/NTriples.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/Sparql.jsonld b/packages/core/components/Datasource/Sparql.jsonld index f5a897c7..bb132d2e 100644 --- a/packages/core/components/Datasource/Sparql.jsonld +++ b/packages/core/components/Datasource/Sparql.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/Trig.jsonld b/packages/core/components/Datasource/Trig.jsonld index 7278729b..b397f6f8 100644 --- a/packages/core/components/Datasource/Trig.jsonld +++ b/packages/core/components/Datasource/Trig.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Datasource/Turtle.jsonld b/packages/core/components/Datasource/Turtle.jsonld index 72041993..6453df05 100644 --- a/packages/core/components/Datasource/Turtle.jsonld +++ b/packages/core/components/Datasource/Turtle.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Router.jsonld b/packages/core/components/Router.jsonld index 084d0bd4..53762768 100644 --- a/packages/core/components/Router.jsonld +++ b/packages/core/components/Router.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Router/Datasource.jsonld b/packages/core/components/Router/Datasource.jsonld index 7ff50ee9..edecc481 100644 --- a/packages/core/components/Router/Datasource.jsonld +++ b/packages/core/components/Router/Datasource.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Router/Page.jsonld b/packages/core/components/Router/Page.jsonld index e7b4ed6f..2e7f51dd 100644 --- a/packages/core/components/Router/Page.jsonld +++ b/packages/core/components/Router/Page.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Router/QuadPattern.jsonld b/packages/core/components/Router/QuadPattern.jsonld index 57c7033d..552d1da9 100644 --- a/packages/core/components/Router/QuadPattern.jsonld +++ b/packages/core/components/Router/QuadPattern.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/Server.jsonld b/packages/core/components/Server.jsonld index 4fcd26a8..bbc2cf23 100644 --- a/packages/core/components/Server.jsonld +++ b/packages/core/components/Server.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/UrlData.jsonld b/packages/core/components/UrlData.jsonld index 5602a114..a90e4047 100644 --- a/packages/core/components/UrlData.jsonld +++ b/packages/core/components/UrlData.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View.jsonld b/packages/core/components/View.jsonld index eed52faf..bf80d7fa 100644 --- a/packages/core/components/View.jsonld +++ b/packages/core/components/View.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Collection.jsonld b/packages/core/components/View/Collection.jsonld index a008c10d..db145704 100644 --- a/packages/core/components/View/Collection.jsonld +++ b/packages/core/components/View/Collection.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Html.jsonld b/packages/core/components/View/Html.jsonld index 9c05f8bc..890c6ee5 100644 --- a/packages/core/components/View/Html.jsonld +++ b/packages/core/components/View/Html.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Html/Error.jsonld b/packages/core/components/View/Html/Error.jsonld index a4be47a3..042ce310 100644 --- a/packages/core/components/View/Html/Error.jsonld +++ b/packages/core/components/View/Html/Error.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Html/Forbidden.jsonld b/packages/core/components/View/Html/Forbidden.jsonld index cf4e1c79..66fd7f79 100644 --- a/packages/core/components/View/Html/Forbidden.jsonld +++ b/packages/core/components/View/Html/Forbidden.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Html/NotFound.jsonld b/packages/core/components/View/Html/NotFound.jsonld index 4c5a72b8..e910937f 100644 --- a/packages/core/components/View/Html/NotFound.jsonld +++ b/packages/core/components/View/Html/NotFound.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Html/Qpf.jsonld b/packages/core/components/View/Html/Qpf.jsonld index b2b981d9..1bee55b4 100644 --- a/packages/core/components/View/Html/Qpf.jsonld +++ b/packages/core/components/View/Html/Qpf.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Html/Qpf/Memento.jsonld b/packages/core/components/View/Html/Qpf/Memento.jsonld index 54a703a4..3970410b 100644 --- a/packages/core/components/View/Html/Qpf/Memento.jsonld +++ b/packages/core/components/View/Html/Qpf/Memento.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Html/Qpf/Summary.jsonld b/packages/core/components/View/Html/Qpf/Summary.jsonld index 200ea532..e8ca180e 100644 --- a/packages/core/components/View/Html/Qpf/Summary.jsonld +++ b/packages/core/components/View/Html/Qpf/Summary.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Rdf.jsonld b/packages/core/components/View/Rdf.jsonld index 4ea74089..206e1da4 100644 --- a/packages/core/components/View/Rdf.jsonld +++ b/packages/core/components/View/Rdf.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Rdf/Error.jsonld b/packages/core/components/View/Rdf/Error.jsonld index ce25f3d3..166ef4f5 100644 --- a/packages/core/components/View/Rdf/Error.jsonld +++ b/packages/core/components/View/Rdf/Error.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Rdf/NotFound.jsonld b/packages/core/components/View/Rdf/NotFound.jsonld index 7be4544c..5c7db8b5 100644 --- a/packages/core/components/View/Rdf/NotFound.jsonld +++ b/packages/core/components/View/Rdf/NotFound.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Rdf/Qpf.jsonld b/packages/core/components/View/Rdf/Qpf.jsonld index 81d0ddce..8d63841f 100644 --- a/packages/core/components/View/Rdf/Qpf.jsonld +++ b/packages/core/components/View/Rdf/Qpf.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Rdf/Qpf/Summary.jsonld b/packages/core/components/View/Rdf/Qpf/Summary.jsonld index feb5612a..bee168bc 100644 --- a/packages/core/components/View/Rdf/Qpf/Summary.jsonld +++ b/packages/core/components/View/Rdf/Qpf/Summary.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/View/Rdf/Summary.jsonld b/packages/core/components/View/Rdf/Summary.jsonld index b24e3ef0..f54fc115 100644 --- a/packages/core/components/View/Rdf/Summary.jsonld +++ b/packages/core/components/View/Rdf/Summary.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/server", "components": [ diff --git a/packages/core/components/components.jsonld b/packages/core/components/components.jsonld index b6955f1f..ebe883a7 100644 --- a/packages/core/components/components.jsonld +++ b/packages/core/components/components.jsonld @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@id": "npmd:@ldf/server", "@type": "Module", "requireName": "ldf-server", diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index f9836368..cd295a3d 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -4,7 +4,7 @@ { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldfc": "npmd:@ldf/core/", - "files-ldfc": "ldfc:^1.0.0/", + "files-ldfc": "ldfc:^3.0.0/", "config": "files-ldfc:config/", "rdfa": "http://www.w3.org/ns/rdfa#", diff --git a/packages/core/config/config-defaults.json b/packages/core/config/config-defaults.json index 97599e8d..1f8f4f41 100644 --- a/packages/core/config/config-defaults.json +++ b/packages/core/config/config-defaults.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "@type": "Server", "import": [ diff --git a/packages/core/config/config-example.json b/packages/core/config/config-example.json index 4221ab01..81df411c 100644 --- a/packages/core/config/config-example.json +++ b/packages/core/config/config-example.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@graph": [ { "@id": "urn:ldf-server:my", diff --git a/packages/core/config/sets/controllers.json b/packages/core/config/sets/controllers.json index 8fd19735..f4f52b50 100644 --- a/packages/core/config/sets/controllers.json +++ b/packages/core/config/sets/controllers.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "controllers": [ diff --git a/packages/core/config/sets/datasources.json b/packages/core/config/sets/datasources.json index dd3cfff6..718c63ca 100644 --- a/packages/core/config/sets/datasources.json +++ b/packages/core/config/sets/datasources.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "datasources": [ diff --git a/packages/core/config/sets/prefixes.json b/packages/core/config/sets/prefixes.json index ebfa7671..ef9c9a50 100644 --- a/packages/core/config/sets/prefixes.json +++ b/packages/core/config/sets/prefixes.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "prefixes": [ diff --git a/packages/core/config/sets/routers.json b/packages/core/config/sets/routers.json index 9542e787..c5121cd7 100644 --- a/packages/core/config/sets/routers.json +++ b/packages/core/config/sets/routers.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "routers": [ diff --git a/packages/core/config/sets/views.json b/packages/core/config/sets/views.json index 3b01a625..f4f9ce43 100644 --- a/packages/core/config/sets/views.json +++ b/packages/core/config/sets/views.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "views": [ diff --git a/packages/core/package.json b/packages/core/package.json index b3097b7d..21b364ba 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,20 +1,17 @@ { - "name": "ldf-server", - "description": "Linked Data Fragments Server", + "name": "@ldf/core", + "description": "Linked Data Fragments Server - Core", "version": "2.2.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", "lsd:components": "components/components.jsonld", "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/context.jsonld": "components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld": "components/context.jsonld" }, "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/components/": "components/", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^1.0.0/config/": "config/" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/": "components/", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/config/": "config/" }, "license": "MIT", - "engines": { - "node": ">=6.0" - }, "bin": { "ldf-server": "./bin/ldf-server" }, From 1d40f7bcf9a94270c88e0237000b4bd2d4351afd Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 27 Feb 2020 11:47:23 +0100 Subject: [PATCH 054/165] Move datasources into separate packages --- packages/core/components/components.jsonld | 11 +---- packages/core/components/context.jsonld | 16 -------- packages/core/config/config-example.json | 6 ++- packages/core/{module.js => index.js} | 4 +- packages/core/package.json | 10 ++--- .../controllers/SummaryController-test.js | 8 ++-- .../core/test/datasources/Datasource-test.js | 2 +- packages/core/test/mocha.opts | 2 +- .../QuadPatternFragmentsRdfView-test.js | 2 +- packages/datasource-composite/README.md | 13 ++++++ .../components/Datasource/Composite.jsonld | 11 ++--- .../components/components.jsonld | 9 +++++ .../components/context.jsonld | 16 ++++++++ packages/datasource-composite/index.js | 8 ++++ .../lib/datasources/CompositeDatasource.js | 2 +- packages/datasource-composite/package.json | 35 ++++++++++++++++ packages/datasource-composite/test/.eslintrc | 18 +++++++++ .../datasources/CompositeDatasource-test.js | 16 ++++---- packages/datasource-composite/test/mocha.opts | 3 ++ packages/datasource-hdt/README.md | 13 ++++++ .../components/Datasource/Hdt.jsonld | 15 +++---- .../components/components.jsonld | 9 +++++ .../datasource-hdt/components/context.jsonld | 14 +++++++ packages/datasource-hdt/index.js | 8 ++++ .../lib/datasources/ExternalHdtDatasource.js | 2 +- .../lib/datasources/HdtDatasource.js | 2 +- packages/datasource-hdt/package.json | 38 ++++++++++++++++++ packages/datasource-hdt/test/.eslintrc | 18 +++++++++ .../test/datasources/HdtDatasource-test.js | 8 ++-- packages/datasource-hdt/test/mocha.opts | 3 ++ packages/datasource-jsonld/README.md | 13 ++++++ .../components/Datasource/JsonLd.jsonld | 7 ++-- .../components/components.jsonld | 9 +++++ .../components/context.jsonld | 12 ++++++ packages/datasource-jsonld/index.js | 8 ++++ .../lib/datasources/JsonLdDatasource.js | 2 +- packages/datasource-jsonld/package.json | 35 ++++++++++++++++ packages/datasource-jsonld/test/.eslintrc | 18 +++++++++ .../test/datasources/JsonLdDatasource-test.js | 6 +-- packages/datasource-jsonld/test/mocha.opts | 3 ++ packages/datasource-n3/README.md | 13 ++++++ .../components/Datasource/N3.jsonld | 7 ++-- .../components/Datasource/NQuads.jsonld | 7 ++-- .../components/Datasource/NTriples.jsonld | 7 ++-- .../components/Datasource/Trig.jsonld | 7 ++-- .../components/Datasource/Turtle.jsonld | 7 ++-- .../components/components.jsonld | 13 ++++++ .../datasource-n3/components/context.jsonld | 16 ++++++++ packages/datasource-n3/index.js | 12 ++++++ .../lib/datasources/N3Datasource.js | 2 +- .../lib/datasources/NQuadsDatasource.js | 0 .../lib/datasources/NTriplesDatasource.js | 0 .../lib/datasources/TrigDatasource.js | 0 .../lib/datasources/TurtleDatasource.js | 0 packages/datasource-n3/package.json | 35 ++++++++++++++++ packages/datasource-n3/test/.eslintrc | 18 +++++++++ .../test/datasources/N3Datasource-test.js | 6 +-- packages/datasource-n3/test/mocha.opts | 3 ++ packages/datasource-sparql/README.md | 13 ++++++ .../components/Datasource/Sparql.jsonld | 11 ++--- .../components/components.jsonld | 9 +++++ .../components/context.jsonld | 13 ++++++ packages/datasource-sparql/index.js | 8 ++++ .../lib/datasources/SparqlDatasource.js | 2 +- packages/datasource-sparql/package.json | 36 +++++++++++++++++ packages/datasource-sparql/test/.eslintrc | 18 +++++++++ .../test/datasources/SparqlDatasource-test.js | 6 +-- packages/datasource-sparql/test/mocha.opts | 3 ++ .../basic-fragment-metadata-last.jsonld | 0 .../assets/basic-fragment-metadata-last.nq | 0 .../assets/basic-fragment-metadata-last.nt | 0 .../assets/basic-fragment-metadata-last.trig | 0 .../assets/basic-fragment-metadata-last.ttl | 0 .../assets/basic-fragment.jsonld | 0 .../test => test}/assets/basic-fragment.nq | 0 .../test => test}/assets/basic-fragment.nt | 0 .../test => test}/assets/basic-fragment.trig | 0 .../test => test}/assets/basic-fragment.ttl | 0 .../assets/empty-fragment.jsonld | 0 .../test => test}/assets/empty-fragment.nq | 0 .../test => test}/assets/empty-fragment.nt | 0 .../test => test}/assets/empty-fragment.trig | 0 .../test => test}/assets/empty-fragment.ttl | 0 .../assets/sparql-quads-response.json | 0 .../core/test => test}/assets/summary.nt | 0 .../core/test => test}/assets/summary.ttl | 0 .../core/test => test}/assets/test-blank.hdt | Bin .../core/test => test}/assets/test-blank.ttl | 0 {packages/core/test => test}/assets/test.hdt | Bin .../core/test => test}/assets/test.jsonld | 0 {packages/core/test => test}/assets/test.trig | 0 {packages/core/test => test}/assets/test.ttl | 0 {packages/core/test => test}/test-setup.js | 0 93 files changed, 604 insertions(+), 103 deletions(-) rename packages/core/{module.js => index.js} (92%) create mode 100644 packages/datasource-composite/README.md rename packages/{core => datasource-composite}/components/Datasource/Composite.jsonld (70%) create mode 100644 packages/datasource-composite/components/components.jsonld create mode 100644 packages/datasource-composite/components/context.jsonld create mode 100644 packages/datasource-composite/index.js rename packages/{core => datasource-composite}/lib/datasources/CompositeDatasource.js (99%) create mode 100644 packages/datasource-composite/package.json create mode 100644 packages/datasource-composite/test/.eslintrc rename packages/{core => datasource-composite}/test/datasources/CompositeDatasource-test.js (91%) create mode 100644 packages/datasource-composite/test/mocha.opts create mode 100644 packages/datasource-hdt/README.md rename packages/{core => datasource-hdt}/components/Datasource/Hdt.jsonld (67%) create mode 100644 packages/datasource-hdt/components/components.jsonld create mode 100644 packages/datasource-hdt/components/context.jsonld create mode 100644 packages/datasource-hdt/index.js rename packages/{core => datasource-hdt}/lib/datasources/ExternalHdtDatasource.js (98%) rename packages/{core => datasource-hdt}/lib/datasources/HdtDatasource.js (97%) create mode 100644 packages/datasource-hdt/package.json create mode 100644 packages/datasource-hdt/test/.eslintrc rename packages/{core => datasource-hdt}/test/datasources/HdtDatasource-test.js (96%) create mode 100644 packages/datasource-hdt/test/mocha.opts create mode 100644 packages/datasource-jsonld/README.md rename packages/{core => datasource-jsonld}/components/Datasource/JsonLd.jsonld (64%) create mode 100644 packages/datasource-jsonld/components/components.jsonld create mode 100644 packages/datasource-jsonld/components/context.jsonld create mode 100644 packages/datasource-jsonld/index.js rename packages/{core => datasource-jsonld}/lib/datasources/JsonLdDatasource.js (96%) create mode 100644 packages/datasource-jsonld/package.json create mode 100644 packages/datasource-jsonld/test/.eslintrc rename packages/{core => datasource-jsonld}/test/datasources/JsonLdDatasource-test.js (94%) create mode 100644 packages/datasource-jsonld/test/mocha.opts create mode 100644 packages/datasource-n3/README.md rename packages/{core => datasource-n3}/components/Datasource/N3.jsonld (66%) rename packages/{core => datasource-n3}/components/Datasource/NQuads.jsonld (66%) rename packages/{core => datasource-n3}/components/Datasource/NTriples.jsonld (66%) rename packages/{core => datasource-n3}/components/Datasource/Trig.jsonld (66%) rename packages/{core => datasource-n3}/components/Datasource/Turtle.jsonld (66%) create mode 100644 packages/datasource-n3/components/components.jsonld create mode 100644 packages/datasource-n3/components/context.jsonld create mode 100644 packages/datasource-n3/index.js rename packages/{core => datasource-n3}/lib/datasources/N3Datasource.js (92%) rename packages/{core => datasource-n3}/lib/datasources/NQuadsDatasource.js (100%) rename packages/{core => datasource-n3}/lib/datasources/NTriplesDatasource.js (100%) rename packages/{core => datasource-n3}/lib/datasources/TrigDatasource.js (100%) rename packages/{core => datasource-n3}/lib/datasources/TurtleDatasource.js (100%) create mode 100644 packages/datasource-n3/package.json create mode 100644 packages/datasource-n3/test/.eslintrc rename packages/{core => datasource-n3}/test/datasources/N3Datasource-test.js (94%) create mode 100644 packages/datasource-n3/test/mocha.opts create mode 100644 packages/datasource-sparql/README.md rename packages/{core => datasource-sparql}/components/Datasource/Sparql.jsonld (66%) create mode 100644 packages/datasource-sparql/components/components.jsonld create mode 100644 packages/datasource-sparql/components/context.jsonld create mode 100644 packages/datasource-sparql/index.js rename packages/{core => datasource-sparql}/lib/datasources/SparqlDatasource.js (99%) create mode 100644 packages/datasource-sparql/package.json create mode 100644 packages/datasource-sparql/test/.eslintrc rename packages/{core => datasource-sparql}/test/datasources/SparqlDatasource-test.js (98%) create mode 100644 packages/datasource-sparql/test/mocha.opts rename {packages/core/test => test}/assets/basic-fragment-metadata-last.jsonld (100%) rename {packages/core/test => test}/assets/basic-fragment-metadata-last.nq (100%) rename {packages/core/test => test}/assets/basic-fragment-metadata-last.nt (100%) rename {packages/core/test => test}/assets/basic-fragment-metadata-last.trig (100%) rename {packages/core/test => test}/assets/basic-fragment-metadata-last.ttl (100%) rename {packages/core/test => test}/assets/basic-fragment.jsonld (100%) rename {packages/core/test => test}/assets/basic-fragment.nq (100%) rename {packages/core/test => test}/assets/basic-fragment.nt (100%) rename {packages/core/test => test}/assets/basic-fragment.trig (100%) rename {packages/core/test => test}/assets/basic-fragment.ttl (100%) rename {packages/core/test => test}/assets/empty-fragment.jsonld (100%) rename {packages/core/test => test}/assets/empty-fragment.nq (100%) rename {packages/core/test => test}/assets/empty-fragment.nt (100%) rename {packages/core/test => test}/assets/empty-fragment.trig (100%) rename {packages/core/test => test}/assets/empty-fragment.ttl (100%) rename {packages/core/test => test}/assets/sparql-quads-response.json (100%) rename {packages/core/test => test}/assets/summary.nt (100%) rename {packages/core/test => test}/assets/summary.ttl (100%) rename {packages/core/test => test}/assets/test-blank.hdt (100%) rename {packages/core/test => test}/assets/test-blank.ttl (100%) rename {packages/core/test => test}/assets/test.hdt (100%) rename {packages/core/test => test}/assets/test.jsonld (100%) rename {packages/core/test => test}/assets/test.trig (100%) rename {packages/core/test => test}/assets/test.ttl (100%) rename {packages/core/test => test}/test-setup.js (100%) diff --git a/packages/core/components/components.jsonld b/packages/core/components/components.jsonld index ebe883a7..16b0b156 100644 --- a/packages/core/components/components.jsonld +++ b/packages/core/components/components.jsonld @@ -2,7 +2,7 @@ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "@id": "npmd:@ldf/server", "@type": "Module", - "requireName": "ldf-server", + "requireName": "@ldf/core", "import": [ "files-ldfc:components/Controller/Assets.jsonld", "files-ldfc:components/Controller/Dereference.jsonld", @@ -14,18 +14,9 @@ "files-ldfc:components/ControllerExtension/Memento.jsonld", "files-ldfc:components/ControllerExtension/WebId.jsonld", - "files-ldfc:components/Datasource/Composite.jsonld", "files-ldfc:components/Datasource/Empty.jsonld", - "files-ldfc:components/Datasource/Hdt.jsonld", "files-ldfc:components/Datasource/Index.jsonld", - "files-ldfc:components/Datasource/JsonLd.jsonld", "files-ldfc:components/Datasource/Memory.jsonld", - "files-ldfc:components/Datasource/N3.jsonld", - "files-ldfc:components/Datasource/NQuads.jsonld", - "files-ldfc:components/Datasource/NTriples.jsonld", - "files-ldfc:components/Datasource/Sparql.jsonld", - "files-ldfc:components/Datasource/Trig.jsonld", - "files-ldfc:components/Datasource/Turtle.jsonld", "files-ldfc:components/Router/Datasource.jsonld", "files-ldfc:components/Router/Page.jsonld", diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index cd295a3d..64f71584 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -36,18 +36,9 @@ "MementoControllerExtension": "ldfc:ControllerExtension/Memento", - "CompositeDatasource": "ldfc:Datasource/Composite", "EmptyDatasource": "ldfc:Datasource/Empty", - "HdtDatasource": "ldfc:Datasource/Hdt", "IndexDatasource": "ldfc:Datasource/Index", - "JsonLdDatasource": "ldfc:Datasource/JsonLd", "MemoryDatasource": "ldfc:Datasource/Memory", - "N3Datasource": "ldfc:Datasource/N3", - "NQuadsDatasource": "ldfc:Datasource/NQuads", - "NTriplesDatasource": "ldfc:Datasource/NTriples", - "SparqlDatasource": "ldfc:Datasource/Sparql", - "TrigDatasource": "ldfc:Datasource/Trig", - "TurtleDatasource": "ldfc:Datasource/Turtle", "datasourceTitle": "ldfc:Datasource#title", "description": "ldfc:Datasource#description", "datasourcePath": "ldfc:Datasource#path", @@ -58,15 +49,8 @@ "licenseUrl": "ldfc:Datasource#licenseUrl", "copyright": "ldfc:Datasource#copyright", "homepage": "ldfc:Datasource#homepage", - "hdtFile": "ldfc:Datasource/Hdt#file", - "hdtExternal": "ldfc:Datasource/Hdt#external", - "sparqlEndpoint": "ldfc:Datasource/Sparql#endpoint", "datasourceFile": "ldfc:Datasource/Memory#file", "datasourceUrl": "ldfc:Datasource/Memory#url", - "compose": { - "@id": "ldfc:Datasource/Composite#compose", - "@type": "@id" - }, "DatasourceRouter": "ldfc:Router/Datasource", "PageRouter": "ldfc:Router/Page", diff --git a/packages/core/config/config-example.json b/packages/core/config/config-example.json index 81df411c..cae70578 100644 --- a/packages/core/config/config-example.json +++ b/packages/core/config/config-example.json @@ -1,5 +1,9 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld" + ], "@graph": [ { "@id": "urn:ldf-server:my", diff --git a/packages/core/module.js b/packages/core/index.js similarity index 92% rename from packages/core/module.js rename to packages/core/index.js index 98f35434..794a6bfa 100644 --- a/packages/core/module.js +++ b/packages/core/index.js @@ -17,7 +17,9 @@ function readModules(folder) { var scriptMatch = name.match(/(\w+)\.js$/); if (scriptMatch) { try { modules[scriptMatch[1]] = require(location); } - catch (error) { /* ignore modules that cannot be instantiated */ } + catch (error) { + console.error(error); // TODO + } } } // Add folders by recursing over them diff --git a/packages/core/package.json b/packages/core/package.json index 21b364ba..76062f23 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -15,11 +15,11 @@ "bin": { "ldf-server": "./bin/ldf-server" }, - "main": "module.js", - "repository": { - "type": "git", - "url": "git@github.com:LinkedDataFragments/Server.js.git" + "main": "index.js", + "publishConfig": { + "access": "public" }, + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core", "bugs": { "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, @@ -30,7 +30,6 @@ "dependencies": { "asynciterator": "^1.1.0", "forwarded-parse": "^2.0.0", - "jsonld": "^0.4.11", "lodash": "^2.4.2", "lru-cache": "^4.0.1", "componentsjs": "3.3.0", @@ -44,7 +43,6 @@ }, "optionalDependencies": { "access-log": "^0.3.9", - "hdt": "^2.1.3", "parse-cache-control": "^1.0.1" } } diff --git a/packages/core/test/controllers/SummaryController-test.js b/packages/core/test/controllers/SummaryController-test.js index dfcfa095..48685c1f 100644 --- a/packages/core/test/controllers/SummaryController-test.js +++ b/packages/core/test/controllers/SummaryController-test.js @@ -28,7 +28,7 @@ describe('SummaryController', function () { before(function () { controller = new SummaryController({ views: [new SummaryRdfView()], - summaries: { dir: path.join(__dirname, '/../assets') }, + summaries: { dir: path.join(__dirname, '/../../../../test/assets') }, prefixes: { ds: 'http://semweb.mmlab.be/ns/datasummaries#', rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', @@ -39,7 +39,7 @@ describe('SummaryController', function () { it('should correctly serve summary in Turtle', function (done) { client.get('/summaries/summary').set('Accept', 'text/turtle').expect(function (response) { - var summary = fs.readFileSync(path.join(__dirname, '/../assets/summary.ttl'), 'utf8'); + var summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.ttl'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'text/turtle;charset=utf-8'); @@ -50,7 +50,7 @@ describe('SummaryController', function () { it('should correctly serve summary in Trig', function (done) { client.get('/summaries/summary').expect(function (response) { - var summary = fs.readFileSync(path.join(__dirname, '/../assets/summary.ttl'), 'utf8'); + var summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.ttl'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'application/trig;charset=utf-8'); @@ -61,7 +61,7 @@ describe('SummaryController', function () { it('should correctly serve summary in ntriples', function (done) { client.get('/summaries/summary').set('Accept', 'application/n-triples').expect(function (response) { - var summary = fs.readFileSync(path.join(__dirname, '/../assets/summary.nt'), 'utf8'); + var summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.nt'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'application/n-triples;charset=utf-8'); diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index e2185612..5cac53e3 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -5,7 +5,7 @@ var EventEmitter = require('events'), fs = require('fs'), path = require('path'); -var exampleFile = path.join(__dirname, '../assets/test.ttl'); +var exampleFile = path.join(__dirname, '../../../../test/assets/test.ttl'); describe('Datasource', function () { describe('The Datasource module', function () { diff --git a/packages/core/test/mocha.opts b/packages/core/test/mocha.opts index 9f4ccf85..7014624f 100644 --- a/packages/core/test/mocha.opts +++ b/packages/core/test/mocha.opts @@ -1,3 +1,3 @@ ---require test/test-setup +--require ../../test/test-setup --recursive --timeout 500 diff --git a/packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js b/packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js index 8a63f7ea..1f4a5e56 100644 --- a/packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js +++ b/packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js @@ -62,7 +62,7 @@ describe('QuadPatternFragmentsRdfView', function () { function (extension, format) { describe('when render is called for ' + format, function () { function readAsset(name) { - var file = path.join(__dirname, '../../assets/', name + '.' + extension); + var file = path.join(__dirname, '../../../../../test/assets/', name + '.' + extension); return fs.readFileSync(file, 'utf8'); } diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md new file mode 100644 index 00000000..1b7540db --- /dev/null +++ b/packages/datasource-composite/README.md @@ -0,0 +1,13 @@ +# Linked Data Fragments Server - Composite Datasource + + +This module contains a composite datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +It delegates queries to an sequence of other datasources. + +TODO: add documentation + +## License +The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/Datasource/Composite.jsonld b/packages/datasource-composite/components/Datasource/Composite.jsonld similarity index 70% rename from packages/core/components/Datasource/Composite.jsonld rename to packages/datasource-composite/components/Datasource/Composite.jsonld index e2f3317f..f50a63f9 100644 --- a/packages/core/components/Datasource/Composite.jsonld +++ b/packages/datasource-composite/components/Datasource/Composite.jsonld @@ -1,18 +1,19 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-composite", "components": [ { - "@id": "ldfc:Datasource/Composite", + "@id": "ldfdc:Datasource/Composite", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.CompositeDatasource", "comment": "A CompositeDatasource delegates queries to an consecutive list of datasources", "parameters": [ { - "@id": "ldfc:Datasource/Composite#compose", + "@id": "ldfdc:Datasource/Composite#compose", "comment": "The datasource references list", "range": "ldfc:Datasource" } @@ -25,7 +26,7 @@ "value": { "fields": [ { - "collectEntries": "ldfc:Datasource/Composite#compose", + "collectEntries": "ldfdc:Datasource/Composite#compose", "key": "rdf:subject", "value": "rdf:object" } diff --git a/packages/datasource-composite/components/components.jsonld b/packages/datasource-composite/components/components.jsonld new file mode 100644 index 00000000..f26e2836 --- /dev/null +++ b/packages/datasource-composite/components/components.jsonld @@ -0,0 +1,9 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/datasource-composite", + "@type": "Module", + "requireName": "@ldf/datasource-composite", + "import": [ + "files-ldfdc:components/Datasource/Composite.jsonld" + ] +} diff --git a/packages/datasource-composite/components/context.jsonld b/packages/datasource-composite/components/context.jsonld new file mode 100644 index 00000000..e3de9cab --- /dev/null +++ b/packages/datasource-composite/components/context.jsonld @@ -0,0 +1,16 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldfdc": "npmd:@ldf/datasource-composite/", + "files-ldfdc": "ldfdc:^3.0.0/", + + "CompositeDatasource": "ldfc:Datasource/Composite", + "compose": { + "@id": "ldfc:Datasource/Composite#compose", + "@type": "@id" + } + } + ] +} diff --git a/packages/datasource-composite/index.js b/packages/datasource-composite/index.js new file mode 100644 index 00000000..1608573d --- /dev/null +++ b/packages/datasource-composite/index.js @@ -0,0 +1,8 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + datasources: { + CompositeDatasource: require('./lib/datasources/CompositeDatasource'), + }, +}; diff --git a/packages/core/lib/datasources/CompositeDatasource.js b/packages/datasource-composite/lib/datasources/CompositeDatasource.js similarity index 99% rename from packages/core/lib/datasources/CompositeDatasource.js rename to packages/datasource-composite/lib/datasources/CompositeDatasource.js index 0c40364b..567b300b 100644 --- a/packages/core/lib/datasources/CompositeDatasource.js +++ b/packages/datasource-composite/lib/datasources/CompositeDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2016 Ruben Taelman, Ghent University - imec */ /* A CompositeDatasource delegates queries to an consecutive list of datasources. */ -var Datasource = require('./Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, LRU = require('lru-cache'); // Creates a new CompositeDatasource diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json new file mode 100644 index 00000000..34498179 --- /dev/null +++ b/packages/datasource-composite/package.json @@ -0,0 +1,35 @@ +{ + "name": "@ldf/datasource-composite", + "description": "Linked Data Fragments Server - Composite Datasource", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "lru-cache": "^4.0.1" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + } +} diff --git a/packages/datasource-composite/test/.eslintrc b/packages/datasource-composite/test/.eslintrc new file mode 100644 index 00000000..aa46bea4 --- /dev/null +++ b/packages/datasource-composite/test/.eslintrc @@ -0,0 +1,18 @@ +{ + globals: { + describe: true, + it: true, + before: true, + after: true, + beforeEach: true, + afterEach: true, + expect: true, + sinon: true, + test: true, + }, + + rules: { + new-cap: 0, // test constructors as regular functions + max-nested-callbacks: 0, // Mocha works with deeply nested callbacks + }, +} diff --git a/packages/core/test/datasources/CompositeDatasource-test.js b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js similarity index 91% rename from packages/core/test/datasources/CompositeDatasource-test.js rename to packages/datasource-composite/test/datasources/CompositeDatasource-test.js index 66098a30..47dc884b 100644 --- a/packages/core/test/datasources/CompositeDatasource-test.js +++ b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js @@ -1,15 +1,15 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var CompositeDatasource = require('../../lib/datasources/CompositeDatasource'); +var CompositeDatasource = require('../../').datasources.CompositeDatasource; -var Datasource = require('../../lib/datasources/Datasource'), - HdtDatasource = require('../../lib/datasources/HdtDatasource'), - N3Datasource = require('../../lib/datasources/N3Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, + HdtDatasource = require('@ldf/datasource-hdt').datasources.HdtDatasource, + N3Datasource = require('@ldf/datasource-n3').datasources.N3Datasource, path = require('path'); -var exampleHdtFile = path.join(__dirname, '../assets/test.hdt'); -var exampleHdtFileWithBlanks = path.join(__dirname, '../assets/test-blank.hdt'); -var exampleTurtleUrl = 'file://' + path.join(__dirname, '../assets/test.ttl'); -var exampleTrigUrl = 'file://' + path.join(__dirname, '../assets/test.trig'); +var exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); +var exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); +var exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); +var exampleTrigUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.trig'); describe('CompositeDatasource', function () { var datasources = { diff --git a/packages/datasource-composite/test/mocha.opts b/packages/datasource-composite/test/mocha.opts new file mode 100644 index 00000000..7014624f --- /dev/null +++ b/packages/datasource-composite/test/mocha.opts @@ -0,0 +1,3 @@ +--require ../../test/test-setup +--recursive +--timeout 500 diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md new file mode 100644 index 00000000..f62ad620 --- /dev/null +++ b/packages/datasource-hdt/README.md @@ -0,0 +1,13 @@ +# Linked Data Fragments Server - HDT Datasource + + +This module contains a HDT datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +It allows HDT files to be loaded. + +TODO: add documentation + +## License +The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/Datasource/Hdt.jsonld b/packages/datasource-hdt/components/Datasource/Hdt.jsonld similarity index 67% rename from packages/core/components/Datasource/Hdt.jsonld rename to packages/datasource-hdt/components/Datasource/Hdt.jsonld index 2fd78df5..3a73ff06 100644 --- a/packages/core/components/Datasource/Hdt.jsonld +++ b/packages/datasource-hdt/components/Datasource/Hdt.jsonld @@ -1,24 +1,25 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-hdt", "components": [ { - "@id": "ldfc:Datasource/Hdt", + "@id": "ldfdh:Datasource/Hdt", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.HdtDatasource", "comment": "An HdtDatasource loads and queries an HDT document in-process", "parameters": [ { - "@id": "ldfc:Datasource/Hdt#file", + "@id": "ldfdh:Datasource/Hdt#file", "comment": "The HDT datasource source file", "range": "xsd:string", "unique": true }, { - "@id": "ldfc:Datasource/Hdt#external", + "@id": "ldfdh:Datasource/Hdt#external", "comment": "Switch to external HDT datasource if true", "range": "xsd:string", "unique": true @@ -29,11 +30,11 @@ "fields": [ { "keyRaw": "file", - "value": "ldfc:Datasource/Hdt#file" + "value": "ldfdh:Datasource/Hdt#file" }, { "keyRaw": "external", - "value": "ldfc:Datasource/Hdt#external" + "value": "ldfdh:Datasource/Hdt#external" } ] } diff --git a/packages/datasource-hdt/components/components.jsonld b/packages/datasource-hdt/components/components.jsonld new file mode 100644 index 00000000..3152f9ce --- /dev/null +++ b/packages/datasource-hdt/components/components.jsonld @@ -0,0 +1,9 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/datasource-hdt", + "@type": "Module", + "requireName": "@ldf/datasource-hdt", + "import": [ + "files-ldfdh:components/Datasource/Hdt.jsonld" + ] +} diff --git a/packages/datasource-hdt/components/context.jsonld b/packages/datasource-hdt/components/context.jsonld new file mode 100644 index 00000000..d3feb384 --- /dev/null +++ b/packages/datasource-hdt/components/context.jsonld @@ -0,0 +1,14 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldfdh": "npmd:@ldf/datasource-hdt/", + "files-ldfdh": "ldfdh:^3.0.0/", + + "HdtDatasource": "ldfdh:Datasource/Hdt", + "hdtFile": "ldfdh:Datasource/Hdt#file", + "hdtExternal": "ldfdh:Datasource/Hdt#external" + } + ] +} diff --git a/packages/datasource-hdt/index.js b/packages/datasource-hdt/index.js new file mode 100644 index 00000000..60afe481 --- /dev/null +++ b/packages/datasource-hdt/index.js @@ -0,0 +1,8 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + datasources: { + HdtDatasource: require('./lib/datasources/HdtDatasource'), + }, +}; diff --git a/packages/core/lib/datasources/ExternalHdtDatasource.js b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js similarity index 98% rename from packages/core/lib/datasources/ExternalHdtDatasource.js rename to packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js index 51726787..19d37a4c 100644 --- a/packages/core/lib/datasources/ExternalHdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* An ExternalHdtDatasource uses an external process to query an HDT document. */ -var Datasource = require('./Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, fs = require('fs'), path = require('path'), N3Parser = require('n3').Parser, diff --git a/packages/core/lib/datasources/HdtDatasource.js b/packages/datasource-hdt/lib/datasources/HdtDatasource.js similarity index 97% rename from packages/core/lib/datasources/HdtDatasource.js rename to packages/datasource-hdt/lib/datasources/HdtDatasource.js index 48658268..0364f996 100644 --- a/packages/core/lib/datasources/HdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/HdtDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* An HdtDatasource loads and queries an HDT document in-process. */ -var Datasource = require('./Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, hdt = require('hdt'), ExternalHdtDatasource = require('./ExternalHdtDatasource'); diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json new file mode 100644 index 00000000..fdb81ead --- /dev/null +++ b/packages/datasource-hdt/package.json @@ -0,0 +1,38 @@ +{ + "name": "@ldf/datasource-hdt", + "description": "Linked Data Fragments Server - HDT Datasource", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "n3": "^0.9.0" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + }, + "optionalDependencies": { + "hdt": "^2.1.3" + } +} diff --git a/packages/datasource-hdt/test/.eslintrc b/packages/datasource-hdt/test/.eslintrc new file mode 100644 index 00000000..aa46bea4 --- /dev/null +++ b/packages/datasource-hdt/test/.eslintrc @@ -0,0 +1,18 @@ +{ + globals: { + describe: true, + it: true, + before: true, + after: true, + beforeEach: true, + afterEach: true, + expect: true, + sinon: true, + test: true, + }, + + rules: { + new-cap: 0, // test constructors as regular functions + max-nested-callbacks: 0, // Mocha works with deeply nested callbacks + }, +} diff --git a/packages/core/test/datasources/HdtDatasource-test.js b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js similarity index 96% rename from packages/core/test/datasources/HdtDatasource-test.js rename to packages/datasource-hdt/test/datasources/HdtDatasource-test.js index c6dea18e..e35bd13e 100644 --- a/packages/core/test/datasources/HdtDatasource-test.js +++ b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js @@ -1,11 +1,11 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ -var HdtDatasource = require('../../lib/datasources/HdtDatasource'); +var HdtDatasource = require('../../').datasources.HdtDatasource; -var Datasource = require('../../lib/datasources/Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, path = require('path'); -var exampleHdtFile = path.join(__dirname, '../assets/test.hdt'); -var exampleHdtFileWithBlanks = path.join(__dirname, '../assets/test-blank.hdt'); +var exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); +var exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); describe('HdtDatasource', function () { describe('The HdtDatasource module', function () { diff --git a/packages/datasource-hdt/test/mocha.opts b/packages/datasource-hdt/test/mocha.opts new file mode 100644 index 00000000..7014624f --- /dev/null +++ b/packages/datasource-hdt/test/mocha.opts @@ -0,0 +1,3 @@ +--require ../../test/test-setup +--recursive +--timeout 500 diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md new file mode 100644 index 00000000..1df581d7 --- /dev/null +++ b/packages/datasource-jsonld/README.md @@ -0,0 +1,13 @@ +# Linked Data Fragments Server - JSON-LD Datasource + + +This module contains a JSON-LD datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +It allows JSON-LD files to be loaded. + +TODO: add documentation + +## License +The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/Datasource/JsonLd.jsonld b/packages/datasource-jsonld/components/Datasource/JsonLd.jsonld similarity index 64% rename from packages/core/components/Datasource/JsonLd.jsonld rename to packages/datasource-jsonld/components/Datasource/JsonLd.jsonld index a7d4084b..a15753bf 100644 --- a/packages/core/components/Datasource/JsonLd.jsonld +++ b/packages/datasource-jsonld/components/Datasource/JsonLd.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-jsonld", "components": [ { - "@id": "ldfc:Datasource/JsonLd", + "@id": "ldfdj:Datasource/JsonLd", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.JsonLdDatasource", diff --git a/packages/datasource-jsonld/components/components.jsonld b/packages/datasource-jsonld/components/components.jsonld new file mode 100644 index 00000000..e317532f --- /dev/null +++ b/packages/datasource-jsonld/components/components.jsonld @@ -0,0 +1,9 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/datasource-jsonld", + "@type": "Module", + "requireName": "@ldf/datasource-jsonld", + "import": [ + "files-ldfdj:components/Datasource/JsonLd.jsonld" + ] +} diff --git a/packages/datasource-jsonld/components/context.jsonld b/packages/datasource-jsonld/components/context.jsonld new file mode 100644 index 00000000..c2e7c43e --- /dev/null +++ b/packages/datasource-jsonld/components/context.jsonld @@ -0,0 +1,12 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldfdj": "npmd:@ldf/datasource-jsonld/", + "files-ldfdj": "ldfdj:^3.0.0/", + + "JsonLdDatasource": "ldfdj:Datasource/JsonLd" + } + ] +} diff --git a/packages/datasource-jsonld/index.js b/packages/datasource-jsonld/index.js new file mode 100644 index 00000000..4de292bb --- /dev/null +++ b/packages/datasource-jsonld/index.js @@ -0,0 +1,8 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + datasources: { + JsonLdDatasource: require('./lib/datasources/JsonLdDatasource'), + }, +}; diff --git a/packages/core/lib/datasources/JsonLdDatasource.js b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js similarity index 96% rename from packages/core/lib/datasources/JsonLdDatasource.js rename to packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js index 0511c062..7a107acd 100644 --- a/packages/core/lib/datasources/JsonLdDatasource.js +++ b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* An JsonLdDatasource fetches data from a JSON-LD document. */ -var MemoryDatasource = require('./MemoryDatasource'), +var MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, jsonld = require('jsonld'); var ACCEPT = 'application/ld+json;q=1.0,application/json;q=0.7'; diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json new file mode 100644 index 00000000..ab50efbc --- /dev/null +++ b/packages/datasource-jsonld/package.json @@ -0,0 +1,35 @@ +{ + "name": "@ldf/datasource-jsonld", + "description": "Linked Data Fragments Server - JSON-LD Datasource", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "jsonld": "^0.4.11" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + } +} diff --git a/packages/datasource-jsonld/test/.eslintrc b/packages/datasource-jsonld/test/.eslintrc new file mode 100644 index 00000000..aa46bea4 --- /dev/null +++ b/packages/datasource-jsonld/test/.eslintrc @@ -0,0 +1,18 @@ +{ + globals: { + describe: true, + it: true, + before: true, + after: true, + beforeEach: true, + afterEach: true, + expect: true, + sinon: true, + test: true, + }, + + rules: { + new-cap: 0, // test constructors as regular functions + max-nested-callbacks: 0, // Mocha works with deeply nested callbacks + }, +} diff --git a/packages/core/test/datasources/JsonLdDatasource-test.js b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js similarity index 94% rename from packages/core/test/datasources/JsonLdDatasource-test.js rename to packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js index 17261c6d..187603ee 100644 --- a/packages/core/test/datasources/JsonLdDatasource-test.js +++ b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js @@ -1,10 +1,10 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ -var JsonLdDatasource = require('../../lib/datasources/JsonLdDatasource'); +var JsonLdDatasource = require('../../').datasources.JsonLdDatasource; -var Datasource = require('../../lib/datasources/Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, path = require('path'); -var exampleJsonLdUrl = 'file://' + path.join(__dirname, '../assets/test.jsonld'); +var exampleJsonLdUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.jsonld'); describe('JsonLdDatasource', function () { describe('The JsonLdDatasource module', function () { diff --git a/packages/datasource-jsonld/test/mocha.opts b/packages/datasource-jsonld/test/mocha.opts new file mode 100644 index 00000000..7014624f --- /dev/null +++ b/packages/datasource-jsonld/test/mocha.opts @@ -0,0 +1,3 @@ +--require ../../test/test-setup +--recursive +--timeout 500 diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md new file mode 100644 index 00000000..e012b881 --- /dev/null +++ b/packages/datasource-n3/README.md @@ -0,0 +1,13 @@ +# Linked Data Fragments Server - N3 Datasources + + +This module contains a N3 datasources for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +It allows N-Quads, N-Triples, Trig and Turtle files to be loaded. + +TODO: add documentation + +## License +The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/Datasource/N3.jsonld b/packages/datasource-n3/components/Datasource/N3.jsonld similarity index 66% rename from packages/core/components/Datasource/N3.jsonld rename to packages/datasource-n3/components/Datasource/N3.jsonld index e7d8928c..d4df5df1 100644 --- a/packages/core/components/Datasource/N3.jsonld +++ b/packages/datasource-n3/components/Datasource/N3.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-n3", "components": [ { - "@id": "ldfc:Datasource/N3", + "@id": "ldfdn:Datasource/N3", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.N3Datasource", diff --git a/packages/core/components/Datasource/NQuads.jsonld b/packages/datasource-n3/components/Datasource/NQuads.jsonld similarity index 66% rename from packages/core/components/Datasource/NQuads.jsonld rename to packages/datasource-n3/components/Datasource/NQuads.jsonld index 01082893..d286a006 100644 --- a/packages/core/components/Datasource/NQuads.jsonld +++ b/packages/datasource-n3/components/Datasource/NQuads.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-n3", "components": [ { - "@id": "ldfc:Datasource/NQuads", + "@id": "ldfdn:Datasource/NQuads", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.NQuadsDatasource", diff --git a/packages/core/components/Datasource/NTriples.jsonld b/packages/datasource-n3/components/Datasource/NTriples.jsonld similarity index 66% rename from packages/core/components/Datasource/NTriples.jsonld rename to packages/datasource-n3/components/Datasource/NTriples.jsonld index 4a2c6024..6763a7d8 100644 --- a/packages/core/components/Datasource/NTriples.jsonld +++ b/packages/datasource-n3/components/Datasource/NTriples.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-n3", "components": [ { - "@id": "ldfc:Datasource/NTriples", + "@id": "ldfdn:Datasource/NTriples", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.NTriplesDatasource", diff --git a/packages/core/components/Datasource/Trig.jsonld b/packages/datasource-n3/components/Datasource/Trig.jsonld similarity index 66% rename from packages/core/components/Datasource/Trig.jsonld rename to packages/datasource-n3/components/Datasource/Trig.jsonld index b397f6f8..7cced3c2 100644 --- a/packages/core/components/Datasource/Trig.jsonld +++ b/packages/datasource-n3/components/Datasource/Trig.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-n3", "components": [ { - "@id": "ldfc:Datasource/Trig", + "@id": "ldfdn:Datasource/Trig", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.TrigDatasource", diff --git a/packages/core/components/Datasource/Turtle.jsonld b/packages/datasource-n3/components/Datasource/Turtle.jsonld similarity index 66% rename from packages/core/components/Datasource/Turtle.jsonld rename to packages/datasource-n3/components/Datasource/Turtle.jsonld index 6453df05..3d4da7f2 100644 --- a/packages/core/components/Datasource/Turtle.jsonld +++ b/packages/datasource-n3/components/Datasource/Turtle.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-n3", "components": [ { - "@id": "ldfc:Datasource/Turtle", + "@id": "ldfdn:Datasource/Turtle", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.TurtleDatasource", diff --git a/packages/datasource-n3/components/components.jsonld b/packages/datasource-n3/components/components.jsonld new file mode 100644 index 00000000..c6ee57d0 --- /dev/null +++ b/packages/datasource-n3/components/components.jsonld @@ -0,0 +1,13 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/datasource-n3", + "@type": "Module", + "requireName": "@ldf/datasource-n3", + "import": [ + "files-ldfdn:components/Datasource/N3.jsonld", + "files-ldfdn:components/Datasource/NQuads.jsonld", + "files-ldfdn:components/Datasource/NTriples.jsonld", + "files-ldfdn:components/Datasource/Trig.jsonld", + "files-ldfdn:components/Datasource/Turtle.jsonld" + ] +} diff --git a/packages/datasource-n3/components/context.jsonld b/packages/datasource-n3/components/context.jsonld new file mode 100644 index 00000000..3800f7a2 --- /dev/null +++ b/packages/datasource-n3/components/context.jsonld @@ -0,0 +1,16 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldfdn": "npmd:@ldf/datasource-n3/", + "files-ldfdn": "ldfdn:^3.0.0/", + + "N3Datasource": "ldfdn:Datasource/N3", + "NQuadsDatasource": "ldfdn:Datasource/NQuads", + "NTriplesDatasource": "ldfdn:Datasource/NTriples", + "TrigDatasource": "ldfdn:Datasource/Trig", + "TurtleDatasource": "ldfdn:Datasource/Turtle" + } + ] +} diff --git a/packages/datasource-n3/index.js b/packages/datasource-n3/index.js new file mode 100644 index 00000000..90526dbf --- /dev/null +++ b/packages/datasource-n3/index.js @@ -0,0 +1,12 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + datasources: { + N3Datasource: require('./lib/datasources/N3Datasource'), + NQuadsDatasource: require('./lib/datasources/NQuadsDatasource'), + NTriplesDatasource: require('./lib/datasources/NTriplesDatasource'), + TrigDatasource: require('./lib/datasources/TrigDatasource'), + TurtleDatasource: require('./lib/datasources/TurtleDatasource'), + }, +}; diff --git a/packages/core/lib/datasources/N3Datasource.js b/packages/datasource-n3/lib/datasources/N3Datasource.js similarity index 92% rename from packages/core/lib/datasources/N3Datasource.js rename to packages/datasource-n3/lib/datasources/N3Datasource.js index ea3c645d..608a62e4 100644 --- a/packages/core/lib/datasources/N3Datasource.js +++ b/packages/datasource-n3/lib/datasources/N3Datasource.js @@ -1,7 +1,7 @@ /*! @license ©2014–2017 Ruben Verborgh, Ghent University - imec */ /** An N3Datasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents. */ -var MemoryDatasource = require('./MemoryDatasource'), +var MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, N3Parser = require('n3').Parser; var ACCEPT = 'application/trig;q=1.0,application/n-quads;q=0.9,text/turtle;q=0.8,application/n-triples;q=0.7,text/n3;q=0.4'; diff --git a/packages/core/lib/datasources/NQuadsDatasource.js b/packages/datasource-n3/lib/datasources/NQuadsDatasource.js similarity index 100% rename from packages/core/lib/datasources/NQuadsDatasource.js rename to packages/datasource-n3/lib/datasources/NQuadsDatasource.js diff --git a/packages/core/lib/datasources/NTriplesDatasource.js b/packages/datasource-n3/lib/datasources/NTriplesDatasource.js similarity index 100% rename from packages/core/lib/datasources/NTriplesDatasource.js rename to packages/datasource-n3/lib/datasources/NTriplesDatasource.js diff --git a/packages/core/lib/datasources/TrigDatasource.js b/packages/datasource-n3/lib/datasources/TrigDatasource.js similarity index 100% rename from packages/core/lib/datasources/TrigDatasource.js rename to packages/datasource-n3/lib/datasources/TrigDatasource.js diff --git a/packages/core/lib/datasources/TurtleDatasource.js b/packages/datasource-n3/lib/datasources/TurtleDatasource.js similarity index 100% rename from packages/core/lib/datasources/TurtleDatasource.js rename to packages/datasource-n3/lib/datasources/TurtleDatasource.js diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json new file mode 100644 index 00000000..f73091ad --- /dev/null +++ b/packages/datasource-n3/package.json @@ -0,0 +1,35 @@ +{ + "name": "@ldf/datasource-n3", + "description": "Linked Data Fragments Server - N3 Datasources", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "n3": "^0.9.0" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + } +} diff --git a/packages/datasource-n3/test/.eslintrc b/packages/datasource-n3/test/.eslintrc new file mode 100644 index 00000000..aa46bea4 --- /dev/null +++ b/packages/datasource-n3/test/.eslintrc @@ -0,0 +1,18 @@ +{ + globals: { + describe: true, + it: true, + before: true, + after: true, + beforeEach: true, + afterEach: true, + expect: true, + sinon: true, + test: true, + }, + + rules: { + new-cap: 0, // test constructors as regular functions + max-nested-callbacks: 0, // Mocha works with deeply nested callbacks + }, +} diff --git a/packages/core/test/datasources/N3Datasource-test.js b/packages/datasource-n3/test/datasources/N3Datasource-test.js similarity index 94% rename from packages/core/test/datasources/N3Datasource-test.js rename to packages/datasource-n3/test/datasources/N3Datasource-test.js index b884782d..a4b6b77c 100644 --- a/packages/core/test/datasources/N3Datasource-test.js +++ b/packages/datasource-n3/test/datasources/N3Datasource-test.js @@ -1,10 +1,10 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ -var N3Datasource = require('../../lib/datasources/N3Datasource'); +var N3Datasource = require('../../').datasources.N3Datasource; -var Datasource = require('../../lib/datasources/Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, path = require('path'); -var exampleTurtleUrl = 'file://' + path.join(__dirname, '../assets/test.ttl'); +var exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); describe('N3Datasource', function () { describe('The N3Datasource module', function () { diff --git a/packages/datasource-n3/test/mocha.opts b/packages/datasource-n3/test/mocha.opts new file mode 100644 index 00000000..7014624f --- /dev/null +++ b/packages/datasource-n3/test/mocha.opts @@ -0,0 +1,3 @@ +--require ../../test/test-setup +--recursive +--timeout 500 diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md new file mode 100644 index 00000000..273715e5 --- /dev/null +++ b/packages/datasource-sparql/README.md @@ -0,0 +1,13 @@ +# Linked Data Fragments Server - SPARQL Datasource + + +This module contains a SPARQL datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +It allows SPARQL endpoints to be used as a data proxy. + +TODO: add documentation + +## License +The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/Datasource/Sparql.jsonld b/packages/datasource-sparql/components/Datasource/Sparql.jsonld similarity index 66% rename from packages/core/components/Datasource/Sparql.jsonld rename to packages/datasource-sparql/components/Datasource/Sparql.jsonld index bb132d2e..9ac0ff36 100644 --- a/packages/core/components/Datasource/Sparql.jsonld +++ b/packages/datasource-sparql/components/Datasource/Sparql.jsonld @@ -1,18 +1,19 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/datasource-sparql", "components": [ { - "@id": "ldfc:Datasource/Sparql", + "@id": "ldfds:Datasource/Sparql", "@type": "Class", "extends": "ldfc:Datasource", "requireElement": "datasources.SparqlDatasource", "comment": "A SparqlDatasource provides queryable access to a SPARQL endpoint", "parameters": [ { - "@id": "ldfc:Datasource/Sparql#endpoint", + "@id": "ldfds:Datasource/Sparql#endpoint", "comment": "The SPARQL endpoint URL", "range": "xsd:string", "unique": true @@ -23,7 +24,7 @@ "fields": [ { "keyRaw": "endpoint", - "value": "ldfc:Datasource/Sparql#endpoint" + "value": "ldfds:Datasource/Sparql#endpoint" } ] } diff --git a/packages/datasource-sparql/components/components.jsonld b/packages/datasource-sparql/components/components.jsonld new file mode 100644 index 00000000..f453a73d --- /dev/null +++ b/packages/datasource-sparql/components/components.jsonld @@ -0,0 +1,9 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/datasource-sparql", + "@type": "Module", + "requireName": "@ldf/datasource-sparql", + "import": [ + "files-ldfds:components/Datasource/Sparql.jsonld" + ] +} diff --git a/packages/datasource-sparql/components/context.jsonld b/packages/datasource-sparql/components/context.jsonld new file mode 100644 index 00000000..02fe65b0 --- /dev/null +++ b/packages/datasource-sparql/components/context.jsonld @@ -0,0 +1,13 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldfds": "npmd:@ldf/datasource-sparql/", + "files-ldfds": "ldfds:^3.0.0/", + + "SparqlDatasource": "ldfds:Datasource/Sparql", + "sparqlEndpoint": "ldfds:Datasource/Sparql#endpoint" + } + ] +} diff --git a/packages/datasource-sparql/index.js b/packages/datasource-sparql/index.js new file mode 100644 index 00000000..52e3e844 --- /dev/null +++ b/packages/datasource-sparql/index.js @@ -0,0 +1,8 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + datasources: { + SparqlDatasource: require('./lib/datasources/SparqlDatasource'), + }, +}; diff --git a/packages/core/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js similarity index 99% rename from packages/core/lib/datasources/SparqlDatasource.js rename to packages/datasource-sparql/lib/datasources/SparqlDatasource.js index ef2cdd2e..6fd7809f 100644 --- a/packages/core/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* A SparqlDatasource provides queryable access to a SPARQL endpoint. */ -var Datasource = require('./Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, N3 = require('n3'), LRU = require('lru-cache'); diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json new file mode 100644 index 00000000..23d9fc22 --- /dev/null +++ b/packages/datasource-sparql/package.json @@ -0,0 +1,36 @@ +{ + "name": "@ldf/datasource-sparql", + "description": "Linked Data Fragments Server - SPARQL Datasource", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "lru-cache": "^4.0.1", + "n3": "^0.9.0" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + } +} diff --git a/packages/datasource-sparql/test/.eslintrc b/packages/datasource-sparql/test/.eslintrc new file mode 100644 index 00000000..aa46bea4 --- /dev/null +++ b/packages/datasource-sparql/test/.eslintrc @@ -0,0 +1,18 @@ +{ + globals: { + describe: true, + it: true, + before: true, + after: true, + beforeEach: true, + afterEach: true, + expect: true, + sinon: true, + test: true, + }, + + rules: { + new-cap: 0, // test constructors as regular functions + max-nested-callbacks: 0, // Mocha works with deeply nested callbacks + }, +} diff --git a/packages/core/test/datasources/SparqlDatasource-test.js b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js similarity index 98% rename from packages/core/test/datasources/SparqlDatasource-test.js rename to packages/datasource-sparql/test/datasources/SparqlDatasource-test.js index 26b6d421..032bd972 100644 --- a/packages/core/test/datasources/SparqlDatasource-test.js +++ b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js @@ -1,12 +1,12 @@ /*! @license MIT ©2013-2016 Ruben Verborgh, Ghent University - imec */ -var SparqlDatasource = require('../../lib/datasources/SparqlDatasource'); +var SparqlDatasource = require('../../').datasources.SparqlDatasource; -var Datasource = require('../../lib/datasources/Datasource'), +var Datasource = require('@ldf/core').datasources.Datasource, fs = require('fs'), path = require('path'), URL = require('url'); -var jsonResult = fs.readFileSync(path.join(__dirname, '../assets/sparql-quads-response.json')); +var jsonResult = fs.readFileSync(path.join(__dirname, '../../../../test/assets/sparql-quads-response.json')); var countResult = '"c"\n12345678\n'; describe('SparqlDatasource', function () { diff --git a/packages/datasource-sparql/test/mocha.opts b/packages/datasource-sparql/test/mocha.opts new file mode 100644 index 00000000..7014624f --- /dev/null +++ b/packages/datasource-sparql/test/mocha.opts @@ -0,0 +1,3 @@ +--require ../../test/test-setup +--recursive +--timeout 500 diff --git a/packages/core/test/assets/basic-fragment-metadata-last.jsonld b/test/assets/basic-fragment-metadata-last.jsonld similarity index 100% rename from packages/core/test/assets/basic-fragment-metadata-last.jsonld rename to test/assets/basic-fragment-metadata-last.jsonld diff --git a/packages/core/test/assets/basic-fragment-metadata-last.nq b/test/assets/basic-fragment-metadata-last.nq similarity index 100% rename from packages/core/test/assets/basic-fragment-metadata-last.nq rename to test/assets/basic-fragment-metadata-last.nq diff --git a/packages/core/test/assets/basic-fragment-metadata-last.nt b/test/assets/basic-fragment-metadata-last.nt similarity index 100% rename from packages/core/test/assets/basic-fragment-metadata-last.nt rename to test/assets/basic-fragment-metadata-last.nt diff --git a/packages/core/test/assets/basic-fragment-metadata-last.trig b/test/assets/basic-fragment-metadata-last.trig similarity index 100% rename from packages/core/test/assets/basic-fragment-metadata-last.trig rename to test/assets/basic-fragment-metadata-last.trig diff --git a/packages/core/test/assets/basic-fragment-metadata-last.ttl b/test/assets/basic-fragment-metadata-last.ttl similarity index 100% rename from packages/core/test/assets/basic-fragment-metadata-last.ttl rename to test/assets/basic-fragment-metadata-last.ttl diff --git a/packages/core/test/assets/basic-fragment.jsonld b/test/assets/basic-fragment.jsonld similarity index 100% rename from packages/core/test/assets/basic-fragment.jsonld rename to test/assets/basic-fragment.jsonld diff --git a/packages/core/test/assets/basic-fragment.nq b/test/assets/basic-fragment.nq similarity index 100% rename from packages/core/test/assets/basic-fragment.nq rename to test/assets/basic-fragment.nq diff --git a/packages/core/test/assets/basic-fragment.nt b/test/assets/basic-fragment.nt similarity index 100% rename from packages/core/test/assets/basic-fragment.nt rename to test/assets/basic-fragment.nt diff --git a/packages/core/test/assets/basic-fragment.trig b/test/assets/basic-fragment.trig similarity index 100% rename from packages/core/test/assets/basic-fragment.trig rename to test/assets/basic-fragment.trig diff --git a/packages/core/test/assets/basic-fragment.ttl b/test/assets/basic-fragment.ttl similarity index 100% rename from packages/core/test/assets/basic-fragment.ttl rename to test/assets/basic-fragment.ttl diff --git a/packages/core/test/assets/empty-fragment.jsonld b/test/assets/empty-fragment.jsonld similarity index 100% rename from packages/core/test/assets/empty-fragment.jsonld rename to test/assets/empty-fragment.jsonld diff --git a/packages/core/test/assets/empty-fragment.nq b/test/assets/empty-fragment.nq similarity index 100% rename from packages/core/test/assets/empty-fragment.nq rename to test/assets/empty-fragment.nq diff --git a/packages/core/test/assets/empty-fragment.nt b/test/assets/empty-fragment.nt similarity index 100% rename from packages/core/test/assets/empty-fragment.nt rename to test/assets/empty-fragment.nt diff --git a/packages/core/test/assets/empty-fragment.trig b/test/assets/empty-fragment.trig similarity index 100% rename from packages/core/test/assets/empty-fragment.trig rename to test/assets/empty-fragment.trig diff --git a/packages/core/test/assets/empty-fragment.ttl b/test/assets/empty-fragment.ttl similarity index 100% rename from packages/core/test/assets/empty-fragment.ttl rename to test/assets/empty-fragment.ttl diff --git a/packages/core/test/assets/sparql-quads-response.json b/test/assets/sparql-quads-response.json similarity index 100% rename from packages/core/test/assets/sparql-quads-response.json rename to test/assets/sparql-quads-response.json diff --git a/packages/core/test/assets/summary.nt b/test/assets/summary.nt similarity index 100% rename from packages/core/test/assets/summary.nt rename to test/assets/summary.nt diff --git a/packages/core/test/assets/summary.ttl b/test/assets/summary.ttl similarity index 100% rename from packages/core/test/assets/summary.ttl rename to test/assets/summary.ttl diff --git a/packages/core/test/assets/test-blank.hdt b/test/assets/test-blank.hdt similarity index 100% rename from packages/core/test/assets/test-blank.hdt rename to test/assets/test-blank.hdt diff --git a/packages/core/test/assets/test-blank.ttl b/test/assets/test-blank.ttl similarity index 100% rename from packages/core/test/assets/test-blank.ttl rename to test/assets/test-blank.ttl diff --git a/packages/core/test/assets/test.hdt b/test/assets/test.hdt similarity index 100% rename from packages/core/test/assets/test.hdt rename to test/assets/test.hdt diff --git a/packages/core/test/assets/test.jsonld b/test/assets/test.jsonld similarity index 100% rename from packages/core/test/assets/test.jsonld rename to test/assets/test.jsonld diff --git a/packages/core/test/assets/test.trig b/test/assets/test.trig similarity index 100% rename from packages/core/test/assets/test.trig rename to test/assets/test.trig diff --git a/packages/core/test/assets/test.ttl b/test/assets/test.ttl similarity index 100% rename from packages/core/test/assets/test.ttl rename to test/assets/test.ttl diff --git a/packages/core/test/test-setup.js b/test/test-setup.js similarity index 100% rename from packages/core/test/test-setup.js rename to test/test-setup.js From e0754b406e2083c74c02d8ad63a9195ff023bc81 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 27 Feb 2020 11:52:18 +0100 Subject: [PATCH 055/165] Publish all requires files to npm --- packages/core/package.json | 7 +++++++ packages/datasource-composite/package.json | 7 +++++++ packages/datasource-hdt/package.json | 7 +++++++ packages/datasource-jsonld/package.json | 7 +++++++ packages/datasource-n3/package.json | 7 +++++++ packages/datasource-sparql/package.json | 7 +++++++ 6 files changed, 42 insertions(+) diff --git a/packages/core/package.json b/packages/core/package.json index 76062f23..15e4d71e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -19,6 +19,13 @@ "publishConfig": { "access": "public" }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core", "bugs": { "url": "https://github.com/LinkedDataFragments/Server.js/issues" diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 34498179..81014ede 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -15,6 +15,13 @@ "publishConfig": { "access": "public" }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite", "bugs": { "url": "https://github.com/LinkedDataFragments/Server.js/issues" diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index fdb81ead..0b286824 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -15,6 +15,13 @@ "publishConfig": { "access": "public" }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt", "bugs": { "url": "https://github.com/LinkedDataFragments/Server.js/issues" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index ab50efbc..9c5bea39 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -15,6 +15,13 @@ "publishConfig": { "access": "public" }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld", "bugs": { "url": "https://github.com/LinkedDataFragments/Server.js/issues" diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index f73091ad..dbe4f4ad 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -15,6 +15,13 @@ "publishConfig": { "access": "public" }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3", "bugs": { "url": "https://github.com/LinkedDataFragments/Server.js/issues" diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 23d9fc22..e2b7492a 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -15,6 +15,13 @@ "publishConfig": { "access": "public" }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql", "bugs": { "url": "https://github.com/LinkedDataFragments/Server.js/issues" From caee0f5100c65135ed6988446c2cdb9786d1c117 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 27 Feb 2020 11:56:47 +0100 Subject: [PATCH 056/165] Optimize running of all tests in monorepo --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 797d21f0..7860eeb3 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,7 @@ "scripts": { "test-changed": "lerna run test --since HEAD", "lint-changed": "lerna run lint --since HEAD", - "test": "lerna run test", - "test-ci": "lerna run test", + "test": "mocha \"packages/*/test/**/*-test.js\" --recursive --require ./test/test-setup --timeout 500", "lint": "lerna run lint", "clean": "rm -rf ./node_modules && rm -rf ./packages/*/node_modules", "publish": "lerna publish", From f8b65924062f2ac95d56cd33cabf933618c95284 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 27 Feb 2020 12:39:06 +0100 Subject: [PATCH 057/165] Extract Memento feature into separate package --- README.md | 2 +- packages/core/README.md | 5 +-- packages/core/components/components.jsonld | 3 -- packages/core/components/context.jsonld | 7 --- packages/datasource-composite/README.md | 2 +- packages/datasource-hdt/README.md | 2 +- packages/datasource-jsonld/README.md | 2 +- packages/datasource-n3/README.md | 2 +- packages/datasource-sparql/README.md | 2 +- packages/feature-memento/README.md | 13 ++++++ .../components/Controller/Timegate.jsonld | 39 +++++++++-------- .../ControllerExtension/Memento.jsonld | 25 +++++++---- .../components/View/Html/Qpf/Memento.jsonld | 15 ++++--- .../components/components.jsonld | 11 +++++ .../feature-memento/components/context.jsonld | 18 ++++++++ packages/feature-memento/index.js | 14 ++++++ .../controllers/MementoControllerExtension.js | 2 +- .../lib/controllers/TimegateController.js | 2 +- .../QuadPatternFragmentsHtmlView-Memento.js | 2 +- .../lib/views/memento/memento-details.html | 0 packages/feature-memento/package.json | 43 +++++++++++++++++++ 21 files changed, 154 insertions(+), 57 deletions(-) create mode 100644 packages/feature-memento/README.md rename packages/{core => feature-memento}/components/Controller/Timegate.jsonld (69%) rename packages/{core => feature-memento}/components/ControllerExtension/Memento.jsonld (59%) rename packages/{core => feature-memento}/components/View/Html/Qpf/Memento.jsonld (67%) create mode 100644 packages/feature-memento/components/components.jsonld create mode 100644 packages/feature-memento/components/context.jsonld create mode 100644 packages/feature-memento/index.js rename packages/{core => feature-memento}/lib/controllers/MementoControllerExtension.js (97%) rename packages/{core => feature-memento}/lib/controllers/TimegateController.js (99%) rename packages/{core => feature-memento}/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js (95%) rename packages/{core => feature-memento}/lib/views/memento/memento-details.html (100%) create mode 100644 packages/feature-memento/package.json diff --git a/README.md b/README.md index 8f8eae56..f06673b0 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ to build, lint and test. These hooks can temporarily be disabled at your own risk by adding the `-n` flag to the commit command. ## License -The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/README.md b/packages/core/README.md index 433d66f9..e57f7821 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -200,10 +200,7 @@ $ docker run -p 3000:3000 -t -i --rm -v $(pwd)/config.json:/tmp/config.json ldf- You can [enable the Memento protocol](https://github.com/LinkedDataFragments/Server.js/wiki/Configuring-Memento) to offer different versions of an evolving dataset. ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/). - -## License -The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/components.jsonld b/packages/core/components/components.jsonld index 16b0b156..6933e9e9 100644 --- a/packages/core/components/components.jsonld +++ b/packages/core/components/components.jsonld @@ -9,9 +9,7 @@ "files-ldfc:components/Controller/NotFound.jsonld", "files-ldfc:components/Controller/QuadPatternFragments.jsonld", "files-ldfc:components/Controller/Summary.jsonld", - "files-ldfc:components/Controller/Timegate.jsonld", - "files-ldfc:components/ControllerExtension/Memento.jsonld", "files-ldfc:components/ControllerExtension/WebId.jsonld", "files-ldfc:components/Datasource/Empty.jsonld", @@ -22,7 +20,6 @@ "files-ldfc:components/Router/Page.jsonld", "files-ldfc:components/Router/QuadPattern.jsonld", - "files-ldfc:components/View/Html/Qpf/Memento.jsonld", "files-ldfc:components/View/Html/Qpf/Summary.jsonld", "files-ldfc:components/View/Html/Error.jsonld", "files-ldfc:components/View/Html/Forbidden.jsonld", diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 64f71584..6763481e 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -17,13 +17,6 @@ "TimegateController": "ldfc:Controller/Timegate", "summaryDir": "ldfc:Controller/Summary#directory", "summaryPath": "ldfc:Controller/Summary#path", - "timegatePath": "ldfc:Controller/Timegate#timegatePath", - "memento": "ldfc:Controller/Summary#memento", - "mementoVersions": "ldfc:Controller/Summary#mementoVersions", - "mementoDatasource": "ldfc:Controller/Summary#mementoDatasource", - "mementoVersionStart": "ldfc:Controller/Summary#mementoVersionStart", - "mementoVersionEnd": "ldfc:Controller/Summary#mementoVersionEnd", - "mementoOriginalBaseURL": "ldfc:Controller/Summary#mementoOriginalBaseURL", "qpfControllerExtension": "ldfc:Controller/QuadPatternFragments#controllerExtension", "assetsDir": "ldfc:Controller/Summary#dir", "assetsPath": "ldfc:Controller/Summary#path", diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md index 1b7540db..6e351ad0 100644 --- a/packages/datasource-composite/README.md +++ b/packages/datasource-composite/README.md @@ -7,7 +7,7 @@ It delegates queries to an sequence of other datasources. TODO: add documentation ## License -The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md index f62ad620..e2a195a4 100644 --- a/packages/datasource-hdt/README.md +++ b/packages/datasource-hdt/README.md @@ -7,7 +7,7 @@ It allows HDT files to be loaded. TODO: add documentation ## License -The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md index 1df581d7..e558bea4 100644 --- a/packages/datasource-jsonld/README.md +++ b/packages/datasource-jsonld/README.md @@ -7,7 +7,7 @@ It allows JSON-LD files to be loaded. TODO: add documentation ## License -The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md index e012b881..4f6bb8cf 100644 --- a/packages/datasource-n3/README.md +++ b/packages/datasource-n3/README.md @@ -7,7 +7,7 @@ It allows N-Quads, N-Triples, Trig and Turtle files to be loaded. TODO: add documentation ## License -The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index 273715e5..d8bb0bd6 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -7,7 +7,7 @@ It allows SPARQL endpoints to be used as a data proxy. TODO: add documentation ## License -The Linked Data Fragments client is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md new file mode 100644 index 00000000..9f0eacf8 --- /dev/null +++ b/packages/feature-memento/README.md @@ -0,0 +1,13 @@ +# Linked Data Fragments Server - SPARQL Datasource + + +This module adds support for the [Memento Protocol](http://mementoweb.org/about/) to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +If your Linked Data source evolve over time and has multiple versions, it makes access and query across the various versions straightforward. To enable the [Memento Protocol](http://mementoweb.org/about/), follow the guide below. + +TODO: add documentation + +## License +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/Controller/Timegate.jsonld b/packages/feature-memento/components/Controller/Timegate.jsonld similarity index 69% rename from packages/core/components/Controller/Timegate.jsonld rename to packages/feature-memento/components/Controller/Timegate.jsonld index 56314a60..726c7e68 100644 --- a/packages/core/components/Controller/Timegate.jsonld +++ b/packages/feature-memento/components/Controller/Timegate.jsonld @@ -1,34 +1,35 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld" ], "@graph": [ { - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-memento", "components": [ { - "@id": "ldfc:Controller/Timegate", + "@id": "ldffm:Controller/Timegate", "@type": "Class", "extends": "ldfc:Controller", "requireElement": "controllers.TimegateController", "comment": "A TimegateController responds to timegate requests", "parameters": [ { - "@id": "ldfc:Controller/Timegate#timegatePath", + "@id": "ldffm:Controller/Timegate#timegatePath", "comment": "URL matching for the time gate", "range": "xsd:string", "unique": true, "inheritValues": { "@type": "InheritanceValue", - "onParameter": "ldfc:Controller/Timegate#timegatePath", + "onParameter": "ldffm:Controller/Timegate#timegatePath", "from": "ldfc:Server" } }, { - "@id": "ldfc:Controller/Timegate#memento", + "@id": "ldffm:Controller/Timegate#memento", "comment": "Path to a directory where summaries can be found", "range": { - "@id": "ldfs:Memento", + "@id": "ldffm:Memento", "rdfs:hasProperty": [ { "@id": "ldfc:Controller/Timegate#mementoVersion" }, { "@id": "ldfc:Controller/Timegate#mementoDatasource" }, @@ -39,7 +40,7 @@ }, "inheritValues": { "@type": "InheritanceValue", - "onParameter": "ldfc:Controller/Timegate#memento", + "onParameter": "ldffm:Controller/Timegate#memento", "from": "ldfc:Server" } } @@ -48,41 +49,41 @@ "extends": "ldfc:Controller#constructorArgumentsObject", "fields": [ { - "@id": "ldfc:Controller/Timegate#timeGatesField", + "@id": "ldffm:Controller/Timegate#timeGatesField", "keyRaw": "timegates", "value": { "fields": [ { "keyRaw": "baseUrl", - "value": "ldfc:Controller/Timegate#timegatePath" + "value": "ldffm:Controller/Timegate#timegatePath" }, { "keyRaw": "mementos", "value": { "fields": [ { - "collectEntries": "ldfc:Controller/Timegate#memento", - "key": "ldfc:Controller/Timegate#timegatePath", + "collectEntries": "ldffm:Controller/Timegate#memento", + "key": "ldffm:Controller/Timegate#timegatePath", "value": { "elements": { - "collectEntries": "ldfc:Controller/Timegate#versions", + "collectEntries": "ldffm:Controller/Timegate#versions", "value": { "fields": [ { "keyRaw": "datasource", - "value": "ldfc:Controller/Timegate#mementoDatasource" + "value": "ldffm:Controller/Timegate#mementoDatasource" }, { "keyRaw": "initial", - "value": "ldfc:Controller/Timegate#mementoVersionStart" + "value": "ldffm:Controller/Timegate#mementoVersionStart" }, { "keyRaw": "final", - "value": "ldfc:Controller/Timegate#mementoVersionEnd" + "value": "ldffm:Controller/Timegate#mementoVersionEnd" }, { "keyRaw": "originalBaseURL", - "value": "ldfc:Controller/Timegate#mementoOriginalBaseURL" + "value": "ldffm:Controller/Timegate#mementoOriginalBaseURL" } ] } @@ -110,10 +111,10 @@ "@id": "ldfc:Server", "parameters": [ { - "@id": "ldfc:Controller/Timegate#timegatePath" + "@id": "ldffm:Controller/Timegate#timegatePath" }, { - "@id": "ldfc:Controller/Timegate#memento" + "@id": "ldffm:Controller/Timegate#memento" } ] } diff --git a/packages/core/components/ControllerExtension/Memento.jsonld b/packages/feature-memento/components/ControllerExtension/Memento.jsonld similarity index 59% rename from packages/core/components/ControllerExtension/Memento.jsonld rename to packages/feature-memento/components/ControllerExtension/Memento.jsonld index d82c8507..081c2d22 100644 --- a/packages/core/components/ControllerExtension/Memento.jsonld +++ b/packages/feature-memento/components/ControllerExtension/Memento.jsonld @@ -1,24 +1,33 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-memento", "components": [ { - "@id": "ldfc:ControllerExtension/Memento", + "@id": "ldffm:ControllerExtension/Memento", "@type": "Class", "extends": "ldfc:ControllerExtension", "requireElement": "controllers.MementoControllerExtension", "comment": "A MementoControllerExtension extends Triple Pattern Fragments responses with Memento headers", "parameters": [ { - "@id": "ldfc:Controller/Timegate#timegatePath" + "@id": "ldffm:Controller/Timegate#timegatePath" }, { - "@id": "ldfc:Controller/Timegate#memento" + "@id": "ldffm:Controller/Timegate#memento" }, { - "@id": "ldfc:ControllerExtension/Memento#datasource", + "@id": "ldffm:ControllerExtension/Memento#router", + "inheritValues": { + "@type": "InheritanceValue", + "onParameter": "ldfc:Server#router", + "from": "ldfc:Server" + } + }, + { + "@id": "ldffm:ControllerExtension/Memento#datasource", "inheritValues": { "@type": "InheritanceValue", "onParameter": "ldfc:Server#datasource", @@ -26,7 +35,7 @@ } }, { - "@id": "ldfc:ControllerExtension/Memento#urlData", + "@id": "ldffm:ControllerExtension/Memento#urlData", "inheritValues": { "@type": "InheritanceValue", "onParameter": "ldfc:Server#urlData", @@ -37,7 +46,7 @@ "constructorArguments": { "fields": [ { - "@id": "ldfc:Controller/Timegate#timeGatesField" + "@id": "ldffm:Controller/Timegate#timeGatesField" }, { "@id": "ldfc:Server#routerField" diff --git a/packages/core/components/View/Html/Qpf/Memento.jsonld b/packages/feature-memento/components/View/Html/Qpf/Memento.jsonld similarity index 67% rename from packages/core/components/View/Html/Qpf/Memento.jsonld rename to packages/feature-memento/components/View/Html/Qpf/Memento.jsonld index 3970410b..51055bc9 100644 --- a/packages/core/components/View/Html/Qpf/Memento.jsonld +++ b/packages/feature-memento/components/View/Html/Qpf/Memento.jsonld @@ -1,24 +1,25 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-memento", "components": [ { - "@id": "ldfc:View/Html/Qpf/Memento", + "@id": "ldffm:View/Html/Qpf/Memento", "@type": "Class", "extends": "ldfc:View/Html", "requireElement": "views.memento.Memento", "comment": "A MementoHtmlViewExtension extends the Quad Pattern Fragments HTML view with Memento details", "parameters": [ { - "@id": "ldfc:Controller/Timegate#timegatePath" + "@id": "ldffm:Controller/Timegate#timegatePath" }, { - "@id": "ldfc:Controller/Timegate#memento" + "@id": "ldffm:Controller/Timegate#memento" }, { - "@id": "ldfc:View/Html/Qpf/Memento#datasource", + "@id": "ldffm:View/Html/Qpf/Memento#datasource", "inheritValues": { "@type": "InheritanceValue", "onParameter": "ldfc:Server#datasource", @@ -31,7 +32,7 @@ "extends": "ldfc:View/Html#constructorArgumentsObject", "fields": [ { - "@id": "ldfc:Controller/Timegate#timeGatesField" + "@id": "ldffm:Controller/Timegate#timeGatesField" }, { "@id": "ldfc:Server#routerField" diff --git a/packages/feature-memento/components/components.jsonld b/packages/feature-memento/components/components.jsonld new file mode 100644 index 00000000..c7171f6d --- /dev/null +++ b/packages/feature-memento/components/components.jsonld @@ -0,0 +1,11 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/feature-memento", + "@type": "Module", + "requireName": "@ldf/feature-memento", + "import": [ + "files-ldffm:components/Controller/Timegate.jsonld", + "files-ldffm:components/ControllerExtension/Memento.jsonld", + "files-ldffm:components/View/Html/Qpf/Memento.jsonld" + ] +} diff --git a/packages/feature-memento/components/context.jsonld b/packages/feature-memento/components/context.jsonld new file mode 100644 index 00000000..c0784584 --- /dev/null +++ b/packages/feature-memento/components/context.jsonld @@ -0,0 +1,18 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldffm": "npmd:@ldf/feature-memento/", + "files-ldffm": "ldffm:^3.0.0/", + + "timegatePath": "ldfc:Controller/Timegate#timegatePath", + "memento": "ldfc:Controller/Timegate#memento", + "mementoVersions": "ldfc:Controller/Timegate#mementoVersions", + "mementoDatasource": "ldfc:Controller/Timegate#mementoDatasource", + "mementoVersionStart": "ldfc:Controller/Timegate#mementoVersionStart", + "mementoVersionEnd": "ldfc:Controller/Timegate#mementoVersionEnd", + "mementoOriginalBaseURL": "ldfc:Controller/Timegate#mementoOriginalBaseURL" + } + ] +} diff --git a/packages/feature-memento/index.js b/packages/feature-memento/index.js new file mode 100644 index 00000000..7aacdcf7 --- /dev/null +++ b/packages/feature-memento/index.js @@ -0,0 +1,14 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + controllers: { + TimegateController: require('./lib/controllers/TimegateController'), + MementoControllerExtension: require('./lib/controllers/MementoControllerExtension'), + }, + views: { + memento: { + 'QuadPatternFragmentsHtmlView-Memento': require('./lib/views/memento/QuadPatternFragmentsHtmlView-Memento'), + }, + }, +}; diff --git a/packages/core/lib/controllers/MementoControllerExtension.js b/packages/feature-memento/lib/controllers/MementoControllerExtension.js similarity index 97% rename from packages/core/lib/controllers/MementoControllerExtension.js rename to packages/feature-memento/lib/controllers/MementoControllerExtension.js index 1398d56e..6db3e88c 100644 --- a/packages/core/lib/controllers/MementoControllerExtension.js +++ b/packages/feature-memento/lib/controllers/MementoControllerExtension.js @@ -1,7 +1,7 @@ /*! @license MIT ©2016 Miel Vander Sande, Ghent University - imec */ /* A MementoControllerExtension extends Triple Pattern Fragments responses with Memento headers. */ -var Controller = require('./Controller'), +var Controller = require('@ldf/core').controllers.Controller, TimegateController = require('./TimegateController'), url = require('url'), _ = require('lodash'); diff --git a/packages/core/lib/controllers/TimegateController.js b/packages/feature-memento/lib/controllers/TimegateController.js similarity index 99% rename from packages/core/lib/controllers/TimegateController.js rename to packages/feature-memento/lib/controllers/TimegateController.js index 12fb8083..1ee65997 100644 --- a/packages/core/lib/controllers/TimegateController.js +++ b/packages/feature-memento/lib/controllers/TimegateController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* An TimegateController responds to timegate requests */ -var Controller = require('./Controller'), +var Controller = require('@ldf/core').controllers.Controller, _ = require('lodash'), url = require('url'), Util = require('../Util'); diff --git a/packages/core/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js b/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js similarity index 95% rename from packages/core/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js rename to packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js index a919e8b0..f9d81791 100644 --- a/packages/core/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js +++ b/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js @@ -1,7 +1,7 @@ /*! @license MIT ©2016 Ruben Verborgh, Ghent University - imec */ /* A MementoHtmlViewExtension extends the Quad Pattern Fragments HTML view with Memento details. */ -var HtmlView = require('../HtmlView'), +var HtmlView = require('@ldf/core').views.HtmlView, TimegateController = require('../../controllers/TimegateController'), path = require('path'); diff --git a/packages/core/lib/views/memento/memento-details.html b/packages/feature-memento/lib/views/memento/memento-details.html similarity index 100% rename from packages/core/lib/views/memento/memento-details.html rename to packages/feature-memento/lib/views/memento/memento-details.html diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json new file mode 100644 index 00000000..1ab1da8e --- /dev/null +++ b/packages/feature-memento/package.json @@ -0,0 +1,43 @@ +{ + "name": "@ldf/feature-memento", + "description": "Linked Data Fragments Server - Memento", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "lru-cache": "^4.0.1", + "n3": "^0.9.0" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + } +} From 8ab822266873a289b0c0d507941fb3468e67be8f Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 27 Feb 2020 15:33:29 +0100 Subject: [PATCH 058/165] Extract Summary feature into separate package --- packages/core/components/components.jsonld | 4 -- packages/core/components/context.jsonld | 10 +---- .../test/controllers/AssetsController-test.js | 2 +- .../core/test/controllers/Controller-test.js | 2 +- .../controllers/DereferenceController-test.js | 2 +- .../controllers/NotFoundController-test.js | 2 +- .../QuadPatternFragmentsController-test.js | 2 +- packages/feature-memento/README.md | 2 +- .../feature-memento/components/context.jsonld | 3 ++ packages/feature-memento/package.json | 3 +- packages/feature-summary/README.md | 12 ++++++ .../components/Controller/Summary.jsonld | 17 ++++---- .../components/View/Html/Qpf/Summary.jsonld | 13 +++--- .../components/View/Rdf/Qpf/Summary.jsonld | 13 +++--- .../components/View/Rdf/Summary.jsonld | 7 ++-- .../components/components.jsonld | 12 ++++++ .../feature-summary/components/context.jsonld | 17 ++++++++ packages/feature-summary/index.js | 15 +++++++ .../lib/controllers/SummaryController.js | 4 +- .../QuadPatternFragmentsHtmlView-Summary.js | 2 +- .../QuadPatternFragmentsRdfView-Summary.js | 2 +- .../lib/views/summary/SummaryRdfView.js | 2 +- .../lib/views/summary/summary-link.html | 0 packages/feature-summary/package.json | 42 +++++++++++++++++++ packages/feature-summary/test/.eslintrc | 18 ++++++++ .../controllers/SummaryController-test.js | 2 +- packages/feature-summary/test/mocha.opts | 3 ++ .../test/controllers => test}/DummyServer.js | 0 28 files changed, 164 insertions(+), 49 deletions(-) create mode 100644 packages/feature-summary/README.md rename packages/{core => feature-summary}/components/Controller/Summary.jsonld (65%) rename packages/{core => feature-summary}/components/View/Html/Qpf/Summary.jsonld (60%) rename packages/{core => feature-summary}/components/View/Rdf/Qpf/Summary.jsonld (60%) rename packages/{core => feature-summary}/components/View/Rdf/Summary.jsonld (65%) create mode 100644 packages/feature-summary/components/components.jsonld create mode 100644 packages/feature-summary/components/context.jsonld create mode 100644 packages/feature-summary/index.js rename packages/{core => feature-summary}/lib/controllers/SummaryController.js (94%) rename packages/{core => feature-summary}/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js (95%) rename packages/{core => feature-summary}/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js (95%) rename packages/{core => feature-summary}/lib/views/summary/SummaryRdfView.js (93%) rename packages/{core => feature-summary}/lib/views/summary/summary-link.html (100%) create mode 100644 packages/feature-summary/package.json create mode 100644 packages/feature-summary/test/.eslintrc rename packages/{core => feature-summary}/test/controllers/SummaryController-test.js (98%) create mode 100644 packages/feature-summary/test/mocha.opts rename {packages/core/test/controllers => test}/DummyServer.js (100%) diff --git a/packages/core/components/components.jsonld b/packages/core/components/components.jsonld index 6933e9e9..9e7ce149 100644 --- a/packages/core/components/components.jsonld +++ b/packages/core/components/components.jsonld @@ -8,7 +8,6 @@ "files-ldfc:components/Controller/Dereference.jsonld", "files-ldfc:components/Controller/NotFound.jsonld", "files-ldfc:components/Controller/QuadPatternFragments.jsonld", - "files-ldfc:components/Controller/Summary.jsonld", "files-ldfc:components/ControllerExtension/WebId.jsonld", @@ -20,16 +19,13 @@ "files-ldfc:components/Router/Page.jsonld", "files-ldfc:components/Router/QuadPattern.jsonld", - "files-ldfc:components/View/Html/Qpf/Summary.jsonld", "files-ldfc:components/View/Html/Error.jsonld", "files-ldfc:components/View/Html/Forbidden.jsonld", "files-ldfc:components/View/Html/NotFound.jsonld", "files-ldfc:components/View/Html/Qpf.jsonld", - "files-ldfc:components/View/Rdf/Qpf/Summary.jsonld", "files-ldfc:components/View/Rdf/Error.jsonld", "files-ldfc:components/View/Rdf/NotFound.jsonld", "files-ldfc:components/View/Rdf/Qpf.jsonld", - "files-ldfc:components/View/Rdf/Summary.jsonld", "files-ldfc:components/View/Collection.jsonld", "files-ldfc:components/View/Html.jsonld", "files-ldfc:components/View/Rdf.jsonld", diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 6763481e..8cfa6b86 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -13,13 +13,10 @@ "DereferenceController": "ldfc:Controller/Dereference", "NotFoundController": "ldfc:Controller/NotFound", "QuadPatternFragmentsController": "ldfc:Controller/QuadPatternFragments", - "SummaryController": "ldfc:Controller/Summary", "TimegateController": "ldfc:Controller/Timegate", - "summaryDir": "ldfc:Controller/Summary#directory", - "summaryPath": "ldfc:Controller/Summary#path", "qpfControllerExtension": "ldfc:Controller/QuadPatternFragments#controllerExtension", - "assetsDir": "ldfc:Controller/Summary#dir", - "assetsPath": "ldfc:Controller/Summary#path", + "assetsDir": "ldfc:Controller/Assets#dir", + "assetsPath": "ldfc:Controller/Assets#path", "dereference": "ldfc:Server#dereference", "dereferenceDatasource": { "@id": "ldfc:Server#dereferenceDatasource", @@ -52,16 +49,13 @@ "routerPrefix": "ldfc:QuadPattern/Page#routerPrefix", "MementoQpfHtmlView": "ldfc:View/Html/Qpf/Memento", - "SummaryQpfHtmlView": "ldfc:View/Html/Qpf/Summary", "ErrorHtmlView": "ldfc:View/Html/Error", "ForbiddenHtmlView": "ldfc:View/Html/Forbidden", "NotFoundHtmlView": "ldfc:View/Html/NotFound", "QpfHtmlView": "ldfc:View/Html/Qpf", - "SummaryQpfRdfView": "ldfc:View/Rdf/Qpf/Summary", "ErrorRdfView": "ldfc:View/Rdf/Error", "NotFoundRdfView": "ldfc:View/Rdf/NotFound", "QpfRdfView": "ldfc:View/Rdf/Qpf", - "SummaryRdfView": "ldfc:View/Rdf/Summary", "ViewCollection": "ldfc:View/Collection", "HtmlView": "ldfc:View/Html", "RdfView": "ldfc:View/Rdf", diff --git a/packages/core/test/controllers/AssetsController-test.js b/packages/core/test/controllers/AssetsController-test.js index 8683d402..426f3b43 100644 --- a/packages/core/test/controllers/AssetsController-test.js +++ b/packages/core/test/controllers/AssetsController-test.js @@ -2,7 +2,7 @@ var AssetsController = require('../../lib/controllers/AssetsController'); var request = require('supertest'), - DummyServer = require('./DummyServer'), + DummyServer = require('../../../../test/DummyServer'), fs = require('fs'), path = require('path'); diff --git a/packages/core/test/controllers/Controller-test.js b/packages/core/test/controllers/Controller-test.js index 89a6e4d2..24834b53 100644 --- a/packages/core/test/controllers/Controller-test.js +++ b/packages/core/test/controllers/Controller-test.js @@ -4,7 +4,7 @@ var Controller = require('../../lib/controllers/Controller'), var http = require('http'), request = require('supertest'), - DummyServer = require('./DummyServer'); + DummyServer = require('../../../../test/DummyServer'); describe('Controller', function () { describe('The Controller module', function () { diff --git a/packages/core/test/controllers/DereferenceController-test.js b/packages/core/test/controllers/DereferenceController-test.js index 0c457310..0c88ffe9 100644 --- a/packages/core/test/controllers/DereferenceController-test.js +++ b/packages/core/test/controllers/DereferenceController-test.js @@ -2,7 +2,7 @@ var DereferenceController = require('../../lib/controllers/DereferenceController'); var request = require('supertest'), - DummyServer = require('./DummyServer'); + DummyServer = require('../../../../test/DummyServer'); describe('DereferenceController', function () { describe('The DereferenceController module', function () { diff --git a/packages/core/test/controllers/NotFoundController-test.js b/packages/core/test/controllers/NotFoundController-test.js index ae0c3052..2317601a 100644 --- a/packages/core/test/controllers/NotFoundController-test.js +++ b/packages/core/test/controllers/NotFoundController-test.js @@ -2,7 +2,7 @@ var NotFoundController = require('../../lib/controllers/NotFoundController'); var request = require('supertest'), - DummyServer = require('./DummyServer'); + DummyServer = require('../../../../test/DummyServer'); var NotFoundHtmlView = require('../../lib/views/notfound/NotFoundHtmlView.js'), NotFoundRdfView = require('../../lib/views/notfound/NotFoundRdfView.js'); diff --git a/packages/core/test/controllers/QuadPatternFragmentsController-test.js b/packages/core/test/controllers/QuadPatternFragmentsController-test.js index 3328bbea..c595521c 100644 --- a/packages/core/test/controllers/QuadPatternFragmentsController-test.js +++ b/packages/core/test/controllers/QuadPatternFragmentsController-test.js @@ -2,7 +2,7 @@ var QuadPatternFragmentsController = require('../../lib/controllers/QuadPatternFragmentsController'); var request = require('supertest'), - DummyServer = require('./DummyServer'), + DummyServer = require('../../../../test/DummyServer'), http = require('http'); var QuadPatternFragmentsHtmlView = require('../../lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js'), diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md index 9f0eacf8..e7fce1e7 100644 --- a/packages/feature-memento/README.md +++ b/packages/feature-memento/README.md @@ -1,4 +1,4 @@ -# Linked Data Fragments Server - SPARQL Datasource +# Linked Data Fragments Server - Memento This module adds support for the [Memento Protocol](http://mementoweb.org/about/) to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). diff --git a/packages/feature-memento/components/context.jsonld b/packages/feature-memento/components/context.jsonld index c0784584..ba712bb2 100644 --- a/packages/feature-memento/components/context.jsonld +++ b/packages/feature-memento/components/context.jsonld @@ -6,6 +6,9 @@ "ldffm": "npmd:@ldf/feature-memento/", "files-ldffm": "ldffm:^3.0.0/", + "TimegateController": "ldffm:Controller/Timegate", + "MementoControllerExtension": "ldffm:ControllerExtension/Memento", + "MementoQpfHtmlView": "ldffm:View/Html/Qpf/Memento", "timegatePath": "ldfc:Controller/Timegate#timegatePath", "memento": "ldfc:Controller/Timegate#memento", "mementoVersions": "ldfc:Controller/Timegate#mementoVersions", diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 1ab1da8e..371bcce9 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -31,8 +31,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "lru-cache": "^4.0.1", - "n3": "^0.9.0" + "lodash": "^2.4.2" }, "peerDependencies": { "@ldf/core": "2.2.5" diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md new file mode 100644 index 00000000..0c27f215 --- /dev/null +++ b/packages/feature-summary/README.md @@ -0,0 +1,12 @@ +# Linked Data Fragments Server - Summary + + +This module adds summaries to datasources based on turtle files corresponding to the datasource name. + +TODO: add documentation + +## License +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/Controller/Summary.jsonld b/packages/feature-summary/components/Controller/Summary.jsonld similarity index 65% rename from packages/core/components/Controller/Summary.jsonld rename to packages/feature-summary/components/Controller/Summary.jsonld index 428ce300..3beccdf6 100644 --- a/packages/core/components/Controller/Summary.jsonld +++ b/packages/feature-summary/components/Controller/Summary.jsonld @@ -1,24 +1,25 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-summary", "components": [ { - "@id": "ldfc:Controller/Summary", + "@id": "ldffs:Controller/Summary", "@type": "Class", "extends": "ldfc:Controller", "requireElement": "controllers.SummaryController", "comment": "A SummaryController responds to requests for summaries", "parameters": [ { - "@id": "ldfc:Controller/Summary#directory", + "@id": "ldffs:Controller/Summary#directory", "comment": "Path to a directory where summaries can be found", "range": "xsd:string", "unique": true }, { - "@id": "ldfc:Controller/Summary#path", + "@id": "ldffs:Controller/Summary#path", "comment": "URL matching for summaries", "range": "xsd:string", "unique": true @@ -28,17 +29,17 @@ "extends": "ldfc:Controller#constructorArgumentsObject", "fields": [ { - "@id": "ldfc:Controller/Summary#constructorArgumentsObject_summaries", + "@id": "ldffs:Controller/Summary#constructorArgumentsObject_summaries", "keyRaw": "summaries", "value": { "fields": [ { "keyRaw": "dir", - "value": "ldfc:Controller/Summary#directory" + "value": "ldffs:Controller/Summary#directory" }, { "keyRaw": "path", - "value": "ldfc:Controller/Summary#path" + "value": "ldffs:Controller/Summary#path" } ] } diff --git a/packages/core/components/View/Html/Qpf/Summary.jsonld b/packages/feature-summary/components/View/Html/Qpf/Summary.jsonld similarity index 60% rename from packages/core/components/View/Html/Qpf/Summary.jsonld rename to packages/feature-summary/components/View/Html/Qpf/Summary.jsonld index e8ca180e..3aea3761 100644 --- a/packages/core/components/View/Html/Qpf/Summary.jsonld +++ b/packages/feature-summary/components/View/Html/Qpf/Summary.jsonld @@ -1,21 +1,22 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-summary", "components": [ { - "@id": "ldfc:View/Html/Qpf/Summary", + "@id": "ldffs:View/Html/Qpf/Summary", "@type": "Class", "extends": "ldfc:View/Html", "requireElement": "views.summary.QuadPatternFragmentsHtmlView-Summary", "comment": "A SummaryHtmlViewExtension extends the Quad Pattern Fragments HTML view with a summary link", "parameters": [ { - "@id": "ldfc:Controller/Summary#directory" + "@id": "ldffs:Controller/Summary#directory" }, { - "@id": "ldfc:Controller/Summary#path" + "@id": "ldffs:Controller/Summary#path" } ], "constructorArguments": [ @@ -23,7 +24,7 @@ "extends": "ldfc:View/Html#constructorArgumentsObject", "fields": [ { - "@id": "ldfc:Controller/Summary#constructorArgumentsObject_summaries" + "@id": "ldffs:Controller/Summary#constructorArgumentsObject_summaries" } ] } diff --git a/packages/core/components/View/Rdf/Qpf/Summary.jsonld b/packages/feature-summary/components/View/Rdf/Qpf/Summary.jsonld similarity index 60% rename from packages/core/components/View/Rdf/Qpf/Summary.jsonld rename to packages/feature-summary/components/View/Rdf/Qpf/Summary.jsonld index bee168bc..277c79a1 100644 --- a/packages/core/components/View/Rdf/Qpf/Summary.jsonld +++ b/packages/feature-summary/components/View/Rdf/Qpf/Summary.jsonld @@ -1,21 +1,22 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-summary", "components": [ { - "@id": "ldfc:View/Rdf/Qpf/Summary", + "@id": "ldffs:View/Rdf/Qpf/Summary", "@type": "Class", "extends": "ldfc:View/Rdf", "requireElement": "views.summary.QuadPatternFragmentsRdfView-Summary", "comment": "A SummaryRdfViewExtension extends the Quad Pattern Fragments RDF view with a summary link", "parameters": [ { - "@id": "ldfc:Controller/Summary#directory" + "@id": "ldffs:Controller/Summary#directory" }, { - "@id": "ldfc:Controller/Summary#path" + "@id": "ldffs:Controller/Summary#path" } ], "constructorArguments": [ @@ -23,7 +24,7 @@ "extends": "ldfc:View/Rdf#constructorArgumentsObject", "fields": [ { - "@id": "ldfc:Controller/Summary#constructorArgumentsObject_summaries" + "@id": "ldffs:Controller/Summary#constructorArgumentsObject_summaries" } ] } diff --git a/packages/core/components/View/Rdf/Summary.jsonld b/packages/feature-summary/components/View/Rdf/Summary.jsonld similarity index 65% rename from packages/core/components/View/Rdf/Summary.jsonld rename to packages/feature-summary/components/View/Rdf/Summary.jsonld index f54fc115..3a424816 100644 --- a/packages/core/components/View/Rdf/Summary.jsonld +++ b/packages/feature-summary/components/View/Rdf/Summary.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-summary", "components": [ { - "@id": "ldfc:View/Rdf/Summary", + "@id": "ldffs:View/Rdf/Summary", "@type": "Class", "extends": "ldfc:View/Rdf", "requireElement": "views.summary.SummaryRdfView", diff --git a/packages/feature-summary/components/components.jsonld b/packages/feature-summary/components/components.jsonld new file mode 100644 index 00000000..073c9c1b --- /dev/null +++ b/packages/feature-summary/components/components.jsonld @@ -0,0 +1,12 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/feature-summary", + "@type": "Module", + "requireName": "@ldf/feature-summary", + "import": [ + "files-ldffs:components/Controller/Summary.jsonld", + "files-ldffs:components/View/Html/Qpf/Summary.jsonld", + "files-ldffs:components/View/Rdf/Qpf/Summary.jsonld", + "files-ldffs:components/View/Rdf/Summary.jsonld" + ] +} diff --git a/packages/feature-summary/components/context.jsonld b/packages/feature-summary/components/context.jsonld new file mode 100644 index 00000000..5e9c5436 --- /dev/null +++ b/packages/feature-summary/components/context.jsonld @@ -0,0 +1,17 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldffs": "npmd:@ldf/feature-summary/", + "files-ldffs": "ldffs:^3.0.0/", + + "SummaryController": "ldfc:Controller/Summary", + "summaryDir": "ldfc:Controller/Summary#directory", + "summaryPath": "ldfc:Controller/Summary#path", + "SummaryQpfHtmlView": "ldfc:View/Html/Qpf/Summary", + "SummaryQpfRdfView": "ldfc:View/Rdf/Qpf/Summary", + "SummaryRdfView": "ldfc:View/Rdf/Summary" + } + ] +} diff --git a/packages/feature-summary/index.js b/packages/feature-summary/index.js new file mode 100644 index 00000000..3e69c30d --- /dev/null +++ b/packages/feature-summary/index.js @@ -0,0 +1,15 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + controllers: { + SummaryController: require('./lib/controllers/SummaryController'), + }, + views: { + summary: { + 'QuadPatternFragmentsHtmlView-Memento': require('./lib/views/summary/QuadPatternFragmentsHtmlView-Summary'), + 'QuadPatternFragmentsRdfView-Memento': require('./lib/views/summary/QuadPatternFragmentsRdfView-Summary'), + 'SummaryRdfView': require('./lib/views/summary/SummaryRdfView'), + }, + }, +}; diff --git a/packages/core/lib/controllers/SummaryController.js b/packages/feature-summary/lib/controllers/SummaryController.js similarity index 94% rename from packages/core/lib/controllers/SummaryController.js rename to packages/feature-summary/lib/controllers/SummaryController.js index b3bee881..cb157b8f 100644 --- a/packages/core/lib/controllers/SummaryController.js +++ b/packages/feature-summary/lib/controllers/SummaryController.js @@ -1,11 +1,11 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* An SummaryController responds to requests for summaries */ -var Controller = require('./Controller'), +var Controller = require('@ldf/core').controllers.Controller, fs = require('fs'), path = require('path'), StreamParser = require('n3').StreamParser, - Util = require('../Util'); + Util = require('@ldf/core').Util; // Creates a new SummaryController function SummaryController(options) { diff --git a/packages/core/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js similarity index 95% rename from packages/core/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js rename to packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js index f3e8cc29..37c9d26b 100644 --- a/packages/core/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* A SummaryHtmlViewExtension extends the Quad Pattern Fragments RDF view with a summary link. */ -var HtmlView = require('../HtmlView'), +var HtmlView = require('@ldf/core').views.HtmlView, path = require('path'); // Creates a new SummaryHtmlViewExtension diff --git a/packages/core/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js similarity index 95% rename from packages/core/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js rename to packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js index 08d7eca5..8f4c8157 100644 --- a/packages/core/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* A SummaryRdfViewExtension extends the Quad Pattern Fragments RDF view with a summary link. */ -var RdfView = require('../RdfView'); +var RdfView = require('@ldf/core').views.RdfView; var ds = 'http://semweb.mmlab.be/ns/datasummaries#'; diff --git a/packages/core/lib/views/summary/SummaryRdfView.js b/packages/feature-summary/lib/views/summary/SummaryRdfView.js similarity index 93% rename from packages/core/lib/views/summary/SummaryRdfView.js rename to packages/feature-summary/lib/views/summary/SummaryRdfView.js index 25c00325..b97d38a9 100644 --- a/packages/core/lib/views/summary/SummaryRdfView.js +++ b/packages/feature-summary/lib/views/summary/SummaryRdfView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* A SummaryRdfView represents a data summary in RDF. */ -var RdfView = require('../RdfView'); +var RdfView = require('@ldf/core').views.RdfView; // Creates a new SummaryRdfView function SummaryRdfView(settings) { diff --git a/packages/core/lib/views/summary/summary-link.html b/packages/feature-summary/lib/views/summary/summary-link.html similarity index 100% rename from packages/core/lib/views/summary/summary-link.html rename to packages/feature-summary/lib/views/summary/summary-link.html diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json new file mode 100644 index 00000000..f49d2837 --- /dev/null +++ b/packages/feature-summary/package.json @@ -0,0 +1,42 @@ +{ + "name": "@ldf/feature-summary", + "description": "Linked Data Fragments Server - Memento", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "n3": "^0.9.0" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + } +} diff --git a/packages/feature-summary/test/.eslintrc b/packages/feature-summary/test/.eslintrc new file mode 100644 index 00000000..aa46bea4 --- /dev/null +++ b/packages/feature-summary/test/.eslintrc @@ -0,0 +1,18 @@ +{ + globals: { + describe: true, + it: true, + before: true, + after: true, + beforeEach: true, + afterEach: true, + expect: true, + sinon: true, + test: true, + }, + + rules: { + new-cap: 0, // test constructors as regular functions + max-nested-callbacks: 0, // Mocha works with deeply nested callbacks + }, +} diff --git a/packages/core/test/controllers/SummaryController-test.js b/packages/feature-summary/test/controllers/SummaryController-test.js similarity index 98% rename from packages/core/test/controllers/SummaryController-test.js rename to packages/feature-summary/test/controllers/SummaryController-test.js index 48685c1f..54f64420 100644 --- a/packages/core/test/controllers/SummaryController-test.js +++ b/packages/feature-summary/test/controllers/SummaryController-test.js @@ -2,7 +2,7 @@ var SummaryController = require('../../lib/controllers/SummaryController'); var request = require('supertest'), - DummyServer = require('./DummyServer'), + DummyServer = require('../../../../test/DummyServer'), fs = require('fs'), path = require('path'); diff --git a/packages/feature-summary/test/mocha.opts b/packages/feature-summary/test/mocha.opts new file mode 100644 index 00000000..7014624f --- /dev/null +++ b/packages/feature-summary/test/mocha.opts @@ -0,0 +1,3 @@ +--require ../../test/test-setup +--recursive +--timeout 500 diff --git a/packages/core/test/controllers/DummyServer.js b/test/DummyServer.js similarity index 100% rename from packages/core/test/controllers/DummyServer.js rename to test/DummyServer.js From c1230c7eab4fb90373fc7b453fe10f6cbc23852a Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 27 Feb 2020 15:43:59 +0100 Subject: [PATCH 059/165] Extract WebID feature into separate package --- packages/core/components/components.jsonld | 2 - packages/core/package.json | 4 +- packages/feature-summary/README.md | 5 ++- .../feature-summary/components/context.jsonld | 12 ++--- packages/feature-webid/README.md | 12 +++++ .../ControllerExtension/WebId.jsonld | 6 +-- .../components/components.jsonld | 9 ++++ .../feature-webid/components/context.jsonld | 12 +++++ packages/feature-webid/index.js | 8 ++++ .../controllers/WebIDControllerExtension.js | 4 +- packages/feature-webid/package.json | 44 +++++++++++++++++++ 11 files changed, 100 insertions(+), 18 deletions(-) create mode 100644 packages/feature-webid/README.md rename packages/{core => feature-webid}/components/ControllerExtension/WebId.jsonld (84%) create mode 100644 packages/feature-webid/components/components.jsonld create mode 100644 packages/feature-webid/components/context.jsonld create mode 100644 packages/feature-webid/index.js rename packages/{core => feature-webid}/lib/controllers/WebIDControllerExtension.js (97%) create mode 100644 packages/feature-webid/package.json diff --git a/packages/core/components/components.jsonld b/packages/core/components/components.jsonld index 9e7ce149..01ed2b38 100644 --- a/packages/core/components/components.jsonld +++ b/packages/core/components/components.jsonld @@ -9,8 +9,6 @@ "files-ldfc:components/Controller/NotFound.jsonld", "files-ldfc:components/Controller/QuadPatternFragments.jsonld", - "files-ldfc:components/ControllerExtension/WebId.jsonld", - "files-ldfc:components/Datasource/Empty.jsonld", "files-ldfc:components/Datasource/Index.jsonld", "files-ldfc:components/Datasource/Memory.jsonld", diff --git a/packages/core/package.json b/packages/core/package.json index 15e4d71e..5a88239a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -38,7 +38,6 @@ "asynciterator": "^1.1.0", "forwarded-parse": "^2.0.0", "lodash": "^2.4.2", - "lru-cache": "^4.0.1", "componentsjs": "3.3.0", "mime": "^1.3.4", "n3": "^0.9.0", @@ -49,7 +48,6 @@ "uritemplate": "^0.3.4" }, "optionalDependencies": { - "access-log": "^0.3.9", - "parse-cache-control": "^1.0.1" + "access-log": "^0.3.9" } } diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md index 0c27f215..00c64c7c 100644 --- a/packages/feature-summary/README.md +++ b/packages/feature-summary/README.md @@ -1,7 +1,8 @@ -# Linked Data Fragments Server - Summary +# Linked Data Fragments Server - WebID -This module adds summaries to datasources based on turtle files corresponding to the datasource name. +This module adds a controller extension that only allows authenticated client with WebID's to perform requests. +This extension will only be active when the server is running in [https-mode](https://github.com/LinkedDataFragments/Server.js/wiki/WebID-authentication). TODO: add documentation diff --git a/packages/feature-summary/components/context.jsonld b/packages/feature-summary/components/context.jsonld index 5e9c5436..e9745857 100644 --- a/packages/feature-summary/components/context.jsonld +++ b/packages/feature-summary/components/context.jsonld @@ -6,12 +6,12 @@ "ldffs": "npmd:@ldf/feature-summary/", "files-ldffs": "ldffs:^3.0.0/", - "SummaryController": "ldfc:Controller/Summary", - "summaryDir": "ldfc:Controller/Summary#directory", - "summaryPath": "ldfc:Controller/Summary#path", - "SummaryQpfHtmlView": "ldfc:View/Html/Qpf/Summary", - "SummaryQpfRdfView": "ldfc:View/Rdf/Qpf/Summary", - "SummaryRdfView": "ldfc:View/Rdf/Summary" + "SummaryController": "ldffs:Controller/Summary", + "summaryDir": "ldffs:Controller/Summary#directory", + "summaryPath": "ldffs:Controller/Summary#path", + "SummaryQpfHtmlView": "ldffs:View/Html/Qpf/Summary", + "SummaryQpfRdfView": "ldffs:View/Rdf/Qpf/Summary", + "SummaryRdfView": "ldffs:View/Rdf/Summary" } ] } diff --git a/packages/feature-webid/README.md b/packages/feature-webid/README.md new file mode 100644 index 00000000..0c27f215 --- /dev/null +++ b/packages/feature-webid/README.md @@ -0,0 +1,12 @@ +# Linked Data Fragments Server - Summary + + +This module adds summaries to datasources based on turtle files corresponding to the datasource name. + +TODO: add documentation + +## License +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/ControllerExtension/WebId.jsonld b/packages/feature-webid/components/ControllerExtension/WebId.jsonld similarity index 84% rename from packages/core/components/ControllerExtension/WebId.jsonld rename to packages/feature-webid/components/ControllerExtension/WebId.jsonld index d50e8e18..04dbaed0 100644 --- a/packages/core/components/ControllerExtension/WebId.jsonld +++ b/packages/feature-webid/components/ControllerExtension/WebId.jsonld @@ -2,17 +2,17 @@ "@context": [ "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-webid", "components": [ { - "@id": "ldfc:ControllerExtension/WebId", + "@id": "ldffw:ControllerExtension/WebId", "@type": "Class", "extends": "ldfc:ControllerExtension", "requireElement": "controllers.WebIDControllerExtension", "comment": "A WebIDControllerExtension extends Triple Pattern Fragments responses with WebID authentication", "parameters": [ { - "@id": "ldfc:ControllerExtension/WebId#urlData", + "@id": "ldffw:ControllerExtension/WebId#urlData", "inheritValues": { "@type": "InheritanceValue", "onParameter": "ldfc:Server#urlData", diff --git a/packages/feature-webid/components/components.jsonld b/packages/feature-webid/components/components.jsonld new file mode 100644 index 00000000..c4ead284 --- /dev/null +++ b/packages/feature-webid/components/components.jsonld @@ -0,0 +1,9 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/feature-webid", + "@type": "Module", + "requireName": "@ldf/feature-webid", + "import": [ + "files-ldffw:components/ControllerExtension/WebId.jsonld" + ] +} diff --git a/packages/feature-webid/components/context.jsonld b/packages/feature-webid/components/context.jsonld new file mode 100644 index 00000000..88d7849f --- /dev/null +++ b/packages/feature-webid/components/context.jsonld @@ -0,0 +1,12 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldffw": "npmd:@ldf/feature-webid/", + "files-ldffw": "ldffw:^3.0.0/", + + "WebIdController": "ldffw:Controller/WebId" + } + ] +} diff --git a/packages/feature-webid/index.js b/packages/feature-webid/index.js new file mode 100644 index 00000000..34b4fb6c --- /dev/null +++ b/packages/feature-webid/index.js @@ -0,0 +1,8 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + controllers: { + WebIDControllerExtension: require('./lib/controllers/WebIDControllerExtension'), + }, +}; diff --git a/packages/core/lib/controllers/WebIDControllerExtension.js b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js similarity index 97% rename from packages/core/lib/controllers/WebIDControllerExtension.js rename to packages/feature-webid/lib/controllers/WebIDControllerExtension.js index 93def98b..39009842 100644 --- a/packages/core/lib/controllers/WebIDControllerExtension.js +++ b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js @@ -7,8 +7,8 @@ var http = require('http'), N3 = require('n3'), n3parser = N3.Parser, N3Util = N3.Util, - Util = require('../Util'), - Controller = require('./Controller'); + Util = require('@ldf/core').Util, + Controller = require('@ldf/core').controllers.Controller; var CERT_NS = 'http://www.w3.org/ns/auth/cert#'; diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json new file mode 100644 index 00000000..f09c8d07 --- /dev/null +++ b/packages/feature-webid/package.json @@ -0,0 +1,44 @@ +{ + "name": "@ldf/feature-webid", + "description": "Linked Data Fragments Server - WebID", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-webid", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "lru-cache": "^4.0.1", + "n3": "^0.9.0", + "parse-cache-control": "^1.0.1" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + } +} From 37b6f89b28ab3bd2373ec847d70f9605b5832b44 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 28 Feb 2020 09:16:00 +0100 Subject: [PATCH 060/165] Extract QPF feature into separate package --- packages/core/components/components.jsonld | 4 -- packages/core/components/context.jsonld | 10 ----- packages/core/config/sets/controllers.json | 7 ++- packages/core/config/sets/routers.json | 7 ++- packages/core/config/sets/views.json | 5 ++- packages/core/lib/views/View.js | 5 +++ packages/core/test/views/View-test.js | 16 +++++-- packages/feature-qpf/README.md | 12 ++++++ .../Controller/QuadPatternFragments.jsonld | 13 +++--- .../components/Router/QuadPattern.jsonld | 9 ++-- .../components/View/Html/Qpf.jsonld | 7 +-- .../components/View/Rdf/Qpf.jsonld | 7 +-- .../feature-qpf/components/components.jsonld | 12 ++++++ .../feature-qpf/components/context.jsonld | 19 ++++++++ packages/feature-qpf/index.js | 17 ++++++++ .../QuadPatternFragmentsController.js | 2 +- .../lib/routers/QuadPatternRouter.js | 0 .../QuadPatternFragmentsHtmlView.js | 7 +-- .../QuadPatternFragmentsRdfView.js | 2 +- .../quadpatternfragments/datasource.html | 2 +- .../views/quadpatternfragments/fragment.html | 0 .../lib/views/quadpatternfragments/index.html | 2 +- packages/feature-qpf/package.json | 43 +++++++++++++++++++ packages/feature-qpf/test/.eslintrc | 18 ++++++++ .../QuadPatternFragmentsController-test.js | 8 ++-- packages/feature-qpf/test/mocha.opts | 3 ++ .../test/routers/QuadPatternRouter-test.js | 2 +- .../QuadPatternFragmentsRdfView-test.js | 2 +- .../ControllerExtension/WebId.jsonld | 3 +- 29 files changed, 192 insertions(+), 52 deletions(-) create mode 100644 packages/feature-qpf/README.md rename packages/{core => feature-qpf}/components/Controller/QuadPatternFragments.jsonld (69%) rename packages/{core => feature-qpf}/components/Router/QuadPattern.jsonld (71%) rename packages/{core => feature-qpf}/components/View/Html/Qpf.jsonld (68%) rename packages/{core => feature-qpf}/components/View/Rdf/Qpf.jsonld (68%) create mode 100644 packages/feature-qpf/components/components.jsonld create mode 100644 packages/feature-qpf/components/context.jsonld create mode 100644 packages/feature-qpf/index.js rename packages/{core => feature-qpf}/lib/controllers/QuadPatternFragmentsController.js (98%) rename packages/{core => feature-qpf}/lib/routers/QuadPatternRouter.js (100%) rename packages/{core => feature-qpf}/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js (84%) rename packages/{core => feature-qpf}/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js (99%) rename packages/{core => feature-qpf}/lib/views/quadpatternfragments/datasource.html (83%) rename packages/{core => feature-qpf}/lib/views/quadpatternfragments/fragment.html (100%) rename packages/{core => feature-qpf}/lib/views/quadpatternfragments/index.html (96%) create mode 100644 packages/feature-qpf/package.json create mode 100644 packages/feature-qpf/test/.eslintrc rename packages/{core => feature-qpf}/test/controllers/QuadPatternFragmentsController-test.js (97%) create mode 100644 packages/feature-qpf/test/mocha.opts rename packages/{core => feature-qpf}/test/routers/QuadPatternRouter-test.js (99%) rename packages/{core => feature-qpf}/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js (98%) diff --git a/packages/core/components/components.jsonld b/packages/core/components/components.jsonld index 01ed2b38..a0baeeae 100644 --- a/packages/core/components/components.jsonld +++ b/packages/core/components/components.jsonld @@ -7,7 +7,6 @@ "files-ldfc:components/Controller/Assets.jsonld", "files-ldfc:components/Controller/Dereference.jsonld", "files-ldfc:components/Controller/NotFound.jsonld", - "files-ldfc:components/Controller/QuadPatternFragments.jsonld", "files-ldfc:components/Datasource/Empty.jsonld", "files-ldfc:components/Datasource/Index.jsonld", @@ -15,15 +14,12 @@ "files-ldfc:components/Router/Datasource.jsonld", "files-ldfc:components/Router/Page.jsonld", - "files-ldfc:components/Router/QuadPattern.jsonld", "files-ldfc:components/View/Html/Error.jsonld", "files-ldfc:components/View/Html/Forbidden.jsonld", "files-ldfc:components/View/Html/NotFound.jsonld", - "files-ldfc:components/View/Html/Qpf.jsonld", "files-ldfc:components/View/Rdf/Error.jsonld", "files-ldfc:components/View/Rdf/NotFound.jsonld", - "files-ldfc:components/View/Rdf/Qpf.jsonld", "files-ldfc:components/View/Collection.jsonld", "files-ldfc:components/View/Html.jsonld", "files-ldfc:components/View/Rdf.jsonld", diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 8cfa6b86..99e52418 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -12,9 +12,6 @@ "AssetsController": "ldfc:Controller/Assets", "DereferenceController": "ldfc:Controller/Dereference", "NotFoundController": "ldfc:Controller/NotFound", - "QuadPatternFragmentsController": "ldfc:Controller/QuadPatternFragments", - "TimegateController": "ldfc:Controller/Timegate", - "qpfControllerExtension": "ldfc:Controller/QuadPatternFragments#controllerExtension", "assetsDir": "ldfc:Controller/Assets#dir", "assetsPath": "ldfc:Controller/Assets#path", "dereference": "ldfc:Server#dereference", @@ -24,8 +21,6 @@ }, "dereferencePath": "ldfc:Server#dereferencePath", - "MementoControllerExtension": "ldfc:ControllerExtension/Memento", - "EmptyDatasource": "ldfc:Datasource/Empty", "IndexDatasource": "ldfc:Datasource/Index", "MemoryDatasource": "ldfc:Datasource/Memory", @@ -44,18 +39,13 @@ "DatasourceRouter": "ldfc:Router/Datasource", "PageRouter": "ldfc:Router/Page", - "QuadPatternRouter": "ldfc:Router/QuadPattern", "pageSize": "ldfc:Router/Page#pageSize", - "routerPrefix": "ldfc:QuadPattern/Page#routerPrefix", - "MementoQpfHtmlView": "ldfc:View/Html/Qpf/Memento", "ErrorHtmlView": "ldfc:View/Html/Error", "ForbiddenHtmlView": "ldfc:View/Html/Forbidden", "NotFoundHtmlView": "ldfc:View/Html/NotFound", - "QpfHtmlView": "ldfc:View/Html/Qpf", "ErrorRdfView": "ldfc:View/Rdf/Error", "NotFoundRdfView": "ldfc:View/Rdf/NotFound", - "QpfRdfView": "ldfc:View/Rdf/Qpf", "ViewCollection": "ldfc:View/Collection", "HtmlView": "ldfc:View/Html", "RdfView": "ldfc:View/Rdf", diff --git a/packages/core/config/sets/controllers.json b/packages/core/config/sets/controllers.json index f4f52b50..3dc64f33 100644 --- a/packages/core/config/sets/controllers.json +++ b/packages/core/config/sets/controllers.json @@ -1,11 +1,14 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" + ], "@id": "urn:ldf-server:my", "controllers": [ { "@id": "config:sets/controllers.json#myQuadPatternFragmentsController", - "@type": "ldfc:Controller/QuadPatternFragments" + "@type": "QuadPatternFragmentsController" }, { "@id": "config:sets/controllers.json#myAssetsController", diff --git a/packages/core/config/sets/routers.json b/packages/core/config/sets/routers.json index c5121cd7..39ce98b0 100644 --- a/packages/core/config/sets/routers.json +++ b/packages/core/config/sets/routers.json @@ -1,5 +1,8 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" + ], "@id": "urn:ldf-server:my", "routers": [ @@ -9,7 +12,7 @@ }, { "@id": "config:sets/routers.json#myQuadPatternRouter", - "@type": "ldfc:Router/QuadPattern" + "@type": "QuadPatternRouter" }, { "@id": "config:sets/routers.json#myPageRouter", diff --git a/packages/core/config/sets/views.json b/packages/core/config/sets/views.json index f4f9ce43..eff75080 100644 --- a/packages/core/config/sets/views.json +++ b/packages/core/config/sets/views.json @@ -1,5 +1,8 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" + ], "@id": "urn:ldf-server:my", "views": [ diff --git a/packages/core/lib/views/View.js b/packages/core/lib/views/View.js index d978427b..e3f7c0e0 100644 --- a/packages/core/lib/views/View.js +++ b/packages/core/lib/views/View.js @@ -2,6 +2,7 @@ /* View is a base class for objects that generate server responses. */ var _ = require('lodash'), + join = require('path').join, ViewCollection = require('./ViewCollection'); // Creates a view with the given name @@ -55,6 +56,10 @@ View.prototype.render = function (options, request, response, done) { var settings = _.defaults({}, options, this._defaults); if (!settings.contentType) settings.contentType = response.getHeader('Content-Type'); + + // Export our base view, so it can be reused by other modules + settings.viewPathBase = join(__dirname, 'base.html'); + // Render the view and end the response when done this._render(settings, request, response, function (error) { if (error) diff --git a/packages/core/test/views/View-test.js b/packages/core/test/views/View-test.js index 2506094c..6fb32410 100644 --- a/packages/core/test/views/View-test.js +++ b/packages/core/test/views/View-test.js @@ -1,5 +1,6 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var View = require('../../lib/views/View'); +var View = require('../../lib/views/View'), + resolve = require('path').resolve; describe('View', function () { describe('The View module', function () { @@ -86,7 +87,11 @@ describe('View', function () { response.getHeader.should.have.been.calledWith('Content-Type'); view._render.getCall(0).args.should.have.length(4); view._render.should.have.been.calledOnce; - view._render.getCall(0).args[0].should.deep.equal({ a: 'b', contentType: 'text/html' }); + view._render.getCall(0).args[0].should.deep.equal({ + a: 'b', + contentType: 'text/html', + viewPathBase: resolve(__dirname, '../../lib/views/base.html'), + }); view._render.getCall(0).args[1].should.equal(request); view._render.getCall(0).args[2].should.equal(response); view._render.getCall(0).args[3].should.be.an.instanceof(Function); @@ -104,7 +109,12 @@ describe('View', function () { response.getHeader.should.have.been.calledWith('Content-Type'); view._render.should.have.been.calledOnce; view._render.getCall(0).args.should.have.length(4); - view._render.getCall(0).args[0].should.deep.equal({ a: 'b', c: 'd', contentType: 'text/html' }); + view._render.getCall(0).args[0].should.deep.equal({ + a: 'b', + c: 'd', + contentType: 'text/html', + viewPathBase: resolve(__dirname, '../../lib/views/base.html'), + }); view._render.getCall(0).args[1].should.equal(request); view._render.getCall(0).args[2].should.equal(response); view._render.getCall(0).args[3].should.be.an.instanceof(Function); diff --git a/packages/feature-qpf/README.md b/packages/feature-qpf/README.md new file mode 100644 index 00000000..552f074c --- /dev/null +++ b/packages/feature-qpf/README.md @@ -0,0 +1,12 @@ +# Linked Data Fragments Server - Quad Pattern Fragments + + +This module adds Quad Pattern Fragments (or [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support. + +TODO: add documentation + +## License +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/components/Controller/QuadPatternFragments.jsonld b/packages/feature-qpf/components/Controller/QuadPatternFragments.jsonld similarity index 69% rename from packages/core/components/Controller/QuadPatternFragments.jsonld rename to packages/feature-qpf/components/Controller/QuadPatternFragments.jsonld index 7eaddf06..777e301e 100644 --- a/packages/core/components/Controller/QuadPatternFragments.jsonld +++ b/packages/feature-qpf/components/Controller/QuadPatternFragments.jsonld @@ -1,18 +1,19 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-qpf", "components": [ { - "@id": "ldfc:Controller/QuadPatternFragments", + "@id": "ldffq:Controller/QuadPatternFragments", "@type": "Class", "extends": "ldfc:Controller", "requireElement": "controllers.QuadPatternFragmentsController", "comment": "A QuadPatternFragmentsController responds to requests for TPFs and QPFs", "parameters": [ { - "@id": "ldfc:Controller/QuadPatternFragments#router", + "@id": "ldffq:Controller/QuadPatternFragments#router", "inheritValues": { "@type": "InheritanceValue", "onParameter": "ldfc:Server#router", @@ -20,7 +21,7 @@ } }, { - "@id": "ldfc:Controller/QuadPatternFragments#controllerExtension", + "@id": "ldffq:Controller/QuadPatternFragments#controllerExtension", "comment": "An extension for this controller", "range": { "@id": "ldfc:ControllerExtension", @@ -36,7 +37,7 @@ }, { "keyRaw": "extensions", - "value": "ldfc:Controller/QuadPatternFragments#controllerExtension" + "value": "ldffq:Controller/QuadPatternFragments#controllerExtension" } ] } diff --git a/packages/core/components/Router/QuadPattern.jsonld b/packages/feature-qpf/components/Router/QuadPattern.jsonld similarity index 71% rename from packages/core/components/Router/QuadPattern.jsonld rename to packages/feature-qpf/components/Router/QuadPattern.jsonld index 552d1da9..7d1c7426 100644 --- a/packages/core/components/Router/QuadPattern.jsonld +++ b/packages/feature-qpf/components/Router/QuadPattern.jsonld @@ -1,18 +1,19 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-qpf", "components": [ { - "@id": "ldfc:Router/QuadPattern", + "@id": "ldffq:Router/QuadPattern", "@type": "Class", "extends": "ldfc:Router", "requireElement": "routers.QuadPatternRouter", "comment": "A QuadPatternRouter routes basic quad patterns", "parameters": [ { - "@id": "ldfc:QuadPattern/Page#routerPrefix", + "@id": "ldffq:QuadPattern/Page#routerPrefix", "inheritValues": { "@type": "InheritanceValue", "onParameter": "ldfc:Server#prefix", diff --git a/packages/core/components/View/Html/Qpf.jsonld b/packages/feature-qpf/components/View/Html/Qpf.jsonld similarity index 68% rename from packages/core/components/View/Html/Qpf.jsonld rename to packages/feature-qpf/components/View/Html/Qpf.jsonld index 1bee55b4..e70aab86 100644 --- a/packages/core/components/View/Html/Qpf.jsonld +++ b/packages/feature-qpf/components/View/Html/Qpf.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-qpf", "components": [ { - "@id": "ldfc:View/Html/Qpf", + "@id": "ldffq:View/Html/Qpf", "@type": "Class", "extends": "ldfc:View/Html", "requireElement": "views.quadpatternfragments.QuadPatternFragmentsHtmlView", diff --git a/packages/core/components/View/Rdf/Qpf.jsonld b/packages/feature-qpf/components/View/Rdf/Qpf.jsonld similarity index 68% rename from packages/core/components/View/Rdf/Qpf.jsonld rename to packages/feature-qpf/components/View/Rdf/Qpf.jsonld index 8d63841f..6e4aa53e 100644 --- a/packages/core/components/View/Rdf/Qpf.jsonld +++ b/packages/feature-qpf/components/View/Rdf/Qpf.jsonld @@ -1,11 +1,12 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" ], - "@id": "npmd:@ldf/server", + "@id": "npmd:@ldf/feature-qpf", "components": [ { - "@id": "ldfc:View/Rdf/Qpf", + "@id": "ldffq:View/Rdf/Qpf", "@type": "Class", "extends": "ldfc:View/Rdf", "requireElement": "views.quadpatternfragments.QuadPatternFragmentsRdfView", diff --git a/packages/feature-qpf/components/components.jsonld b/packages/feature-qpf/components/components.jsonld new file mode 100644 index 00000000..ead3e63e --- /dev/null +++ b/packages/feature-qpf/components/components.jsonld @@ -0,0 +1,12 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/feature-qpf", + "@type": "Module", + "requireName": "@ldf/feature-qpf", + "import": [ + "files-ldffq:components/Controller/QuadPatternFragments.jsonld", + "files-ldffq:components/Router/QuadPattern.jsonld", + "files-ldffq:components/View/Html/Qpf.jsonld", + "files-ldffq:components/View/Rdf/Qpf.jsonld" + ] +} diff --git a/packages/feature-qpf/components/context.jsonld b/packages/feature-qpf/components/context.jsonld new file mode 100644 index 00000000..2bf0bf83 --- /dev/null +++ b/packages/feature-qpf/components/context.jsonld @@ -0,0 +1,19 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldffq": "npmd:@ldf/feature-qpf/", + "files-ldffq": "ldffq:^3.0.0/", + + "QuadPatternFragmentsController": "ldffq:Controller/QuadPatternFragments", + "qpfControllerExtension": "ldffq:Controller/QuadPatternFragments#controllerExtension", + + "QuadPatternRouter": "ldffq:Router/QuadPattern", + "routerPrefix": "ldffq:QuadPattern/Page#routerPrefix", + + "QpfHtmlView": "ldffq:View/Html/Qpf", + "QpfRdfView": "ldffq:View/Rdf/Qpf" + } + ] +} diff --git a/packages/feature-qpf/index.js b/packages/feature-qpf/index.js new file mode 100644 index 00000000..5eee5fe8 --- /dev/null +++ b/packages/feature-qpf/index.js @@ -0,0 +1,17 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + controllers: { + QuadPatternFragmentsController: require('./lib/controllers/QuadPatternFragmentsController'), + }, + routers: { + QuadPatternRouter: require('./lib/routers/QuadPatternRouter'), + }, + views: { + quadpatternfragments: { + QuadPatternFragmentsHtmlView: require('./lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView'), + QuadPatternFragmentsRdfView: require('./lib/views/quadpatternfragments/QuadPatternFragmentsRdfView'), + }, + }, +}; diff --git a/packages/core/lib/controllers/QuadPatternFragmentsController.js b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js similarity index 98% rename from packages/core/lib/controllers/QuadPatternFragmentsController.js rename to packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js index b7573c93..916430fa 100644 --- a/packages/core/lib/controllers/QuadPatternFragmentsController.js +++ b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2018 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /** A QuadPatternFragmentsController responds to requests for TPFs and QPFs */ -var Controller = require('./Controller'), +var Controller = require('@ldf/core').controllers.Controller, url = require('url'), _ = require('lodash'), N3Util = require('n3').Util; diff --git a/packages/core/lib/routers/QuadPatternRouter.js b/packages/feature-qpf/lib/routers/QuadPatternRouter.js similarity index 100% rename from packages/core/lib/routers/QuadPatternRouter.js rename to packages/feature-qpf/lib/routers/QuadPatternRouter.js diff --git a/packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js similarity index 84% rename from packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js rename to packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js index e4c1b45d..32a96e50 100644 --- a/packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js @@ -1,7 +1,8 @@ /*! @license MIT ©2015-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* A QuadPatternFragmentsRdfView represents a TPF or QPF in HTML. */ -var HtmlView = require('../HtmlView'); +var HtmlView = require('@ldf/core').views.HtmlView, + join = require('path').join; // Creates a new QuadPatternFragmentsHtmlView function QuadPatternFragmentsHtmlView(settings) { @@ -11,7 +12,7 @@ function QuadPatternFragmentsHtmlView(settings) { } HtmlView.extend(QuadPatternFragmentsHtmlView); -QuadPatternFragmentsHtmlView.prototype.viewDirectory = 'quadpatternfragments/'; +QuadPatternFragmentsHtmlView.prototype.viewDirectory = __dirname; // Renders the view with the given settings to the response QuadPatternFragmentsHtmlView.prototype._render = function (settings, request, response, done) { @@ -28,7 +29,7 @@ QuadPatternFragmentsHtmlView.prototype._render = function (settings, request, re function renderHtml() { var template = settings.datasource.role === 'index' ? 'index' : 'datasource'; settings.extensions = { Before: null, FormBefore: null, FormAfter: null, QuadBefore: 'function', QuadAfter: 'function', After: null }; - self._renderTemplate(self.viewDirectory + template, settings, request, response, done); + self._renderTemplate(join(self.viewDirectory, template), settings, request, response, done); } }; diff --git a/packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js similarity index 99% rename from packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js rename to packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js index dd65b4f0..9bfff2f5 100644 --- a/packages/core/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* A QuadPatternFragmentsRdfView represents a Quad Pattern Fragment in RDF. */ -var RdfView = require('../RdfView'); +var RdfView = require('@ldf/core').views.RdfView; var dcTerms = 'http://purl.org/dc/terms/', rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', diff --git a/packages/core/lib/views/quadpatternfragments/datasource.html b/packages/feature-qpf/lib/views/quadpatternfragments/datasource.html similarity index 83% rename from packages/core/lib/views/quadpatternfragments/datasource.html rename to packages/feature-qpf/lib/views/quadpatternfragments/datasource.html index c399593c..1044ea69 100644 --- a/packages/core/lib/views/quadpatternfragments/datasource.html +++ b/packages/feature-qpf/lib/views/quadpatternfragments/datasource.html @@ -1,4 +1,4 @@ <% /* @license MIT ©2013-2017 Ruben Verborgh, Ghent University - imec */ -%> <% title = datasource.title + ' | ' + title %> -<% inherits('base') %> +<% inherits(viewPathBase) %> <%- render('fragment') %> diff --git a/packages/core/lib/views/quadpatternfragments/fragment.html b/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html similarity index 100% rename from packages/core/lib/views/quadpatternfragments/fragment.html rename to packages/feature-qpf/lib/views/quadpatternfragments/fragment.html diff --git a/packages/core/lib/views/quadpatternfragments/index.html b/packages/feature-qpf/lib/views/quadpatternfragments/index.html similarity index 96% rename from packages/core/lib/views/quadpatternfragments/index.html rename to packages/feature-qpf/lib/views/quadpatternfragments/index.html index 5a0ad26a..391d595e 100644 --- a/packages/core/lib/views/quadpatternfragments/index.html +++ b/packages/feature-qpf/lib/views/quadpatternfragments/index.html @@ -1,5 +1,5 @@ <% /* @license MIT ©2013-2017 Ruben Verborgh, Ghent University - imec */ -%> -<% inherits('base') %> +<% inherits(viewPathBase) %> <% if (!query.features.triplePattern && !query.features.quadPattern) { %>
diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json new file mode 100644 index 00000000..ddee1885 --- /dev/null +++ b/packages/feature-qpf/package.json @@ -0,0 +1,43 @@ +{ + "name": "@ldf/feature-qpf", + "description": "Linked Data Fragments Server - Quad Pattern Fragments", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf", + "lsd:components": "components/components.jsonld", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/": "components/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "lodash": "^2.4.2", + "n3": "^0.9.0" + }, + "peerDependencies": { + "@ldf/core": "2.2.5" + }, + "devDependencies": { + "@ldf/core": "2.2.5" + } +} diff --git a/packages/feature-qpf/test/.eslintrc b/packages/feature-qpf/test/.eslintrc new file mode 100644 index 00000000..aa46bea4 --- /dev/null +++ b/packages/feature-qpf/test/.eslintrc @@ -0,0 +1,18 @@ +{ + globals: { + describe: true, + it: true, + before: true, + after: true, + beforeEach: true, + afterEach: true, + expect: true, + sinon: true, + test: true, + }, + + rules: { + new-cap: 0, // test constructors as regular functions + max-nested-callbacks: 0, // Mocha works with deeply nested callbacks + }, +} diff --git a/packages/core/test/controllers/QuadPatternFragmentsController-test.js b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js similarity index 97% rename from packages/core/test/controllers/QuadPatternFragmentsController-test.js rename to packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js index c595521c..2bc80abe 100644 --- a/packages/core/test/controllers/QuadPatternFragmentsController-test.js +++ b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js @@ -1,13 +1,13 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var QuadPatternFragmentsController = require('../../lib/controllers/QuadPatternFragmentsController'); +var QuadPatternFragmentsController = require('../../').controllers.QuadPatternFragmentsController; var request = require('supertest'), DummyServer = require('../../../../test/DummyServer'), http = require('http'); -var QuadPatternFragmentsHtmlView = require('../../lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js'), - QuadPatternFragmentsRdfView = require('../../lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js'), - UrlData = require('../../lib/UrlData.js'); +var QuadPatternFragmentsHtmlView = require('../../').views.quadpatternfragments.QuadPatternFragmentsHtmlView, + QuadPatternFragmentsRdfView = require('../../').views.quadpatternfragments.QuadPatternFragmentsRdfView, + UrlData = require('@ldf/core').UrlData; describe('QuadPatternFragmentsController', function () { describe('The QuadPatternFragmentsController module', function () { diff --git a/packages/feature-qpf/test/mocha.opts b/packages/feature-qpf/test/mocha.opts new file mode 100644 index 00000000..7014624f --- /dev/null +++ b/packages/feature-qpf/test/mocha.opts @@ -0,0 +1,3 @@ +--require ../../test/test-setup +--recursive +--timeout 500 diff --git a/packages/core/test/routers/QuadPatternRouter-test.js b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js similarity index 99% rename from packages/core/test/routers/QuadPatternRouter-test.js rename to packages/feature-qpf/test/routers/QuadPatternRouter-test.js index 947eb62f..3adce8f5 100644 --- a/packages/core/test/routers/QuadPatternRouter-test.js +++ b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js @@ -1,5 +1,5 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var QuadPatternRouter = require('../../lib/routers/QuadPatternRouter'); +var QuadPatternRouter = require('../../').routers.QuadPatternRouter; describe('QuadPatternRouter', function () { describe('The QuadPatternRouter module', function () { diff --git a/packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js similarity index 98% rename from packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js rename to packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js index 1f4a5e56..9e49d43b 100644 --- a/packages/core/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js +++ b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js @@ -1,5 +1,5 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var QuadPatternFragmentsRdfView = require('../../../lib/views/quadpatternfragments/QuadPatternFragmentsRdfView'); +var QuadPatternFragmentsRdfView = require('../../../').views.quadpatternfragments.QuadPatternFragmentsRdfView; var _ = require('lodash'), fs = require('fs'), diff --git a/packages/feature-webid/components/ControllerExtension/WebId.jsonld b/packages/feature-webid/components/ControllerExtension/WebId.jsonld index 04dbaed0..4c3541b6 100644 --- a/packages/feature-webid/components/ControllerExtension/WebId.jsonld +++ b/packages/feature-webid/components/ControllerExtension/WebId.jsonld @@ -1,6 +1,7 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/context.jsonld" ], "@id": "npmd:@ldf/feature-webid", "components": [ From 52ebbdf05ea3f3773b28916c124e8dde4d4491a6 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 28 Feb 2020 09:25:18 +0100 Subject: [PATCH 061/165] Make index.js file of core package static Dynamic require's don't always work well with other tools. --- packages/core/index.js | 70 +++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/packages/core/index.js b/packages/core/index.js index 794a6bfa..be03c766 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -1,31 +1,43 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -/* Exports of the ldf-server package for use as a submodule (as opposed to standalone) */ +/* Exports of the components of this package */ -var fs = require('fs'), - path = require('path'); - -// Export all modules in the `lib` folder -module.exports = readModules(path.join(__dirname, 'lib')); - -// Reads modules in the given folder and subfolders -function readModules(folder) { - var modules = {}; - fs.readdirSync(folder).forEach(function (name) { - var location = path.join(folder, name), item = fs.statSync(location); - // Add script files by including them - if (item.isFile()) { - var scriptMatch = name.match(/(\w+)\.js$/); - if (scriptMatch) { - try { modules[scriptMatch[1]] = require(location); } - catch (error) { - console.error(error); // TODO - } - } - } - // Add folders by recursing over them - else if (item.isDirectory()) { - modules[name] = readModules(location); - } - }); - return modules; -} +module.exports = { + controllers: { + AssetsController: require('./lib/controllers/AssetsController'), + Controller: require('./lib/controllers/Controller'), + DereferenceController: require('./lib/controllers/DereferenceController'), + ErrorController: require('./lib/controllers/ErrorController'), + NotFoundController: require('./lib/controllers/NotFoundController'), + }, + datasources: { + Datasource: require('./lib/datasources/Datasource'), + EmptyDatasource: require('./lib/datasources/EmptyDatasource'), + IndexDatasource: require('./lib/datasources/IndexDatasource'), + MemoryDatasource: require('./lib/datasources/MemoryDatasource'), + }, + routers: { + DatasourceRouter: require('./lib/routers/DatasourceRouter'), + PageRouter: require('./lib/routers/PageRouter'), + }, + views: { + error: { + ErrorHtmlView: require('./lib/views/error/ErrorHtmlView'), + ErrorRdfView: require('./lib/views/error/ErrorRdfView'), + }, + forbidden: { + ForbiddenHtmlView: require('./lib/views/forbidden/ForbiddenHtmlView'), + }, + notfound: { + NotFoundHtmlView: require('./lib/views/notfound/NotFoundHtmlView'), + NotFoundRdfView: require('./lib/views/notfound/NotFoundRdfView'), + }, + HtmlView: require('./lib/views/HtmlView'), + RdfView: require('./lib/views/RdfView'), + View: require('./lib/views/View'), + ViewCollection: require('./lib/views/ViewCollection'), + }, + LinkedDataFragmentsServer: require('./lib/LinkedDataFragmentsServer'), + LinkedDataFragmentsServerWorker: require('./lib/LinkedDataFragmentsServerWorker'), + UrlData: require('./lib/UrlData'), + Util: require('./lib/Util'), +}; From f7c2967807d1e36024b5817c5d89188075060c5e Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 28 Feb 2020 09:27:59 +0100 Subject: [PATCH 062/165] Optimize running of linter from root --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7860eeb3..9617053a 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "test-changed": "lerna run test --since HEAD", "lint-changed": "lerna run lint --since HEAD", "test": "mocha \"packages/*/test/**/*-test.js\" --recursive --require ./test/test-setup --timeout 500", - "lint": "lerna run lint", + "lint": "eslint packages/*/bin/* packages/*/lib packages/*/test", "clean": "rm -rf ./node_modules && rm -rf ./packages/*/node_modules", "publish": "lerna publish", "publish-bare": "lerna exec -- npm publish --silent", From 19b76dd8631e8e65339ba0462b7f73a5492914cd Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 2 Mar 2020 10:03:02 +0100 Subject: [PATCH 063/165] Abstract ldf-server bin to CliRunner --- .eslintrc | 2 +- packages/core/bin/.eslintrc | 6 - packages/core/bin/ldf-server | 123 +---------------- packages/core/index.js | 2 + packages/core/lib/CliRunner.js | 129 ++++++++++++++++++ packages/feature-summary/README.md | 2 +- packages/feature-summary/bin/.eslintrc | 5 + .../bin/generate-summary | 0 packages/feature-summary/package.json | 3 + 9 files changed, 142 insertions(+), 130 deletions(-) delete mode 100644 packages/core/bin/.eslintrc create mode 100644 packages/core/lib/CliRunner.js create mode 100644 packages/feature-summary/bin/.eslintrc rename packages/{core => feature-summary}/bin/generate-summary (100%) diff --git a/.eslintrc b/.eslintrc index 25932526..575c0441 100644 --- a/.eslintrc +++ b/.eslintrc @@ -136,7 +136,7 @@ key-spacing: 0, lines-around-comment: 2, linebreak-style: 2, - max-nested-callbacks: [2, 2], + max-nested-callbacks: [2, 4], new-cap: 2, new-parens: 2, newline-after-var: 0, diff --git a/packages/core/bin/.eslintrc b/packages/core/bin/.eslintrc deleted file mode 100644 index dddcf5c7..00000000 --- a/packages/core/bin/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - rules: { - no-console: 0, - max-nested-callbacks: 0, - }, -} diff --git a/packages/core/bin/ldf-server b/packages/core/bin/ldf-server index ce501eea..318d32c0 100755 --- a/packages/core/bin/ldf-server +++ b/packages/core/bin/ldf-server @@ -1,123 +1,2 @@ #!/usr/bin/env node -/*! @license MIT ©2013-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ -/* Standalone Linked Data Fragments Server */ - -var cluster = require('cluster'), - ComponentsLoader = require('componentsjs').Loader; - -// Parse arguments -var args = process.argv.slice(2); -if (args.length < 1 || args.length > 4 || /^--?h(elp)?$/.test(args[0])) { - console.log('usage: server config.json [port [workers [componentConfigUri]]]'); - return process.exit(1); -} - -var cliPort = parseInt(args[1], 10), - cliWorkers = parseInt(args[2], 10), - configUri = args[3] || 'urn:ldf-server:my'; - -var loader = new ComponentsLoader({ scanGlobal: true }); -loader.registerAvailableModuleResources() - .then(function () { - // Start up a cluster master - if (cluster.isMaster) { - return loader.getConfigConstructorFromUrl(configUri, args[0]) - .then(function (constructor) { - return constructor.makeArguments(true).then(function (args) { - startClusterMaster(args[0]); - }); - }) - .catch(function (e) { - console.error('Config error:'); - console.error(e); - process.exit(1); - }); - } - else { - return loader.instantiateFromUrl(configUri, args[0]) - .then(function (worker) { - worker.run(cliPort); - }) - .catch(function (e) { - console.error('Instantiation error:'); - console.error(e); - process.exit(1); - }); - } - }) - .catch(function (e) { - console.error('Component definition error:'); - console.error(e); - process.exit(1); - }); - -function startClusterMaster(config) { - var workers = cliWorkers || config.workers || 1; - - // Create workers - console.log('Master %d running.', process.pid); - for (var i = 0; i < workers; i++) - cluster.fork(); - - // Respawn crashed workers - cluster.on('listening', function (worker) { - worker.once('exit', function (code, signal) { - if (!worker.exitedAfterDisconnect) { - console.log('Worker %d died with %s. Starting new worker.', - worker.process.pid, code || signal); - cluster.fork(); - } - }); - }); - - // Disconnect from cluster on SIGINT, so that the process can cleanly terminate - process.once('SIGINT', function () { - cluster.disconnect(); - }); - - // Respawn workers one by one when receiving a SIGHUP signal - process.on('SIGHUP', function respawn() { - console.log('Respawning workers of master %d.', process.pid); - process.addListener('SIGHUP', respawnPending); - process.removeListener('SIGHUP', respawn); - - // Retrieve a list of old workers that will be replaced by new ones - var workers = Object.keys(cluster.workers).map(function (id) { return cluster.workers[id]; }); - (function respawnNext() { - // If there are still old workers, respawn a new one - if (workers.length) { - // Wait until the new worker starts listening to kill the old one - var newWorker = cluster.fork(); - newWorker.once('listening', function () { - var worker = workers.pop(); - if (!worker) - return newWorker.kill(), respawnNext(); // Dead workers are replaced automatically - worker.once('exit', function () { - console.log('Worker %d replaces killed worker %d.', - newWorker.process.pid, worker.process.pid); - respawnNext(); - }); - worker.kill(); - newWorker.removeListener('exit', abort); - }); - // Abort the respawning process if creating a new worker fails - newWorker.on('exit', abort); - function abort(code, signal) { - if (!newWorker.suicide) { - console.log('Respawning aborted because worker %d died with %s.', - newWorker.process.pid, code || signal); - process.addListener('SIGHUP', respawn); - process.removeListener('SIGHUP', respawnPending); - } - } - } - // No old workers left, so respawning has finished - else { - process.addListener('SIGHUP', respawn); - process.removeListener('SIGHUP', respawnPending); - console.log('Respawned all workers of master %d.', process.pid); - } - })(); - function respawnPending() { console.log('Respawning already in progress'); } - }); -} +require('../').runCli(__dirname + '/../', __dirname + '/../config/config-default.json'); // eslint-disable-line no-path-concat diff --git a/packages/core/index.js b/packages/core/index.js index be03c766..0987c197 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -36,6 +36,8 @@ module.exports = { View: require('./lib/views/View'), ViewCollection: require('./lib/views/ViewCollection'), }, + runCli: require('./lib/CliRunner').runCli, + runCustom: require('./lib/CliRunner').runCustom, LinkedDataFragmentsServer: require('./lib/LinkedDataFragmentsServer'), LinkedDataFragmentsServerWorker: require('./lib/LinkedDataFragmentsServerWorker'), UrlData: require('./lib/UrlData'), diff --git a/packages/core/lib/CliRunner.js b/packages/core/lib/CliRunner.js new file mode 100644 index 00000000..356b246e --- /dev/null +++ b/packages/core/lib/CliRunner.js @@ -0,0 +1,129 @@ +/*! @license MIT ©2013-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ +/* Logic for starting an LDF server with a given config from the command line. */ + +var cluster = require('cluster'), + ComponentsLoader = require('componentsjs').Loader; + +// Run function for starting the server from the command line +function runCli(moduleRootPath, defaultConfigPath) { + var argv = process.argv.slice(2); + runCustom(defaultConfigPath, argv, process.stdin, process.stdout, process.stderr, null, { mainModulePath: moduleRootPath }); +} + +// Generic run function for starting the server from a given config +function runCustom(configResourceUrl, args, stdin, stdout, stderr, componentConfigUri, properties) { + if (args.length < 1 || args.length > 4 || /^--?h(elp)?$/.test(args[0])) { + stdout.write('usage: server config.json [port [workers [componentConfigUri]]]\n'); + return process.exit(1); + } + + var cliPort = parseInt(args[1], 10), + cliWorkers = parseInt(args[2], 10), + configUri = args[3] || componentConfigUri || 'urn:ldf-server:my'; + + var loader = new ComponentsLoader(properties); + loader.registerAvailableModuleResources() + .then(function () { + // Start up a cluster master + if (cluster.isMaster) { + return loader.getConfigConstructorFromUrl(configUri, args[0]) + .then(function (constructor) { + return constructor.makeArguments(true).then(function (args) { + startClusterMaster(args[0]); + }); + }) + .catch(function (e) { + stderr.write('Config error:\n'); + stderr.write(e + '\n'); + process.exit(1); + }); + } + else { + return loader.instantiateFromUrl(configUri, args[0]) + .then(function (worker) { + worker.run(cliPort); + }) + .catch(function (e) { + stderr.write('Instantiation error:\n'); + stderr.write(e + '\n'); + process.exit(1); + }); + } + }) + .catch(function (e) { + stderr.write('Component definition error:\n'); + stderr.write(e + '\n'); + process.exit(1); + }); + + function startClusterMaster(config) { + var workers = cliWorkers || config.workers || 1; + + // Create workers + stdout.write('Master ' + process.pid + ' running.\n'); + for (var i = 0; i < workers; i++) + cluster.fork(); + + // Respawn crashed workers + cluster.on('listening', function (worker) { + worker.once('exit', function (code, signal) { + if (!worker.exitedAfterDisconnect) { + stdout.write('Worker ' + worker.process.pid + 'died with ' + (code || signal) + '. Starting new worker.\n'); + cluster.fork(); + } + }); + }); + + // Disconnect from cluster on SIGINT, so that the process can cleanly terminate + process.once('SIGINT', function () { + cluster.disconnect(); + }); + + // Respawn workers one by one when receiving a SIGHUP signal + process.on('SIGHUP', function respawn() { + stdout.write('Respawning workers of master ' + process.pid + '.\n'); + process.addListener('SIGHUP', respawnPending); + process.removeListener('SIGHUP', respawn); + + // Retrieve a list of old workers that will be replaced by new ones + var workers = Object.keys(cluster.workers).map(function (id) { return cluster.workers[id]; }); + (function respawnNext() { + // If there are still old workers, respawn a new one + if (workers.length) { + // Wait until the new worker starts listening to kill the old one + var newWorker = cluster.fork(); + newWorker.once('listening', function () { + var worker = workers.pop(); + if (!worker) + return newWorker.kill(), respawnNext(); // Dead workers are replaced automatically + worker.once('exit', function () { + stdout.write('Worker ' + newWorker.process.pid + ' replaces killed worker ' + worker.process.pid + '.\n'); + respawnNext(); + }); + worker.kill(); + newWorker.removeListener('exit', abort); + }); + // Abort the respawning process if creating a new worker fails + newWorker.on('exit', abort); + function abort(code, signal) { + if (!newWorker.suicide) { + stdout.write('Respawning aborted because worker ' + newWorker.process.pid + ' died with ' + + (code || signal) + '.\n'); + process.addListener('SIGHUP', respawn); + process.removeListener('SIGHUP', respawnPending); + } + } + } + // No old workers left, so respawning has finished + else { + process.addListener('SIGHUP', respawn); + process.removeListener('SIGHUP', respawnPending); + stdout.write('Respawned all workers of master ' + process.pid + '.\n'); + } + })(); + function respawnPending() { stdout.write('Respawning already in progress\n'); } + }); + } +} + +module.exports = { runCli: runCli, runCustom: runCustom }; diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md index 00c64c7c..a3fd0c24 100644 --- a/packages/feature-summary/README.md +++ b/packages/feature-summary/README.md @@ -1,4 +1,4 @@ -# Linked Data Fragments Server - WebID +# Linked Data Fragments Server - Summary This module adds a controller extension that only allows authenticated client with WebID's to perform requests. diff --git a/packages/feature-summary/bin/.eslintrc b/packages/feature-summary/bin/.eslintrc new file mode 100644 index 00000000..f34a0d3c --- /dev/null +++ b/packages/feature-summary/bin/.eslintrc @@ -0,0 +1,5 @@ +{ + rules: { + "no-console": 0, + }, +} diff --git a/packages/core/bin/generate-summary b/packages/feature-summary/bin/generate-summary similarity index 100% rename from packages/core/bin/generate-summary rename to packages/feature-summary/bin/generate-summary diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index f49d2837..b23e0223 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -11,6 +11,9 @@ "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/": "components/" }, "license": "MIT", + "bin": { + "generate-summary": "./bin/generate-summary" + }, "main": "index.js", "publishConfig": { "access": "public" From 86261d54f1f151d6a632dda126829667471f44f2 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 2 Mar 2020 10:53:16 +0100 Subject: [PATCH 064/165] Add preset-qpf and server-qpf packages, #103 --- packages/core/bin/ldf-server | 2 - packages/core/components/context.jsonld | 1 - packages/core/config/config-defaults.json | 12 ----- packages/core/config/sets/datasources.json | 14 ------ packages/core/lib/CliRunner.js | 6 +-- packages/core/package.json | 6 +-- packages/preset-qpf/README.md | 12 +++++ packages/preset-qpf/components/context.jsonld | 12 +++++ .../preset-qpf/config/config-defaults.json | 15 ++++++ .../config/sets/controllers.json | 9 ++-- .../preset-qpf/config/sets/datasources.json | 17 +++++++ .../config/sets/prefixes.json | 5 +- .../config/sets/routers.json | 7 +-- .../config/sets/views.json | 15 +++--- packages/preset-qpf/package.json | 33 +++++++++++++ packages/{core => server-qpf}/Dockerfile | 0 packages/server-qpf/README.md | 12 +++++ packages/server-qpf/bin/ldf-server-qpf | 2 + packages/server-qpf/components/context.jsonld | 15 ++++++ .../config/config-example.json | 8 +--- packages/server-qpf/package.json | 48 +++++++++++++++++++ 21 files changed, 193 insertions(+), 58 deletions(-) delete mode 100755 packages/core/bin/ldf-server delete mode 100644 packages/core/config/config-defaults.json delete mode 100644 packages/core/config/sets/datasources.json create mode 100644 packages/preset-qpf/README.md create mode 100644 packages/preset-qpf/components/context.jsonld create mode 100644 packages/preset-qpf/config/config-defaults.json rename packages/{core => preset-qpf}/config/sets/controllers.json (56%) create mode 100644 packages/preset-qpf/config/sets/datasources.json rename packages/{core => preset-qpf}/config/sets/prefixes.json (69%) rename packages/{core => preset-qpf}/config/sets/routers.json (59%) rename packages/{core => preset-qpf}/config/sets/views.json (53%) create mode 100644 packages/preset-qpf/package.json rename packages/{core => server-qpf}/Dockerfile (100%) create mode 100644 packages/server-qpf/README.md create mode 100755 packages/server-qpf/bin/ldf-server-qpf create mode 100644 packages/server-qpf/components/context.jsonld rename packages/{core => server-qpf}/config/config-example.json (82%) create mode 100644 packages/server-qpf/package.json diff --git a/packages/core/bin/ldf-server b/packages/core/bin/ldf-server deleted file mode 100755 index 318d32c0..00000000 --- a/packages/core/bin/ldf-server +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -require('../').runCli(__dirname + '/../', __dirname + '/../config/config-default.json'); // eslint-disable-line no-path-concat diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 99e52418..0fdfad5d 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -5,7 +5,6 @@ "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldfc": "npmd:@ldf/core/", "files-ldfc": "ldfc:^3.0.0/", - "config": "files-ldfc:config/", "rdfa": "http://www.w3.org/ns/rdfa#", diff --git a/packages/core/config/config-defaults.json b/packages/core/config/config-defaults.json deleted file mode 100644 index 1f8f4f41..00000000 --- a/packages/core/config/config-defaults.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", - "@id": "urn:ldf-server:my", - "@type": "Server", - "import": [ - "config:sets/controllers.json", - "config:sets/datasources.json", - "config:sets/prefixes.json", - "config:sets/routers.json", - "config:sets/views.json" - ] -} diff --git a/packages/core/config/sets/datasources.json b/packages/core/config/sets/datasources.json deleted file mode 100644 index 718c63ca..00000000 --- a/packages/core/config/sets/datasources.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", - "@id": "urn:ldf-server:my", - - "datasources": [ - { - "@id": "config:sets/datasources.json#myIndexDatasource", - "@type": "IndexDatasource", - "datasourceTitle": "dataset index", - "datasourcePath": "/", - "hide": true - } - ] -} diff --git a/packages/core/lib/CliRunner.js b/packages/core/lib/CliRunner.js index 356b246e..5801cd45 100644 --- a/packages/core/lib/CliRunner.js +++ b/packages/core/lib/CliRunner.js @@ -5,13 +5,13 @@ var cluster = require('cluster'), ComponentsLoader = require('componentsjs').Loader; // Run function for starting the server from the command line -function runCli(moduleRootPath, defaultConfigPath) { +function runCli(moduleRootPath) { var argv = process.argv.slice(2); - runCustom(defaultConfigPath, argv, process.stdin, process.stdout, process.stderr, null, { mainModulePath: moduleRootPath }); + runCustom(argv, process.stdin, process.stdout, process.stderr, null, { mainModulePath: moduleRootPath }); } // Generic run function for starting the server from a given config -function runCustom(configResourceUrl, args, stdin, stdout, stderr, componentConfigUri, properties) { +function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) { if (args.length < 1 || args.length > 4 || /^--?h(elp)?$/.test(args[0])) { stdout.write('usage: server config.json [port [workers [componentConfigUri]]]\n'); return process.exit(1); diff --git a/packages/core/package.json b/packages/core/package.json index 5a88239a..6774b9be 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -8,13 +8,9 @@ "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld": "components/context.jsonld" }, "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/": "components/", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/config/": "config/" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/": "components/" }, "license": "MIT", - "bin": { - "ldf-server": "./bin/ldf-server" - }, "main": "index.js", "publishConfig": { "access": "public" diff --git a/packages/preset-qpf/README.md b/packages/preset-qpf/README.md new file mode 100644 index 00000000..49cdcce6 --- /dev/null +++ b/packages/preset-qpf/README.md @@ -0,0 +1,12 @@ +# Linked Data Fragments Server - Preset Quad Pattern Fragments + + +Configuration presets for Quad Pattern Fragments servers. + +TODO: add documentation + +## License +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/preset-qpf/components/context.jsonld b/packages/preset-qpf/components/context.jsonld new file mode 100644 index 00000000..5d3af6e0 --- /dev/null +++ b/packages/preset-qpf/components/context.jsonld @@ -0,0 +1,12 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldfpq": "npmd:@ldf/preset-qpf/", + "files-ldfpq": "ldfpq:^3.0.0/", + "preset-qpf": "files-ldfpq:config/" + } + ] +} diff --git a/packages/preset-qpf/config/config-defaults.json b/packages/preset-qpf/config/config-defaults.json new file mode 100644 index 00000000..5f2c6f98 --- /dev/null +++ b/packages/preset-qpf/config/config-defaults.json @@ -0,0 +1,15 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + ], + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": [ + "preset-qpf:sets/controllers.json", + "preset-qpf:sets/datasources.json", + "preset-qpf:sets/prefixes.json", + "preset-qpf:sets/routers.json", + "preset-qpf:sets/views.json" + ] +} diff --git a/packages/core/config/sets/controllers.json b/packages/preset-qpf/config/sets/controllers.json similarity index 56% rename from packages/core/config/sets/controllers.json rename to packages/preset-qpf/config/sets/controllers.json index 3dc64f33..6b29813e 100644 --- a/packages/core/config/sets/controllers.json +++ b/packages/preset-qpf/config/sets/controllers.json @@ -1,5 +1,6 @@ { "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" ], @@ -7,19 +8,19 @@ "controllers": [ { - "@id": "config:sets/controllers.json#myQuadPatternFragmentsController", + "@id": "preset-qpf:sets/controllers.json#myQuadPatternFragmentsController", "@type": "QuadPatternFragmentsController" }, { - "@id": "config:sets/controllers.json#myAssetsController", + "@id": "preset-qpf:sets/controllers.json#myAssetsController", "@type": "ldfc:Controller/Assets" }, { - "@id": "config:sets/controllers.json#myDereferenceController", + "@id": "preset-qpf:sets/controllers.json#myDereferenceController", "@type": "ldfc:Controller/Dereference" }, { - "@id": "config:sets/controllers.json#myNotFoundController", + "@id": "preset-qpf:sets/controllers.json#myNotFoundController", "@type": "ldfc:Controller/NotFound" } ] diff --git a/packages/preset-qpf/config/sets/datasources.json b/packages/preset-qpf/config/sets/datasources.json new file mode 100644 index 00000000..7fa4ed44 --- /dev/null +++ b/packages/preset-qpf/config/sets/datasources.json @@ -0,0 +1,17 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + ], + "@id": "urn:ldf-server:my", + + "datasources": [ + { + "@id": "preset-qpf:sets/datasources.json#myIndexDatasource", + "@type": "IndexDatasource", + "datasourceTitle": "dataset index", + "datasourcePath": "/", + "hide": true + } + ] +} diff --git a/packages/core/config/sets/prefixes.json b/packages/preset-qpf/config/sets/prefixes.json similarity index 69% rename from packages/core/config/sets/prefixes.json rename to packages/preset-qpf/config/sets/prefixes.json index ef9c9a50..78315970 100644 --- a/packages/core/config/sets/prefixes.json +++ b/packages/preset-qpf/config/sets/prefixes.json @@ -1,5 +1,8 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + ], "@id": "urn:ldf-server:my", "prefixes": [ diff --git a/packages/core/config/sets/routers.json b/packages/preset-qpf/config/sets/routers.json similarity index 59% rename from packages/core/config/sets/routers.json rename to packages/preset-qpf/config/sets/routers.json index 39ce98b0..233e54f5 100644 --- a/packages/core/config/sets/routers.json +++ b/packages/preset-qpf/config/sets/routers.json @@ -1,5 +1,6 @@ { "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" ], @@ -7,15 +8,15 @@ "routers": [ { - "@id": "config:sets/routers.json#myDatasourceRouter", + "@id": "preset-qpf:sets/routers.json#myDatasourceRouter", "@type": "ldfc:Router/Datasource" }, { - "@id": "config:sets/routers.json#myQuadPatternRouter", + "@id": "preset-qpf:sets/routers.json#myQuadPatternRouter", "@type": "QuadPatternRouter" }, { - "@id": "config:sets/routers.json#myPageRouter", + "@id": "preset-qpf:sets/routers.json#myPageRouter", "@type": "ldfc:Router/Page" } ] diff --git a/packages/core/config/sets/views.json b/packages/preset-qpf/config/sets/views.json similarity index 53% rename from packages/core/config/sets/views.json rename to packages/preset-qpf/config/sets/views.json index eff75080..bc55a226 100644 --- a/packages/core/config/sets/views.json +++ b/packages/preset-qpf/config/sets/views.json @@ -1,5 +1,6 @@ { "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" ], @@ -7,31 +8,31 @@ "views": [ { - "@id": "config:sets/views.json#myErrorHtmlView", + "@id": "preset-qpf:sets/views.json#myErrorHtmlView", "@type": "ErrorHtmlView" }, { - "@id": "config:sets/views.json#myErrorRdfView", + "@id": "preset-qpf:sets/views.json#myErrorRdfView", "@type": "ErrorRdfView" }, { - "@id": "config:sets/views.json#myForbiddenHtmlView", + "@id": "preset-qpf:sets/views.json#myForbiddenHtmlView", "@type": "ForbiddenHtmlView" }, { - "@id": "config:sets/views.json#myNotFoundHtmlView", + "@id": "preset-qpf:sets/views.json#myNotFoundHtmlView", "@type": "NotFoundHtmlView" }, { - "@id": "config:sets/views.json#myNotFoundRdfView", + "@id": "preset-qpf:sets/views.json#myNotFoundRdfView", "@type": "NotFoundRdfView" }, { - "@id": "config:sets/views.json#myQpfHtmlView", + "@id": "preset-qpf:sets/views.json#myQpfHtmlView", "@type": "QpfHtmlView" }, { - "@id": "config:sets/views.json#myQpfRdfView", + "@id": "preset-qpf:sets/views.json#myQpfRdfView", "@type": "QpfRdfView" } ] diff --git a/packages/preset-qpf/package.json b/packages/preset-qpf/package.json new file mode 100644 index 00000000..f63450ba --- /dev/null +++ b/packages/preset-qpf/package.json @@ -0,0 +1,33 @@ +{ + "name": "@ldf/preset-qpf", + "description": "Linked Data Fragments Server - Preset Quad Pattern Fragments", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/": "components/", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/config/": "config/" + }, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + } +} diff --git a/packages/core/Dockerfile b/packages/server-qpf/Dockerfile similarity index 100% rename from packages/core/Dockerfile rename to packages/server-qpf/Dockerfile diff --git a/packages/server-qpf/README.md b/packages/server-qpf/README.md new file mode 100644 index 00000000..b00d9a80 --- /dev/null +++ b/packages/server-qpf/README.md @@ -0,0 +1,12 @@ +# Linked Data Fragments Server - Quad Pattern Fragments + + +A Linked Data Fragments server with Quad Pattern Fragments support. + +TODO: add documentation + +## License +The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/server-qpf/bin/ldf-server-qpf b/packages/server-qpf/bin/ldf-server-qpf new file mode 100755 index 00000000..1ffd7fe6 --- /dev/null +++ b/packages/server-qpf/bin/ldf-server-qpf @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('@ldf/core').runCli(__dirname + '/../'); // eslint-disable-line no-path-concat diff --git a/packages/server-qpf/components/context.jsonld b/packages/server-qpf/components/context.jsonld new file mode 100644 index 00000000..f29787ce --- /dev/null +++ b/packages/server-qpf/components/context.jsonld @@ -0,0 +1,15 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld" + ] +} diff --git a/packages/core/config/config-example.json b/packages/server-qpf/config/config-example.json similarity index 82% rename from packages/core/config/config-example.json rename to packages/server-qpf/config/config-example.json index cae70578..c9b26eec 100644 --- a/packages/core/config/config-example.json +++ b/packages/server-qpf/config/config-example.json @@ -1,14 +1,10 @@ { - "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld" - ], + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@graph": [ { "@id": "urn:ldf-server:my", "@type": "Server", - "import": "config:config-defaults.json", + "import": "preset-qpf:config-defaults.json", "title": "My Linked Data Fragments server", diff --git a/packages/server-qpf/package.json b/packages/server-qpf/package.json new file mode 100644 index 00000000..27a85ead --- /dev/null +++ b/packages/server-qpf/package.json @@ -0,0 +1,48 @@ +{ + "name": "@ldf/server-qpf", + "description": "Quad Pattern Fragments Linked Data Fragments Server", + "version": "2.2.5", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf", + "lsd:contexts": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld": "components/context.jsonld" + }, + "lsd:importPaths": { + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/": "components/", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/config/": "config/" + }, + "license": "MIT", + "bin": { + "ldf-server-qpf": "./bin/ldf-server-qpf" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "components", + "config", + "lib/**/*.js", + "bin/**/*.js", + "index.js" + ], + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "@ldf/core": "2.2.5", + "@ldf/datasource-composite": "2.2.5", + "@ldf/datasource-hdt": "2.2.5", + "@ldf/datasource-jsonld": "2.2.5", + "@ldf/datasource-n3": "2.2.5", + "@ldf/datasource-sparql": "2.2.5", + "@ldf/feature-memento": "2.2.5", + "@ldf/feature-qpf": "2.2.5", + "@ldf/feature-summary": "2.2.5", + "@ldf/feature-webid": "2.2.5", + "@ldf/preset-qpf": "2.2.5" + } +} From 1a04205f2c95501bba29b46ef60f724d7382ed81 Mon Sep 17 00:00:00 2001 From: Dedecker Ruben Date: Mon, 2 Mar 2020 11:39:58 +0100 Subject: [PATCH 065/165] Migrate prototypes to classes, #104 --- .eslintrc | 1 + .../core/lib/LinkedDataFragmentsServer.js | 85 ++-- .../lib/LinkedDataFragmentsServerWorker.js | 142 +++---- packages/core/lib/UrlData.js | 30 +- .../core/lib/controllers/AssetsController.js | 87 ++-- packages/core/lib/controllers/Controller.js | 163 ++++---- .../lib/controllers/DereferenceController.js | 50 ++- .../core/lib/controllers/ErrorController.js | 39 +- .../lib/controllers/NotFoundController.js | 43 +- packages/core/lib/datasources/Datasource.js | 362 ++++++++--------- .../core/lib/datasources/EmptyDatasource.js | 15 +- .../core/lib/datasources/IndexDatasource.js | 47 ++- .../core/lib/datasources/MemoryDatasource.js | 52 +-- packages/core/lib/routers/DatasourceRouter.js | 24 +- packages/core/lib/routers/PageRouter.js | 32 +- packages/core/lib/views/HtmlView.js | 83 ++-- packages/core/lib/views/RdfView.js | 205 +++++----- packages/core/lib/views/View.js | 161 ++++---- packages/core/lib/views/ViewCollection.js | 58 +-- .../core/lib/views/error/ErrorHtmlView.js | 19 +- packages/core/lib/views/error/ErrorRdfView.js | 20 +- .../lib/views/forbidden/ForbiddenHtmlView.js | 19 +- .../lib/views/notfound/NotFoundHtmlView.js | 19 +- .../lib/views/notfound/NotFoundRdfView.js | 20 +- .../test/controllers/AssetsController-test.js | 4 - .../core/test/controllers/Controller-test.js | 4 - .../controllers/DereferenceController-test.js | 4 - .../controllers/NotFoundController-test.js | 4 - .../core/test/datasources/Datasource-test.js | 8 - .../test/routers/DatasourceRouter-test.js | 4 - packages/core/test/routers/PageRouter-test.js | 4 - packages/core/test/views/View-test.js | 4 - .../core/test/views/ViewCollection-test.js | 4 - .../lib/datasources/CompositeDatasource.js | 373 +++++++++--------- .../lib/datasources/ExternalHdtDatasource.js | 117 +++--- .../lib/datasources/HdtDatasource.js | 106 ++--- .../test/datasources/HdtDatasource-test.js | 7 - .../lib/datasources/JsonLdDatasource.js | 40 +- .../test/datasources/JsonLdDatasource-test.js | 6 - .../lib/datasources/N3Datasource.js | 29 +- .../test/datasources/N3Datasource-test.js | 6 - .../lib/datasources/SparqlDatasource.js | 325 +++++++-------- .../test/datasources/SparqlDatasource-test.js | 5 - .../controllers/MementoControllerExtension.js | 72 ++-- .../lib/controllers/TimegateController.js | 279 ++++++------- .../QuadPatternFragmentsHtmlView-Memento.js | 36 +- .../QuadPatternFragmentsController.js | 256 ++++++------ .../lib/routers/QuadPatternRouter.js | 92 ++--- .../QuadPatternFragmentsHtmlView.js | 45 ++- .../QuadPatternFragmentsRdfView.js | 157 ++++---- .../QuadPatternFragmentsController-test.js | 4 - .../test/routers/QuadPatternRouter-test.js | 4 - .../QuadPatternFragmentsRdfView-test.js | 4 - .../lib/controllers/SummaryController.js | 73 ++-- .../QuadPatternFragmentsHtmlView-Summary.js | 38 +- .../QuadPatternFragmentsRdfView-Summary.js | 31 +- .../lib/views/summary/SummaryRdfView.js | 23 +- .../controllers/SummaryController-test.js | 2 +- .../controllers/WebIDControllerExtension.js | 188 ++++----- 59 files changed, 2014 insertions(+), 2120 deletions(-) diff --git a/.eslintrc b/.eslintrc index 575c0441..0257f0cb 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,6 +1,7 @@ { env: { node: true, + es6: true, }, globals: { diff --git a/packages/core/lib/LinkedDataFragmentsServer.js b/packages/core/lib/LinkedDataFragmentsServer.js index 11691f43..f038db45 100644 --- a/packages/core/lib/LinkedDataFragmentsServer.js +++ b/packages/core/lib/LinkedDataFragmentsServer.js @@ -8,49 +8,52 @@ var _ = require('lodash'), UrlData = require('./UrlData'); // Creates a new LinkedDataFragmentsServer -function LinkedDataFragmentsServer(options) { - // Create the HTTP(S) server - var server, sockets = 0; - var urlData = options && options.urlData ? options.urlData : new UrlData(); - switch (urlData.protocol) { - case 'http': - server = require('http').createServer(); - break; - case 'https': - var ssl = options.ssl || {}, authentication = options.authentication || {}; - // WebID authentication requires a client certificate - if (authentication.webid) - ssl.requestCert = ssl.rejectUnauthorized = true; - server = require('https').createServer(_.assign(ssl, _.mapValues(ssl.keys, readHttpsOption))); - break; - default: - throw new Error('The configured protocol ' + urlData.protocol + ' is invalid.'); - } - // Copy over members - for (var member in LinkedDataFragmentsServer.prototype) - server[member] = LinkedDataFragmentsServer.prototype[member]; +class LinkedDataFragmentsServer { + constructor(options) { + // Create the HTTP(S) server + var server, sockets = 0; + var urlData = options && options.urlData ? options.urlData : new UrlData(); + switch (urlData.protocol) { + case 'http': + server = require('http').createServer(); + break; + case 'https': + var ssl = options.ssl || {}, authentication = options.authentication || {}; + // WebID authentication requires a client certificate + if (authentication.webid) + ssl.requestCert = ssl.rejectUnauthorized = true; + server = require('https').createServer(_.assign(ssl, _.mapValues(ssl.keys, readHttpsOption))); + break; + default: + throw new Error('The configured protocol ' + urlData.protocol + ' is invalid.'); + } + + // Copy over members + for (var member in LinkedDataFragmentsServer.prototype) + server[member] = LinkedDataFragmentsServer.prototype[member]; - // Assign settings - server._sockets = {}; - server._log = options.log || _.noop; - server._accesslogger = options.accesslogger || _.noop; - server._controllers = options.controllers || []; - server._errorController = new ErrorController(options); - server._defaultHeaders = options.response && options.response.headers || {}; + // Assign settings + server._sockets = {}; + server._log = options.log || _.noop; + server._accesslogger = options.accesslogger || _.noop; + server._controllers = options.controllers || []; + server._errorController = new ErrorController(options); + server._defaultHeaders = options.response && options.response.headers || {}; - // Attach event listeners - server.on('error', function (error) { server._reportError(error); }); - server.on('request', function (request, response) { - server._accesslogger(request, response); - try { server._processRequest(request, response); } - catch (error) { server._reportError(request, response, error); } - }); - server.on('connection', function (socket) { - var socketId = sockets++; - server._sockets[socketId] = socket; - socket.on('close', function () { delete server._sockets[socketId]; }); - }); - return server; + // Attach event listeners + server.on('error', function (error) { server._reportError(error); }); + server.on('request', function (request, response) { + server._accesslogger(request, response); + try { server._processRequest(request, response); } + catch (error) { server._reportError(request, response, error); } + }); + server.on('connection', function (socket) { + var socketId = sockets++; + server._sockets[socketId] = socket; + socket.on('close', function () { delete server._sockets[socketId]; }); + }); + return server; + } } // Handles an incoming HTTP request diff --git a/packages/core/lib/LinkedDataFragmentsServerWorker.js b/packages/core/lib/LinkedDataFragmentsServerWorker.js index ede41e4b..6f9af720 100644 --- a/packages/core/lib/LinkedDataFragmentsServerWorker.js +++ b/packages/core/lib/LinkedDataFragmentsServerWorker.js @@ -6,85 +6,87 @@ var _ = require('lodash'), LinkedDataFragmentsServer = require('./LinkedDataFragmentsServer'); // Creates a new LinkedDataFragmentsServerWorker -function LinkedDataFragmentsServerWorker(config) { - if (!config.datasources) - throw new Error('At least one datasource must be defined.'); - if (!config.controllers) - throw new Error('At least one controller must be defined.'); - if (!config.routers) - throw new Error('At least one router must be defined.'); +class LinkedDataFragmentsServerWorker { + constructor(config) { + if (!config.datasources) + throw new Error('At least one datasource must be defined.'); + if (!config.controllers) + throw new Error('At least one controller must be defined.'); + if (!config.routers) + throw new Error('At least one router must be defined.'); - // Create all data sources - Object.keys(config.datasources).forEach(function (datasourceId) { - var datasource = config.datasources[datasourceId]; - datasource.on('error', datasourceError); - function datasourceError(error) { - config.datasources[datasourceId].hide = true; - process.stderr.write('WARNING: skipped datasource ' + datasourceId + '. ' + error.message + '\n'); - } - }); + // Create all data sources + Object.keys(config.datasources).forEach(function (datasourceId) { + var datasource = config.datasources[datasourceId]; + datasource.on('error', datasourceError); + function datasourceError(error) { + config.datasources[datasourceId].hide = true; + process.stderr.write('WARNING: skipped datasource ' + datasourceId + '. ' + error.message + '\n'); + } + }); - // Set up logging - var loggingSettings = config.logging; - // eslint-disable-next-line no-console - config.log = console.log; - if (loggingSettings.enabled) { - var accesslog = require('access-log'); - config.accesslogger = function (request, response) { - accesslog(request, response, null, function (logEntry) { - fs.appendFile(loggingSettings.file, logEntry + '\n', function (error) { - error && process.stderr.write('Error when writing to access log file: ' + error); + // Set up logging + var loggingSettings = config.logging; + // eslint-disable-next-line no-console + config.log = console.log; + if (loggingSettings.enabled) { + var accesslog = require('access-log'); + config.accesslogger = function (request, response) { + accesslog(request, response, null, function (logEntry) { + fs.appendFile(loggingSettings.file, logEntry + '\n', function (error) { + error && process.stderr.write('Error when writing to access log file: ' + error); + }); }); - }); - }; - } + }; + } - // Make sure the 'last' controllers are last in the array and the 'first' are first. - var lastControllers = _.remove(config.controllers, function (controller) { - return controller._last; - }); - var firstControllers = _.remove(config.controllers, function (controller) { - return controller._first; - }); - config.controllers = firstControllers.concat(config.controllers.concat(lastControllers)); + // Make sure the 'last' controllers are last in the array and the 'first' are first. + var lastControllers = _.remove(config.controllers, function (controller) { + return controller._last; + }); + var firstControllers = _.remove(config.controllers, function (controller) { + return controller._first; + }); + config.controllers = firstControllers.concat(config.controllers.concat(lastControllers)); - this._config = config; -} + this._config = config; + } -// Start the worker -LinkedDataFragmentsServerWorker.prototype.run = function (port) { - var config = this._config; - if (port) - config.port = port; - var server = new LinkedDataFragmentsServer(config); + // Start the worker + run(port) { + var config = this._config; + if (port) + config.port = port; + var server = new LinkedDataFragmentsServer(config); - // Start the server when all data sources are ready - var pending = _.size(config.datasources); - _.each(config.datasources, function (datasource) { - // Add datasource ready-listener - var ready = _.once(startWhenReady); - datasource.once('initialized', ready); - datasource.once('error', ready); + // Start the server when all data sources are ready + var pending = _.size(config.datasources); + _.each(config.datasources, function (datasource) { + // Add datasource ready-listener + var ready = _.once(startWhenReady); + datasource.once('initialized', ready); + datasource.once('error', ready); - // Init datasource asynchronously - datasource.initialize(); - }); - function startWhenReady() { - if (!--pending) { - server.listen(config.port); - // eslint-disable-next-line no-console - console.log('Worker %d running on %s://localhost:%d/ (URL: %s).', - process.pid, config.urlData.protocol, config.port, config.urlData.baseURL); + // Init datasource asynchronously + datasource.initialize(); + }); + function startWhenReady() { + if (!--pending) { + server.listen(config.port); + // eslint-disable-next-line no-console + console.log('Worker %d running on %s://localhost:%d/ (URL: %s).', + process.pid, config.urlData.protocol, config.port, config.urlData.baseURL); + } } - } - // Terminate gracefully if possible - process.once('SIGINT', function () { - // eslint-disable-next-line no-console - console.log('Stopping worker', process.pid); - server.stop(); - process.on('SIGINT', function () { process.exit(1); }); - }); -}; + // Terminate gracefully if possible + process.once('SIGINT', function () { + // eslint-disable-next-line no-console + console.log('Stopping worker', process.pid); + server.stop(); + process.on('SIGINT', function () { process.exit(1); }); + }); + } +} module.exports = LinkedDataFragmentsServerWorker; diff --git a/packages/core/lib/UrlData.js b/packages/core/lib/UrlData.js index 6f34547f..484c909a 100644 --- a/packages/core/lib/UrlData.js +++ b/packages/core/lib/UrlData.js @@ -2,21 +2,21 @@ /* A data object class for preset URL information */ // Creates a new UrlData -function UrlData(options) { - if (!(this instanceof UrlData)) - return new UrlData(options); - // Configure preset URLs - options = options || {}; - this.baseURL = (options.baseURL || '/').replace(/\/?$/, '/'); - this.baseURLRoot = this.baseURL.match(/^(?:https?:\/\/[^\/]+)?/)[0]; - this.baseURLPath = this.baseURL.substr(this.baseURLRoot.length); - this.blankNodePath = this.baseURLRoot ? '/.well-known/genid/' : ''; - this.blankNodePrefix = this.blankNodePath ? this.baseURLRoot + this.blankNodePath : 'genid:'; - this.assetsPath = this.baseURLPath + 'assets/' || options.assetsPath; - this.protocol = options.protocol; - if (!this.protocol) { - var protocolMatch = (this.baseURL || '').match(/^(\w+):/); - this.protocol = protocolMatch ? protocolMatch[1] : 'http'; +class UrlData { + constructor(options) { + // Configure preset URLs + options = options || {}; + this.baseURL = (options.baseURL || '/').replace(/\/?$/, '/'); + this.baseURLRoot = this.baseURL.match(/^(?:https?:\/\/[^\/]+)?/)[0]; + this.baseURLPath = this.baseURL.substr(this.baseURLRoot.length); + this.blankNodePath = this.baseURLRoot ? '/.well-known/genid/' : ''; + this.blankNodePrefix = this.blankNodePath ? this.baseURLRoot + this.blankNodePath : 'genid:'; + this.assetsPath = this.baseURLPath + 'assets/' || options.assetsPath; + this.protocol = options.protocol; + if (!this.protocol) { + var protocolMatch = (this.baseURL || '').match(/^(\w+):/); + this.protocol = protocolMatch ? protocolMatch[1] : 'http'; + } } } diff --git a/packages/core/lib/controllers/AssetsController.js b/packages/core/lib/controllers/AssetsController.js index 28843d09..338807f3 100644 --- a/packages/core/lib/controllers/AssetsController.js +++ b/packages/core/lib/controllers/AssetsController.js @@ -9,56 +9,55 @@ var Controller = require('./Controller'), UrlData = require('../UrlData'); // Creates a new AssetsController -function AssetsController(options) { - if (!(this instanceof AssetsController)) - return new AssetsController(options); - options = options || {}; - Controller.call(this, options); +class AssetsController extends Controller { + constructor(options) { + options = options || {}; + super(options); - // Set up path matching - var assetsPath = (options.urlData || new UrlData()).assetsPath || '/assets/'; - this._matcher = new RegExp('^' + Util.toRegExp(assetsPath) + '(.+)|^/(\\w*)\\.ico$'); + // Set up path matching + var assetsPath = (options.urlData || new UrlData()).assetsPath || '/assets/'; + this._matcher = new RegExp('^' + Util.toRegExp(assetsPath) + '(.+)|^/(\\w*)\\.ico$'); - // Read all assets - var assetsFolders = options.assetsFolders || ['file:///' + path.join(__dirname, '../../assets/')]; - this._assets = {}; - for (var i = 0; i < assetsFolders.length; i++) - this._readAssetsFolder(assetsFolders[i], ''); -} -Controller.extend(AssetsController); + // Read all assets + var assetsFolders = options.assetsFolders || ['file:///' + path.join(__dirname, '../../assets/')]; + this._assets = {}; + for (var i = 0; i < assetsFolders.length; i++) + this._readAssetsFolder(assetsFolders[i], ''); + } -// Recursively reads assets in the folder, assigning them to the URL path -AssetsController.prototype._readAssetsFolder = function (assetsFolder, assetsPath) { - if (assetsFolder.indexOf('file:///') === 0) - assetsFolder = assetsFolder.replace('file:///', ''); - fs.readdirSync(assetsFolder).forEach(function (name) { - var filename = path.join(assetsFolder, name), stats = fs.statSync(filename); + // Recursively reads assets in the folder, assigning them to the URL path + _readAssetsFolder(assetsFolder, assetsPath) { + if (assetsFolder.indexOf('file:///') === 0) + assetsFolder = assetsFolder.replace('file:///', ''); + fs.readdirSync(assetsFolder).forEach(function (name) { + var filename = path.join(assetsFolder, name), stats = fs.statSync(filename); // Read an asset file into memory - if (stats.isFile()) { - var assetType = mime.lookup(filename); - this._assets[assetsPath + name.replace(/[.][^.]+$/, '')] = { - type: assetType.indexOf('text/') ? assetType : assetType + ';charset=utf-8', - contents: fs.readFileSync(filename), - }; - } + if (stats.isFile()) { + var assetType = mime.lookup(filename); + this._assets[assetsPath + name.replace(/[.][^.]+$/, '')] = { + type: assetType.indexOf('text/') ? assetType : assetType + ';charset=utf-8', + contents: fs.readFileSync(filename), + }; + } // Read all asset files in a folder - else if (stats.isDirectory()) - this._readAssetsFolder(filename, assetsPath + name + '/'); - }, this); -}; - -// Try to serve the requested asset -AssetsController.prototype._handleRequest = function (request, response, next) { - var assetMatch = request.url.match(this._matcher), asset; - if (asset = assetMatch && this._assets[assetMatch[1] || assetMatch[2]]) { - response.writeHead(200, { - 'Content-Type': asset.type, - 'Cache-Control': 'public,max-age=1209600', // 14 days - }); - response.end(asset.contents); + else if (stats.isDirectory()) + this._readAssetsFolder(filename, assetsPath + name + '/'); + }, this); } - else + + // Try to serve the requested asset + _handleRequest(request, response, next) { + var assetMatch = request.url.match(this._matcher), asset; + if (asset = assetMatch && this._assets[assetMatch[1] || assetMatch[2]]) { + response.writeHead(200, { + 'Content-Type': asset.type, + 'Cache-Control': 'public,max-age=1209600', // 14 days + }); + response.end(asset.contents); + } + else next(); -}; + } +} module.exports = AssetsController; diff --git a/packages/core/lib/controllers/Controller.js b/packages/core/lib/controllers/Controller.js index eead6d94..4575ec93 100644 --- a/packages/core/lib/controllers/Controller.js +++ b/packages/core/lib/controllers/Controller.js @@ -9,105 +9,98 @@ var url = require('url'), parseForwarded = require('forwarded-parse'); // Creates a new Controller -function Controller(options) { - if (!(this instanceof Controller)) - return new Controller(options); - options = options || {}; - this._prefixes = options.prefixes || {}; - this._datasources = _.reduce(options.datasources || {}, function (datasources, value, key) { - // If the path does not start with a slash, add one. - datasources[key.replace(/^(?!\/)/, '/')] = value; - return datasources; - }, {}); - this._views = options.views && options.views.matchView ? - options.views : new ViewCollection(options.views); +class Controller { + constructor(options) { + options = options || {}; + this._prefixes = options.prefixes || {}; + this._datasources = _.reduce(options.datasources || {}, function (datasources, value, key) { + // If the path does not start with a slash, add one. + datasources[key.replace(/^(?!\/)/, '/')] = value; + return datasources; + }, {}); + this._views = options.views && options.views.matchView ? + options.views : new ViewCollection(options.views); - // Set up base URL (if we're behind a proxy, this allows reconstructing the actual request URL) - this._baseUrl = _.mapValues(url.parse((options.urlData || new UrlData()).baseURL), function (value, key) { - return value && !/^(?:href|path|search|hash)$/.test(key) ? value : undefined; - }); -} + // Set up base URL (if we're behind a proxy, this allows reconstructing the actual request URL) + this._baseUrl = _.mapValues(url.parse((options.urlData || new UrlData()).baseURL), function (value, key) { + return value && !/^(?:href|path|search|hash)$/.test(key) ? value : undefined; + }); + } -// Makes Controller the prototype of the given class -Controller.extend = function extend(child) { - child.prototype = Object.create(this.prototype); - child.prototype.constructor = child; - child.extend = extend; -}; + // Tries to process the HTTP request + handleRequest(request, response, next, settings) { + // Add a `parsedUrl` field to `request`, + // containing the parsed request URL, resolved against the base URL + if (!request.parsedUrl) { + // Keep the request's path and query, but take over all other defined baseURL properties + request.parsedUrl = _.defaults(_.pick(url.parse(request.url, true), 'path', 'pathname', 'query'), + this._getForwarded(request), + this._getXForwardHeaders(request), + this._baseUrl, + { protocol: 'http:', host: request.headers.host }); + } -// Tries to process the HTTP request -Controller.prototype.handleRequest = function (request, response, next, settings) { - // Add a `parsedUrl` field to `request`, - // containing the parsed request URL, resolved against the base URL - if (!request.parsedUrl) { - // Keep the request's path and query, but take over all other defined baseURL properties - request.parsedUrl = _.defaults(_.pick(url.parse(request.url, true), 'path', 'pathname', 'query'), - this._getForwarded(request), - this._getXForwardHeaders(request), - this._baseUrl, - { protocol: 'http:', host: request.headers.host }); + // Try to handle the request + var self = this; + try { this._handleRequest(request, response, done, settings); } + catch (error) { done(error); } + function done(error) { + if (self) { + // Send a 406 response if no suitable view was found + if (error instanceof ViewCollection.ViewCollectionError) + return self._handleNotAcceptable(request, response, next); + self = null; + next(error); + } + } } - // Try to handle the request - var self = this; - try { this._handleRequest(request, response, done, settings); } - catch (error) { done(error); } - function done(error) { - if (self) { - // Send a 406 response if no suitable view was found - if (error instanceof ViewCollection.ViewCollectionError) - return self._handleNotAcceptable(request, response, next); - self = null; - next(error); + // Get host and protocol from HTTP's Forwarded header + _getForwarded(request) { + if (!request.headers.forwarded) + return {}; + try { + var forwarded = _.defaults.apply(this, parseForwarded(request.headers.forwarded)); + return { + protocol: forwarded.proto ? forwarded.proto + ':' : undefined, + host: forwarded.host, + }; } + catch (error) { return {}; } } -}; -// Get host and protocol from HTTP's Forwarded header -Controller.prototype._getForwarded = function (request) { - if (!request.headers.forwarded) - return {}; - try { - var forwarded = _.defaults.apply(this, parseForwarded(request.headers.forwarded)); + // Get host and protocol from HTTP's X-Forwarded-* headers + _getXForwardHeaders(request) { return { - protocol: forwarded.proto ? forwarded.proto + ':' : undefined, - host: forwarded.host, + protocol: request.headers['x-forwarded-proto'] ? request.headers['x-forwarded-proto'] + ':' : undefined, + host: request.headers['x-forwarded-host'], }; } - catch (error) { return {}; } -}; - -// Get host and protocol from HTTP's X-Forwarded-* headers -Controller.prototype._getXForwardHeaders = function (request) { - return { - protocol: request.headers['x-forwarded-proto'] ? request.headers['x-forwarded-proto'] + ':' : undefined, - host: request.headers['x-forwarded-host'], - }; -}; -// Tries to process the HTTP request in an implementation-specific way -Controller.prototype._handleRequest = function (request, response, next, settings) { - next(); -}; + // Tries to process the HTTP request in an implementation-specific way + _handleRequest(request, response, next, settings) { + next(); + } -// Serves an error indicating content negotiation failure -Controller.prototype._handleNotAcceptable = function (request, response, next) { - response.writeHead(406, { 'Content-Type': Util.MIME_PLAINTEXT }); - response.end('No suitable content type found.\n'); -}; + // Serves an error indicating content negotiation failure + _handleNotAcceptable(request, response, next) { + response.writeHead(406, { 'Content-Type': Util.MIME_PLAINTEXT }); + response.end('No suitable content type found.\n'); + } -// Finds an appropriate view using content negotiation -Controller.prototype._negotiateView = function (viewName, request, response) { - // Indicate that the response is content-negotiated - var vary = response.getHeader('Vary'); - response.setHeader('Vary', 'Accept' + (vary ? ', ' + vary : '')); - // Negotiate a view - var viewMatch = this._views.matchView(viewName, request); - response.setHeader('Content-Type', viewMatch.responseType || viewMatch.type); - return viewMatch.view; -}; + // Finds an appropriate view using content negotiation + _negotiateView(viewName, request, response) { + // Indicate that the response is content-negotiated + var vary = response.getHeader('Vary'); + response.setHeader('Vary', 'Accept' + (vary ? ', ' + vary : '')); + // Negotiate a view + var viewMatch = this._views.matchView(viewName, request); + response.setHeader('Content-Type', viewMatch.responseType || viewMatch.type); + return viewMatch.view; + } -// Cleans resources used by the controller -Controller.prototype.close = function () { }; + // Cleans resources used by the controller + close() { } +} module.exports = Controller; diff --git a/packages/core/lib/controllers/DereferenceController.js b/packages/core/lib/controllers/DereferenceController.js index 3ff095f8..487a568f 100644 --- a/packages/core/lib/controllers/DereferenceController.js +++ b/packages/core/lib/controllers/DereferenceController.js @@ -7,34 +7,30 @@ var Controller = require('./Controller'), Util = require('../Util'); // Creates a new DeferenceController -function DeferenceController(options) { - if (!(this instanceof DeferenceController)) - return new DeferenceController(options); - options = options || {}; - Controller.call(this, options); - - var paths = this._paths = options.dereference || {}; - if (!_.isEmpty(paths)) - this._matcher = new RegExp('^(' + Object.keys(paths).map(Util.toRegExp).join('|') + ')'); -} -Controller.extend(DeferenceController); - -// This default matcher never matches -DeferenceController.prototype._matcher = /$0^/; - -// Dereferences a URL by redirecting to its subject fragment of a certain data source -DeferenceController.prototype._handleRequest = function (request, response, next) { - var match = this._matcher.exec(request.url), datasource; - if (datasource = match && this._paths[match[1]]) { - var entity = url.format(_.defaults({ - pathname: '/' + datasource.path, - query: { subject: url.format(request.parsedUrl) }, - }, request.parsedUrl)); - response.writeHead(303, { 'Location': entity, 'Content-Type': Util.MIME_PLAINTEXT }); - response.end(entity); +class DeferenceController extends Controller { + constructor(options) { + options = options || {}; + super(options); + var paths = this._paths = options.dereference || {}; + this._matcher = /$0^/; + if (!_.isEmpty(paths)) + this._matcher = new RegExp('^(' + Object.keys(paths).map(Util.toRegExp).join('|') + ')'); } - else + + // Dereferences a URL by redirecting to its subject fragment of a certain data source + _handleRequest(request, response, next) { + var match = this._matcher.exec(request.url), datasource; + if (datasource = match && this._paths[match[1]]) { + var entity = url.format(_.defaults({ + pathname: '/' + datasource.path, + query: { subject: url.format(request.parsedUrl) }, + }, request.parsedUrl)); + response.writeHead(303, { 'Location': entity, 'Content-Type': Util.MIME_PLAINTEXT }); + response.end(entity); + } + else next(); -}; + } +} module.exports = DeferenceController; diff --git a/packages/core/lib/controllers/ErrorController.js b/packages/core/lib/controllers/ErrorController.js index 8a06e7d6..94215cb3 100644 --- a/packages/core/lib/controllers/ErrorController.js +++ b/packages/core/lib/controllers/ErrorController.js @@ -5,27 +5,26 @@ var Controller = require('./Controller'), Util = require('../Util'); // Creates a new ErrorController -function ErrorController(options) { - if (!(this instanceof ErrorController)) - return new ErrorController(options); - Controller.call(this, options); -} -Controller.extend(ErrorController); +class ErrorController extends Controller { + constructor(options) { + super(options); + } -// Serves an error response -ErrorController.prototype._handleRequest = function (request, response, next) { - // Try to write an error response through an appropriate view - var error = response.error || (response.error = new Error('Unknown error')), - view = this._negotiateView('Error', request, response), - metadata = { prefixes: this._prefixes, datasources: this._datasources, error: error }; - response.writeHead(500); - view.render(metadata, request, response); -}; + // Serves an error response + _handleRequest(request, response, next) { + // Try to write an error response through an appropriate view + var error = response.error || (response.error = new Error('Unknown error')), + view = this._negotiateView('Error', request, response), + metadata = { prefixes: this._prefixes, datasources: this._datasources, error: error }; + response.writeHead(500); + view.render(metadata, request, response); + } -// Writes the error in plaintext if no view was found -ErrorController.prototype._handleNotAcceptable = function (request, response, next) { - response.writeHead(500, { 'Content-Type': Util.MIME_PLAINTEXT }); - response.end('Application error: ' + response.error.message + '\n'); -}; + // Writes the error in plaintext if no view was found + _handleNotAcceptable(request, response, next) { + response.writeHead(500, { 'Content-Type': Util.MIME_PLAINTEXT }); + response.end('Application error: ' + response.error.message + '\n'); + } +} module.exports = ErrorController; diff --git a/packages/core/lib/controllers/NotFoundController.js b/packages/core/lib/controllers/NotFoundController.js index 81745dd7..84429f0a 100644 --- a/packages/core/lib/controllers/NotFoundController.js +++ b/packages/core/lib/controllers/NotFoundController.js @@ -5,30 +5,29 @@ var Controller = require('./Controller'), Util = require('../Util'); // Creates a new NotFoundController -function NotFoundController(options) { - if (!(this instanceof NotFoundController)) - return new NotFoundController(options); - Controller.call(this, options); - this._last = true; -} -Controller.extend(NotFoundController); +class NotFoundController extends Controller { + constructor(options) { + super(options); + this._last = true; + } -// Serves a 404 response -NotFoundController.prototype._handleRequest = function (request, response, next) { - // Cache 404 responses - response.setHeader('Cache-Control', 'public,max-age=3600'); + // Serves a 404 response + _handleRequest(request, response, next) { + // Cache 404 responses + response.setHeader('Cache-Control', 'public,max-age=3600'); - // Render the 404 message using the appropriate view - var view = this._negotiateView('NotFound', request, response), - metadata = { url: request.url, prefixes: this._prefixes, datasources: this._datasources }; - response.writeHead(404); - view.render(metadata, request, response); -}; + // Render the 404 message using the appropriate view + var view = this._negotiateView('NotFound', request, response), + metadata = { url: request.url, prefixes: this._prefixes, datasources: this._datasources }; + response.writeHead(404); + view.render(metadata, request, response); + } -// Writes the 404 in plaintext if no view was found -NotFoundController.prototype._handleNotAcceptable = function (request, response, next) { - response.writeHead(404, { 'Content-Type': Util.MIME_PLAINTEXT }); - response.end(request.url + ' not found\n'); -}; + // Writes the 404 in plaintext if no view was found + _handleNotAcceptable(request, response, next) { + response.writeHead(404, { 'Content-Type': Util.MIME_PLAINTEXT }); + response.end(request.url + ' not found\n'); + } +} module.exports = NotFoundController; diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index cafe54fc..425768e8 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -8,205 +8,193 @@ var fs = require('fs'), EventEmitter = require('events'); // Creates a new Datasource -function Datasource(options) { - if (!(this instanceof Datasource)) - return new Datasource(); - EventEmitter.call(this); - - // Set the options - options = options || {}; - var urlData = options.urlData || new UrlData(); - var path = (options.path || '').replace(/^\//, ''); - this._datasourcePath = urlData.baseURLPath + encodeURI(path); - this._blankNodePrefix = urlData.blankNodePath || 'genid:'; - this._skolemizeBlacklist = options.skolemizeBlacklist || {}; - this.title = options.title; - this.id = options.id; - this.hide = options.hide; - this.description = options.description; - this.path = this._datasourcePath; - this.url = urlData.baseURLRoot + this._datasourcePath + '#dataset'; - this.license = options.license; - this.licenseUrl = options.licenseUrl; - this.copyright = options.copyright; - this.homepage = options.homepage; - this._request = options.request || require('request'); - this._blankNodePrefix = options.blankNodePrefix || this._blankNodePrefix; - this._blankNodePrefixLength = this._blankNodePrefix.length; - if (options.graph) { - this._graph = options.graph; - this._queryGraphReplacements = Object.create(null); - this._queryGraphReplacements[''] = 'urn:ldf:emptyGraph'; - this._queryGraphReplacements[options.graph] = ''; +class Datasource extends EventEmitter { + constructor(options, supportedFeatureList) { + super(); + + // Set the options + options = options || {}; + var urlData = options.urlData || new UrlData(); + var path = (options.path || '').replace(/^\//, ''); + this._datasourcePath = urlData.baseURLPath + encodeURI(path); + this._blankNodePrefix = urlData.blankNodePath || 'genid:'; + this._skolemizeBlacklist = options.skolemizeBlacklist || {}; + this.title = options.title; + this.id = options.id; + this.hide = options.hide; + this.description = options.description; + this.path = this._datasourcePath; + this.url = urlData.baseURLRoot + this._datasourcePath + '#dataset'; + this.license = options.license; + this.licenseUrl = options.licenseUrl; + this.copyright = options.copyright; + this.homepage = options.homepage; + this._request = options.request || require('request'); + this._blankNodePrefix = options.blankNodePrefix || this._blankNodePrefix; + this._blankNodePrefixLength = this._blankNodePrefix.length; + if (options.graph) { + this._graph = options.graph; + this._queryGraphReplacements = Object.create(null); + this._queryGraphReplacements[''] = 'urn:ldf:emptyGraph'; + this._queryGraphReplacements[options.graph] = ''; + } + + // Whether the datasource can be queried + this.initialized = false; + + // Expose the supported query features + if (supportedFeatureList && supportedFeatureList.length) { + var objectSupportedFeatures = {}; + for (var i = 0; i < supportedFeatureList.length; i++) + objectSupportedFeatures[supportedFeatureList[i]] = true; + this.supportedFeatures = objectSupportedFeatures; + } + else + this.supportedFeatures = {}; + Object.freeze(this.supportedFeatures); } -} -Datasource.prototype = new EventEmitter(); - -// Makes Datasource the prototype of the given class -Datasource.extend = function extend(child, supportedFeatureList) { - child.prototype = Object.create(this.prototype); - child.prototype.constructor = child; - child.extend = extend; - - // Expose the supported query features - if (supportedFeatureList && supportedFeatureList.length) { - var supportedFeatures = {}; - for (var i = 0; i < supportedFeatureList.length; i++) - supportedFeatures[supportedFeatureList[i]] = true; - Object.defineProperty(child.prototype, 'supportedFeatures', { - enumerable: true, - value: Object.freeze(supportedFeatures), - }); + + + // Initialize the datasource asynchronously + initialize() { + setImmediate(function (self) { + var done = _.once(function (error) { + if (error) + self.emit('error', error); + else { + self.initialized = true; + self.emit('initialized'); + } + }); + try { self._initialize(done); } + catch (error) { done(error); } + }, this); } -}; -// Whether the datasource can be queried -Datasource.prototype.initialized = false; + // Prepares the datasource for querying + _initialize(done) { + done(); + } -// Initialize the datasource asynchronously -Datasource.prototype.initialize = function () { - setImmediate(function (self) { - var done = _.once(function (error) { - if (error) - self.emit('error', error); - else { - self.initialized = true; - self.emit('initialized'); + // Checks whether the data source can evaluate the given query + supportsQuery(query) { + // An uninitialized datasource does not support any query + if (!this.initialized) + return false; + + // A query is supported if the data source supports all of its features + var features = query.features, supportedFeatures = this.supportedFeatures, feature; + if (features) { + for (feature in features) { + if (features[feature] && !supportedFeatures[feature]) + return false; } - }); - try { self._initialize(done); } - catch (error) { done(error); } - }, this); -}; - -// Prepares the datasource for querying -Datasource.prototype._initialize = function (done) { - done(); -}; - -// The query features supported by this data source -Object.defineProperty(Datasource.prototype, 'supportedFeatures', { - enumerable: true, - value: Object.freeze({}), -}); - -// Checks whether the data source can evaluate the given query -Datasource.prototype.supportsQuery = function (query) { - // An uninitialized datasource does not support any query - if (!this.initialized) - return false; - - // A query is supported if the data source supports all of its features - var features = query.features, supportedFeatures = this.supportedFeatures, feature; - if (features) { - for (feature in features) { - if (features[feature] && !supportedFeatures[feature]) - return false; + return true; } - return true; - } - // A query without features is supported if this data source has at least one feature - else { - for (feature in supportedFeatures) { - if (supportedFeatures[feature]) - return true; + // A query without features is supported if this data source has at least one feature + else { + for (feature in supportedFeatures) { + if (supportedFeatures[feature]) + return true; + } + return false; } - return false; } -}; - -// Selects the quads that match the given query, returning a quad stream -Datasource.prototype.select = function (query, onError) { - if (!this.initialized) - return onError && onError(new Error('The datasource is not initialized yet')); - if (!this.supportsQuery(query)) - return onError && onError(new Error('The datasource does not support the given query')); - query = _.clone(query); - - // Translate blank nodes IRIs in the query to blank nodes - var blankNodePrefix = this._blankNodePrefix, blankNodePrefixLength = this._blankNodePrefixLength; - if (query.subject && query.subject.indexOf(blankNodePrefix) === 0) - query.subject = '_:' + query.subject.substr(blankNodePrefixLength); - if (query.object && query.object.indexOf(blankNodePrefix) === 0) - query.object = '_:' + query.object.substr(blankNodePrefixLength); - if (query.graph && query.graph.indexOf(blankNodePrefix) === 0) - query.graph = '_:' + query.graph.substr(blankNodePrefixLength); - - // If a custom default graph was set, query it as the default graph - if (this._graph && (query.graph in this._queryGraphReplacements)) - query.graph = this._queryGraphReplacements[query.graph]; - - // Transform the received quads - var destination = new BufferedIterator(), outputQuads, graph = this._graph, self = this; - outputQuads = destination.map(function (quad) { - // Translate blank nodes in the result to blank node IRIs - if (quad.subject[0] === '_' && !self._skolemizeBlacklist[quad.subject]) - quad.subject = blankNodePrefix + quad.subject.substr(2); - if (quad.object[0] === '_' && !self._skolemizeBlacklist[quad.object]) - quad.object = blankNodePrefix + quad.object.substr(2); - if (quad.graph) { - if (quad.graph[0] === '_' && !self._skolemizeBlacklist[quad.graph]) - quad.graph = blankNodePrefix + quad.graph.substr(2); - } - // If a custom default graph was set, move default graph triples there - else if (graph) - quad.graph = graph; - return quad; - }); - outputQuads.copyProperties(destination, ['metadata']); - onError && outputQuads.on('error', onError); - - // Execute the query - try { this._executeQuery(query, destination); } - catch (error) { outputQuads.emit('error', error); } - return outputQuads; -}; - -// Writes the results of the query to the given destination -Datasource.prototype._executeQuery = function (query, destination) { - throw new Error('_executeQuery has not been implemented'); -}; - -// Retrieves a stream through HTTP or the local file system -Datasource.prototype._fetch = function (options) { - var self = this, stream, - url = options.url, protocolMatch = /^(?:([a-z]+):)?/.exec(url); - switch (protocolMatch[1] || 'file') { - // Fetch a representation through HTTP(S) - case 'http': - case 'https': - stream = this._request(options); - stream.on('response', function (response) { - if (response.statusCode >= 300) { - setImmediate(function () { - stream.emit('error', new Error(url + ' returned ' + response.statusCode)); - }); + + // Selects the quads that match the given query, returning a quad stream + select(query, onError) { + if (!this.initialized) + return onError && onError(new Error('The datasource is not initialized yet')); + if (!this.supportsQuery(query)) + return onError && onError(new Error('The datasource does not support the given query')); + query = _.clone(query); + + // Translate blank nodes IRIs in the query to blank nodes + var blankNodePrefix = this._blankNodePrefix, blankNodePrefixLength = this._blankNodePrefixLength; + if (query.subject && query.subject.indexOf(blankNodePrefix) === 0) + query.subject = '_:' + query.subject.substr(blankNodePrefixLength); + if (query.object && query.object.indexOf(blankNodePrefix) === 0) + query.object = '_:' + query.object.substr(blankNodePrefixLength); + if (query.graph && query.graph.indexOf(blankNodePrefix) === 0) + query.graph = '_:' + query.graph.substr(blankNodePrefixLength); + + // If a custom default graph was set, query it as the default graph + if (this._graph && (query.graph in this._queryGraphReplacements)) + query.graph = this._queryGraphReplacements[query.graph]; + + // Transform the received quads + var destination = new BufferedIterator(), outputQuads, graph = this._graph, self = this; + outputQuads = destination.map(function (quad) { + // Translate blank nodes in the result to blank node IRIs + if (quad.subject[0] === '_' && !self._skolemizeBlacklist[quad.subject]) + quad.subject = blankNodePrefix + quad.subject.substr(2); + if (quad.object[0] === '_' && !self._skolemizeBlacklist[quad.object]) + quad.object = blankNodePrefix + quad.object.substr(2); + if (quad.graph) { + if (quad.graph[0] === '_' && !self._skolemizeBlacklist[quad.graph]) + quad.graph = blankNodePrefix + quad.graph.substr(2); } + // If a custom default graph was set, move default graph triples there + else if (graph) + quad.graph = graph; + return quad; }); - break; - // Read a file from the local filesystem - case 'file': - stream = fs.createReadStream(url.substr(protocolMatch[0].length), { encoding: 'utf8' }); - break; - default: - stream = new EventEmitter(); - setImmediate(function () { - stream.emit('error', new Error('Unknown protocol: ' + protocolMatch[1])); + outputQuads.copyProperties(destination, ['metadata']); + onError && outputQuads.on('error', onError); + + // Execute the query + try { this._executeQuery(query, destination); } + catch (error) { outputQuads.emit('error', error); } + return outputQuads; + } + + // Writes the results of the query to the given destination + _executeQuery(query, destination) { + throw new Error('_executeQuery has not been implemented'); + } + + // Retrieves a stream through HTTP or the local file system + _fetch(options) { + var self = this, stream, + url = options.url, protocolMatch = /^(?:([a-z]+):)?/.exec(url); + switch (protocolMatch[1] || 'file') { + // Fetch a representation through HTTP(S) + case 'http': + case 'https': + stream = this._request(options); + stream.on('response', function (response) { + if (response.statusCode >= 300) { + setImmediate(function () { + stream.emit('error', new Error(url + ' returned ' + response.statusCode)); + }); + } + }); + break; + // Read a file from the local filesystem + case 'file': + stream = fs.createReadStream(url.substr(protocolMatch[0].length), { encoding: 'utf8' }); + break; + default: + stream = new EventEmitter(); + setImmediate(function () { + stream.emit('error', new Error('Unknown protocol: ' + protocolMatch[1])); + }); + } + + // If the stream has no other error handlers attached (besides this one), + // emit the stream error as a datasource error + stream.on('error', function (error) { + if (stream.listenerCount('error') === 1) + self.emit('error', error); }); + return stream; } - // If the stream has no other error handlers attached (besides this one), - // emit the stream error as a datasource error - stream.on('error', function (error) { - if (stream.listenerCount('error') === 1) - self.emit('error', error); - }); - return stream; -}; - -// Closes the data source, freeing possible resources used -Datasource.prototype.close = function (callback) { - callback && callback(); -}; + // Closes the data source, freeing possible resources used + close(callback) { + callback && callback(); + } +} + module.exports = Datasource; diff --git a/packages/core/lib/datasources/EmptyDatasource.js b/packages/core/lib/datasources/EmptyDatasource.js index fb3ac7a9..be46bbf5 100644 --- a/packages/core/lib/datasources/EmptyDatasource.js +++ b/packages/core/lib/datasources/EmptyDatasource.js @@ -4,14 +4,13 @@ var MemoryDatasource = require('./MemoryDatasource'); // Creates a new EmptyDatasource -function EmptyDatasource(options) { - if (!(this instanceof EmptyDatasource)) - return new EmptyDatasource(options); - MemoryDatasource.call(this, options); -} -MemoryDatasource.extend(EmptyDatasource); +class EmptyDatasource extends MemoryDatasource { + constructor(options) { + super(options); + } -// Retrieves all quads in the datasource -EmptyDatasource.prototype._getAllQuads = function (addQuad, done) { done(); }; + // Retrieves all quads in the datasource + _getAllQuads(addQuad, done) { done(); } +} module.exports = EmptyDatasource; diff --git a/packages/core/lib/datasources/IndexDatasource.js b/packages/core/lib/datasources/IndexDatasource.js index 5c90badf..f51074d4 100644 --- a/packages/core/lib/datasources/IndexDatasource.js +++ b/packages/core/lib/datasources/IndexDatasource.js @@ -9,32 +9,31 @@ var rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', voID = 'http://rdfs.org/ns/void#'; // Creates a new IndexDatasource -function IndexDatasource(options) { - if (!(this instanceof IndexDatasource)) - return new IndexDatasource(options); - MemoryDatasource.call(this, options); - this._datasources = options ? options.datasources : {}; - this.role = 'index'; -} -MemoryDatasource.extend(IndexDatasource); +class IndexDatasource extends MemoryDatasource { + constructor(options) { + super(options); + this._datasources = options ? options.datasources : {}; + this.role = 'index'; + } -// Creates quads for each data source -IndexDatasource.prototype._getAllQuads = function (addQuad, done) { - for (var name in this._datasources) { - var datasource = this._datasources[name], datasourceUrl = datasource.url; - if (!datasource.hide) { - triple(datasourceUrl, rdf + 'type', voID + 'Dataset'); - triple(datasourceUrl, rdfs + 'label', datasource.title, true); - triple(datasourceUrl, dc + 'title', datasource.title, true); - triple(datasourceUrl, dc + 'description', datasource.description, true); + // Creates quads for each data source + _getAllQuads(addQuad, done) { + for (var name in this._datasources) { + var datasource = this._datasources[name], datasourceUrl = datasource.url; + if (!datasource.hide) { + triple(datasourceUrl, rdf + 'type', voID + 'Dataset'); + triple(datasourceUrl, rdfs + 'label', datasource.title, true); + triple(datasourceUrl, dc + 'title', datasource.title, true); + triple(datasourceUrl, dc + 'description', datasource.description, true); + } } + function triple(subject, predicate, object, isLiteral) { + if (subject && predicate && object) + addQuad(subject, predicate, isLiteral ? '"' + object + '"' : object); + } + delete this._datasources; + done(); } - function triple(subject, predicate, object, isLiteral) { - if (subject && predicate && object) - addQuad(subject, predicate, isLiteral ? '"' + object + '"' : object); - } - delete this._datasources; - done(); -}; +} module.exports = IndexDatasource; diff --git a/packages/core/lib/datasources/MemoryDatasource.js b/packages/core/lib/datasources/MemoryDatasource.js index 8bed618c..fea93f39 100644 --- a/packages/core/lib/datasources/MemoryDatasource.js +++ b/packages/core/lib/datasources/MemoryDatasource.js @@ -5,35 +5,35 @@ var Datasource = require('./Datasource'), N3Store = require('n3').Store; // Creates a new MemoryDatasource -function MemoryDatasource(options) { - if (!(this instanceof MemoryDatasource)) - return new MemoryDatasource(options); - Datasource.call(this, options); -} -Datasource.extend(MemoryDatasource, ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']); +class MemoryDatasource extends Datasource { + constructor(options) { + let supportedFeatureList = ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']; + super(options, supportedFeatureList); + } -// Prepares the datasource for querying -MemoryDatasource.prototype._initialize = function (done) { - var quadStore = this._quadStore = new N3Store(); - this._getAllQuads(function (s, p, o, g) { quadStore.addTriple(s, p, o, g); }, done); -}; + // Prepares the datasource for querying + _initialize(done) { + var quadStore = this._quadStore = new N3Store(); + this._getAllQuads(function (s, p, o, g) { quadStore.addTriple(s, p, o, g); }, done); + } -// Retrieves all quads in the datasource -MemoryDatasource.prototype._getAllQuads = function (addQuad, done) { - throw new Error('_getAllQuads is not implemented'); -}; + // Retrieves all quads in the datasource + _getAllQuads(addQuad, done) { + throw new Error('_getAllQuads is not implemented'); + } -// Writes the results of the query to the given quad stream -MemoryDatasource.prototype._executeQuery = function (query, destination) { - var offset = query.offset || 0, limit = query.limit || Infinity, - quads = this._quadStore.findByIRI(query.subject, query.predicate, query.object, + // Writes the results of the query to the given quad stream + _executeQuery(query, destination) { + var offset = query.offset || 0, limit = query.limit || Infinity, + quads = this._quadStore.findByIRI(query.subject, query.predicate, query.object, query.graph); - // Send the metadata - destination.setProperty('metadata', { totalCount: quads.length, hasExactCount: true }); - // Send the requested subset of quads - for (var i = offset, l = Math.min(offset + limit, quads.length); i < l; i++) - destination._push(quads[i]); - destination.close(); -}; + // Send the metadata + destination.setProperty('metadata', { totalCount: quads.length, hasExactCount: true }); + // Send the requested subset of quads + for (var i = offset, l = Math.min(offset + limit, quads.length); i < l; i++) + destination._push(quads[i]); + destination.close(); + } +} module.exports = MemoryDatasource; diff --git a/packages/core/lib/routers/DatasourceRouter.js b/packages/core/lib/routers/DatasourceRouter.js index 5d5e73d4..83c6c2f2 100644 --- a/packages/core/lib/routers/DatasourceRouter.js +++ b/packages/core/lib/routers/DatasourceRouter.js @@ -4,18 +4,18 @@ var UrlData = require('../UrlData'); // Creates a new DatasourceRouter -function DatasourceRouter(options) { - if (!(this instanceof DatasourceRouter)) - return new DatasourceRouter(options); - var urlData = options && options.urlData || new UrlData(); - this._baseLength = urlData.baseURLPath.length - 1; -} +class DatasourceRouter { + constructor(options) { + var urlData = options && options.urlData || new UrlData(); + this._baseLength = urlData.baseURLPath.length - 1; + } -// Extracts the data source parameter from the request and adds it to the query -DatasourceRouter.prototype.extractQueryParams = function (request, query) { - (query.features || (query.features = {})).datasource = true; - var path = request.url && request.url.pathname || '/'; - query.datasource = path.substr(this._baseLength); -}; + // Extracts the data source parameter from the request and adds it to the query + extractQueryParams(request, query) { + (query.features || (query.features = {})).datasource = true; + var path = request.url && request.url.pathname || '/'; + query.datasource = path.substr(this._baseLength); + } +} module.exports = DatasourceRouter; diff --git a/packages/core/lib/routers/PageRouter.js b/packages/core/lib/routers/PageRouter.js index 4f5beefc..1bcdf3dd 100644 --- a/packages/core/lib/routers/PageRouter.js +++ b/packages/core/lib/routers/PageRouter.js @@ -2,24 +2,24 @@ /* A PageRouter routes page numbers to offsets */ // Creates a new PageRouter with the given page size, which defaults to 100. -function PageRouter(config) { - if (!(this instanceof PageRouter)) - return new PageRouter(config); - config = config || {}; - this.pageSize = isFinite(config.pageSize) && config.pageSize > 1 ? ~~config.pageSize : 100; -} +class PageRouter { + constructor(config) { + config = config || {}; + this.pageSize = isFinite(config.pageSize) && config.pageSize > 1 ? ~~config.pageSize : 100; + } -// Extracts a page parameter from the request and adds it to the query -PageRouter.prototype.extractQueryParams = function (request, query) { - var page = request.url && request.url.query && request.url.query.page, - features = query.features || (query.features = {}); + // Extracts a page parameter from the request and adds it to the query + extractQueryParams(request, query) { + var page = request.url && request.url.query && request.url.query.page, + features = query.features || (query.features = {}); - // Set the limit to the page size - features.limit = true, query.limit = this.pageSize; + // Set the limit to the page size + features.limit = true, query.limit = this.pageSize; - // If a page is given, adjust the offset - if (page && /^\d+$/.test(page) && (page = parseInt(page, 10)) > 1) - features.offset = true, query.offset = this.pageSize * (page - 1); -}; + // If a page is given, adjust the offset + if (page && /^\d+$/.test(page) && (page = parseInt(page, 10)) > 1) + features.offset = true, query.offset = this.pageSize * (page - 1); + } +} module.exports = PageRouter; diff --git a/packages/core/lib/views/HtmlView.js b/packages/core/lib/views/HtmlView.js index 6f89ac63..4a1b9589 100644 --- a/packages/core/lib/views/HtmlView.js +++ b/packages/core/lib/views/HtmlView.js @@ -10,52 +10,51 @@ var View = require('./View'), UrlData = require('../UrlData'); // Creates a new HTML view with the given name and settings -function HtmlView(viewName, settings) { - if (!(this instanceof HtmlView)) - return new HtmlView(viewName, settings); - settings = settings || {}; - settings.urlData = settings.urlData || new UrlData(); - var defaults = { - cache: true, N3Util: N3Util, - assetsPath: settings.urlData.assetsPath || '/', baseURL: settings.urlData.baseURL || '/', - title: '', header: settings && settings.title, - }; - View.call(this, viewName, 'text/html', _.defaults({}, settings, defaults)); -} -View.extend(HtmlView); - -// Renders the template with the given name to the response -HtmlView.prototype._renderTemplate = function (templateName, options, request, response, done) { - // Initialize all view extensions - var extensions = options.extensions || (options.extensions = {}), self = this; - for (var extension in extensions) { - if (!extensions[extension]) - extensions[extension] = this._renderViewExtensionContents(extension, options, request, response); - else if (extensions[extension] === 'function') - extensions[extension] = newExtensionViewConstructor(extension, options, request, response); +class HtmlView extends View { + constructor(viewName, settings) { + settings = settings || {}; + settings.urlData = settings.urlData || new UrlData(); + var defaults = { + cache: true, N3Util: N3Util, + assetsPath: settings.urlData.assetsPath || '/', baseURL: settings.urlData.baseURL || '/', + title: '', header: settings && settings.title, + }; + super(viewName, 'text/html', _.defaults({}, settings, defaults)); } - // Render the template with its options - var fileName = (templateName[0] === '/' ? templateName : path.join(__dirname, templateName)) + '.html'; - qejs.renderFile(fileName, options) - .then(function (html) { response.write(html); done(); }) - .fail(function (error) { done(error); }); + // Renders the template with the given name to the response + _renderTemplate(templateName, options, request, response, done) { + // Initialize all view extensions + var extensions = options.extensions || (options.extensions = {}), self = this; + for (var extension in extensions) { + if (!extensions[extension]) + extensions[extension] = this._renderViewExtensionContents(extension, options, request, response); + else if (extensions[extension] === 'function') + extensions[extension] = newExtensionViewConstructor(extension, options, request, response); + } - function newExtensionViewConstructor(extension, options, request, response) { - return function (data) { - var subOptions = _.clone(options); - for (var key in data) - subOptions[key] = data[key]; - return self._renderViewExtensionContents(extension, subOptions, request, response); - }; + // Render the template with its options + var fileName = (templateName[0] === '/' ? templateName : path.join(__dirname, templateName)) + '.html'; + qejs.renderFile(fileName, options) + .then(function (html) { response.write(html); done(); }) + .fail(function (error) { done(error); }); + + function newExtensionViewConstructor(extension, options, request, response) { + return function (data) { + var subOptions = _.clone(options); + for (var key in data) + subOptions[key] = data[key]; + return self._renderViewExtensionContents(extension, subOptions, request, response); + }; + } } -}; -// Renders the view extensions to a string, returned through a promise -HtmlView.prototype._renderViewExtensionContents = function (name, options, request, response) { - var buffer = '', writer = { write: function (data) { buffer += data; }, end: _.noop }; - return q.ninvoke(this, '_renderViewExtensions', name, options, request, writer) - .then(function () { return buffer; }); -}; + // Renders the view extensions to a string, returned through a promise + _renderViewExtensionContents(name, options, request, response) { + var buffer = '', writer = { write: function (data) { buffer += data; }, end: _.noop }; + return q.ninvoke(this, '_renderViewExtensions', name, options, request, writer) + .then(function () { return buffer; }); + } +} module.exports = HtmlView; diff --git a/packages/core/lib/views/RdfView.js b/packages/core/lib/views/RdfView.js index 23a8fee5..417bbea3 100644 --- a/packages/core/lib/views/RdfView.js +++ b/packages/core/lib/views/RdfView.js @@ -18,118 +18,117 @@ var contentTypes = 'application/trig;q=0.9,application/n-quads;q=0.7,' + 'text/turtle;q=0.6,application/n-triples;q=0.5,text/n3;q=0.6'; // Creates a new RDF view with the given name and settings -function RdfView(viewName, settings) { - if (!(this instanceof RdfView)) - return new RdfView(viewName, settings); - View.call(this, viewName, contentTypes, settings); -} -View.extend(RdfView); +class RdfView extends View { + constructor(viewName, settings) { + super(viewName, contentTypes, settings); + } -// Renders the view with the given settings to the response -RdfView.prototype._render = function (settings, request, response, done) { - // Add generic writer settings - settings.fragmentUrl = settings.fragment && settings.fragment.url || ''; - settings.metadataGraph = settings.fragmentUrl + '#metadata'; - settings.contentType = response.getHeader('Content-Type'); + // Renders the view with the given settings to the response + _render(settings, request, response, done) { + // Add generic writer settings + settings.fragmentUrl = settings.fragment && settings.fragment.url || ''; + settings.metadataGraph = settings.fragmentUrl + '#metadata'; + settings.contentType = response.getHeader('Content-Type'); - // Write the triples with a content-type-specific writer - var self = this, - writer = /json/.test(settings.contentType) ? this._createJsonLdWriter(settings, response, done) - : this._createN3Writer(settings, response, done); - settings.writer = writer; - function main() { self._generateRdf(settings, writer.data, writer.meta, after); } - function after() { self._renderViewExtensions('After', settings, request, response, writer.end); } - function before() { self._renderViewExtensions('Before', settings, request, response, main); } - before(); -}; + // Write the triples with a content-type-specific writer + var self = this, + writer = /json/.test(settings.contentType) ? this._createJsonLdWriter(settings, response, done) + : this._createN3Writer(settings, response, done); + settings.writer = writer; + function main() { self._generateRdf(settings, writer.data, writer.meta, after); } + function after() { self._renderViewExtensions('After', settings, request, response, writer.end); } + function before() { self._renderViewExtensions('Before', settings, request, response, main); } + before(); + } -// Generates triples and quads by sending them to the data and/or metadata callbacks -RdfView.prototype._generateRdf = function (settings, data, metadata, done) { - throw new Error('The _generateRdf method is not yet implemented.'); -}; + // Generates triples and quads by sending them to the data and/or metadata callbacks + _generateRdf(settings, data, metadata, done) { + throw new Error('The _generateRdf method is not yet implemented.'); + } -// Renders the specified view extension -RdfView.prototype._renderViewExtension = function (extension, options, request, response, done) { - // only view extensions that generate triples are supported - if (extension._generateRdf) - extension._generateRdf(options, options.writer.data, options.writer.meta, done); -}; + // Renders the specified view extension + _renderViewExtension(extension, options, request, response, done) { + // only view extensions that generate triples are supported + if (extension._generateRdf) + extension._generateRdf(options, options.writer.data, options.writer.meta, done); + } -// Adds details about the datasources -RdfView.prototype._addDatasources = function (settings, data, metadata) { - var datasources = settings.datasources; - for (var datasourceName in datasources) { - var datasource = datasources[datasourceName]; - metadata(datasource.url, rdf + 'type', voID + 'Dataset'); - metadata(datasource.url, rdf + 'type', hydra + 'Collection'); - metadata(datasource.url, dcTerms + 'title', '"' + datasource.title + '"'); + // Adds details about the datasources + _addDatasources(settings, data, metadata) { + var datasources = settings.datasources; + for (var datasourceName in datasources) { + var datasource = datasources[datasourceName]; + metadata(datasource.url, rdf + 'type', voID + 'Dataset'); + metadata(datasource.url, rdf + 'type', hydra + 'Collection'); + metadata(datasource.url, dcTerms + 'title', '"' + datasource.title + '"'); + } } -}; -// Creates a writer for Turtle/N-Triples/TriG/N-Quads -RdfView.prototype._createN3Writer = function (settings, response, done) { - var writer = new N3.Writer({ format: settings.contentType, prefixes: settings.prefixes }), - supportsGraphs = /trig|quad/.test(settings.contentType), metadataGraph; - return { - // Adds the data quad to the output - // NOTE: The first parameter can also be a quad object - data: function (s, p, o, g) { - // If graphs are unsupported, only write triples in the default graph - if (supportsGraphs || (p ? !g : !s.graph)) - writer.addTriple(s, p, o, g); - }, - // Adds the metadata triple to the output - meta: function (s, p, o) { - // Relate the metadata graph to the data - if (supportsGraphs && !metadataGraph) { - metadataGraph = settings.metadataGraph; - writer.addTriple(metadataGraph, primaryTopic, settings.fragmentUrl, metadataGraph); - } - // Write the metadata triple - if (s && p && o && !N3.Util.isLiteral(s)) - writer.addTriple(s, p, o, metadataGraph); - }, - // Ends the output and flushes the stream - end: function () { - writer.end(function (error, output) { - response.write(error ? '' : output); - done(); - }); - }, - }; -}; + // Creates a writer for Turtle/N-Triples/TriG/N-Quads + _createN3Writer(settings, response, done) { + var writer = new N3.Writer({ format: settings.contentType, prefixes: settings.prefixes }), + supportsGraphs = /trig|quad/.test(settings.contentType), metadataGraph; + return { + // Adds the data quad to the output + // NOTE: The first parameter can also be a quad object + data: function (s, p, o, g) { + // If graphs are unsupported, only write triples in the default graph + if (supportsGraphs || (p ? !g : !s.graph)) + writer.addTriple(s, p, o, g); + }, + // Adds the metadata triple to the output + meta: function (s, p, o) { + // Relate the metadata graph to the data + if (supportsGraphs && !metadataGraph) { + metadataGraph = settings.metadataGraph; + writer.addTriple(metadataGraph, primaryTopic, settings.fragmentUrl, metadataGraph); + } + // Write the metadata triple + if (s && p && o && !N3.Util.isLiteral(s)) + writer.addTriple(s, p, o, metadataGraph); + }, + // Ends the output and flushes the stream + end: function () { + writer.end(function (error, output) { + response.write(error ? '' : output); + done(); + }); + }, + }; + } -// Creates a writer for JSON-LD -RdfView.prototype._createJsonLdWriter = function (settings, response, done) { - // Initialize triples, prefixes, and document base - var quads = { '@default': [] }, metadata = quads[settings.metadataGraph] = [], - prefixes = settings.prefixes || {}, context = _.omit(prefixes, ''), base = prefixes['']; - base && (context['@base'] = base); - return { - // Adds the data triple to the output - data: function (s, p, o, g) { - if (!p) g = s.graph, o = s.object, p = s.predicate, s = s.subject; - if (!g) g = '@default'; - var graph = quads[g] || (quads[g] = []); - graph.push(toJsonLdTriple(s, p, o)); - }, - // Adds the metadata triple to the output - meta: function (s, p, o) { - if (s && p && o && !N3.Util.isLiteral(s)) - metadata.push(toJsonLdTriple(s, p, o)); - }, - // Ends the output and flushes the stream - end: function () { - jsonld.fromRDF(quads, { format: false, useNativeTypes: true }, - function (error, json) { - jsonld.compact(error ? {} : json, context, function (error, compacted) { - response.write(JSON.stringify(compacted, null, ' ') + '\n'); - done(error); + // Creates a writer for JSON-LD + _createJsonLdWriter(settings, response, done) { + // Initialize triples, prefixes, and document base + var quads = { '@default': [] }, metadata = quads[settings.metadataGraph] = [], + prefixes = settings.prefixes || {}, context = _.omit(prefixes, ''), base = prefixes['']; + base && (context['@base'] = base); + return { + // Adds the data triple to the output + data: function (s, p, o, g) { + if (!p) g = s.graph, o = s.object, p = s.predicate, s = s.subject; + if (!g) g = '@default'; + var graph = quads[g] || (quads[g] = []); + graph.push(toJsonLdTriple(s, p, o)); + }, + // Adds the metadata triple to the output + meta: function (s, p, o) { + if (s && p && o && !N3.Util.isLiteral(s)) + metadata.push(toJsonLdTriple(s, p, o)); + }, + // Ends the output and flushes the stream + end: function () { + jsonld.fromRDF(quads, { format: false, useNativeTypes: true }, + function (error, json) { + jsonld.compact(error ? {} : json, context, function (error, compacted) { + response.write(JSON.stringify(compacted, null, ' ') + '\n'); + done(error); + }); }); - }); - }, - }; -}; + }, + }; + } +} // Converts a triple to the JSON-LD library representation function toJsonLdTriple(subject, predicate, object) { diff --git a/packages/core/lib/views/View.js b/packages/core/lib/views/View.js index e3f7c0e0..cf9ac858 100644 --- a/packages/core/lib/views/View.js +++ b/packages/core/lib/views/View.js @@ -6,100 +6,95 @@ var _ = require('lodash'), ViewCollection = require('./ViewCollection'); // Creates a view with the given name -function View(viewName, contentTypes, defaults) { - if (!(this instanceof View)) - return new View(viewName, contentTypes, defaults); - this.name = viewName || ''; - this._parseContentTypes(contentTypes); - this._defaults = defaults || {}; - if (this._defaults.views) - this._defaults.views = new ViewCollection(defaults.views); -} +class View { + constructor(viewName, contentTypes, defaults) { + this.name = viewName || ''; + this._parseContentTypes(contentTypes); + this._defaults = defaults || {}; + if (this._defaults.views) + this._defaults.views = new ViewCollection(defaults.views); + } -// Makes View the prototype of the given class -View.extend = function extend(child) { - child.prototype = Object.create(this.prototype); - child.prototype.constructor = child; - child.extend = extend; -}; + // Parses a string of content types into an array of objects + // i.e., 'a/b,q=0.7' => [{ type: 'a/b', responseType: 'a/b;charset=utf-8', quality: 0.7 }] + // The "type" represents the MIME type, + // whereas "responseType" contains the value of the Content-Type header with encoding. + _parseContentTypes(contentTypes) { + var matcher = this._supportedContentTypeMatcher = Object.create(null); + if (typeof contentTypes === 'string') { + contentTypes = contentTypes.split(',').map(function (typeString) { + var contentType = typeString.match(/[^;,]*/)[0], + responseType = contentType + ';charset=utf-8', + quality = typeString.match(/;q=([0-9.]+)/); + matcher[contentType] = matcher[responseType] = true; + return { + type: contentType, + responseType: responseType, + quality: quality ? Math.min(Math.max(parseFloat(quality[1]), 0.0), 1.0) : 1.0, + }; + }); + } + this.supportedContentTypes = contentTypes || []; + } -// Parses a string of content types into an array of objects -// i.e., 'a/b,q=0.7' => [{ type: 'a/b', responseType: 'a/b;charset=utf-8', quality: 0.7 }] -// The "type" represents the MIME type, -// whereas "responseType" contains the value of the Content-Type header with encoding. -View.prototype._parseContentTypes = function (contentTypes) { - var matcher = this._supportedContentTypeMatcher = Object.create(null); - if (typeof contentTypes === 'string') { - contentTypes = contentTypes.split(',').map(function (typeString) { - var contentType = typeString.match(/[^;,]*/)[0], - responseType = contentType + ';charset=utf-8', - quality = typeString.match(/;q=([0-9.]+)/); - matcher[contentType] = matcher[responseType] = true; - return { - type: contentType, - responseType: responseType, - quality: quality ? Math.min(Math.max(parseFloat(quality[1]), 0.0), 1.0) : 1.0, - }; - }); + // Indicates whether the view supports the given content type + supportsContentType(contentType) { + return this._supportedContentTypeMatcher[contentType]; } - this.supportedContentTypes = contentTypes || []; -}; -// Indicates whether the view supports the given content type -View.prototype.supportsContentType = function (contentType) { - return this._supportedContentTypeMatcher[contentType]; -}; + // Renders the view with the given options to the response + render(options, request, response, done) { + // Initialize view-specific settings + var settings = _.defaults({}, options, this._defaults); + if (!settings.contentType) + settings.contentType = response.getHeader('Content-Type'); + + // Export our base view, so it can be reused by other modules + settings.viewPathBase = join(__dirname, 'base.html'); -// Renders the view with the given options to the response -View.prototype.render = function (options, request, response, done) { - // Initialize view-specific settings - var settings = _.defaults({}, options, this._defaults); - if (!settings.contentType) - settings.contentType = response.getHeader('Content-Type'); + // Render the view and end the response when done + this._render(settings, request, response, function (error) { + if (error) + response.emit('error', error); + response.end(); + done && done(); + }); + } - // Export our base view, so it can be reused by other modules - settings.viewPathBase = join(__dirname, 'base.html'); + // Gets extensions with the given name for this view + _getViewExtensions(name, contentType) { + var extensions = this._defaults.views ? this._defaults.views.getViews(this.name + ':' + name) : []; + if (extensions.length) { + extensions = extensions.filter(function (extension) { + return extension.supportsContentType(contentType); + }); + } + return extensions; + } - // Render the view and end the response when done - this._render(settings, request, response, function (error) { - if (error) - response.emit('error', error); - response.end(); - done && done(); - }); -}; + // Renders the extensions with the given name for this view + _renderViewExtensions(name, options, request, response, done) { + var self = this, extensions = this._getViewExtensions(name, options.contentType), i = 0; + (function next() { + if (i < extensions.length) + self._renderViewExtension(extensions[i++], options, request, response, next); + else + done(); + })(); + } -// Gets extensions with the given name for this view -View.prototype._getViewExtensions = function (name, contentType) { - var extensions = this._defaults.views ? this._defaults.views.getViews(this.name + ':' + name) : []; - if (extensions.length) { - extensions = extensions.filter(function (extension) { - return extension.supportsContentType(contentType); - }); + // Renders the specified view extension + _renderViewExtension(extension, options, request, response, done) { + extension.render(options, request, response, done); } - return extensions; -}; -// Renders the extensions with the given name for this view -View.prototype._renderViewExtensions = function (name, options, request, response, done) { - var self = this, extensions = this._getViewExtensions(name, options.contentType), i = 0; - (function next() { - if (i < extensions.length) - self._renderViewExtension(extensions[i++], options, request, response, next); - else - done(); - })(); -}; + // Renders the view with the given settings to the response + // (settings combines the view defaults with instance-specific options) + _render(settings, request, response, done) { + throw new Error('The _render method is not yet implemented.'); + } +} -// Renders the specified view extension -View.prototype._renderViewExtension = function (extension, options, request, response, done) { - extension.render(options, request, response, done); -}; -// Renders the view with the given settings to the response -// (settings combines the view defaults with instance-specific options) -View.prototype._render = function (settings, request, response, done) { - throw new Error('The _render method is not yet implemented.'); -}; module.exports = View; diff --git a/packages/core/lib/views/ViewCollection.js b/packages/core/lib/views/ViewCollection.js index a2fa7ef9..6262f8da 100644 --- a/packages/core/lib/views/ViewCollection.js +++ b/packages/core/lib/views/ViewCollection.js @@ -11,39 +11,39 @@ var _ = require('lodash'), negotiate = require('negotiate'), Util = require('../Util'); -var ViewCollectionError = ViewCollection.ViewCollectionError = - Util.createErrorType('ViewCollectionError'); // Creates a new ViewCollection -function ViewCollection(views) { - if (!(this instanceof ViewCollection)) - return new ViewCollection(views); - this._views = {}; // Views keyed by name - this._viewMatchers = {}; // Views matchers keyed by name; each one matches one content type - views && this.addViews(views); +class ViewCollection { + constructor(views) { + this._views = {}; // Views keyed by name + this._viewMatchers = {}; // Views matchers keyed by name; each one matches one content type + views && this.addViews(views); + } + + // Adds the given view to the collection + addView(view) { + // Add the view to the list per type + (this._views[view.name] || (this._views[view.name] = [])).push(view); + // Add a match entry for each content type supported by the view + var matchers = this._viewMatchers[view.name] || (this._viewMatchers[view.name] = []); + view.supportedContentTypes.forEach(function (contentType) { + matchers.push(_.extend({ view: view }, contentType)); + }); + } + + // Adds the given views to the collection + addViews(views) { + for (var i = 0; i < views.length; i++) + this.addView(views[i]); + } + + // Gets all views with the given name + getViews(name) { + return this._views[name] || []; + } } -// Adds the given view to the collection -ViewCollection.prototype.addView = function (view) { - // Add the view to the list per type - (this._views[view.name] || (this._views[view.name] = [])).push(view); - // Add a match entry for each content type supported by the view - var matchers = this._viewMatchers[view.name] || (this._viewMatchers[view.name] = []); - view.supportedContentTypes.forEach(function (contentType) { - matchers.push(_.extend({ view: view }, contentType)); - }); -}; - -// Adds the given views to the collection -ViewCollection.prototype.addViews = function (views) { - for (var i = 0; i < views.length; i++) - this.addView(views[i]); -}; - -// Gets all views with the given name -ViewCollection.prototype.getViews = function (name) { - return this._views[name] || []; -}; +var ViewCollectionError = ViewCollection.ViewCollectionError = Util.createErrorType('ViewCollectionError'); // Gets the best match for views with the given name that accommodate the request ViewCollection.prototype.matchView = function (name, request) { diff --git a/packages/core/lib/views/error/ErrorHtmlView.js b/packages/core/lib/views/error/ErrorHtmlView.js index 8eecbdb2..daa9ef84 100644 --- a/packages/core/lib/views/error/ErrorHtmlView.js +++ b/packages/core/lib/views/error/ErrorHtmlView.js @@ -4,16 +4,15 @@ var HtmlView = require('../HtmlView'); // Creates a new ErrorHtmlView -function ErrorHtmlView(settings) { - if (!(this instanceof ErrorHtmlView)) - return new ErrorHtmlView(settings); - HtmlView.call(this, 'Error', settings); -} -HtmlView.extend(ErrorHtmlView); +class ErrorHtmlView extends HtmlView { + constructor(settings) { + super('Error', settings); + } -// Renders the view with the given settings to the response -ErrorHtmlView.prototype._render = function (settings, request, response, done) { - this._renderTemplate('error/error', settings, request, response, done); -}; + // Renders the view with the given settings to the response + _render(settings, request, response, done) { + this._renderTemplate('error/error', settings, request, response, done); + } +} module.exports = ErrorHtmlView; diff --git a/packages/core/lib/views/error/ErrorRdfView.js b/packages/core/lib/views/error/ErrorRdfView.js index 5fa4e8c3..3143a3a1 100644 --- a/packages/core/lib/views/error/ErrorRdfView.js +++ b/packages/core/lib/views/error/ErrorRdfView.js @@ -4,17 +4,17 @@ var RdfView = require('../RdfView'); // Creates a new ErrorRdfView -function ErrorRdfView(settings) { - if (!(this instanceof ErrorRdfView)) - return new ErrorRdfView(settings); - RdfView.call(this, 'Error', settings); +class ErrorRdfView extends RdfView { + constructor(settings) { + super('Error', settings); + } + + // Generates triples and quads by sending them to the data and/or metadata callbacks + _generateRdf(settings, data, metadata, done) { + this._addDatasources(settings, data, metadata); + done(); + } } -RdfView.extend(ErrorRdfView); -// Generates triples and quads by sending them to the data and/or metadata callbacks -ErrorRdfView.prototype._generateRdf = function (settings, data, metadata, done) { - this._addDatasources(settings, data, metadata); - done(); -}; module.exports = ErrorRdfView; diff --git a/packages/core/lib/views/forbidden/ForbiddenHtmlView.js b/packages/core/lib/views/forbidden/ForbiddenHtmlView.js index f8a1db5a..20b55aae 100644 --- a/packages/core/lib/views/forbidden/ForbiddenHtmlView.js +++ b/packages/core/lib/views/forbidden/ForbiddenHtmlView.js @@ -4,16 +4,15 @@ var HtmlView = require('../HtmlView'); // Creates a new ForbiddenHtmlView -function ForbiddenHtmlView(settings) { - if (!(this instanceof ForbiddenHtmlView)) - return new ForbiddenHtmlView(settings); - HtmlView.call(this, 'Forbidden', settings); -} -HtmlView.extend(ForbiddenHtmlView); +class ForbiddenHtmlView extends HtmlView { + constructor(settings) { + super('Forbidden', settings); + } -// Renders the view with the given settings to the response -ForbiddenHtmlView.prototype._render = function (settings, request, response, done) { - this._renderTemplate('forbidden/forbidden', settings, request, response, done); -}; + // Renders the view with the given settings to the response + _render(settings, request, response, done) { + this._renderTemplate('forbidden/forbidden', settings, request, response, done); + } +} module.exports = ForbiddenHtmlView; diff --git a/packages/core/lib/views/notfound/NotFoundHtmlView.js b/packages/core/lib/views/notfound/NotFoundHtmlView.js index 1ade299f..d3f9e191 100644 --- a/packages/core/lib/views/notfound/NotFoundHtmlView.js +++ b/packages/core/lib/views/notfound/NotFoundHtmlView.js @@ -4,16 +4,15 @@ var HtmlView = require('../HtmlView'); // Creates a new NotFoundHtmlView -function NotFoundHtmlView(settings) { - if (!(this instanceof NotFoundHtmlView)) - return new NotFoundHtmlView(settings); - HtmlView.call(this, 'NotFound', settings); -} -HtmlView.extend(NotFoundHtmlView); +class NotFoundHtmlView extends HtmlView { + constructor(settings) { + super('NotFound', settings); + } -// Renders the view with the given settings to the response -NotFoundHtmlView.prototype._render = function (settings, request, response, done) { - this._renderTemplate('notfound/notfound', settings, request, response, done); -}; + // Renders the view with the given settings to the response + _render(settings, request, response, done) { + this._renderTemplate('notfound/notfound', settings, request, response, done); + } +} module.exports = NotFoundHtmlView; diff --git a/packages/core/lib/views/notfound/NotFoundRdfView.js b/packages/core/lib/views/notfound/NotFoundRdfView.js index 4dd3e45a..7de70cf0 100644 --- a/packages/core/lib/views/notfound/NotFoundRdfView.js +++ b/packages/core/lib/views/notfound/NotFoundRdfView.js @@ -4,17 +4,17 @@ var RdfView = require('../RdfView'); // Creates a new NotFoundRdfView -function NotFoundRdfView(settings) { - if (!(this instanceof NotFoundRdfView)) - return new NotFoundRdfView(settings); - RdfView.call(this, 'NotFound', settings); +class NotFoundRdfView extends RdfView { + constructor(settings) { + super('NotFound', settings); + } + + // Generates triples and quads by sending them to the data and/or metadata callbacks + _generateRdf(settings, data, metadata, done) { + this._addDatasources(settings, data, metadata); + done(); + } } -RdfView.extend(NotFoundRdfView); -// Generates triples and quads by sending them to the data and/or metadata callbacks -NotFoundRdfView.prototype._generateRdf = function (settings, data, metadata, done) { - this._addDatasources(settings, data, metadata); - done(); -}; module.exports = NotFoundRdfView; diff --git a/packages/core/test/controllers/AssetsController-test.js b/packages/core/test/controllers/AssetsController-test.js index 426f3b43..a72595ff 100644 --- a/packages/core/test/controllers/AssetsController-test.js +++ b/packages/core/test/controllers/AssetsController-test.js @@ -15,10 +15,6 @@ describe('AssetsController', function () { it('should be an AssetsController constructor', function () { new AssetsController().should.be.an.instanceof(AssetsController); }); - - it('should create new AssetsController objects', function () { - AssetsController().should.be.an.instanceof(AssetsController); - }); }); describe('An AssetsController instance', function () { diff --git a/packages/core/test/controllers/Controller-test.js b/packages/core/test/controllers/Controller-test.js index 24834b53..45c042ab 100644 --- a/packages/core/test/controllers/Controller-test.js +++ b/packages/core/test/controllers/Controller-test.js @@ -15,10 +15,6 @@ describe('Controller', function () { it('should be a Controller constructor', function () { new Controller().should.be.an.instanceof(Controller); }); - - it('should create new Controller objects', function () { - Controller().should.be.an.instanceof(Controller); - }); }); describe('A Controller instance without baseURL', function () { diff --git a/packages/core/test/controllers/DereferenceController-test.js b/packages/core/test/controllers/DereferenceController-test.js index 0c88ffe9..f8715f84 100644 --- a/packages/core/test/controllers/DereferenceController-test.js +++ b/packages/core/test/controllers/DereferenceController-test.js @@ -13,10 +13,6 @@ describe('DereferenceController', function () { it('should be a DereferenceController constructor', function () { new DereferenceController().should.be.an.instanceof(DereferenceController); }); - - it('should create new DereferenceController objects', function () { - DereferenceController().should.be.an.instanceof(DereferenceController); - }); }); describe('A DereferenceController instance', function () { diff --git a/packages/core/test/controllers/NotFoundController-test.js b/packages/core/test/controllers/NotFoundController-test.js index 2317601a..ba28c370 100644 --- a/packages/core/test/controllers/NotFoundController-test.js +++ b/packages/core/test/controllers/NotFoundController-test.js @@ -16,10 +16,6 @@ describe('NotFoundController', function () { it('should be a NotFoundController constructor', function () { new NotFoundController().should.be.an.instanceof(NotFoundController); }); - - it('should create new NotFoundController objects', function () { - NotFoundController().should.be.an.instanceof(NotFoundController); - }); }); describe('A NotFoundController instance without views', function () { diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index 5cac53e3..6d61a313 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -17,17 +17,9 @@ describe('Datasource', function () { new Datasource().should.be.an.instanceof(Datasource); }); - it('should create new Datasource objects', function () { - Datasource().should.be.an.instanceof(Datasource); - }); - it('should be an EventEmitter constructor', function () { new Datasource().should.be.an.instanceof(EventEmitter); }); - - it('should create new EventEmitter objects', function () { - Datasource().should.be.an.instanceof(EventEmitter); - }); }); describe('A Datasource instance', function () { diff --git a/packages/core/test/routers/DatasourceRouter-test.js b/packages/core/test/routers/DatasourceRouter-test.js index 6e468878..68423dc7 100644 --- a/packages/core/test/routers/DatasourceRouter-test.js +++ b/packages/core/test/routers/DatasourceRouter-test.js @@ -10,10 +10,6 @@ describe('DatasourceRouter', function () { it('should be a DatasourceRouter constructor', function () { new DatasourceRouter().should.be.an.instanceof(DatasourceRouter); }); - - it('should create new DatasourceRouter objects', function () { - DatasourceRouter().should.be.an.instanceof(DatasourceRouter); - }); }); describe('A DatasourceRouter instance', function () { diff --git a/packages/core/test/routers/PageRouter-test.js b/packages/core/test/routers/PageRouter-test.js index d0e9412f..e5849a7a 100644 --- a/packages/core/test/routers/PageRouter-test.js +++ b/packages/core/test/routers/PageRouter-test.js @@ -10,10 +10,6 @@ describe('PageRouter', function () { it('should be a PageRouter constructor', function () { new PageRouter().should.be.an.instanceof(PageRouter); }); - - it('should create new PageRouter objects', function () { - PageRouter().should.be.an.instanceof(PageRouter); - }); }); describe('A PageRouter instance', function () { diff --git a/packages/core/test/views/View-test.js b/packages/core/test/views/View-test.js index 6fb32410..660d8ddd 100644 --- a/packages/core/test/views/View-test.js +++ b/packages/core/test/views/View-test.js @@ -11,10 +11,6 @@ describe('View', function () { it('should be a View constructor', function () { new View().should.be.an.instanceof(View); }); - - it('should create new View objects', function () { - View().should.be.an.instanceof(View); - }); }); describe('A View instance', function () { diff --git a/packages/core/test/views/ViewCollection-test.js b/packages/core/test/views/ViewCollection-test.js index f91a1994..2c2a35c6 100644 --- a/packages/core/test/views/ViewCollection-test.js +++ b/packages/core/test/views/ViewCollection-test.js @@ -12,10 +12,6 @@ describe('ViewCollection', function () { it('should be a ViewCollection constructor', function () { new ViewCollection().should.be.an.instanceof(ViewCollection); }); - - it('should create new ViewCollection objects', function () { - ViewCollection().should.be.an.instanceof(ViewCollection); - }); }); describe('A ViewCollection instance without views', function () { diff --git a/packages/datasource-composite/lib/datasources/CompositeDatasource.js b/packages/datasource-composite/lib/datasources/CompositeDatasource.js index 567b300b..5a5c3ac7 100644 --- a/packages/datasource-composite/lib/datasources/CompositeDatasource.js +++ b/packages/datasource-composite/lib/datasources/CompositeDatasource.js @@ -5,206 +5,205 @@ var Datasource = require('@ldf/core').datasources.Datasource, LRU = require('lru-cache'); // Creates a new CompositeDatasource -function CompositeDatasource(options) { - if (!(this instanceof CompositeDatasource)) - return new CompositeDatasource(options); - Datasource.call(this, options); - - if (!options.references) - throw new Error("A CompositeDatasource requires a `references` array of datasource id's in its settings."); - - var allDatasources = options.datasources; - this._datasources = {}; - this._datasourceNames = []; - for (var i = 0; i < options.references.length; i++) { - var datasourceName = options.references[i]; - var datasource = allDatasources[datasourceName]; - if (!datasource) - throw new Error('No datasource ' + datasourceName + ' could be found!'); - if (datasource.enabled !== false) { - this._datasources[datasourceName] = datasource; - this._datasourceNames.push(datasourceName); +class CompositeDatasource extends Datasource { + constructor(options) { + let supportedFeatureList = ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']; + super(options, supportedFeatureList); + + if (!options.references) + throw new Error("A CompositeDatasource requires a `references` array of datasource id's in its settings."); + + var allDatasources = options.datasources; + this._datasources = {}; + this._datasourceNames = []; + for (var i = 0; i < options.references.length; i++) { + var datasourceName = options.references[i]; + var datasource = allDatasources[datasourceName]; + if (!datasource) + throw new Error('No datasource ' + datasourceName + ' could be found!'); + if (datasource.enabled !== false) { + this._datasources[datasourceName] = datasource; + this._datasourceNames.push(datasourceName); + } } + this._countCache = new LRU({ max: 1000, maxAge: 1000 * 60 * 60 * 3 }); } - this._countCache = new LRU({ max: 1000, maxAge: 1000 * 60 * 60 * 3 }); -} -Datasource.extend(CompositeDatasource, ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']); -// Checks whether the data source can evaluate the given query -CompositeDatasource.prototype.supportsQuery = function (query) { - for (var datasourceName in this._datasources) { - if (this._getDatasourceByName(datasourceName).supportsQuery(query)) - return true; + // Checks whether the data source can evaluate the given query + supportsQuery(query) { + for (var datasourceName in this._datasources) { + if (this._getDatasourceByName(datasourceName).supportsQuery(query)) + return true; + } + return false; } - return false; -}; - -// Find a datasource by datasource name -CompositeDatasource.prototype._getDatasourceByName = function (datasourceName) { - return this._datasources[datasourceName].datasource; -}; - -// Find a datasource by datasource id inside this composition -CompositeDatasource.prototype._getDatasourceById = function (datasourceIndex) { - return this._datasources[this._datasourceNames[datasourceIndex]].datasource; -}; - -CompositeDatasource.prototype._hasDatasourceMatchingGraph = function (datasource, datasourceIndex, query) { - return !query.graph || datasource.supportedFeatures.quadPattern || query.graph === datasource._graph; -}; - -// Count the quads in the query result to get an exact count. -CompositeDatasource.prototype._getExactCount = function (datasource, query, callback) { - // Try to find a cache match - var cacheKey = query.subject + '|' + query.predicate + '|' + query.object + '|' + query.graph; - var cache = this._countCache, count = cache.get(cacheKey); - if (count) return setImmediate(callback, count); - - // Otherwise, count all quads manually - var emptyQuery = { offset: 0, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; - var exactCount = 0; - var outputQuads = datasource.select(emptyQuery); - outputQuads.on('data', function () { - exactCount++; - }); - outputQuads.on('end', function () { - if (exactCount > 1000) - cache.set(cacheKey, exactCount); - callback(exactCount); - }); -}; - -// Recursively find all required datasource composition info to perform a query. -// The callback will provide the parameters: -// Datasource id to start querying from -// The offset to use to start querying from the given datasource id -// The total count for all datasources -CompositeDatasource.prototype._getDatasourceInfo = function (query, absoluteOffset, callback) { - var self = this; - return findRecursive(0, absoluteOffset, -1, -1, 0, callback, true); - - function findRecursive(datasourceIndex, offset, chosenDatasource, chosenOffset, totalCount, hasExactCount) { - if (datasourceIndex >= self._datasourceNames.length) - // We checked all datasources, return our accumulated information - callback(chosenDatasource, chosenOffset, totalCount, hasExactCount); - else { - var datasource = self._getDatasourceById(datasourceIndex); - var emptyQuery = { - offset: 0, limit: 1, - subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph, - }; - // If we have a graph in our query, and this is a triple datasource, make sure it is in the requested graph - if (!self._hasDatasourceMatchingGraph(datasource, datasourceIndex, emptyQuery)) - return findRecursive(datasourceIndex + 1, offset, chosenDatasource, chosenOffset, totalCount, hasExactCount); - - var outputQuads = datasource.select(emptyQuery); - outputQuads.getProperty('metadata', function (metadata) { - // If we are still looking for an appropriate datasource, we need exact counts - var count = metadata.totalCount, exact = metadata.hasExactCount; - if (offset > 0 && !exact) { - self._getExactCount(datasource, query, function (exactCount) { - count = exactCount; - exact = true; - continueRecursion(); - }); - } - else - continueRecursion(); - - function continueRecursion() { - if (chosenDatasource < 0 && offset < count) { - // We can start querying from this datasource - setImmediate(function () { - findRecursive(datasourceIndex + 1, offset - count, datasourceIndex, offset, - totalCount + count, hasExactCount && exact); + // Find a datasource by datasource name + _getDatasourceByName(datasourceName) { + return this._datasources[datasourceName].datasource; + } + + // Find a datasource by datasource id inside this composition + _getDatasourceById(datasourceIndex) { + return this._datasources[this._datasourceNames[datasourceIndex]].datasource; + } + + _hasDatasourceMatchingGraph(datasource, datasourceIndex, query) { + return !query.graph || datasource.supportedFeatures.quadPattern || query.graph === datasource._graph; + } + + // Count the quads in the query result to get an exact count. + _getExactCount(datasource, query, callback) { + // Try to find a cache match + var cacheKey = query.subject + '|' + query.predicate + '|' + query.object + '|' + query.graph; + var cache = this._countCache, count = cache.get(cacheKey); + if (count) return setImmediate(callback, count); + + // Otherwise, count all quads manually + var emptyQuery = { offset: 0, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; + var exactCount = 0; + var outputQuads = datasource.select(emptyQuery); + outputQuads.on('data', function () { + exactCount++; + }); + outputQuads.on('end', function () { + if (exactCount > 1000) + cache.set(cacheKey, exactCount); + callback(exactCount); + }); + } + + // Recursively find all required datasource composition info to perform a query. + // The callback will provide the parameters: + // Datasource id to start querying from + // The offset to use to start querying from the given datasource id + // The total count for all datasources + _getDatasourceInfo(query, absoluteOffset, callback) { + var self = this; + return findRecursive(0, absoluteOffset, -1, -1, 0, callback, true); + + function findRecursive(datasourceIndex, offset, chosenDatasource, chosenOffset, totalCount, hasExactCount) { + if (datasourceIndex >= self._datasourceNames.length) + // We checked all datasources, return our accumulated information + callback(chosenDatasource, chosenOffset, totalCount, hasExactCount); + else { + var datasource = self._getDatasourceById(datasourceIndex); + var emptyQuery = { + offset: 0, limit: 1, + subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph, + }; + + // If we have a graph in our query, and this is a triple datasource, make sure it is in the requested graph + if (!self._hasDatasourceMatchingGraph(datasource, datasourceIndex, emptyQuery)) + return findRecursive(datasourceIndex + 1, offset, chosenDatasource, chosenOffset, totalCount, hasExactCount); + + var outputQuads = datasource.select(emptyQuery); + outputQuads.getProperty('metadata', function (metadata) { + // If we are still looking for an appropriate datasource, we need exact counts + var count = metadata.totalCount, exact = metadata.hasExactCount; + if (offset > 0 && !exact) { + self._getExactCount(datasource, query, function (exactCount) { + count = exactCount; + exact = true; + continueRecursion(); }); } - else { - // We forward our accumulated information and go check the next datasource - setImmediate(function () { - findRecursive(datasourceIndex + 1, offset - count, chosenDatasource, chosenOffset, - totalCount + count, hasExactCount && exact); - }); + else + continueRecursion(); + + function continueRecursion() { + if (chosenDatasource < 0 && offset < count) { + // We can start querying from this datasource + setImmediate(function () { + findRecursive(datasourceIndex + 1, offset - count, datasourceIndex, offset, + totalCount + count, hasExactCount && exact); + }); + } + else { + // We forward our accumulated information and go check the next datasource + setImmediate(function () { + findRecursive(datasourceIndex + 1, offset - count, chosenDatasource, chosenOffset, + totalCount + count, hasExactCount && exact); + }); + } } - } - }); + }); + } } } -}; - -// Writes the results of the query to the given quad stream -CompositeDatasource.prototype._executeQuery = function (query, destination) { - var offset = query.offset || 0, limit = query.limit || Infinity; - var self = this; - this._getDatasourceInfo(query, offset, function (datasourceIndex, relativeOffset, totalCount, hasExactCount) { - if (datasourceIndex < 0) { - // No valid datasource has been found - destination.setProperty('metadata', { totalCount: totalCount, hasExactCount: hasExactCount }); - destination.close(); - } - else { - // Send query to first applicable datasource and optionally emit quads from consecutive datasources - destination.setProperty('metadata', { totalCount: totalCount, hasExactCount: hasExactCount }); - - // Modify our quad stream so that if all results from one datasource have arrived, - // check if we haven't reached the limit and if so, trigger a new query for the next datasource. - var emitted = 0; - countItems(destination, function (localEmittedCount) { - // This is called after the last element has been pushed - - // If we haven't reached our limit, try to fill it with other datasource query results. - emitted = localEmittedCount; - datasourceIndex++; - if (emitted < limit && datasourceIndex < self._datasourceNames.length) { - var localLimit = limit - emitted; - var subQuery = { offset: 0, limit: localLimit, - subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; - var datasource = self._getDatasourceById(datasourceIndex); - // If we are have a graph in our query, and this is a triple datasource, make sure it is in the requested graph, - // otherwise we skip this datasource - if (self._hasDatasourceMatchingGraph(datasource, datasourceIndex, subQuery)) { - var outputQuads = datasource.select(subQuery); - outputQuads.on('data', pushToDestination); - outputQuads.on('end', closeDestination); + + // Writes the results of the query to the given quad stream + _executeQuery(query, destination) { + var offset = query.offset || 0, limit = query.limit || Infinity; + var self = this; + this._getDatasourceInfo(query, offset, function (datasourceIndex, relativeOffset, totalCount, hasExactCount) { + if (datasourceIndex < 0) { + // No valid datasource has been found + destination.setProperty('metadata', { totalCount: totalCount, hasExactCount: hasExactCount }); + destination.close(); + } + else { + // Send query to first applicable datasource and optionally emit quads from consecutive datasources + destination.setProperty('metadata', { totalCount: totalCount, hasExactCount: hasExactCount }); + + // Modify our quad stream so that if all results from one datasource have arrived, + // check if we haven't reached the limit and if so, trigger a new query for the next datasource. + var emitted = 0; + countItems(destination, function (localEmittedCount) { + // This is called after the last element has been pushed + + // If we haven't reached our limit, try to fill it with other datasource query results. + emitted = localEmittedCount; + datasourceIndex++; + if (emitted < limit && datasourceIndex < self._datasourceNames.length) { + var localLimit = limit - emitted; + var subQuery = { offset: 0, limit: localLimit, + subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; + var datasource = self._getDatasourceById(datasourceIndex); + // If we are have a graph in our query, and this is a triple datasource, make sure it is in the requested graph, + // otherwise we skip this datasource + if (self._hasDatasourceMatchingGraph(datasource, datasourceIndex, subQuery)) { + var outputQuads = datasource.select(subQuery); + outputQuads.on('data', pushToDestination); + outputQuads.on('end', closeDestination); + } + else + destination.close(); + return false; } else - destination.close(); - return false; - } - else - return true; - }); - - // Initiate query to the first datasource. - var subQuery = { offset: relativeOffset, limit: limit, - subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; - var outputQuads = self._getDatasourceById(datasourceIndex).select(subQuery); - outputQuads.on('data', pushToDestination); - outputQuads.on('end', closeDestination); + return true; + }); + + // Initiate query to the first datasource. + var subQuery = { offset: relativeOffset, limit: limit, + subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; + var outputQuads = self._getDatasourceById(datasourceIndex).select(subQuery); + outputQuads.on('data', pushToDestination); + outputQuads.on('end', closeDestination); + } + }); + + // Counts the number of quads and sends them through the callback, + // only closing the iterator when the callback returns true. + function countItems(destination, closeCallback) { + var count = 0, originalPush = destination._push, originalClose = destination.close; + destination._push = function (element) { + if (element) count++; + originalPush.call(destination, element); + }; + destination.close = function () { + if (closeCallback(count)) + originalClose.call(destination); + }; } - }); - - // Counts the number of quads and sends them through the callback, - // only closing the iterator when the callback returns true. - function countItems(destination, closeCallback) { - var count = 0, originalPush = destination._push, originalClose = destination.close; - destination._push = function (element) { - if (element) count++; - originalPush.call(destination, element); - }; - destination.close = function () { - if (closeCallback(count)) - originalClose.call(destination); - }; - } - function pushToDestination(quad) { - destination._push(quad); - } - function closeDestination() { - destination.close(); + function pushToDestination(quad) { + destination._push(quad); + } + function closeDestination() { + destination.close(); + } } -}; - +} module.exports = CompositeDatasource; diff --git a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js index 19d37a4c..bdd06e24 100644 --- a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js @@ -10,73 +10,74 @@ var Datasource = require('@ldf/core').datasources.Datasource, var hdtUtility = path.join(__dirname, '../../node_modules/.bin/hdt'); // Creates a new ExternalHdtDatasource -function ExternalHdtDatasource(options) { - if (!(this instanceof ExternalHdtDatasource)) - return new ExternalHdtDatasource(options); - Datasource.call(this, options); +class ExternalHdtDatasource extends Datasource { + constructor(options) { + let supportedFeatureList = ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']; + super(options, supportedFeatureList); - // Test whether the HDT file exists - this._options = options = options || {}; - this._hdtFile = (options.file || '').replace(/^file:\/\//, ''); -} -Datasource.extend(ExternalHdtDatasource, ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']); -// Prepares the datasource for querying -ExternalHdtDatasource.prototype._initialize = function (done) { - if (this._options.checkFile !== false) { - if (!fs.existsSync(this._hdtFile)) - return done(new Error('Not an HDT file: ' + this._hdtFile)); - if (!fs.existsSync(hdtUtility)) - return done(new Error('hdt not found: ' + hdtUtility)); + // Test whether the HDT file exists + this._options = options = options || {}; + this._hdtFile = (options.file || '').replace(/^file:\/\//, ''); } - done(); -}; -// Writes the results of the query to the given quad stream -ExternalHdtDatasource.prototype._executeQuery = function (query, destination) { - // Only the default graph has results - if (query.graph) { - destination.setProperty('metadata', { totalCount: 0, hasExactCount: true }); - destination.close(); - return; + // Prepares the datasource for querying + _initialize(done) { + if (this._options.checkFile !== false) { + if (!fs.existsSync(this._hdtFile)) + return done(new Error('Not an HDT file: ' + this._hdtFile)); + if (!fs.existsSync(hdtUtility)) + return done(new Error('hdt not found: ' + hdtUtility)); + } + done(); } - // Execute the external HDT utility - var hdtFile = this._hdtFile, offset = query.offset || 0, limit = query.limit || Infinity, - hdt = spawn(hdtUtility, [ - '--query', (query.subject || '?s') + ' ' + - (query.predicate || '?p') + ' ' + (query.object || '?o'), - '--offset', offset, '--limit', limit, '--format', 'turtle', - '--', hdtFile, - ], { stdio: ['ignore', 'pipe', 'ignore'] }); - // Parse the result triples - hdt.stdout.setEncoding('utf8'); - var parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true; - parser.parse(hdt.stdout, function (error, triple) { - if (error) - destination.emit('error', new Error('Invalid query result: ' + error.message)); - else if (triple) - tripleCount++, destination._push(triple); - else { - // Ensure the estimated total count is as least as large as the number of triples - if (tripleCount && estimatedTotalCount < offset + tripleCount) - estimatedTotalCount = offset + (tripleCount < query.limit ? tripleCount : 2 * tripleCount); - destination.setProperty('metadata', { totalCount: estimatedTotalCount, hasExactCount: hasExactCount }); + // Writes the results of the query to the given quad stream + _executeQuery(query, destination) { + // Only the default graph has results + if (query.graph) { + destination.setProperty('metadata', { totalCount: 0, hasExactCount: true }); destination.close(); + return; } - }); - parser._prefixes._ = '_:'; // Ensure blank nodes are named consistently - // Extract the estimated number of total matches from the first (comment) line - hdt.stdout.once('data', function (header) { - estimatedTotalCount = parseInt(header.match(/\d+/), 10) || 0; - hasExactCount = header.indexOf('estimated') < 0; - }); + // Execute the external HDT utility + var hdtFile = this._hdtFile, offset = query.offset || 0, limit = query.limit || Infinity, + hdt = spawn(hdtUtility, [ + '--query', (query.subject || '?s') + ' ' + + (query.predicate || '?p') + ' ' + (query.object || '?o'), + '--offset', offset, '--limit', limit, '--format', 'turtle', + '--', hdtFile, + ], { stdio: ['ignore', 'pipe', 'ignore'] }); + // Parse the result triples + hdt.stdout.setEncoding('utf8'); + var parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true; + parser.parse(hdt.stdout, function (error, triple) { + if (error) + destination.emit('error', new Error('Invalid query result: ' + error.message)); + else if (triple) + tripleCount++, destination._push(triple); + else { + // Ensure the estimated total count is as least as large as the number of triples + if (tripleCount && estimatedTotalCount < offset + tripleCount) + estimatedTotalCount = offset + (tripleCount < query.limit ? tripleCount : 2 * tripleCount); + destination.setProperty('metadata', { totalCount: estimatedTotalCount, hasExactCount: hasExactCount }); + destination.close(); + } + }); + parser._prefixes._ = '_:'; // Ensure blank nodes are named consistently + + // Extract the estimated number of total matches from the first (comment) line + hdt.stdout.once('data', function (header) { + estimatedTotalCount = parseInt(header.match(/\d+/), 10) || 0; + hasExactCount = header.indexOf('estimated') < 0; + }); - // Report query errors - hdt.on('exit', function (exitCode) { - exitCode && destination.emit('error', new Error('Could not query ' + hdtFile)); - }); -}; + // Report query errors + hdt.on('exit', function (exitCode) { + exitCode && destination.emit('error', new Error('Could not query ' + hdtFile)); + }); + } +} module.exports = ExternalHdtDatasource; diff --git a/packages/datasource-hdt/lib/datasources/HdtDatasource.js b/packages/datasource-hdt/lib/datasources/HdtDatasource.js index 0364f996..c146f000 100644 --- a/packages/datasource-hdt/lib/datasources/HdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/HdtDatasource.js @@ -6,65 +6,67 @@ var Datasource = require('@ldf/core').datasources.Datasource, ExternalHdtDatasource = require('./ExternalHdtDatasource'); // Creates a new HdtDatasource -function HdtDatasource(options) { - if (!(this instanceof HdtDatasource)) - return new HdtDatasource(options); - Datasource.call(this, options); +class HdtDatasource extends Datasource { + constructor(options) { + let supportedFeatureList = ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']; + super(options, supportedFeatureList); - options = options || {}; - // Switch to external HDT datasource if the `external` flag is set - if (options.external) - return new ExternalHdtDatasource(options); - this._hdtFile = (options.file || '').replace(/^file:\/\//, ''); -} -Datasource.extend(HdtDatasource, ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']); -// Loads the HDT datasource -HdtDatasource.prototype._initialize = function (done) { - var datasource = this; - hdt.fromFile(this._hdtFile).then(function (hdtDocument) { - datasource._hdtDocument = hdtDocument; - }).then(done, done); -}; + options = options || {}; + // Switch to external HDT datasource if the `external` flag is set + if (options.external) + return new ExternalHdtDatasource(options); + this._hdtFile = (options.file || '').replace(/^file:\/\//, ''); + } -// Writes the results of the query to the given quad stream -HdtDatasource.prototype._executeQuery = function (query, destination) { - // Only the default graph has results - if (query.graph) { - destination.setProperty('metadata', { totalCount: 0, hasExactCount: true }); - destination.close(); - return; + // Loads the HDT datasource + _initialize(done) { + var datasource = this; + hdt.fromFile(this._hdtFile).then(function (hdtDocument) { + datasource._hdtDocument = hdtDocument; + }).then(done, done); } - this._hdtDocument.searchTriples(query.subject, query.predicate, query.object, - { limit: query.limit, offset: query.offset }) - .then(function (result) { - var triples = result.triples, - estimatedTotalCount = result.totalCount, - hasExactCount = result.hasExactCount; - // Ensure the estimated total count is as least as large as the number of triples - var tripleCount = triples.length, offset = query.offset || 0; - if (tripleCount && estimatedTotalCount < offset + tripleCount) - estimatedTotalCount = offset + (tripleCount < query.limit ? tripleCount : 2 * tripleCount); - destination.setProperty('metadata', { totalCount: estimatedTotalCount, hasExactCount: hasExactCount }); - // Add the triples to the output - for (var i = 0; i < tripleCount; i++) - destination._push(triples[i]); + // Writes the results of the query to the given quad stream + _executeQuery(query, destination) { + // Only the default graph has results + if (query.graph) { + destination.setProperty('metadata', { totalCount: 0, hasExactCount: true }); destination.close(); - }, - function (error) { destination.emit('error', error); }); -}; + return; + } + + this._hdtDocument.searchTriples(query.subject, query.predicate, query.object, + { limit: query.limit, offset: query.offset }) + .then(function (result) { + var triples = result.triples, + estimatedTotalCount = result.totalCount, + hasExactCount = result.hasExactCount; + // Ensure the estimated total count is as least as large as the number of triples + var tripleCount = triples.length, offset = query.offset || 0; + if (tripleCount && estimatedTotalCount < offset + tripleCount) + estimatedTotalCount = offset + (tripleCount < query.limit ? tripleCount : 2 * tripleCount); + destination.setProperty('metadata', { totalCount: estimatedTotalCount, hasExactCount: hasExactCount }); + // Add the triples to the output + for (var i = 0; i < tripleCount; i++) + destination._push(triples[i]); + destination.close(); + }, + function (error) { destination.emit('error', error); }); + } -// Closes the data source -HdtDatasource.prototype.close = function (done) { - // Close the HDT document if it is open - if (this._hdtDocument) { - this._hdtDocument.close().then(done, done); - delete this._hdtDocument; + // Closes the data source + close(done) { + // Close the HDT document if it is open + if (this._hdtDocument) { + this._hdtDocument.close().then(done, done); + delete this._hdtDocument; + } + // If initialization was still pending, close immediately after initializing + else if (!this.initialized) + this.on('initialized', this.close.bind(this, done)); } - // If initialization was still pending, close immediately after initializing - else if (!this.initialized) - this.on('initialized', this.close.bind(this, done)); -}; +} + module.exports = HdtDatasource; diff --git a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js index e35bd13e..4cb7ebbb 100644 --- a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js +++ b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js @@ -20,13 +20,6 @@ describe('HdtDatasource', function () { instance.close(done); }); - it('should create HdtDatasource objects', function (done) { - var instance = HdtDatasource({ file: exampleHdtFile }); - instance.initialize(); - instance.should.be.an.instanceof(HdtDatasource); - instance.close(done); - }); - it('should create Datasource objects', function (done) { var instance = new HdtDatasource({ file: exampleHdtFile }); instance.initialize(); diff --git a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js index 7a107acd..582310bb 100644 --- a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js +++ b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js @@ -7,28 +7,28 @@ var MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, var ACCEPT = 'application/ld+json;q=1.0,application/json;q=0.7'; // Creates a new JsonLdDatasource -function JsonLdDatasource(options) { - if (!(this instanceof JsonLdDatasource)) - return new JsonLdDatasource(options); - MemoryDatasource.call(this, options); - this._url = options && (options.url || options.file); +class JsonLdDatasource extends MemoryDatasource { + constructor(options) { + super(options); + this._url = options && (options.url || options.file); + } + + // Retrieves all quads from the document + _getAllQuads(addQuad, done) { + // Read the JSON-LD document + var json = '', + document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }); + document.on('data', function (data) { json += data; }); + document.on('end', function () { + // Parse the JSON document + try { json = JSON.parse(json); } + catch (error) { return done(error); } + // Convert the JSON-LD to quads + extractQuads(json, addQuad, done); + }); + } } -MemoryDatasource.extend(JsonLdDatasource); -// Retrieves all quads from the document -JsonLdDatasource.prototype._getAllQuads = function (addQuad, done) { - // Read the JSON-LD document - var json = '', - document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }); - document.on('data', function (data) { json += data; }); - document.on('end', function () { - // Parse the JSON document - try { json = JSON.parse(json); } - catch (error) { return done(error); } - // Convert the JSON-LD to quads - extractQuads(json, addQuad, done); - }); -}; // Extracts quads from a JSON-LD document function extractQuads(json, addQuad, done) { diff --git a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js index 187603ee..4667c884 100644 --- a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js +++ b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js @@ -18,12 +18,6 @@ describe('JsonLdDatasource', function () { instance.close(done); }); - it('should create JsonLdDatasource objects', function (done) { - var instance = JsonLdDatasource({ url: exampleJsonLdUrl }); - instance.should.be.an.instanceof(JsonLdDatasource); - instance.close(done); - }); - it('should create Datasource objects', function (done) { var instance = new JsonLdDatasource({ url: exampleJsonLdUrl }); instance.should.be.an.instanceof(Datasource); diff --git a/packages/datasource-n3/lib/datasources/N3Datasource.js b/packages/datasource-n3/lib/datasources/N3Datasource.js index 608a62e4..fdc2e2a3 100644 --- a/packages/datasource-n3/lib/datasources/N3Datasource.js +++ b/packages/datasource-n3/lib/datasources/N3Datasource.js @@ -7,21 +7,20 @@ var MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, var ACCEPT = 'application/trig;q=1.0,application/n-quads;q=0.9,text/turtle;q=0.8,application/n-triples;q=0.7,text/n3;q=0.4'; // Creates a new N3Datasource -function N3Datasource(options) { - if (!(this instanceof N3Datasource)) - return new N3Datasource(options); - MemoryDatasource.call(this, options); - this._url = options && (options.url || options.file); -} -MemoryDatasource.extend(N3Datasource); +class N3Datasource extends MemoryDatasource { + constructor(options) { + super(options); + this._url = options && (options.url || options.file); + } -// Retrieves all quads from the document -N3Datasource.prototype._getAllQuads = function (addQuad, done) { - var document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }, done); - N3Parser._resetBlankNodeIds(); - new N3Parser().parse(document, function (error, quad) { - quad ? addQuad(quad) : done(error); - }); -}; + // Retrieves all quads from the document + _getAllQuads(addQuad, done) { + var document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }, done); + N3Parser._resetBlankNodeIds(); + new N3Parser().parse(document, function (error, quad) { + quad ? addQuad(quad) : done(error); + }); + } +} module.exports = N3Datasource; diff --git a/packages/datasource-n3/test/datasources/N3Datasource-test.js b/packages/datasource-n3/test/datasources/N3Datasource-test.js index a4b6b77c..808ab3af 100644 --- a/packages/datasource-n3/test/datasources/N3Datasource-test.js +++ b/packages/datasource-n3/test/datasources/N3Datasource-test.js @@ -18,12 +18,6 @@ describe('N3Datasource', function () { instance.close(done); }); - it('should create N3Datasource objects', function (done) { - var instance = N3Datasource({ url: exampleTurtleUrl }); - instance.should.be.an.instanceof(N3Datasource); - instance.close(done); - }); - it('should create Datasource objects', function (done) { var instance = new N3Datasource({ url: exampleTurtleUrl }); instance.should.be.an.instanceof(Datasource); diff --git a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js index 6fd7809f..84276863 100644 --- a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -10,177 +10,178 @@ var ENDPOINT_ERROR = 'Error accessing SPARQL endpoint'; var INVALID_JSON_RESPONSE = 'The endpoint returned an invalid SPARQL results JSON response.'; // Creates a new SparqlDatasource -function SparqlDatasource(options) { - if (!(this instanceof SparqlDatasource)) - return new SparqlDatasource(options); - Datasource.call(this, options); - this._countCache = new LRU({ max: 1000, maxAge: 1000 * 60 * 60 * 3 }); - this._resolvingCountQueries = {}; - - // Set endpoint URL and default graph - options = options || {}; - this._endpoint = this._endpointUrl = (options.endpoint || '').replace(/[\?#][^]*$/, ''); - this._endpointUrl += '?query='; -} -Datasource.extend(SparqlDatasource, ['triplePattern', 'quadPattern', 'limit', 'offset', 'totalCount']); - -// Writes the results of the query to the given triple stream -SparqlDatasource.prototype._executeQuery = function (query, destination) { - // Create the HTTP request - var sparqlPattern = this._createQuadPattern(query), self = this, - selectQuery = this._createSelectQuery(sparqlPattern, query.offset, query.limit), - request = { url: this._endpointUrl + encodeURIComponent(selectQuery), - headers: { accept: 'application/sparql-results+json' }, - }; - - // Fetch and parse matching triples using JSON responses - var json = ''; - this._request(request, emitError) - .on('data', function (data) { json += data; }) - .on('error', emitError) - .on('end', function () { - var response; - try { response = JSON.parse(json); } - catch (e) { return emitError({ message: INVALID_JSON_RESPONSE }); } - - response.results.bindings.forEach(function (binding) { - var triple = { - subject: binding.s ? self._parseJsonEntity(binding.s) : query.subject, - predicate: binding.p ? self._parseJsonEntity(binding.p) : query.predicate, - object: binding.o ? self._parseJsonEntity(binding.o) : query.object, - graph: binding.g ? self._parseJsonEntity(binding.g) : query.graph, +class SparqlDatasource extends Datasource { + constructor(options) { + let supportedFeatureList = ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']; + super(options, supportedFeatureList); + + this._countCache = new LRU({ max: 1000, maxAge: 1000 * 60 * 60 * 3 }); + this._resolvingCountQueries = {}; + + // Set endpoint URL and default graph + options = options || {}; + this._endpoint = this._endpointUrl = (options.endpoint || '').replace(/[\?#][^]*$/, ''); + this._endpointUrl += '?query='; + } + + // Writes the results of the query to the given triple stream + _executeQuery(query, destination) { + // Create the HTTP request + var sparqlPattern = this._createQuadPattern(query), self = this, + selectQuery = this._createSelectQuery(sparqlPattern, query.offset, query.limit), + request = { url: this._endpointUrl + encodeURIComponent(selectQuery), + headers: { accept: 'application/sparql-results+json' }, }; - destination._push(triple); + + // Fetch and parse matching triples using JSON responses + var json = ''; + this._request(request, emitError) + .on('data', function (data) { json += data; }) + .on('error', emitError) + .on('end', function () { + var response; + try { response = JSON.parse(json); } + catch (e) { return emitError({ message: INVALID_JSON_RESPONSE }); } + + response.results.bindings.forEach(function (binding) { + var triple = { + subject: binding.s ? self._parseJsonEntity(binding.s) : query.subject, + predicate: binding.p ? self._parseJsonEntity(binding.p) : query.predicate, + object: binding.o ? self._parseJsonEntity(binding.o) : query.object, + graph: binding.g ? self._parseJsonEntity(binding.g) : query.graph, + }; + destination._push(triple); + }); + destination.close(); }); - destination.close(); - }); - // Determine the total number of matching triples - this._getPatternCount(sparqlPattern).then(function (count) { - destination.setProperty('metadata', count); - }, - emitError); - - // Emits an error on the triple stream - var errored = false; - function emitError(error) { - if (!error || errored) return; - errored = true; - destination.emit('error', new Error(ENDPOINT_ERROR + ' ' + self._endpoint + ': ' + error.message)); + // Determine the total number of matching triples + this._getPatternCount(sparqlPattern).then(function (count) { + destination.setProperty('metadata', count); + }, + emitError); + + // Emits an error on the triple stream + var errored = false; + function emitError(error) { + if (!error || errored) return; + errored = true; + destination.emit('error', new Error(ENDPOINT_ERROR + ' ' + self._endpoint + ': ' + error.message)); + } } -}; - -// Retrieves the (approximate) number of triples that match the SPARQL pattern -SparqlDatasource.prototype._getPatternCount = function (sparqlPattern) { - // Try to find a cache match - var cache = this._countCache, count = cache.get(sparqlPattern); - if (count) - return Promise.resolve({ totalCount: count, hasExactCount: true }); - - // Immediately return the fallback URL if a count is already going on. - if (this._resolvingCountQueries[sparqlPattern]) - return Promise.resolve(DEFAULT_COUNT_ESTIMATE); - - // Execute the count query - var countResponse = this._request({ - url: this._endpointUrl + encodeURIComponent(this._createCountQuery(sparqlPattern)), - headers: { accept: 'text/csv' }, - timeout: 10000, - }); - - // Parse SPARQL response in CSV format (2 lines: variable name / count value) - var self = this; - return new Promise(function (resolve, reject) { - var csv = ''; - self._resolvingCountQueries[sparqlPattern] = true; - countResponse.on('data', function (data) { csv += data; }); - countResponse.on('end', function () { - delete self._resolvingCountQueries[sparqlPattern]; - var countMatch = csv.match(/\d+/); - if (!countMatch) - reject(new Error('COUNT query failed.')); - else { - var count = parseInt(countMatch[0], 10); - // Cache large values; small ones are calculated fast anyway - if (count > 100000) - cache.set(sparqlPattern, count); - resolve({ totalCount: count, hasExactCount: true }); - } + + // Retrieves the (approximate) number of triples that match the SPARQL pattern + _getPatternCount(sparqlPattern) { + // Try to find a cache match + var cache = this._countCache, count = cache.get(sparqlPattern); + if (count) + return Promise.resolve({ totalCount: count, hasExactCount: true }); + + // Immediately return the fallback URL if a count is already going on. + if (this._resolvingCountQueries[sparqlPattern]) + return Promise.resolve(DEFAULT_COUNT_ESTIMATE); + + // Execute the count query + var countResponse = this._request({ + url: this._endpointUrl + encodeURIComponent(this._createCountQuery(sparqlPattern)), + headers: { accept: 'text/csv' }, + timeout: 10000, + }); + + // Parse SPARQL response in CSV format (2 lines: variable name / count value) + var self = this; + return new Promise(function (resolve, reject) { + var csv = ''; + self._resolvingCountQueries[sparqlPattern] = true; + countResponse.on('data', function (data) { csv += data; }); + countResponse.on('end', function () { + delete self._resolvingCountQueries[sparqlPattern]; + var countMatch = csv.match(/\d+/); + if (!countMatch) + reject(new Error('COUNT query failed.')); + else { + var count = parseInt(countMatch[0], 10); + // Cache large values; small ones are calculated fast anyway + if (count > 100000) + cache.set(sparqlPattern, count); + resolve({ totalCount: count, hasExactCount: true }); + } + }); + // If the response errors, use an arbitrarily high number as count + countResponse.on('error', resolveToDefault); + function resolveToDefault() { resolve(DEFAULT_COUNT_ESTIMATE); } + // When no result arrives in time, send a default count + // (the correct result might still end up in the cache for future use) + setTimeout(resolveToDefault, 3000); }); - // If the response errors, use an arbitrarily high number as count - countResponse.on('error', resolveToDefault); - function resolveToDefault() { resolve(DEFAULT_COUNT_ESTIMATE); } - // When no result arrives in time, send a default count - // (the correct result might still end up in the cache for future use) - setTimeout(resolveToDefault, 3000); - }); -}; - -// Creates a SELECT query from the given SPARQL pattern -SparqlDatasource.prototype._createSelectQuery = function (sparqlPattern, offset, limit) { - var query = ['SELECT * WHERE', sparqlPattern]; - // Even though the SPARQL spec indicates that - // LIMIT and OFFSET might be meaningless without ORDER BY, - // this doesn't seem a problem in practice. - // Furthermore, sorting can be slow. Therefore, don't sort. - limit && query.push('LIMIT', limit); - offset && query.push('OFFSET', offset); - return query.join(' '); -}; - -// Creates a SELECT COUNT(*) query from the given SPARQL pattern -SparqlDatasource.prototype._createCountQuery = function (sparqlPattern) { - return 'SELECT (COUNT(*) AS ?c) WHERE ' + sparqlPattern; -}; - -// Creates a SPARQL pattern for the given triple pattern -SparqlDatasource.prototype._createQuadPattern = function (quad) { - var query = ['{'], literalMatch; - - // Encapsulate in graph if we are not querying the default graph - if (quad.graph !== '') { - query.push('GRAPH '); - quad.graph ? query.push('<', quad.graph, '>') : query.push('?g'); - query.push('{'); } - // Add a possible subject IRI - quad.subject ? query.push('<', quad.subject, '> ') : query.push('?s '); - - // Add a possible predicate IRI - quad.predicate ? query.push('<', quad.predicate, '> ') : query.push('?p '); - - // Add a possible object IRI or literal - if (N3.Util.isIRI(quad.object)) - query.push('<', quad.object, '>'); - else if (!(literalMatch = /^"([^]*)"(?:(@[^"]+)|\^\^([^"]+))?$/.exec(quad.object))) - query.push('?o'); - else { - if (!/["\\]/.test(literalMatch[1])) - query.push('"', literalMatch[1], '"'); - else - query.push('"""', literalMatch[1].replace(/(["\\])/g, '\\$1'), '"""'); - literalMatch[2] ? query.push(literalMatch[2]) - : literalMatch[3] && query.push('^^<', literalMatch[3], '>'); + // Creates a SELECT query from the given SPARQL pattern + _createSelectQuery(sparqlPattern, offset, limit) { + var query = ['SELECT * WHERE', sparqlPattern]; + // Even though the SPARQL spec indicates that + // LIMIT and OFFSET might be meaningless without ORDER BY, + // this doesn't seem a problem in practice. + // Furthermore, sorting can be slow. Therefore, don't sort. + limit && query.push('LIMIT', limit); + offset && query.push('OFFSET', offset); + return query.join(' '); + } + + // Creates a SELECT COUNT(*) query from the given SPARQL pattern + _createCountQuery(sparqlPattern) { + return 'SELECT (COUNT(*) AS ?c) WHERE ' + sparqlPattern; } - if (quad.graph !== '') - query.push('}'); - - return query.push('}'), query.join(''); -}; - -// Parses an entity from a JSON SPARQL response -SparqlDatasource.prototype._parseJsonEntity = function (entity) { - if (entity.type === 'literal') { - var suffixes = ''; - if (entity.datatype) - suffixes += '^^<' + entity.datatype + '>'; - if (entity['xml:lang']) - suffixes += '@' + entity['xml:lang']; - return '"' + entity.value + '"' + suffixes; + // Creates a SPARQL pattern for the given triple pattern + _createQuadPattern(quad) { + var query = ['{'], literalMatch; + + // Encapsulate in graph if we are not querying the default graph + if (quad.graph !== '') { + query.push('GRAPH '); + quad.graph ? query.push('<', quad.graph, '>') : query.push('?g'); + query.push('{'); + } + + // Add a possible subject IRI + quad.subject ? query.push('<', quad.subject, '> ') : query.push('?s '); + + // Add a possible predicate IRI + quad.predicate ? query.push('<', quad.predicate, '> ') : query.push('?p '); + + // Add a possible object IRI or literal + if (N3.Util.isIRI(quad.object)) + query.push('<', quad.object, '>'); + else if (!(literalMatch = /^"([^]*)"(?:(@[^"]+)|\^\^([^"]+))?$/.exec(quad.object))) + query.push('?o'); + else { + if (!/["\\]/.test(literalMatch[1])) + query.push('"', literalMatch[1], '"'); + else + query.push('"""', literalMatch[1].replace(/(["\\])/g, '\\$1'), '"""'); + literalMatch[2] ? query.push(literalMatch[2]) + : literalMatch[3] && query.push('^^<', literalMatch[3], '>'); + } + + if (quad.graph !== '') + query.push('}'); + + return query.push('}'), query.join(''); } - return entity.value; -}; + + // Parses an entity from a JSON SPARQL response + _parseJsonEntity(entity) { + if (entity.type === 'literal') { + var suffixes = ''; + if (entity.datatype) + suffixes += '^^<' + entity.datatype + '>'; + if (entity['xml:lang']) + suffixes += '@' + entity['xml:lang']; + return '"' + entity.value + '"' + suffixes; + } + return entity.value; + } +} module.exports = SparqlDatasource; diff --git a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js index 032bd972..497962af 100644 --- a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js +++ b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js @@ -19,13 +19,8 @@ describe('SparqlDatasource', function () { new SparqlDatasource().should.be.an.instanceof(SparqlDatasource); }); - it('should create SparqlDatasource objects', function () { - SparqlDatasource().should.be.an.instanceof(SparqlDatasource); - }); - it('should create Datasource objects', function () { new SparqlDatasource().should.be.an.instanceof(Datasource); - SparqlDatasource().should.be.an.instanceof(Datasource); }); }); diff --git a/packages/feature-memento/lib/controllers/MementoControllerExtension.js b/packages/feature-memento/lib/controllers/MementoControllerExtension.js index 6db3e88c..7a3a69d8 100644 --- a/packages/feature-memento/lib/controllers/MementoControllerExtension.js +++ b/packages/feature-memento/lib/controllers/MementoControllerExtension.js @@ -7,46 +7,44 @@ var Controller = require('@ldf/core').controllers.Controller, _ = require('lodash'); // Creates a new MementoControllerExtension -function MementoControllerExtension(settings) { - if (!(this instanceof MementoControllerExtension)) - return new MementoControllerExtension(settings); - - var timegates = settings.timegates || {}; - this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, - settings.datasources, settings.urlData); - this._timegateBaseUrl = timegates.baseURL || '/timegate/'; -} -Controller.extend(MementoControllerExtension); +class MementoControllerExtension extends Controller { + constructor(settings) { + var timegates = settings.timegates || {}; + this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, + settings.datasources, settings.urlData); + this._timegateBaseUrl = timegates.baseURL || '/timegate/'; + } -// Add Memento Link headers -MementoControllerExtension.prototype._handleRequest = function (request, response, next, settings) { - var datasource = settings.query.datasource, - memento = this._invertedTimegateMap[settings.datasource.id], - requestQuery = request.url.match(/\?.*|$/)[0]; + // Add Memento Link headers + _handleRequest(request, response, next, settings) { + var datasource = settings.query.datasource, + memento = this._invertedTimegateMap[settings.datasource.id], + requestQuery = request.url.match(/\?.*|$/)[0]; - // Add link to original if it is a memento - if (memento && memento.interval && memento.interval.length === 2) { - var timegatePath = this._timegateBaseUrl + memento.memento, - timegateUrl = url.format(_.defaults({ pathname: timegatePath }, request.parsedUrl)), - originalUrl = memento.original + requestQuery, - datetime = new Date(memento.interval[0]).toUTCString(); + // Add link to original if it is a memento + if (memento && memento.interval && memento.interval.length === 2) { + var timegatePath = this._timegateBaseUrl + memento.memento, + timegateUrl = url.format(_.defaults({ pathname: timegatePath }, request.parsedUrl)), + originalUrl = memento.original + requestQuery, + datetime = new Date(memento.interval[0]).toUTCString(); - response.setHeader('Link', '<' + originalUrl + '>;rel=original, <' + timegateUrl + '>;rel=timegate'); - response.setHeader('Memento-Datetime', datetime); + response.setHeader('Link', '<' + originalUrl + '>;rel=original, <' + timegateUrl + '>;rel=timegate'); + response.setHeader('Memento-Datetime', datetime); + } + // Add timegate link if resource is not a memento + else { + var timegateSettings = settings.datasource.timegate, timegate; + // If a timegate URL is given, use it + if (typeof timegateSettings === 'string') + timegate = timegateSettings + requestQuery; + // If the timegate configuration is true, use local timegate + else if (timegateSettings === true) + timegate = url.format(_.defaults({ pathname: this._timegateBaseUrl + datasource }, request.parsedUrl)); + if (timegate) + response.setHeader('Link', '<' + timegate + '>;rel=timegate'); + } + next(); } - // Add timegate link if resource is not a memento - else { - var timegateSettings = settings.datasource.timegate, timegate; - // If a timegate URL is given, use it - if (typeof timegateSettings === 'string') - timegate = timegateSettings + requestQuery; - // If the timegate configuration is true, use local timegate - else if (timegateSettings === true) - timegate = url.format(_.defaults({ pathname: this._timegateBaseUrl + datasource }, request.parsedUrl)); - if (timegate) - response.setHeader('Link', '<' + timegate + '>;rel=timegate'); - } - next(); -}; +} module.exports = MementoControllerExtension; diff --git a/packages/feature-memento/lib/controllers/TimegateController.js b/packages/feature-memento/lib/controllers/TimegateController.js index 1ee65997..f685a288 100644 --- a/packages/feature-memento/lib/controllers/TimegateController.js +++ b/packages/feature-memento/lib/controllers/TimegateController.js @@ -7,152 +7,152 @@ var Controller = require('@ldf/core').controllers.Controller, Util = require('../Util'); // Creates a new TimegateController -function TimegateController(options) { - if (!(this instanceof TimegateController)) - return new TimegateController(options); - options = options || {}; - Controller.call(this, options); - this._first = true; - - // Settings for timegate - var timegates = options.timegates || {}; - this._timemaps = TimegateController.parseTimegateMap(timegates.mementos, options.datasources); - this._routers = options.routers || []; - - // Set up path matching - this._timegatePath = timegates.baseUrl || '/timegate/', +class TimegateController extends Controller { + constructor(options) { + options = options || {}; + super(options); + this._first = true; + + // Settings for timegate + var timegates = options.timegates || {}; + this._timemaps = TimegateController.parseTimegateMap(timegates.mementos, options.datasources); + this._routers = options.routers || []; + + // Set up path matching + this._timegatePath = timegates.baseUrl || '/timegate/', this._matcher = new RegExp('^' + Util.toRegExp(this._timegatePath) + '(.+?)\/?(?:\\?.*)?$'); -} -Controller.extend(TimegateController); - -TimegateController.parseTimegateMap = function (mementos, datasources) { - return _.mapValues(mementos, function (mementos) { - return sortTimemap(mementos.map(function (memento) { - var datasource; - for (var datasourcePath in datasources) { - if (datasources[datasourcePath].id === memento.datasource) - datasource = datasourcePath; - } - if (!datasource) - throw new Error('Could not find a datasource with id ' + memento.datasource); - return { - datasource: datasource, - datasourceId: datasources[datasource].id, - interval: [memento.initial || 0, memento.final || 0].map(toDate), - original: memento.originalBaseURL, - }; - })); - }); -}; - -TimegateController.parseInvertedTimegateMap = function (mementos, datasources, urlData) { - var timemaps = TimegateController.parseTimegateMap(mementos, datasources); - var invertedTimegateMap = {}; - _.forIn(timemaps, function (versions, timeGateId) { - versions.forEach(function (version) { - invertedTimegateMap[version.datasourceId] = { - memento: timeGateId, - original: version.original || (urlData.baseURL || '/') + timeGateId, - interval: version.interval, - }; + } + + parseTimegateMap(mementos, datasources) { + return _.mapValues(mementos, function (mementos) { + return sortTimemap(mementos.map(function (memento) { + var datasource; + for (var datasourcePath in datasources) { + if (datasources[datasourcePath].id === memento.datasource) + datasource = datasourcePath; + } + if (!datasource) + throw new Error('Could not find a datasource with id ' + memento.datasource); + return { + datasource: datasource, + datasourceId: datasources[datasource].id, + interval: [memento.initial || 0, memento.final || 0].map(toDate), + original: memento.originalBaseURL, + }; + })); }); - }); - return invertedTimegateMap; -}; - -// Perform time negotiation if applicable -TimegateController.prototype._handleRequest = function (request, response, next) { - var timegateMatch = this._matcher.exec(request.url), - datasource = timegateMatch && timegateMatch[1], - timemapDetails = datasource && this._timemaps[datasource]; - - // Is this resource a well-configured timegate? - if (timemapDetails) { - // For OPTIONS (preflight) requests, send only headers (avoiding expensive lookups) - if (request.method === 'OPTIONS') - return response.end(); - - // Try to find the memento closest to the requested date - var acceptDatetime = toDate(request.headers['accept-datetime']), - memento = this._getClosestMemento(timemapDetails, acceptDatetime); - - if (memento) { - // Determine the URL of the memento - var mementoUrl = _.assign(request.parsedUrl, { pathname: memento.datasource }); - mementoUrl = url.format(mementoUrl); - - // Determine the URL of the original resource - var originalBaseURL = timemapDetails.original, originalUrl; - if (!originalBaseURL) - originalUrl = _.defaults({ pathname: datasource }, request.parsedUrl); - else - originalUrl = _.assign(url.parse(originalBaseURL), { query: request.parsedUrl.query }); - originalUrl = url.format(originalUrl); - - // Perform 200-style negotiation (https://tools.ietf.org/html/rfc7089#section-4.1.2) - response.setHeader('Link', '<' + originalUrl + '>;rel="original",' + - '<' + mementoUrl + '>;rel="memento";' + - 'datetime="' + memento.interval[0].toUTCString() + '"'); - response.setHeader('Vary', 'Accept-Datetime'); - response.setHeader('Content-Location', mementoUrl); - // Set request URL to the memento URL, which should be handled by a next controller - request.url = mementoUrl.replace(/^[^:]+:\/\/[^\/]+/, ''); - delete request.parsedUrl; + } + + parseInvertedTimegateMap(mementos, datasources, urlData) { + var timemaps = TimegateController.parseTimegateMap(mementos, datasources); + var invertedTimegateMap = {}; + _.forIn(timemaps, function (versions, timeGateId) { + versions.forEach(function (version) { + invertedTimegateMap[version.datasourceId] = { + memento: timeGateId, + original: version.original || (urlData.baseURL || '/') + timeGateId, + interval: version.interval, + }; + }); + }); + return invertedTimegateMap; + } + + // Perform time negotiation if applicable + _handleRequest(request, response, next) { + var timegateMatch = this._matcher.exec(request.url), + datasource = timegateMatch && timegateMatch[1], + timemapDetails = datasource && this._timemaps[datasource]; + + // Is this resource a well-configured timegate? + if (timemapDetails) { + // For OPTIONS (preflight) requests, send only headers (avoiding expensive lookups) + if (request.method === 'OPTIONS') + return response.end(); + + // Try to find the memento closest to the requested date + var acceptDatetime = toDate(request.headers['accept-datetime']), + memento = this._getClosestMemento(timemapDetails, acceptDatetime); + + if (memento) { + // Determine the URL of the memento + var mementoUrl = _.assign(request.parsedUrl, { pathname: memento.datasource }); + mementoUrl = url.format(mementoUrl); + + // Determine the URL of the original resource + var originalBaseURL = timemapDetails.original, originalUrl; + if (!originalBaseURL) + originalUrl = _.defaults({ pathname: datasource }, request.parsedUrl); + else + originalUrl = _.assign(url.parse(originalBaseURL), { query: request.parsedUrl.query }); + originalUrl = url.format(originalUrl); + + // Perform 200-style negotiation (https://tools.ietf.org/html/rfc7089#section-4.1.2) + response.setHeader('Link', '<' + originalUrl + '>;rel="original",' + + '<' + mementoUrl + '>;rel="memento";' + + 'datetime="' + memento.interval[0].toUTCString() + '"'); + response.setHeader('Vary', 'Accept-Datetime'); + response.setHeader('Content-Location', mementoUrl); + // Set request URL to the memento URL, which should be handled by a next controller + request.url = mementoUrl.replace(/^[^:]+:\/\/[^\/]+/, ''); + delete request.parsedUrl; + } } + next(); } - next(); -}; - -/* - * @param timemap: [{"datasource": "data source name", "interval": [start, end]}, ...] - the start, end values can either be Date objects, or ISO 8601 string. - * @param accept_datetime: the requested datetime value as Date object, or ISO 8601 string. - * @param sorted: bool. If not sorted, the timemap will be sorted using the start time in the interval. - - * eg: - var timemap = [ - {"datasource": "dbpedia_2012", "interval": ["2011-10-20T12:22:24Z", new Date("2012-10-19T12:22:24Z")]}, - {"datasource": "dbpedia_2015", "interval": ["2014-10-20T12:22:24Z", ""]}, - {"datasource": "dbpedia_2013", "interval": [new Date("2012-10-20T12:22:24Z"), new Date("2013-10-19T12:22:24Z")]}, - {"datasource": "dbpedia_2014", "interval": ["2013-10-20T12:22:24Z", "2014-10-19T12:22:24Z"]} - ]; - get_closest_memento(timemap, "2011-10-20T12:22:24Z", false); -*/ -TimegateController.prototype._getClosestMemento = function (timemap, acceptDatetime, unsorted) { - // NOTE: assuming that the interval is always specified as [start_date, end_date] - // empty timemap can't give any mementos - if (timemap.length === 0) - return null; - // convert accept datetime to timestamp - acceptDatetime = toDate(acceptDatetime).getTime(); - - // If accept datetime is invalid, exit - if (isNaN(acceptDatetime)) return null; - // Sort timemap first if it is not sorted - if (unsorted) sortTimemap(timemap); - - // if the accept_datetime is less than the first memento, return first memento - var firstMemento = timemap[0], - firstMementoDatetime = toDate(firstMemento.interval[0]).getTime(); - if (acceptDatetime <= firstMementoDatetime) return firstMemento; - - // return the latest memento if the accept datetime is after it - var lastMemento = timemap[timemap.length - 1], - lastMementoDatetime = toDate(lastMemento.interval[1]).getTime(); - if (acceptDatetime >= lastMementoDatetime) return lastMemento; - - // check if the accept datetime falls within any intervals defined in the data sources. - for (var i = 0, memento; memento = timemap[i]; i++) { - var startTime = memento.interval[0].getTime(), - endTime = memento.interval[1].getTime(); - if (isFinite(startTime) && isFinite(endTime)) { - if (startTime > acceptDatetime) return timemap[i - 1]; - if (startTime <= acceptDatetime && endTime >= acceptDatetime) return memento; + /* + * @param timemap: [{"datasource": "data source name", "interval": [start, end]}, ...] + the start, end values can either be Date objects, or ISO 8601 string. + * @param accept_datetime: the requested datetime value as Date object, or ISO 8601 string. + * @param sorted: bool. If not sorted, the timemap will be sorted using the start time in the interval. + + * eg: + var timemap = [ + {"datasource": "dbpedia_2012", "interval": ["2011-10-20T12:22:24Z", new Date("2012-10-19T12:22:24Z")]}, + {"datasource": "dbpedia_2015", "interval": ["2014-10-20T12:22:24Z", ""]}, + {"datasource": "dbpedia_2013", "interval": [new Date("2012-10-20T12:22:24Z"), new Date("2013-10-19T12:22:24Z")]}, + {"datasource": "dbpedia_2014", "interval": ["2013-10-20T12:22:24Z", "2014-10-19T12:22:24Z"]} + ]; + get_closest_memento(timemap, "2011-10-20T12:22:24Z", false); + */ + _getClosestMemento(timemap, acceptDatetime, unsorted) { + // NOTE: assuming that the interval is always specified as [start_date, end_date] + // empty timemap can't give any mementos + if (timemap.length === 0) + return null; + + // convert accept datetime to timestamp + acceptDatetime = toDate(acceptDatetime).getTime(); + + // If accept datetime is invalid, exit + if (isNaN(acceptDatetime)) return null; + // Sort timemap first if it is not sorted + if (unsorted) sortTimemap(timemap); + + // if the accept_datetime is less than the first memento, return first memento + var firstMemento = timemap[0], + firstMementoDatetime = toDate(firstMemento.interval[0]).getTime(); + if (acceptDatetime <= firstMementoDatetime) return firstMemento; + + // return the latest memento if the accept datetime is after it + var lastMemento = timemap[timemap.length - 1], + lastMementoDatetime = toDate(lastMemento.interval[1]).getTime(); + if (acceptDatetime >= lastMementoDatetime) return lastMemento; + + // check if the accept datetime falls within any intervals defined in the data sources. + for (var i = 0, memento; memento = timemap[i]; i++) { + var startTime = memento.interval[0].getTime(), + endTime = memento.interval[1].getTime(); + if (isFinite(startTime) && isFinite(endTime)) { + if (startTime > acceptDatetime) return timemap[i - 1]; + if (startTime <= acceptDatetime && endTime >= acceptDatetime) return memento; + } } + return null; } - return null; -}; +} + // Sort the timemap by interval start date function sortTimemap(timemap) { @@ -166,4 +166,5 @@ function toDate(value) { return typeof value === 'string' ? new Date(value) : (value || new Date()); } + module.exports = TimegateController; diff --git a/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js b/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js index f9d81791..ea0fe1f8 100644 --- a/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js +++ b/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js @@ -6,26 +6,24 @@ var HtmlView = require('@ldf/core').views.HtmlView, path = require('path'); // Creates a new MementoHtmlViewExtension -function MementoHtmlViewExtension(settings) { - if (!(this instanceof MementoHtmlViewExtension)) - return new MementoHtmlViewExtension(settings); - HtmlView.call(this, 'QuadPatternFragments:Before', settings); +class MementoHtmlViewExtension extends HtmlView { + constructor(settings) { + super('QuadPatternFragments:Before', settings); + var timegates = settings.timegates || {}; + this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, + settings.datasources, settings.urlData); + } - var timegates = settings.timegates || {}; - this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, - settings.datasources, settings.urlData); + // Renders the view with the given settings to the response + _render(settings, request, response, done) { + var memento = this._invertedTimegateMap[settings.datasource.id]; + if (!memento) + return done(); + this._renderTemplate(path.join(__dirname, 'memento-details'), { + start: memento.interval[0], + end: memento.interval[1], + }, request, response, done); + } } -HtmlView.extend(MementoHtmlViewExtension); - -// Renders the view with the given settings to the response -MementoHtmlViewExtension.prototype._render = function (settings, request, response, done) { - var memento = this._invertedTimegateMap[settings.datasource.id]; - if (!memento) - return done(); - this._renderTemplate(path.join(__dirname, 'memento-details'), { - start: memento.interval[0], - end: memento.interval[1], - }, request, response, done); -}; module.exports = MementoHtmlViewExtension; diff --git a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js index 916430fa..ab4b3751 100644 --- a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js +++ b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js @@ -7,137 +7,135 @@ var Controller = require('@ldf/core').controllers.Controller, N3Util = require('n3').Util; // Creates a new QuadPatternFragmentsController -function QuadPatternFragmentsController(options) { - if (!(this instanceof QuadPatternFragmentsController)) - return new QuadPatternFragmentsController(options); - options = options || {}; - Controller.call(this, options); - this._routers = options.routers || []; - this._extensions = options.extensions || []; -} -Controller.extend(QuadPatternFragmentsController); - -// The base name of the view to be used for this controller -QuadPatternFragmentsController.prototype.viewName = 'QuadPatternFragments'; - -// The required features the given datasource must have -QuadPatternFragmentsController.prototype.supportsDatasource = function (datasource) { - return datasource.supportedFeatures.triplePattern || - datasource.supportedFeatures.quadPattern; -}; - -// Try to serve the requested fragment -QuadPatternFragmentsController.prototype._handleRequest = function (request, response, next) { - // Create the query from the request by calling the fragment routers - var requestParams = { url: request.parsedUrl, headers: request.headers }, - query = this._routers.reduce(function (query, router) { - try { router.extractQueryParams(requestParams, query); } - catch (e) { /* ignore routing errors */ } - return query; - }, { features: [] }); - - // Execute the query on the data source - var datasource = query.features.datasource && this._datasources[query.datasource]; - delete query.features.datasource; - if (!datasource || !datasource.supportsQuery(query) || - !this.supportsDatasource(datasource)) - return next(); - - // Generate the query result - var view = this._negotiateView(this.viewName, request, response), - settings = this._createFragmentMetadata(request, query, datasource); - settings.results = datasource.select(query, - function (error) { error && next(error); }); - - // Execute the extensions and render the query result - var extensions = this._extensions, extensionId = 0; - (function nextExtension(error) { - // Log a possible error with the previous extension - if (error) - process.stderr.write(error.stack + '\n'); - // Execute the next extension - if (extensionId < extensions.length) - extensions[extensionId++].handleRequest(request, response, nextExtension, settings); - // Render the query result +class QuadPatternFragmentsController extends Controller { + + constructor(options) { + options = options || {}; + super(options); + this._routers = options.routers || []; + this._extensions = options.extensions || []; + + this.viewName = 'QuadPatternFragments'; + } + + // The required features the given datasource must have + supportsDatasource(datasource) { + return datasource.supportedFeatures.triplePattern || + datasource.supportedFeatures.quadPattern; + } + + // Try to serve the requested fragment + _handleRequest(request, response, next) { + // Create the query from the request by calling the fragment routers + var requestParams = { url: request.parsedUrl, headers: request.headers }, + query = this._routers.reduce(function (query, router) { + try { router.extractQueryParams(requestParams, query); } + catch (e) { /* ignore routing errors */ } + return query; + }, { features: [] }); + + // Execute the query on the data source + var datasource = query.features.datasource && this._datasources[query.datasource]; + delete query.features.datasource; + if (!datasource || !datasource.supportsQuery(query) || + !this.supportsDatasource(datasource)) + return next(); + + // Generate the query result + var view = this._negotiateView(this.viewName, request, response), + settings = this._createFragmentMetadata(request, query, datasource); + settings.results = datasource.select(query, + function (error) { error && next(error); }); + + // Execute the extensions and render the query result + var extensions = this._extensions, extensionId = 0; + (function nextExtension(error) { + // Log a possible error with the previous extension + if (error) + process.stderr.write(error.stack + '\n'); + // Execute the next extension + if (extensionId < extensions.length) + extensions[extensionId++].handleRequest(request, response, nextExtension, settings); + // Render the query result + else + view.render(settings, request, response); + })(); + } + + // Create the template URL for requesting quad patterns + _createTemplateUrl(datasourceUrl, supportsQuads) { + return datasourceUrl + (!supportsQuads ? '{?subject,predicate,object}' : + '{?subject,predicate,object,graph}'); + } + + // Create parameterized pattern string for quad patterns + _createPatternString(query, supportsQuads) { + var subject = query.subject, predicate = query.predicate, + object = query.object, graph = ''; + // Serialize subject and predicate IRIs or variables + subject = subject ? '<' + query.subject + '> ' : '?s '; + predicate = predicate ? '<' + query.predicate + '> ' : '?p '; + // Serialize object IRI, literal, or variable + if (N3Util.isIRI(query.object)) + object = '<' + query.object + '> '; else - view.render(settings, request, response); - })(); -}; - -// Create the template URL for requesting quad patterns -QuadPatternFragmentsController.prototype._createTemplateUrl = function (datasourceUrl, supportsQuads) { - return datasourceUrl + (!supportsQuads ? '{?subject,predicate,object}' : - '{?subject,predicate,object,graph}'); -}; - -// Create parameterized pattern string for quad patterns -QuadPatternFragmentsController.prototype._createPatternString = function (query, supportsQuads) { - var subject = query.subject, predicate = query.predicate, - object = query.object, graph = ''; - // Serialize subject and predicate IRIs or variables - subject = subject ? '<' + query.subject + '> ' : '?s '; - predicate = predicate ? '<' + query.predicate + '> ' : '?p '; - // Serialize object IRI, literal, or variable - if (N3Util.isIRI(query.object)) - object = '<' + query.object + '> '; - else - object = query.object ? query.object : '?o'; - // Serialize graph IRI default graph, or variable - if (supportsQuads) { - graph = query.graph; - if (graph === '') graph = ' @default'; - else if (graph) graph = ' <' + graph + '>'; - else graph = ' ?g'; + object = query.object ? query.object : '?o'; + // Serialize graph IRI default graph, or variable + if (supportsQuads) { + graph = query.graph; + if (graph === '') graph = ' @default'; + else if (graph) graph = ' <' + graph + '>'; + else graph = ' ?g'; + } + // Join them in a pattern + return '{ ' + subject + predicate + object + graph + '. }'; + } + + // Creates metadata about the requested fragment + _createFragmentMetadata(request, query, datasourceSettings) { + // TODO: these URLs should be generated by the routers + var requestUrl = request.parsedUrl, + // maintain the originally requested query string to avoid encoding differences + origQuery = request.url.replace(/[^?]+/, ''), + pageUrl = url.format(requestUrl).replace(/\?.*/, origQuery), + paramsNoPage = _.omit(requestUrl.query, 'page'), + currentPage = parseInt(requestUrl.query.page, 10) || 1, + datasourceUrl = url.format(_.omit(requestUrl, 'query')), + fragmentUrl = url.format(_.defaults({ query: paramsNoPage }, requestUrl)), + fragmentPageUrlBase = fragmentUrl + (/\?/.test(fragmentUrl) ? '&' : '?') + 'page=', + indexUrl = url.format(_.omit(requestUrl, 'search', 'query', 'pathname')) + '/'; + + // Generate a textual representation of the pattern + var supportsQuads = datasourceSettings.supportedFeatures.quadPattern || false; + query.patternString = this._createPatternString(query, supportsQuads); + + return { + datasource: _.assign(datasourceSettings, { + index: indexUrl + '#dataset', + url: datasourceUrl + '#dataset', + templateUrl: this._createTemplateUrl(datasourceUrl, supportsQuads), + supportsQuads: supportsQuads, + }), + fragment: { + url: fragmentUrl, + pageUrl: pageUrl, + firstPageUrl: fragmentPageUrlBase + '1', + nextPageUrl: fragmentPageUrlBase + (currentPage + 1), + previousPageUrl: currentPage > 1 ? fragmentPageUrlBase + (currentPage - 1) : null, + }, + query: query, + prefixes: this._prefixes, + datasources: this._datasources, + }; } - // Join them in a pattern - return '{ ' + subject + predicate + object + graph + '. }'; -}; - -// Creates metadata about the requested fragment -QuadPatternFragmentsController.prototype._createFragmentMetadata = -function (request, query, datasourceSettings) { - // TODO: these URLs should be generated by the routers - var requestUrl = request.parsedUrl, - // maintain the originally requested query string to avoid encoding differences - origQuery = request.url.replace(/[^?]+/, ''), - pageUrl = url.format(requestUrl).replace(/\?.*/, origQuery), - paramsNoPage = _.omit(requestUrl.query, 'page'), - currentPage = parseInt(requestUrl.query.page, 10) || 1, - datasourceUrl = url.format(_.omit(requestUrl, 'query')), - fragmentUrl = url.format(_.defaults({ query: paramsNoPage }, requestUrl)), - fragmentPageUrlBase = fragmentUrl + (/\?/.test(fragmentUrl) ? '&' : '?') + 'page=', - indexUrl = url.format(_.omit(requestUrl, 'search', 'query', 'pathname')) + '/'; - - // Generate a textual representation of the pattern - var supportsQuads = datasourceSettings.supportedFeatures.quadPattern || false; - query.patternString = this._createPatternString(query, supportsQuads); - - return { - datasource: _.assign(datasourceSettings, { - index: indexUrl + '#dataset', - url: datasourceUrl + '#dataset', - templateUrl: this._createTemplateUrl(datasourceUrl, supportsQuads), - supportsQuads: supportsQuads, - }), - fragment: { - url: fragmentUrl, - pageUrl: pageUrl, - firstPageUrl: fragmentPageUrlBase + '1', - nextPageUrl: fragmentPageUrlBase + (currentPage + 1), - previousPageUrl: currentPage > 1 ? fragmentPageUrlBase + (currentPage - 1) : null, - }, - query: query, - prefixes: this._prefixes, - datasources: this._datasources, - }; -}; - -// Close all data sources -QuadPatternFragmentsController.prototype.close = function () { - for (var datasourceName in this._datasources) { - try { this._datasources[datasourceName].close(); } - catch (error) { /* ignore closing errors */ } + + // Close all data sources + close() { + for (var datasourceName in this._datasources) { + try { this._datasources[datasourceName].close(); } + catch (error) { /* ignore closing errors */ } + } } -}; +} module.exports = QuadPatternFragmentsController; diff --git a/packages/feature-qpf/lib/routers/QuadPatternRouter.js b/packages/feature-qpf/lib/routers/QuadPatternRouter.js index 6344b1bb..023cf75c 100644 --- a/packages/feature-qpf/lib/routers/QuadPatternRouter.js +++ b/packages/feature-qpf/lib/routers/QuadPatternRouter.js @@ -11,58 +11,58 @@ var DEFAULT_GRAPH = 'urn:ldf:defaultGraph'; var DEFAULT_GRAPH_ALT = '@default'; // Creates a new QuadPatternRouter -function QuadPatternRouter(config) { - if (!(this instanceof QuadPatternRouter)) - return new QuadPatternRouter(config); - this._prefixes = config && config.prefixes || {}; -} +class QuadPatternRouter { + constructor(config) { + this._prefixes = config && config.prefixes || {}; + } -// Extracts triple or quad pattern parameters from the request and add them to the query -QuadPatternRouter.prototype.extractQueryParams = function (request, query) { - var queryString = request.url && request.url.query, match, - hasTriplePattern = false, hasQuadPattern = false; + // Extracts triple or quad pattern parameters from the request and add them to the query + extractQueryParams(request, query) { + var queryString = request.url && request.url.query, match, + hasTriplePattern = false, hasQuadPattern = false; - // Try to extract a subject IRI - if (queryString.subject && (match = iriMatcher.exec(queryString.subject))) - hasTriplePattern = query.subject = match[1] ? match[2] : this._expandIRI(match[2]); + // Try to extract a subject IRI + if (queryString.subject && (match = iriMatcher.exec(queryString.subject))) + hasTriplePattern = query.subject = match[1] ? match[2] : this._expandIRI(match[2]); - // Try to extract a predicate IRI - if (queryString.predicate && (match = iriMatcher.exec(queryString.predicate))) - hasTriplePattern = query.predicate = match[1] ? match[2] : this._expandIRI(match[2]); + // Try to extract a predicate IRI + if (queryString.predicate && (match = iriMatcher.exec(queryString.predicate))) + hasTriplePattern = query.predicate = match[1] ? match[2] : this._expandIRI(match[2]); - // Try to extract an object - if (queryString.object) { - // The object can be an IRI… - if (match = iriMatcher.exec(queryString.object)) - hasTriplePattern = query.object = match[1] ? match[2] : this._expandIRI(match[2]); - // or the object can be a literal (with a type or language) - else if (match = literalMatcher.exec(queryString.object)) - hasTriplePattern = query.object = match[2] ? match[1] + '^^' + this._expandIRI(match[2]) : match[0]; - } + // Try to extract an object + if (queryString.object) { + // The object can be an IRI… + if (match = iriMatcher.exec(queryString.object)) + hasTriplePattern = query.object = match[1] ? match[2] : this._expandIRI(match[2]); + // or the object can be a literal (with a type or language) + else if (match = literalMatcher.exec(queryString.object)) + hasTriplePattern = query.object = match[2] ? match[1] + '^^' + this._expandIRI(match[2]) : match[0]; + } - // Try to extract a graph IRI - if (queryString.graph && (match = iriMatcher.exec(queryString.graph))) { - hasTriplePattern = false; - hasQuadPattern = match[1] ? match[2] : this._expandIRI(match[2]); - // When a client specifies DEFAULT_GRAPH as graph, - // we search the actual default graph rather than the graph with that name. - if (hasQuadPattern === DEFAULT_GRAPH || hasQuadPattern === DEFAULT_GRAPH_ALT) - query.graph = ''; - else - query.graph = hasQuadPattern; - } + // Try to extract a graph IRI + if (queryString.graph && (match = iriMatcher.exec(queryString.graph))) { + hasTriplePattern = false; + hasQuadPattern = match[1] ? match[2] : this._expandIRI(match[2]); + // When a client specifies DEFAULT_GRAPH as graph, + // we search the actual default graph rather than the graph with that name. + if (hasQuadPattern === DEFAULT_GRAPH || hasQuadPattern === DEFAULT_GRAPH_ALT) + query.graph = ''; + else + query.graph = hasQuadPattern; + } - // Indicate in the query whether the triple/quad pattern feature was used - if (hasTriplePattern !== false) - (query.features || (query.features = {})).triplePattern = true; - if (hasQuadPattern !== false) - (query.features || (query.features = {})).quadPattern = true; -}; + // Indicate in the query whether the triple/quad pattern feature was used + if (hasTriplePattern !== false) + (query.features || (query.features = {})).triplePattern = true; + if (hasQuadPattern !== false) + (query.features || (query.features = {})).quadPattern = true; + } -// Expands a prefixed named into a full IRI -QuadPatternRouter.prototype._expandIRI = function (name) { - var match = prefixedNameMatcher.exec(name), prefix; - return match && (prefix = this._prefixes[match[1]]) ? prefix + match[2] : name; -}; + // Expands a prefixed named into a full IRI + _expandIRI(name) { + var match = prefixedNameMatcher.exec(name), prefix; + return match && (prefix = this._prefixes[match[1]]) ? prefix + match[2] : name; + } +} module.exports = QuadPatternRouter; diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js index 32a96e50..9282801e 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js @@ -5,32 +5,31 @@ var HtmlView = require('@ldf/core').views.HtmlView, join = require('path').join; // Creates a new QuadPatternFragmentsHtmlView -function QuadPatternFragmentsHtmlView(settings) { - if (!(this instanceof QuadPatternFragmentsHtmlView)) - return new QuadPatternFragmentsHtmlView(settings); - HtmlView.call(this, 'QuadPatternFragments', settings); -} -HtmlView.extend(QuadPatternFragmentsHtmlView); +class QuadPatternFragmentsHtmlView extends HtmlView { + constructor(settings) { + super('QuadPatternFragments', settings); -QuadPatternFragmentsHtmlView.prototype.viewDirectory = __dirname; + this.viewDirectory = __dirname; + } -// Renders the view with the given settings to the response -QuadPatternFragmentsHtmlView.prototype._render = function (settings, request, response, done) { - // Read the data and metadata - var self = this, quads = settings.quads = [], results = settings.results; - results.on('data', function (triple) { quads.push(triple); }); - results.on('end', function () { settings.metadata && renderHtml(); }); - results.getProperty('metadata', function (metadata) { - settings.metadata = metadata; - results.ended && renderHtml(); - }); + // Renders the view with the given settings to the response + _render(settings, request, response, done) { + // Read the data and metadata + var self = this, quads = settings.quads = [], results = settings.results; + results.on('data', function (triple) { quads.push(triple); }); + results.on('end', function () { settings.metadata && renderHtml(); }); + results.getProperty('metadata', function (metadata) { + settings.metadata = metadata; + results.ended && renderHtml(); + }); - // Generates the HTML after the data and metadata have been retrieved - function renderHtml() { - var template = settings.datasource.role === 'index' ? 'index' : 'datasource'; - settings.extensions = { Before: null, FormBefore: null, FormAfter: null, QuadBefore: 'function', QuadAfter: 'function', After: null }; - self._renderTemplate(join(self.viewDirectory, template), settings, request, response, done); + // Generates the HTML after the data and metadata have been retrieved + function renderHtml() { + var template = settings.datasource.role === 'index' ? 'index' : 'datasource'; + settings.extensions = { Before: null, FormBefore: null, FormAfter: null, QuadBefore: 'function', QuadAfter: 'function', After: null }; + self._renderTemplate(join(self.viewDirectory, template), settings, request, response, done); + } } -}; +} module.exports = QuadPatternFragmentsHtmlView; diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js index 9bfff2f5..033863d5 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -11,96 +11,95 @@ var dcTerms = 'http://purl.org/dc/terms/', voID = 'http://rdfs.org/ns/void#'; // Creates a new QuadPatternFragmentsRdfView -function QuadPatternFragmentsRdfView(settings) { - if (!(this instanceof QuadPatternFragmentsRdfView)) - return new QuadPatternFragmentsRdfView(settings); - RdfView.call(this, (settings || {}).viewNameOverride || 'QuadPatternFragments', settings); -} -RdfView.extend(QuadPatternFragmentsRdfView); +class QuadPatternFragmentsRdfView extends RdfView { + constructor(settings) { + super((settings || {}).viewNameOverride || 'QuadPatternFragments', settings); + } -// Generates quads by sending them to the data and/or metadata callbacks -QuadPatternFragmentsRdfView.prototype._generateRdf = function (settings, data, metadata, done) { - var datasource = settings.datasource, fragment = settings.fragment, query = settings.query, - results = settings.results, self = this, metadataDone = false; + // Generates quads by sending them to the data and/or metadata callbacks + _generateRdf(settings, data, metadata, done) { + var datasource = settings.datasource, fragment = settings.fragment, query = settings.query, + results = settings.results, self = this, metadataDone = false; - // Add data source metadata - this._generateMetadata(metadata, fragment, query, datasource); + // Add data source metadata + this._generateMetadata(metadata, fragment, query, datasource); - // Add data source controls - this._generateControls(metadata, fragment, query, datasource); + // Add data source controls + this._generateControls(metadata, fragment, query, datasource); - // Add fragment metadata - results.getProperty('metadata', function (meta) { - self.sendFragmentMetadata(metadata, fragment, query, datasource, meta); + // Add fragment metadata + results.getProperty('metadata', function (meta) { + self.sendFragmentMetadata(metadata, fragment, query, datasource, meta); - // End if the data was also written - metadataDone = true; - results.ended && done(); - }); + // End if the data was also written + metadataDone = true; + results.ended && done(); + }); - // Add data quads - results.on('data', data); - results.on('end', function () { metadataDone && done(); }); -}; + // Add data quads + results.on('data', data); + results.on('end', function () { metadataDone && done(); }); + } -// Generate the datasource metadata -QuadPatternFragmentsRdfView.prototype._generateMetadata = function (metadata, fragment, query, datasource) { - metadata(datasource.index, hydra + 'member', datasource.url); - metadata(datasource.url, rdf + 'type', voID + 'Dataset'); - metadata(datasource.url, rdf + 'type', hydra + 'Collection'); - metadata(datasource.url, voID + 'subset', fragment.pageUrl); - if (fragment.url !== fragment.pageUrl) - metadata(datasource.url, voID + 'subset', fragment.url); -}; + // Generate the datasource metadata + _generateMetadata(metadata, fragment, query, datasource) { + metadata(datasource.index, hydra + 'member', datasource.url); + metadata(datasource.url, rdf + 'type', voID + 'Dataset'); + metadata(datasource.url, rdf + 'type', hydra + 'Collection'); + metadata(datasource.url, voID + 'subset', fragment.pageUrl); + if (fragment.url !== fragment.pageUrl) + metadata(datasource.url, voID + 'subset', fragment.url); + } -// Generate the datasource controls -QuadPatternFragmentsRdfView.prototype._generateControls = function (metadata, fragment, query, datasource) { - if (datasource.supportsQuads) - metadata(datasource.url, sd + 'defaultGraph', 'urn:ldf:defaultGraph'); - metadata(datasource.url, hydra + 'search', '_:pattern'); - metadata('_:pattern', hydra + 'template', '"' + datasource.templateUrl + '"'); - metadata('_:pattern', hydra + 'variableRepresentation', hydra + 'ExplicitRepresentation'); - metadata('_:pattern', hydra + 'mapping', '_:subject'); - metadata('_:pattern', hydra + 'mapping', '_:predicate'); - metadata('_:pattern', hydra + 'mapping', '_:object'); - if (datasource.supportsQuads) - metadata('_:pattern', hydra + 'mapping', '_:graph'); - metadata('_:subject', hydra + 'variable', '"subject"'); - metadata('_:subject', hydra + 'property', rdf + 'subject'); - metadata('_:predicate', hydra + 'variable', '"predicate"'); - metadata('_:predicate', hydra + 'property', rdf + 'predicate'); - metadata('_:object', hydra + 'variable', '"object"'); - metadata('_:object', hydra + 'property', rdf + 'object'); - if (datasource.supportsQuads) { - metadata('_:graph', hydra + 'variable', '"graph"'); - metadata('_:graph', hydra + 'property', sd + 'graph'); + // Generate the datasource controls + _generateControls(metadata, fragment, query, datasource) { + if (datasource.supportsQuads) + metadata(datasource.url, sd + 'defaultGraph', 'urn:ldf:defaultGraph'); + metadata(datasource.url, hydra + 'search', '_:pattern'); + metadata('_:pattern', hydra + 'template', '"' + datasource.templateUrl + '"'); + metadata('_:pattern', hydra + 'variableRepresentation', hydra + 'ExplicitRepresentation'); + metadata('_:pattern', hydra + 'mapping', '_:subject'); + metadata('_:pattern', hydra + 'mapping', '_:predicate'); + metadata('_:pattern', hydra + 'mapping', '_:object'); + if (datasource.supportsQuads) + metadata('_:pattern', hydra + 'mapping', '_:graph'); + metadata('_:subject', hydra + 'variable', '"subject"'); + metadata('_:subject', hydra + 'property', rdf + 'subject'); + metadata('_:predicate', hydra + 'variable', '"predicate"'); + metadata('_:predicate', hydra + 'property', rdf + 'predicate'); + metadata('_:object', hydra + 'variable', '"object"'); + metadata('_:object', hydra + 'property', rdf + 'object'); + if (datasource.supportsQuads) { + metadata('_:graph', hydra + 'variable', '"graph"'); + metadata('_:graph', hydra + 'property', sd + 'graph'); + } } -}; -// Generate the fragment metadata -QuadPatternFragmentsRdfView.prototype.sendFragmentMetadata = function (metadata, fragment, query, datasource, meta) { - // General fragment metadata - metadata(fragment.url, voID + 'subset', fragment.pageUrl); - metadata(fragment.pageUrl, rdf + 'type', hydra + 'PartialCollectionView'); - metadata(fragment.pageUrl, dcTerms + 'title', - '"Linked Data Fragment of ' + (datasource.title || '') + '"@en'); - metadata(fragment.pageUrl, dcTerms + 'description', - '"Triple/Quad Pattern Fragment of the \'' + (datasource.title || '') + '\' dataset ' + - 'containing triples matching the pattern ' + query.patternString + '."@en'); - metadata(fragment.pageUrl, dcTerms + 'source', datasource.url); + // Generate the fragment metadata + sendFragmentMetadata(metadata, fragment, query, datasource, meta) { + // General fragment metadata + metadata(fragment.url, voID + 'subset', fragment.pageUrl); + metadata(fragment.pageUrl, rdf + 'type', hydra + 'PartialCollectionView'); + metadata(fragment.pageUrl, dcTerms + 'title', + '"Linked Data Fragment of ' + (datasource.title || '') + '"@en'); + metadata(fragment.pageUrl, dcTerms + 'description', + '"Triple/Quad Pattern Fragment of the \'' + (datasource.title || '') + '\' dataset ' + + 'containing triples matching the pattern ' + query.patternString + '."@en'); + metadata(fragment.pageUrl, dcTerms + 'source', datasource.url); - // Total pattern matches count - var totalCount = meta.totalCount; - metadata(fragment.pageUrl, hydra + 'totalItems', '"' + totalCount + '"^^' + xsd + 'integer'); - metadata(fragment.pageUrl, voID + 'triples', '"' + totalCount + '"^^' + xsd + 'integer'); + // Total pattern matches count + var totalCount = meta.totalCount; + metadata(fragment.pageUrl, hydra + 'totalItems', '"' + totalCount + '"^^' + xsd + 'integer'); + metadata(fragment.pageUrl, voID + 'triples', '"' + totalCount + '"^^' + xsd + 'integer'); - // Page metadata - metadata(fragment.pageUrl, hydra + 'itemsPerPage', '"' + query.limit + '"^^' + xsd + 'integer'); - metadata(fragment.pageUrl, hydra + 'first', fragment.firstPageUrl); - if (query.offset) - metadata(fragment.pageUrl, hydra + 'previous', fragment.previousPageUrl); - if (totalCount >= query.limit + (query.offset || 0)) - metadata(fragment.pageUrl, hydra + 'next', fragment.nextPageUrl); -}; + // Page metadata + metadata(fragment.pageUrl, hydra + 'itemsPerPage', '"' + query.limit + '"^^' + xsd + 'integer'); + metadata(fragment.pageUrl, hydra + 'first', fragment.firstPageUrl); + if (query.offset) + metadata(fragment.pageUrl, hydra + 'previous', fragment.previousPageUrl); + if (totalCount >= query.limit + (query.offset || 0)) + metadata(fragment.pageUrl, hydra + 'next', fragment.nextPageUrl); + } +} module.exports = QuadPatternFragmentsRdfView; diff --git a/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js index 2bc80abe..5ca3ce03 100644 --- a/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js +++ b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js @@ -18,10 +18,6 @@ describe('QuadPatternFragmentsController', function () { it('should be a QuadPatternFragmentsController constructor', function () { new QuadPatternFragmentsController().should.be.an.instanceof(QuadPatternFragmentsController); }); - - it('should create new QuadPatternFragmentsController objects', function () { - QuadPatternFragmentsController().should.be.an.instanceof(QuadPatternFragmentsController); - }); }); describe('A QuadPatternFragmentsController instance with 3 routers', function () { diff --git a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js index 3adce8f5..c772588e 100644 --- a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js +++ b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js @@ -10,10 +10,6 @@ describe('QuadPatternRouter', function () { it('should be a QuadPatternRouter constructor', function () { new QuadPatternRouter().should.be.an.instanceof(QuadPatternRouter); }); - - it('should create new QuadPatternRouter objects', function () { - QuadPatternRouter().should.be.an.instanceof(QuadPatternRouter); - }); }); describe('A QuadPatternRouter instance', function () { diff --git a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js index 9e49d43b..45e15c89 100644 --- a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js +++ b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js @@ -15,10 +15,6 @@ describe('QuadPatternFragmentsRdfView', function () { it('should be a QuadPatternFragmentsRdfView constructor', function () { new QuadPatternFragmentsRdfView().should.be.an.instanceof(QuadPatternFragmentsRdfView); }); - - it('should create new QuadPatternFragmentsRdfView objects', function () { - QuadPatternFragmentsRdfView().should.be.an.instanceof(QuadPatternFragmentsRdfView); - }); }); describe('A QuadPatternFragmentsRdfView instance', function () { diff --git a/packages/feature-summary/lib/controllers/SummaryController.js b/packages/feature-summary/lib/controllers/SummaryController.js index cb157b8f..7355f13e 100644 --- a/packages/feature-summary/lib/controllers/SummaryController.js +++ b/packages/feature-summary/lib/controllers/SummaryController.js @@ -8,44 +8,41 @@ var Controller = require('@ldf/core').controllers.Controller, Util = require('@ldf/core').Util; // Creates a new SummaryController -function SummaryController(options) { - if (!(this instanceof SummaryController)) - return new SummaryController(options); - options = options || {}; - Controller.call(this, options); - - // Settings for data summaries - var summaries = options.summaries || {}; - this._summariesFolder = summaries.dir || path.join(__dirname, '../../summaries'); - - // Set up path matching - this._summariesPath = summaries.path || '/summaries/', - this._matcher = new RegExp('^' + Util.toRegExp(this._summariesPath) + '(.+)$'); -} -Controller.extend(SummaryController); - -// Tries to serve the requested summary -SummaryController.prototype._handleRequest = function (request, response, next) { - var summaryMatch = this._matcher && this._matcher.exec(request.url), datasource; - if (datasource = summaryMatch && summaryMatch[1]) { - var summaryFile = path.join(this._summariesFolder, datasource + '.ttl'); - - // Read summary triples from file - var streamParser = new StreamParser({ blankNodePrefix: '' }), - inputStream = fs.createReadStream(summaryFile); - // If the summary cannot be read, invoke the next controller without error - inputStream.on('error', function (error) { next(); }); - inputStream.pipe(streamParser); - - // Set caching - response.setHeader('Cache-Control', 'public,max-age=604800'); // 14 days - - // Render the summary - var view = this._negotiateView('Summary', request, response); - view.render({ prefixes: this._prefixes, results: streamParser }, request, response); +class SummaryController extends Controller { + constructor(options) { + options = options || {}; + super(options); + // Settings for data summaries + var summaries = options.summaries || {}; + this._summariesFolder = summaries.dir || path.join(__dirname, '../../summaries'); + // Set up path matching + this._summariesPath = summaries.path || '/summaries/', + this._matcher = new RegExp('^' + Util.toRegExp(this._summariesPath) + '(.+)$'); + } + + _handleRequest(request, response, next) { + var summaryMatch = this._matcher && this._matcher.exec(request.url), datasource; + if (datasource = summaryMatch && summaryMatch[1]) { + var summaryFile = path.join(this._summariesFolder, datasource + '.ttl'); + + // Read summary triples from file + var streamParser = new StreamParser({ blankNodePrefix: '' }), + inputStream = fs.createReadStream(summaryFile); + + // If the summary cannot be read, invoke the next controller without error + inputStream.on('error', function (error) { next(); }); + inputStream.pipe(streamParser); + + // Set caching + response.setHeader('Cache-Control', 'public,max-age=604800'); // 14 days + + // Render the summary + var view = this._negotiateView('Summary', request, response); + view.render({ prefixes: this._prefixes, results: streamParser }, request, response); + } + else + next(); } - else - next(); -}; +} module.exports = SummaryController; diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js index 37c9d26b..f0361d5f 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js @@ -5,26 +5,26 @@ var HtmlView = require('@ldf/core').views.HtmlView, path = require('path'); // Creates a new SummaryHtmlViewExtension -function SummaryHtmlViewExtension(settings) { - if (!(this instanceof SummaryHtmlViewExtension)) - return new SummaryHtmlViewExtension(settings); - HtmlView.call(this, 'QuadPatternFragments:Before', settings); -} -HtmlView.extend(SummaryHtmlViewExtension); +class SummaryHtmlViewExtension extends HtmlView { + constructor(settings) { + super('QuadPatternFragments:Before', settings); + } -// Renders the view with the given settings to the response -SummaryHtmlViewExtension.prototype._render = function (settings, request, response, done) { - // If summaries are enabled, connect the datasource to its summary - // TODO: summary should be of/off per dataset - if (settings.summaries) { - // TODO: summary URL should be generated by router - settings.summary = { - url: settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource), - }; - this._renderTemplate(path.join(__dirname, 'summary-link'), settings, request, response, done); + // Renders the view with the given settings to the response + _render(settings, request, response, done) { + // If summaries are enabled, connect the datasource to its summary + // TODO: summary should be of/off per dataset + if (settings.summaries) { + // TODO: summary URL should be generated by router + settings.summary = { + url: settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource), + }; + this._renderTemplate(path.join(__dirname, 'summary-link'), settings, request, response, done); + } + else + done(); } - else - done(); -}; +} + module.exports = SummaryHtmlViewExtension; diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js index 8f4c8157..7d09186e 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js @@ -6,23 +6,22 @@ var RdfView = require('@ldf/core').views.RdfView; var ds = 'http://semweb.mmlab.be/ns/datasummaries#'; // Creates a new SummaryRdfViewExtension -function SummaryRdfViewExtension(settings) { - if (!(this instanceof SummaryRdfViewExtension)) - return new SummaryRdfViewExtension(settings); - RdfView.call(this, 'QuadPatternFragments:After', settings); -} -RdfView.extend(SummaryRdfViewExtension); +class SummaryRdfViewExtension extends RdfView { + constructor(settings) { + super('QuadPatternFragments:After', settings); + } -// Generates triples and quads by sending them to the data and/or metadata callbacks -SummaryRdfViewExtension.prototype._generateRdf = function (settings, data, metadata, done) { - // If summaries are enabled, connect the datasource to its summary - // TODO: summary should be of/off per dataset - if (settings.summaries) { - // TODO: summary URL should be generated by router - metadata(settings.datasource.url, ds + 'hasDatasetSummary', - settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource)); + // Generates triples and quads by sending them to the data and/or metadata callbacks + _generateRdf(settings, data, metadata, done) { + // If summaries are enabled, connect the datasource to its summary + // TODO: summary should be of/off per dataset + if (settings.summaries) { + // TODO: summary URL should be generated by router + metadata(settings.datasource.url, ds + 'hasDatasetSummary', + settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource)); + } + done(); } - done(); -}; +} module.exports = SummaryRdfViewExtension; diff --git a/packages/feature-summary/lib/views/summary/SummaryRdfView.js b/packages/feature-summary/lib/views/summary/SummaryRdfView.js index b97d38a9..c69a5df2 100644 --- a/packages/feature-summary/lib/views/summary/SummaryRdfView.js +++ b/packages/feature-summary/lib/views/summary/SummaryRdfView.js @@ -4,18 +4,17 @@ var RdfView = require('@ldf/core').views.RdfView; // Creates a new SummaryRdfView -function SummaryRdfView(settings) { - if (!(this instanceof SummaryRdfView)) - return new SummaryRdfView(settings); - RdfView.call(this, 'Summary', settings); -} -RdfView.extend(SummaryRdfView); +class SummaryRdfView extends RdfView { + constructor(settings) { + super('Summary', settings); + } -// Generates triples and quads by sending them to the data and/or metadata callbacks -SummaryRdfView.prototype._generateRdf = function (settings, data, metadata, done) { - // Add summary triples - settings.results.on('data', data); - settings.results.on('end', done); -}; + // Generates triples and quads by sending them to the data and/or metadata callbacks + _generateRdf(settings, data, metadata, done) { + // Add summary triples + settings.results.on('data', data); + settings.results.on('end', done); + } +} module.exports = SummaryRdfView; diff --git a/packages/feature-summary/test/controllers/SummaryController-test.js b/packages/feature-summary/test/controllers/SummaryController-test.js index 54f64420..7524c489 100644 --- a/packages/feature-summary/test/controllers/SummaryController-test.js +++ b/packages/feature-summary/test/controllers/SummaryController-test.js @@ -19,7 +19,7 @@ describe('SummaryController', function () { }); it('should create new SummaryController objects', function () { - SummaryController().should.be.an.instanceof(SummaryController); + new SummaryController().should.be.an.instanceof(SummaryController); }); }); diff --git a/packages/feature-webid/lib/controllers/WebIDControllerExtension.js b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js index 39009842..583527f8 100644 --- a/packages/feature-webid/lib/controllers/WebIDControllerExtension.js +++ b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js @@ -12,109 +12,121 @@ var http = require('http'), var CERT_NS = 'http://www.w3.org/ns/auth/cert#'; -// Creates a new WebIDControllerExtension -function WebIDControllerExtension(settings) { - if (!(this instanceof WebIDControllerExtension)) - return new WebIDControllerExtension(settings); - Controller.call(this, settings); - - this._cache = lru(50); - this._protocol = settings.urlData.protocol; -} -Controller.extend(WebIDControllerExtension); +// Creates a new WebIDControllerExtensionsl +class WebIDControllerExtension extends Controller { + constructor(settings) { + super(settings); + this._cache = lru(50); + this._protocol = settings.urlData.protocol; + } -// Add WebID Link headers -WebIDControllerExtension.prototype._handleRequest = function (request, response, next, settings) { - // Get WebID from certificate - if (this._protocol !== 'https') // This WebID implementation requires HTTPS - return next(); + // Add WebID Link headers + _handleRequest(request, response, next, settings) { + // Get WebID from certificate + if (this._protocol !== 'https') // This WebID implementation requires HTTPS + return next(); - var self = this, - certificate = request.connection.getPeerCertificate(); + var self = this, + certificate = request.connection.getPeerCertificate(); - if (!(certificate.subject && certificate.subject.subjectAltName)) - return this._handleForbidden(request, response, { reason: 'No WebID found in client certificate.' }); + if (!(certificate.subject && certificate.subject.subjectAltName)) { + return this._handleForbidden(request, response, { + reason: 'No WebID found in client certificate.', + }); + } - var webID = certificate.subject.subjectAltName.replace('uniformResourceIdentifier:', ''); - this._verifyWebID(webID, certificate.modulus, parseInt(certificate.exponent, 16), - function (error, verified, reason) { - if (!verified) - return self._handleForbidden(request, response, { webID: webID, reason: reason }); + var webID = certificate.subject.subjectAltName.replace('uniformResourceIdentifier:', ''); + this._verifyWebID(webID, certificate.modulus, parseInt(certificate.exponent, 16), + function (error, verified, reason) { + if (!verified) { + return self._handleForbidden(request, response, { + webID: webID, + reason: reason, + }); + } + next(); + }); + } - next(); - }); -}; - -// Verify webID -WebIDControllerExtension.prototype._verifyWebID = function (webID, modulus, exponent, callback) { - // request & parse - var parser = n3parser(), - id = {}; - - // parse webID - function parseTriple(error, triple, prefixes) { - if (error) - callback('Cannot parse WebID: ' + error); - else if (triple) { - switch (triple.predicate) { - case CERT_NS + 'modulus': - // Add modulus - var literalValue = N3Util.getLiteralValue(triple.object); - // Apply parsing method by nodejs - id.modulus = literalValue.slice(literalValue.indexOf('00:') === 0 ? 3 : 0).replace(/:/g, '').toUpperCase(); - break; - case CERT_NS + 'exponent': - // Add exponent - id.exponent = parseInt(N3Util.getLiteralValue(triple.object), 10); - break; + // Verify webID + _verifyWebID(webID, modulus, exponent, callback) { + // request & parse + var parser = n3parser(), + id = {}; + + // parse webID + function parseTriple(error, triple, prefixes) { + if (error) + callback('Cannot parse WebID: ' + error); + else if (triple) { + switch (triple.predicate) { + case CERT_NS + 'modulus': + // Add modulus + var literalValue = N3Util.getLiteralValue(triple.object); + // Apply parsing method by nodejs + id.modulus = literalValue.slice(literalValue.indexOf('00:') === 0 ? 3 : 0).replace(/:/g, '').toUpperCase(); + break; + case CERT_NS + 'exponent': + // Add exponent + id.exponent = parseInt(N3Util.getLiteralValue(triple.object), 10); + break; + } } } - } - function verify(m, e) { - if (m && m === modulus && e && e === exponent) - callback(null, true); - else - callback(null, false, 'WebID does not match certificate: ' + m + ' - ' + e + ' (webid) <> ' + modulus + ' - ' + exponent + ' (cert)'); - } + function verify(m, e) { + if (m && m === modulus && e && e === exponent) + callback(null, true); + else + callback(null, false, 'WebID does not match certificate: ' + m + ' - ' + e + ' (webid) <> ' + modulus + ' - ' + exponent + ' (cert)'); + } - // Try to get WebID from cache - var cachedId = this._cache.get(webID), self = this; + // Try to get WebID from cache + var cachedId = this._cache.get(webID), + self = this; - if (cachedId) - verify(cachedId.modulus, cachedId.exponent); - else { - var req = http.request(webID, function (res) { - res.setEncoding('utf8'); + if (cachedId) + verify(cachedId.modulus, cachedId.exponent); + else { + var req = http.request(webID, function (res) { + res.setEncoding('utf8'); - parser.parse(res, parseTriple); + parser.parse(res, parseTriple); - res.on('end', function () { - var cacheControl = parseCacheControl(res.headers['Cache-Control'] || ''); - self._cache.set(webID, id, cacheControl['max-age'] || 0); - verify(id.modulus, id.exponent); + res.on('end', function () { + var cacheControl = parseCacheControl(res.headers['Cache-Control'] || ''); + self._cache.set(webID, id, cacheControl['max-age'] || 0); + verify(id.modulus, id.exponent); + }); }); - }); - req.on('error', function (e) { - callback(null, false, 'Unabled to download ' + webID + ' (' + e.message + ').'); - }); + req.on('error', function (e) { + callback(null, false, 'Unabled to download ' + webID + ' (' + e.message + ').'); + }); + + req.end(); + } + } - req.end(); + _handleForbidden(request, response, options) { + // Render the 404 message using the appropriate view + var view = this._negotiateView('Forbidden', request, response), + metadata = { + url: request.url, + prefixes: this._prefixes, + datasources: this._datasources, + reason: options.reason, + }; + response.writeHead(401); + view.render(metadata, request, response); } -}; - -WebIDControllerExtension.prototype._handleForbidden = function (request, response, options) { - // Render the 404 message using the appropriate view - var view = this._negotiateView('Forbidden', request, response), - metadata = { url: request.url, prefixes: this._prefixes, datasources: this._datasources, reason: options.reason }; - response.writeHead(401); - view.render(metadata, request, response); -}; - -WebIDControllerExtension.prototype._handleNotAcceptable = function (request, response, options) { - response.writeHead(401, { 'Content-Type': Util.MIME_PLAINTEXT }); - response.end('Access to ' + request.url + ' is not allowed, verification for WebID ' + (options.webID || '') + ' failed. Reason: ' + (options.reason || '')); -}; + + _handleNotAcceptable(request, response, options) { + response.writeHead(401, { + 'Content-Type': Util.MIME_PLAINTEXT, + }); + response.end('Access to ' + request.url + ' is not allowed, verification for WebID ' + (options.webID || '') + ' failed. Reason: ' + (options.reason || '')); + } +} module.exports = WebIDControllerExtension; From b381aa23de8ec00c74f3dd0fd929f4c569e99cbd Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 2 Mar 2020 13:28:22 +0100 Subject: [PATCH 066/165] Add documentation for datasource packages --- .../core/components/Datasource/Memory.jsonld | 1 + packages/core/components/context.jsonld | 2 +- packages/datasource-composite/README.md | 62 ++++++++++++++++++- .../components/context.jsonld | 4 +- .../config/config-example.json | 33 ++++++++++ .../lib/datasources/CompositeDatasource.js | 11 ++-- .../datasources/CompositeDatasource-test.js | 25 ++++---- packages/datasource-hdt/README.md | 45 +++++++++++++- .../datasource-hdt/config/config-example.json | 17 +++++ packages/datasource-jsonld/README.md | 43 ++++++++++++- .../components/Datasource/JsonLd.jsonld | 4 +- .../config/config-example.json | 17 +++++ packages/datasource-n3/README.md | 49 ++++++++++++++- .../components/Datasource/N3.jsonld | 4 +- .../components/Datasource/NQuads.jsonld | 4 +- .../components/Datasource/NTriples.jsonld | 4 +- .../components/Datasource/Trig.jsonld | 4 +- .../components/Datasource/Turtle.jsonld | 4 +- .../datasource-n3/config/config-example.json | 17 +++++ packages/datasource-sparql/README.md | 44 ++++++++++++- .../config/config-example.json | 17 +++++ 21 files changed, 372 insertions(+), 39 deletions(-) create mode 100644 packages/datasource-composite/config/config-example.json create mode 100644 packages/datasource-hdt/config/config-example.json create mode 100644 packages/datasource-jsonld/config/config-example.json create mode 100644 packages/datasource-n3/config/config-example.json create mode 100644 packages/datasource-sparql/config/config-example.json diff --git a/packages/core/components/Datasource/Memory.jsonld b/packages/core/components/Datasource/Memory.jsonld index 2d1b5704..4e8b78df 100644 --- a/packages/core/components/Datasource/Memory.jsonld +++ b/packages/core/components/Datasource/Memory.jsonld @@ -23,6 +23,7 @@ } ], "constructorArguments": { + "@id": "ldfc:Datasource/Memory#constructorArgumentsObject", "extends": "ldfc:Datasource#constructorArgumentsObject", "fields": [ { diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 0fdfad5d..70baf00f 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -33,7 +33,7 @@ "licenseUrl": "ldfc:Datasource#licenseUrl", "copyright": "ldfc:Datasource#copyright", "homepage": "ldfc:Datasource#homepage", - "datasourceFile": "ldfc:Datasource/Memory#file", + "file": "ldfc:Datasource/Memory#file", "datasourceUrl": "ldfc:Datasource/Memory#url", "DatasourceRouter": "ldfc:Router/Datasource", diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md index 6e351ad0..24df1983 100644 --- a/packages/datasource-composite/README.md +++ b/packages/datasource-composite/README.md @@ -4,7 +4,67 @@ This module contains a composite datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It delegates queries to an sequence of other datasources. -TODO: add documentation +## Usage in `@ldf/server-qpf` + +This package exposes the following config entries: +* `CompositeDatasource`: A composite datasource that requires at least one `compose` field. _Should be used as `@type` value._ +* `compose`: Refers to an array of datasource id's that should be composed. _Should be used as key in a `CompositeDatasource`._ + +Example: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myCompositeDatasource", + "@type": "CompositeDatasource", + "datasourceTitle": "Composite", + "description": "An example composite datasource", + "datasourcePath": "composite", + "compose": [ "ex:myHdtDatasource", "ex:mySparqlDatasource" ] + }, + { + "@id": "ex:myHdtDatasource", + "@type": "HdtDatasource", + "datasourceTitle": "DBpedia 2014", + "description": "DBpedia 2014 with an HDT back-end", + "datasourcePath": "dbpedia", + "hdtFile": "data/dbpedia2014.hdt" + }, + { + "@id": "ex:mySparqlDatasource", + "@type": "SparqlDatasource", + "datasourceTitle": "DBpedia (Virtuoso)", + "description": "DBpedia with a Virtuoso back-end", + "datasourcePath": "dbpedia-sparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + } + ] +} +``` + +## Usage in other packages + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-composite.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite/^3.0.0/components/context.jsonld", + ], + // Same as above... +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/datasource-composite/components/context.jsonld b/packages/datasource-composite/components/context.jsonld index e3de9cab..780fb6c5 100644 --- a/packages/datasource-composite/components/context.jsonld +++ b/packages/datasource-composite/components/context.jsonld @@ -6,9 +6,9 @@ "ldfdc": "npmd:@ldf/datasource-composite/", "files-ldfdc": "ldfdc:^3.0.0/", - "CompositeDatasource": "ldfc:Datasource/Composite", + "CompositeDatasource": "ldfdc:Datasource/Composite", "compose": { - "@id": "ldfc:Datasource/Composite#compose", + "@id": "ldfdc:Datasource/Composite#compose", "@type": "@id" } } diff --git a/packages/datasource-composite/config/config-example.json b/packages/datasource-composite/config/config-example.json new file mode 100644 index 00000000..0ca3bd56 --- /dev/null +++ b/packages/datasource-composite/config/config-example.json @@ -0,0 +1,33 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myCompositeDatasource", + "@type": "CompositeDatasource", + "datasourceTitle": "Composite", + "description": "An example composite datasource", + "datasourcePath": "composite", + "compose": [ "ex:myHdtDatasource", "ex:mySparqlDatasource" ] + }, + { + "@id": "ex:myHdtDatasource", + "@type": "HdtDatasource", + "datasourceTitle": "DBpedia 2014", + "description": "DBpedia 2014 with an HDT back-end", + "datasourcePath": "dbpedia", + "hdtFile": "data/dbpedia2014.hdt" + }, + { + "@id": "ex:mySparqlDatasource", + "@type": "SparqlDatasource", + "datasourceTitle": "DBpedia (Virtuoso)", + "description": "DBpedia with a Virtuoso back-end", + "datasourcePath": "dbpedia-sparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + } + ] +} diff --git a/packages/datasource-composite/lib/datasources/CompositeDatasource.js b/packages/datasource-composite/lib/datasources/CompositeDatasource.js index 5a5c3ac7..dfe8bbd6 100644 --- a/packages/datasource-composite/lib/datasources/CompositeDatasource.js +++ b/packages/datasource-composite/lib/datasources/CompositeDatasource.js @@ -13,12 +13,11 @@ class CompositeDatasource extends Datasource { if (!options.references) throw new Error("A CompositeDatasource requires a `references` array of datasource id's in its settings."); - var allDatasources = options.datasources; this._datasources = {}; this._datasourceNames = []; - for (var i = 0; i < options.references.length; i++) { - var datasourceName = options.references[i]; - var datasource = allDatasources[datasourceName]; + for (var i = 0; i < Object.keys(options.references).length; i++) { + var datasourceName = Object.keys(options.references)[i]; + var datasource = options.references[datasourceName]; if (!datasource) throw new Error('No datasource ' + datasourceName + ' could be found!'); if (datasource.enabled !== false) { @@ -40,12 +39,12 @@ class CompositeDatasource extends Datasource { // Find a datasource by datasource name _getDatasourceByName(datasourceName) { - return this._datasources[datasourceName].datasource; + return this._datasources[datasourceName]; } // Find a datasource by datasource id inside this composition _getDatasourceById(datasourceIndex) { - return this._datasources[this._datasourceNames[datasourceIndex]].datasource; + return this._datasources[this._datasourceNames[datasourceIndex]]; } _hasDatasourceMatchingGraph(datasource, datasourceIndex, query) { diff --git a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js index 47dc884b..f7cf597a 100644 --- a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js +++ b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js @@ -12,21 +12,22 @@ var exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets var exampleTrigUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.trig'); describe('CompositeDatasource', function () { - var datasources = { + var references = { data0: { settings: { file: exampleHdtFile }, datasourceType: HdtDatasource, size: 132 }, data1: { settings: { file: exampleHdtFileWithBlanks, graph: 'http://example.org/graph0' }, datasourceType: HdtDatasource, size: 6 }, data2: { settings: { url: exampleTurtleUrl }, datasourceType: N3Datasource, size: 132 }, data3: { settings: { url: exampleTrigUrl }, datasourceType: N3Datasource, size: 7 }, }; - Object.keys(datasources).forEach(function (datasourceId) { - var datasource = datasources[datasourceId]; + Object.keys(references).forEach(function (datasourceId) { + var datasource = references[datasourceId]; var DatasourceType = datasource.datasourceType; - datasource.datasource = new DatasourceType(datasource.settings); - datasource.datasource.initialize(); + var size = references[datasourceId].size; + references[datasourceId] = new DatasourceType(datasource.settings); + references[datasourceId].size = size; + references[datasourceId].initialize(); }); - var references = Object.keys(datasources); - var totalSize = Object.keys(datasources).reduce(function (acc, key) { - return acc + datasources[key].size; + var totalSize = Object.keys(references).reduce(function (acc, key) { + return acc + references[key].size; }, 0); describe('The CompositeDatasource module', function () { @@ -35,19 +36,19 @@ describe('CompositeDatasource', function () { }); it('should be an CompositeDatasource constructor', function (done) { - var instance = new CompositeDatasource({ datasources: datasources, references: references }); + var instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(CompositeDatasource); instance.close(done); }); it('should create CompositeDatasource objects', function (done) { - var instance = new CompositeDatasource({ datasources: datasources, references: references }); + var instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(CompositeDatasource); instance.close(done); }); it('should create Datasource objects', function (done) { - var instance = new CompositeDatasource({ datasources: datasources, references: references }); + var instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); @@ -57,7 +58,7 @@ describe('CompositeDatasource', function () { var datasource; function getDatasource() { return datasource; } before(function (done) { - datasource = new CompositeDatasource({ datasources: datasources, references: references }); + datasource = new CompositeDatasource({ references: references }); datasource.initialize(); datasource.on('initialized', done); }); diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md index e2a195a4..ffe5f703 100644 --- a/packages/datasource-hdt/README.md +++ b/packages/datasource-hdt/README.md @@ -4,7 +4,50 @@ This module contains a HDT datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows HDT files to be loaded. -TODO: add documentation +## Usage in `@ldf/server-qpf` + +This package exposes the following config entries: +* `HdtDatasource`: An HDT datasource that requires at least one `hdtFile` field. _Should be used as `@type` value._ +* `hdtFile`: Refers to an absolute or relative file location of an HDT file. _Should be used as key in a `HdtDatasource`._ +* `hdtExternal`: An optional flag that can be set to `true`, which will make HDT queries go via an external process. _Should be used as key in a `HdtDatasource`._ + +Example: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myHdtDatasource", + "@type": "HdtDatasource", + "datasourceTitle": "My HDT file", + "description": "My dataset with an HDT back-end", + "datasourcePath": "myhdt", + "hdtFile": "path/to/file.hdt" + } + ] +} +``` + +## Usage in other packages + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-hdt.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld", + ], + // Same as above... +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/datasource-hdt/config/config-example.json b/packages/datasource-hdt/config/config-example.json new file mode 100644 index 00000000..5d8d80a1 --- /dev/null +++ b/packages/datasource-hdt/config/config-example.json @@ -0,0 +1,17 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myHdtDatasource", + "@type": "HdtDatasource", + "datasourceTitle": "My HDT file", + "description": "My dataset with an HDT back-end", + "datasourcePath": "myhdt", + "hdtFile": "path/to/file.hdt" + } + ] +} diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md index e558bea4..55dfe4cc 100644 --- a/packages/datasource-jsonld/README.md +++ b/packages/datasource-jsonld/README.md @@ -4,7 +4,48 @@ This module contains a JSON-LD datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows JSON-LD files to be loaded. -TODO: add documentation +## Usage in `@ldf/server-qpf` + +This package exposes the following config entries: +* `JsonLdDatasource`: A JSON-LD datasource that requires at least one `file` field. _Should be used as `@type` value._ + +Example: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myJsonLdDatasource", + "@type": "JsonLdDatasource", + "datasourceTitle": "My JSON-LD file", + "description": "My dataset with a JSON-LD back-end", + "datasourcePath": "myjsonld", + "file": "path/to/file.jsonld" + } + ] +} +``` + +## Usage in other packages + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-jsonld.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/context.jsonld", + ], + // Same as above... +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/datasource-jsonld/components/Datasource/JsonLd.jsonld b/packages/datasource-jsonld/components/Datasource/JsonLd.jsonld index a15753bf..3e686184 100644 --- a/packages/datasource-jsonld/components/Datasource/JsonLd.jsonld +++ b/packages/datasource-jsonld/components/Datasource/JsonLd.jsonld @@ -8,11 +8,11 @@ { "@id": "ldfdj:Datasource/JsonLd", "@type": "Class", - "extends": "ldfc:Datasource", + "extends": "ldfc:Datasource/Memory", "requireElement": "datasources.JsonLdDatasource", "comment": "An JsonLdDatasource fetches data from a JSON-LD document", "constructorArguments": { - "extends": "ldfc:Datasource#constructorArgumentsObject" + "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" } } ] diff --git a/packages/datasource-jsonld/config/config-example.json b/packages/datasource-jsonld/config/config-example.json new file mode 100644 index 00000000..040a3935 --- /dev/null +++ b/packages/datasource-jsonld/config/config-example.json @@ -0,0 +1,17 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myJsonLdDatasource", + "@type": "JsonLdDatasource", + "datasourceTitle": "My JSON-LD file", + "description": "My dataset with a JSON-LD back-end", + "datasourcePath": "myjsonld", + "file": "path/to/file.jsonld" + } + ] +} diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md index 4f6bb8cf..0faa2e9e 100644 --- a/packages/datasource-n3/README.md +++ b/packages/datasource-n3/README.md @@ -2,9 +2,54 @@ This module contains a N3 datasources for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). -It allows N-Quads, N-Triples, Trig and Turtle files to be loaded. +It allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. -TODO: add documentation +## Usage in `@ldf/server-qpf` + +This package exposes the following config entries: +* `NQuadsDatasource`: An N-Quads datasource that requires at least one `file` field. _Should be used as `@type` value._ +* `NTriplesDatasource`: An N-Triples datasource that requires at least one `file` field. _Should be used as `@type` value._ +* `TrigDatasource`: A Trig datasource that requires at least one `file` field. _Should be used as `@type` value._ +* `TurtleDatasource`: A Turtle datasource that requires at least one `file` field. _Should be used as `@type` value._ +* `N3Datasource`: An N3 datasource that requires at least one `file` field. _Should be used as `@type` value._ + +Example: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myTurtleDatasource", + "@type": "TurtleDatasource", + "datasourceTitle": "My Turtle file", + "description": "My dataset with a Turtle back-end", + "datasourcePath": "myttl", + "file": "path/to/file.ttl" + } + ] +} +``` + +## Usage in other packages + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-n3.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld", + ], + // Same as above... +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/datasource-n3/components/Datasource/N3.jsonld b/packages/datasource-n3/components/Datasource/N3.jsonld index d4df5df1..1897ad36 100644 --- a/packages/datasource-n3/components/Datasource/N3.jsonld +++ b/packages/datasource-n3/components/Datasource/N3.jsonld @@ -8,11 +8,11 @@ { "@id": "ldfdn:Datasource/N3", "@type": "Class", - "extends": "ldfc:Datasource", + "extends": "ldfc:Datasource/Memory", "requireElement": "datasources.N3Datasource", "comment": "An N3Datasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { - "extends": "ldfc:Datasource#constructorArgumentsObject" + "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" } } ] diff --git a/packages/datasource-n3/components/Datasource/NQuads.jsonld b/packages/datasource-n3/components/Datasource/NQuads.jsonld index d286a006..0a3a0319 100644 --- a/packages/datasource-n3/components/Datasource/NQuads.jsonld +++ b/packages/datasource-n3/components/Datasource/NQuads.jsonld @@ -8,11 +8,11 @@ { "@id": "ldfdn:Datasource/NQuads", "@type": "Class", - "extends": "ldfc:Datasource", + "extends": "ldfc:Datasource/Memory", "requireElement": "datasources.NQuadsDatasource", "comment": "An NQuadsDatasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { - "extends": "ldfc:Datasource#constructorArgumentsObject" + "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" } } ] diff --git a/packages/datasource-n3/components/Datasource/NTriples.jsonld b/packages/datasource-n3/components/Datasource/NTriples.jsonld index 6763a7d8..2f33444e 100644 --- a/packages/datasource-n3/components/Datasource/NTriples.jsonld +++ b/packages/datasource-n3/components/Datasource/NTriples.jsonld @@ -8,11 +8,11 @@ { "@id": "ldfdn:Datasource/NTriples", "@type": "Class", - "extends": "ldfc:Datasource", + "extends": "ldfc:Datasource/Memory", "requireElement": "datasources.NTriplesDatasource", "comment": "An NTriplesDatasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { - "extends": "ldfc:Datasource#constructorArgumentsObject" + "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" } } ] diff --git a/packages/datasource-n3/components/Datasource/Trig.jsonld b/packages/datasource-n3/components/Datasource/Trig.jsonld index 7cced3c2..700124c1 100644 --- a/packages/datasource-n3/components/Datasource/Trig.jsonld +++ b/packages/datasource-n3/components/Datasource/Trig.jsonld @@ -8,11 +8,11 @@ { "@id": "ldfdn:Datasource/Trig", "@type": "Class", - "extends": "ldfc:Datasource", + "extends": "ldfc:Datasource/Memory", "requireElement": "datasources.TrigDatasource", "comment": "An TrigDatasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { - "extends": "ldfc:Datasource#constructorArgumentsObject" + "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" } } ] diff --git a/packages/datasource-n3/components/Datasource/Turtle.jsonld b/packages/datasource-n3/components/Datasource/Turtle.jsonld index 3d4da7f2..15b8214f 100644 --- a/packages/datasource-n3/components/Datasource/Turtle.jsonld +++ b/packages/datasource-n3/components/Datasource/Turtle.jsonld @@ -8,11 +8,11 @@ { "@id": "ldfdn:Datasource/Turtle", "@type": "Class", - "extends": "ldfc:Datasource", + "extends": "ldfc:Datasource/Memory", "requireElement": "datasources.TurtleDatasource", "comment": "An TurtleDatasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { - "extends": "ldfc:Datasource#constructorArgumentsObject" + "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" } } ] diff --git a/packages/datasource-n3/config/config-example.json b/packages/datasource-n3/config/config-example.json new file mode 100644 index 00000000..d41d3b37 --- /dev/null +++ b/packages/datasource-n3/config/config-example.json @@ -0,0 +1,17 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myTurtleDatasource", + "@type": "TurtleDatasource", + "datasourceTitle": "My Turtle file", + "description": "My dataset with a Turtle back-end", + "datasourcePath": "myttl", + "file": "path/to/file.ttl" + } + ] +} diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index d8bb0bd6..6e5811f0 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -4,7 +4,49 @@ This module contains a SPARQL datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows SPARQL endpoints to be used as a data proxy. -TODO: add documentation +## Usage in `@ldf/server-qpf` + +This package exposes the following config entries: +* `SparqlDatasource`: A SPARQL-endpoint-based datasource that requires at least one `sparqlEndpoint` field. _Should be used as `@type` value._ +* `sparqlEndpoint`: Refers to an absolute or relative file location of an HDT file. _Should be used as key in a `SparqlDatasource`._ + +Example: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:mySparqlDatasource", + "@type": "SparqlDatasource", + "datasourceTitle": "My SPARQL source", + "description": "My datasource with a SPARQL-endpoint back-end", + "datasourcePath": "mysparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + } + ] +} +``` + +## Usage in other packages + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-sparql.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld", + ], + // Same as above... +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/datasource-sparql/config/config-example.json b/packages/datasource-sparql/config/config-example.json new file mode 100644 index 00000000..f58ccd2f --- /dev/null +++ b/packages/datasource-sparql/config/config-example.json @@ -0,0 +1,17 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "@type": "Server", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:mySparqlDatasource", + "@type": "SparqlDatasource", + "datasourceTitle": "My SPARQL source", + "description": "My datasource with a SPARQL-endpoint back-end", + "datasourcePath": "mysparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + } + ] +} From fdc46ba01b2fd54b27d88c3340a82b49ac012501 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 2 Mar 2020 13:31:51 +0100 Subject: [PATCH 067/165] Remove unneeded @type: server in example configs --- packages/datasource-composite/README.md | 1 - packages/datasource-composite/config/config-example.json | 1 - packages/datasource-hdt/README.md | 1 - packages/datasource-hdt/config/config-example.json | 1 - packages/datasource-jsonld/README.md | 1 - packages/datasource-jsonld/config/config-example.json | 1 - packages/datasource-n3/README.md | 1 - packages/datasource-n3/config/config-example.json | 1 - packages/datasource-sparql/README.md | 1 - packages/datasource-sparql/config/config-example.json | 1 - packages/server-qpf/config/config-example.json | 1 - 11 files changed, 11 deletions(-) diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md index 24df1983..17e95ebf 100644 --- a/packages/datasource-composite/README.md +++ b/packages/datasource-composite/README.md @@ -15,7 +15,6 @@ Example: { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-composite/config/config-example.json b/packages/datasource-composite/config/config-example.json index 0ca3bd56..64e320f0 100644 --- a/packages/datasource-composite/config/config-example.json +++ b/packages/datasource-composite/config/config-example.json @@ -1,7 +1,6 @@ { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md index ffe5f703..afd64425 100644 --- a/packages/datasource-hdt/README.md +++ b/packages/datasource-hdt/README.md @@ -16,7 +16,6 @@ Example: { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-hdt/config/config-example.json b/packages/datasource-hdt/config/config-example.json index 5d8d80a1..bcdde45e 100644 --- a/packages/datasource-hdt/config/config-example.json +++ b/packages/datasource-hdt/config/config-example.json @@ -1,7 +1,6 @@ { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md index 55dfe4cc..9d2cd87e 100644 --- a/packages/datasource-jsonld/README.md +++ b/packages/datasource-jsonld/README.md @@ -14,7 +14,6 @@ Example: { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-jsonld/config/config-example.json b/packages/datasource-jsonld/config/config-example.json index 040a3935..a308e175 100644 --- a/packages/datasource-jsonld/config/config-example.json +++ b/packages/datasource-jsonld/config/config-example.json @@ -1,7 +1,6 @@ { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md index 0faa2e9e..4d40a9a2 100644 --- a/packages/datasource-n3/README.md +++ b/packages/datasource-n3/README.md @@ -18,7 +18,6 @@ Example: { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-n3/config/config-example.json b/packages/datasource-n3/config/config-example.json index d41d3b37..366f33c7 100644 --- a/packages/datasource-n3/config/config-example.json +++ b/packages/datasource-n3/config/config-example.json @@ -1,7 +1,6 @@ { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index 6e5811f0..92dbfbe1 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -15,7 +15,6 @@ Example: { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/datasource-sparql/config/config-example.json b/packages/datasource-sparql/config/config-example.json index f58ccd2f..f34025ce 100644 --- a/packages/datasource-sparql/config/config-example.json +++ b/packages/datasource-sparql/config/config-example.json @@ -1,7 +1,6 @@ { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "datasources": [ diff --git a/packages/server-qpf/config/config-example.json b/packages/server-qpf/config/config-example.json index c9b26eec..228792e4 100644 --- a/packages/server-qpf/config/config-example.json +++ b/packages/server-qpf/config/config-example.json @@ -3,7 +3,6 @@ "@graph": [ { "@id": "urn:ldf-server:my", - "@type": "Server", "import": "preset-qpf:config-defaults.json", "title": "My Linked Data Fragments server", From 3aa4eefe55d7d6acc93c5d0218c0ff2ee95ad98e Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 2 Mar 2020 15:25:34 +0100 Subject: [PATCH 068/165] Add documentation for Memento feature --- packages/core/components/context.jsonld | 1 + packages/datasource-composite/package.json | 1 - packages/datasource-hdt/package.json | 1 - packages/datasource-jsonld/package.json | 1 - packages/datasource-n3/package.json | 1 - packages/datasource-sparql/package.json | 1 - packages/feature-memento/README.md | 141 +++++++++++++++++- .../components/Controller/Timegate.jsonld | 61 +++++--- .../ControllerExtension/Memento.jsonld | 22 --- .../components/View/Html/Qpf/Memento.jsonld | 13 +- .../feature-memento/components/context.jsonld | 19 ++- .../config/config-example.json | 44 ++++++ .../controllers/MementoControllerExtension.js | 4 +- .../lib/controllers/TimegateController.js | 26 ++-- .../QuadPatternFragmentsHtmlView-Memento.js | 3 +- packages/feature-memento/package.json | 1 - .../feature-qpf/components/context.jsonld | 1 + packages/feature-qpf/package.json | 1 - packages/feature-summary/package.json | 1 - packages/feature-webid/package.json | 1 - .../preset-qpf/config/config-defaults.json | 1 + packages/preset-qpf/config/sets/memento.json | 33 ++++ 22 files changed, 288 insertions(+), 90 deletions(-) create mode 100644 packages/feature-memento/config/config-example.json create mode 100644 packages/preset-qpf/config/sets/memento.json diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 70baf00f..5e630a97 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -49,6 +49,7 @@ "HtmlView": "ldfc:View/Html", "RdfView": "ldfc:View/Rdf", "viewExtension": "ldfc:View#extension", + "viewExtensions": "ldfc:View#extension", "viewCache": "ldfc:View/Html#cache", "n3Util": "ldfc:View/Html#n3Util", "viewTitle": "ldfc:View/Html#title", diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 81014ede..6c7cd269 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -17,7 +17,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index 0b286824..93a51d05 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -17,7 +17,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 9c5bea39..ddedbd07 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -17,7 +17,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index dbe4f4ad..efe7af46 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -17,7 +17,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index e2b7492a..bd92f393 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -17,7 +17,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md index e7fce1e7..e26cdb84 100644 --- a/packages/feature-memento/README.md +++ b/packages/feature-memento/README.md @@ -2,9 +2,146 @@ This module adds support for the [Memento Protocol](http://mementoweb.org/about/) to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). -If your Linked Data source evolve over time and has multiple versions, it makes access and query across the various versions straightforward. To enable the [Memento Protocol](http://mementoweb.org/about/), follow the guide below. +If your Linked Data source evolve over time and has multiple versions, it makes access and query across the various versions straightforward. +To enable the [Memento Protocol](http://mementoweb.org/about/), follow the guide below. -TODO: add documentation +## Memento basics + +Any data source can be configured as a Memento resource, meaning it represents a prior version of an existing data source. +This is done by adding a `mementos` entry to your config file that introduces a new memento time gate path, identified by `timegatePath`. +This time gate can contain several version, each pointing to a certain datasource using the `mementoDatasource` key. +The version time range is identified using the `versionStart` and `versionEnd` timestamps. +Each timestamp must be in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601). + +For example, the datasources `ex:myDbpedia2015` and `ex:myDbpedia2014` are mementos of DBpedia valid in 2014 and 2015: + +```json +{ + "mementos": [ + { + "timegatePath": "dbpedia", + "versions": [ + { + "mementoDatasource": "ex:myDbpedia2015", + "start": "2014-09-14T11:59:59Z", + "end": "2015-04-15T00:00:00Z", + "originalBaseURL": "http://fragments.mementodepot.org/dbpedia_201510" + }, + { + "mementoDatasource": "ex:myDbpedia2014", + "start": "2013-06-15T11:59:59Z", + "end": "2014-09-15T00:00:00Z" + } + ] + } + ] +} +``` + +In case a version is hosted externally, you can specify the version's `originalBaseURL` to reconstruct its URL. + +### Example: DBpedia TPF archive +The [Memento DBpedia LDF Server](http://fragments.mementodepot.org/) supports about 10 versions of DBpedia starting from 2007. +A Memento Client like [Memento for Chrome](http://bit.ly/memento-for-chrome) can be used to navigate the versions in a browser. +The command line utility, cUrl, can also be used to see Memento in action. +The following example queries the Memento LDF TimeGate to retrieve a Memento of the English DBpedia page around 15 March 2015. + +```Bash +$ curl -IL -H "Accept-Datetime: Wed, 15 Apr 2015 00:00:00 GMT" http://dbpedia.mementodepot.org/timegate/http://dbpedia.org/page/English + +HTTP/1.1 302 Found +Date: Tue, 15 Mar 2016 21:07:08 GMT +Location: http://dbpedia.mementodepot.org/memento/20150415000000/http://dbpedia.org/page/English +Vary: accept-datetime +Link: ; rel="original",; rel="timemap"; type="application/link-format",; rel="memento"; datetime="Wed, 15 Apr 2015 00:00:00 GMT" + +HTTP/1.1 200 OK +Date: Tue, 15 Mar 2016 21:07:08 GMT +Content-Type: text/html +Link: ; rel="original", ; rel="memento"; datetime="Wed, 15 Apr 2015 00:00:00 GMT", ; rel="timegate", ; rel="timemap" +Memento-Datetime: Wed, 15 Apr 2015 00:00:00 GMT +``` + +## Usage in `@ldf/server-qpf` + +This package exposes the following config entries: +* `TimegateController`: A TimegateController responds to time gate requests. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `MementoControllerExtension`: A MementoControllerExtension extends Quad Pattern Fragments responses with Memento headers. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `MementoQpfHtmlView`: A MementoHtmlViewExtension extends the Quad Pattern Fragments HTML view with Memento details. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `timegateBaseUrl`: The base URL for all Memento time gates. _Should be used as key in a `Server` config._ +* `mementos`: One or more Memento configurations. _Should be used as key in a `Server` config._ +* `timegatePath`: URL path for a Memento within a time gate. _Should be used as key in memento value._ +* `versions`: Version entries for a given Memento. _Should be used as key in memento value._ +* `mementoDatasource`: The datasource corresponding to a given version. _Should be used as key in memento version value._ +* `versionStart`: The start datetime of a given version. _Should be used as key in memento version value._ +* `versionEnd`: The end datetime of a given version. _Should be used as key in memento version value._ +* `mementoBaseURL`: An optional external memento base URL to override. _Should be used as key in memento version value._ + +Example: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myDatasourceVersion1", + "@type": "SparqlDatasource", + "datasourceTitle": "My SPARQL source", + "description": "My datasource with a SPARQL-endpoint back-end", + "datasourcePath": "mysparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + }, + { + "@id": "ex:myDatasourceVersion2", + "@type": "TurtleDatasource", + "datasourceTitle": "My Turtle file", + "description": "My dataset with a Turtle back-end", + "datasourcePath": "myttl", + "file": "path/to/file.ttl" + } + ], + + "timegateBaseUrl": "/timegate/", + "mementos": [ + { + "timegatePath": "mydatasource", + "versions": [ + { + "mementoDatasource": "ex:myDatasourceVersion1", + "versionStart": "2014-09-14T11:59:59Z", + "versionEnd": "2015-04-15T00:00:00Z" + }, + { + "mementoDatasource": "ex:myDatasourceVersion2", + "versionStart": "2015-06-15T11:59:59Z", + "versionEnd": "2016-09-15T00:00:00Z", + "mementoBaseURL": "http://fragments.mementodepot.org/dbpedia_201510" + } + ] + } + ] +} + +``` + +## Usage in other packages + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/feature-memento.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld", + ], + // Same as above... +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/feature-memento/components/Controller/Timegate.jsonld b/packages/feature-memento/components/Controller/Timegate.jsonld index 726c7e68..4b349df1 100644 --- a/packages/feature-memento/components/Controller/Timegate.jsonld +++ b/packages/feature-memento/components/Controller/Timegate.jsonld @@ -15,27 +15,60 @@ "comment": "A TimegateController responds to timegate requests", "parameters": [ { - "@id": "ldffm:Controller/Timegate#timegatePath", - "comment": "URL matching for the time gate", + "@id": "ldffm:Controller/Timegate#timegateBaseUrl", + "comment": "Base URL for the time gate", "range": "xsd:string", "unique": true, "inheritValues": { "@type": "InheritanceValue", - "onParameter": "ldffm:Controller/Timegate#timegatePath", + "onParameter": "ldffm:Controller/Timegate#timegateBaseUrl", "from": "ldfc:Server" } }, { "@id": "ldffm:Controller/Timegate#memento", - "comment": "Path to a directory where summaries can be found", + "comment": "One or more Memento configurations", "range": { "@id": "ldffm:Memento", "rdfs:hasProperty": [ - { "@id": "ldfc:Controller/Timegate#mementoVersion" }, - { "@id": "ldfc:Controller/Timegate#mementoDatasource" }, - { "@id": "ldfc:Controller/Timegate#mementoVersionStart" }, - { "@id": "ldfc:Controller/Timegate#mementoVersionEnd" }, - { "@id": "ldfc:Controller/Timegate#mementoOriginalBaseURL" } + { + "@id": "ldffm:Controller/Timegate#timegatePath", + "comment": "URL path for a Memento within a time gate", + "range": "xsd:string", + "unique": true + }, + { + "@id": "ldffm:Controller/Timegate#mementoVersion", + "comment": "A version entry for a given Memento", + "range": { + "@id": "ldffm:MementoVersion", + "rdfs:hasProperty": [ + { + "@id": "ldffm:Controller/Timegate#mementoDatasource", + "comment": "The datasource corresponding to a given version", + "unique": true, + "required": true + }, + { + "@id": "ldffm:Controller/Timegate#mementoVersionStart", + "comment": "The start datetime of a given version", + "unique": true, + "default": 0 + }, + { + "@id": "ldffm:Controller/Timegate#mementoVersionEnd", + "comment": "The end datetime of a given version", + "unique": true, + "default": 0 + }, + { + "@id": "ldffm:Controller/Timegate#mementoOriginalBaseURL", + "comment": "An optional memento base URL to override", + "unique": true + } + ] + } + } ] }, "inheritValues": { @@ -55,7 +88,7 @@ "fields": [ { "keyRaw": "baseUrl", - "value": "ldffm:Controller/Timegate#timegatePath" + "value": "ldffm:Controller/Timegate#timegateBaseUrl" }, { "keyRaw": "mementos", @@ -66,7 +99,7 @@ "key": "ldffm:Controller/Timegate#timegatePath", "value": { "elements": { - "collectEntries": "ldffm:Controller/Timegate#versions", + "collectEntries": "ldffm:Controller/Timegate#mementoVersion", "value": { "fields": [ { @@ -95,12 +128,6 @@ } ] } - }, - { - "@id": "ldfc:Server#routerField" - }, - { - "@id": "ldfc:Server#datasourceField" } ] } diff --git a/packages/feature-memento/components/ControllerExtension/Memento.jsonld b/packages/feature-memento/components/ControllerExtension/Memento.jsonld index 081c2d22..e24011c3 100644 --- a/packages/feature-memento/components/ControllerExtension/Memento.jsonld +++ b/packages/feature-memento/components/ControllerExtension/Memento.jsonld @@ -18,22 +18,6 @@ { "@id": "ldffm:Controller/Timegate#memento" }, - { - "@id": "ldffm:ControllerExtension/Memento#router", - "inheritValues": { - "@type": "InheritanceValue", - "onParameter": "ldfc:Server#router", - "from": "ldfc:Server" - } - }, - { - "@id": "ldffm:ControllerExtension/Memento#datasource", - "inheritValues": { - "@type": "InheritanceValue", - "onParameter": "ldfc:Server#datasource", - "from": "ldfc:Server" - } - }, { "@id": "ldffm:ControllerExtension/Memento#urlData", "inheritValues": { @@ -48,12 +32,6 @@ { "@id": "ldffm:Controller/Timegate#timeGatesField" }, - { - "@id": "ldfc:Server#routerField" - }, - { - "@id": "ldfc:Server#datasourceField" - }, { "@id": "ldfc:Server#urlDataField" } diff --git a/packages/feature-memento/components/View/Html/Qpf/Memento.jsonld b/packages/feature-memento/components/View/Html/Qpf/Memento.jsonld index 51055bc9..6241513d 100644 --- a/packages/feature-memento/components/View/Html/Qpf/Memento.jsonld +++ b/packages/feature-memento/components/View/Html/Qpf/Memento.jsonld @@ -9,7 +9,7 @@ "@id": "ldffm:View/Html/Qpf/Memento", "@type": "Class", "extends": "ldfc:View/Html", - "requireElement": "views.memento.Memento", + "requireElement": "views.memento.QuadPatternFragmentsHtmlView-Memento", "comment": "A MementoHtmlViewExtension extends the Quad Pattern Fragments HTML view with Memento details", "parameters": [ { @@ -17,14 +17,6 @@ }, { "@id": "ldffm:Controller/Timegate#memento" - }, - { - "@id": "ldffm:View/Html/Qpf/Memento#datasource", - "inheritValues": { - "@type": "InheritanceValue", - "onParameter": "ldfc:Server#datasource", - "from": "ldfc:Server" - } } ], "constructorArguments": [ @@ -36,9 +28,6 @@ }, { "@id": "ldfc:Server#routerField" - }, - { - "@id": "ldfc:Server#datasourceField" } ] } diff --git a/packages/feature-memento/components/context.jsonld b/packages/feature-memento/components/context.jsonld index ba712bb2..1065f6af 100644 --- a/packages/feature-memento/components/context.jsonld +++ b/packages/feature-memento/components/context.jsonld @@ -9,13 +9,18 @@ "TimegateController": "ldffm:Controller/Timegate", "MementoControllerExtension": "ldffm:ControllerExtension/Memento", "MementoQpfHtmlView": "ldffm:View/Html/Qpf/Memento", - "timegatePath": "ldfc:Controller/Timegate#timegatePath", - "memento": "ldfc:Controller/Timegate#memento", - "mementoVersions": "ldfc:Controller/Timegate#mementoVersions", - "mementoDatasource": "ldfc:Controller/Timegate#mementoDatasource", - "mementoVersionStart": "ldfc:Controller/Timegate#mementoVersionStart", - "mementoVersionEnd": "ldfc:Controller/Timegate#mementoVersionEnd", - "mementoOriginalBaseURL": "ldfc:Controller/Timegate#mementoOriginalBaseURL" + "timegateBaseUrl": "ldffm:Controller/Timegate#timegateBaseUrl", + "memento": "ldffm:Controller/Timegate#memento", + "mementos": "ldffm:Controller/Timegate#memento", + "timegatePath": "ldffm:Controller/Timegate#timegatePath", + "versions": "ldffm:Controller/Timegate#mementoVersion", + "mementoDatasource": { + "@id": "ldffm:Controller/Timegate#mementoDatasource", + "@type": "@id" + }, + "versionStart": "ldffm:Controller/Timegate#mementoVersionStart", + "versionEnd": "ldffm:Controller/Timegate#mementoVersionEnd", + "mementoBaseURL": "ldffm:Controller/Timegate#mementoOriginalBaseURL" } ] } diff --git a/packages/feature-memento/config/config-example.json b/packages/feature-memento/config/config-example.json new file mode 100644 index 00000000..2fb44c36 --- /dev/null +++ b/packages/feature-memento/config/config-example.json @@ -0,0 +1,44 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myDatasourceVersion1", + "@type": "SparqlDatasource", + "datasourceTitle": "My SPARQL source", + "description": "My datasource with a SPARQL-endpoint back-end", + "datasourcePath": "mysparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + }, + { + "@id": "ex:myDatasourceVersion2", + "@type": "TurtleDatasource", + "datasourceTitle": "My Turtle file", + "description": "My dataset with a Turtle back-end", + "datasourcePath": "myttl", + "file": "path/to/file.ttl" + } + ], + + "timegateBaseUrl": "/timegate/", + "mementos": [ + { + "timegatePath": "mydatasource", + "versions": [ + { + "mementoDatasource": "ex:myDatasourceVersion1", + "versionStart": "2014-09-14T11:59:59Z", + "versionEnd": "2015-04-15T00:00:00Z" + }, + { + "mementoDatasource": "ex:myDatasourceVersion2", + "versionStart": "2015-06-15T11:59:59Z", + "versionEnd": "2016-09-15T00:00:00Z", + "mementoBaseURL": "http://fragments.mementodepot.org/dbpedia_201510" + } + ] + } + ] +} diff --git a/packages/feature-memento/lib/controllers/MementoControllerExtension.js b/packages/feature-memento/lib/controllers/MementoControllerExtension.js index 7a3a69d8..502f37c5 100644 --- a/packages/feature-memento/lib/controllers/MementoControllerExtension.js +++ b/packages/feature-memento/lib/controllers/MementoControllerExtension.js @@ -9,9 +9,9 @@ var Controller = require('@ldf/core').controllers.Controller, // Creates a new MementoControllerExtension class MementoControllerExtension extends Controller { constructor(settings) { + super(settings); var timegates = settings.timegates || {}; - this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, - settings.datasources, settings.urlData); + this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, settings.urlData); this._timegateBaseUrl = timegates.baseURL || '/timegate/'; } diff --git a/packages/feature-memento/lib/controllers/TimegateController.js b/packages/feature-memento/lib/controllers/TimegateController.js index f685a288..6984816a 100644 --- a/packages/feature-memento/lib/controllers/TimegateController.js +++ b/packages/feature-memento/lib/controllers/TimegateController.js @@ -4,7 +4,7 @@ var Controller = require('@ldf/core').controllers.Controller, _ = require('lodash'), url = require('url'), - Util = require('../Util'); + Util = require('@ldf/core').Util; // Creates a new TimegateController class TimegateController extends Controller { @@ -15,36 +15,28 @@ class TimegateController extends Controller { // Settings for timegate var timegates = options.timegates || {}; - this._timemaps = TimegateController.parseTimegateMap(timegates.mementos, options.datasources); - this._routers = options.routers || []; + this._timemaps = TimegateController.parseTimegateMap(timegates.mementos); // Set up path matching this._timegatePath = timegates.baseUrl || '/timegate/', this._matcher = new RegExp('^' + Util.toRegExp(this._timegatePath) + '(.+?)\/?(?:\\?.*)?$'); } - parseTimegateMap(mementos, datasources) { + static parseTimegateMap(mementos) { return _.mapValues(mementos, function (mementos) { return sortTimemap(mementos.map(function (memento) { - var datasource; - for (var datasourcePath in datasources) { - if (datasources[datasourcePath].id === memento.datasource) - datasource = datasourcePath; - } - if (!datasource) - throw new Error('Could not find a datasource with id ' + memento.datasource); return { - datasource: datasource, - datasourceId: datasources[datasource].id, - interval: [memento.initial || 0, memento.final || 0].map(toDate), + datasource: memento.datasource, + datasourceId: memento.datasource.id, + interval: [memento.initial, memento.final].map(toDate), original: memento.originalBaseURL, }; })); }); } - parseInvertedTimegateMap(mementos, datasources, urlData) { - var timemaps = TimegateController.parseTimegateMap(mementos, datasources); + static parseInvertedTimegateMap(mementos, urlData) { + var timemaps = TimegateController.parseTimegateMap(mementos); var invertedTimegateMap = {}; _.forIn(timemaps, function (versions, timeGateId) { versions.forEach(function (version) { @@ -76,7 +68,7 @@ class TimegateController extends Controller { if (memento) { // Determine the URL of the memento - var mementoUrl = _.assign(request.parsedUrl, { pathname: memento.datasource }); + var mementoUrl = _.assign(request.parsedUrl, { pathname: memento.datasource.path }); mementoUrl = url.format(mementoUrl); // Determine the URL of the original resource diff --git a/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js b/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js index ea0fe1f8..f1af894f 100644 --- a/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js +++ b/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js @@ -10,8 +10,7 @@ class MementoHtmlViewExtension extends HtmlView { constructor(settings) { super('QuadPatternFragments:Before', settings); var timegates = settings.timegates || {}; - this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, - settings.datasources, settings.urlData); + this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, settings.urlData); } // Renders the view with the given settings to the response diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 371bcce9..1831a372 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -17,7 +17,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/feature-qpf/components/context.jsonld b/packages/feature-qpf/components/context.jsonld index 2bf0bf83..204a20ad 100644 --- a/packages/feature-qpf/components/context.jsonld +++ b/packages/feature-qpf/components/context.jsonld @@ -8,6 +8,7 @@ "QuadPatternFragmentsController": "ldffq:Controller/QuadPatternFragments", "qpfControllerExtension": "ldffq:Controller/QuadPatternFragments#controllerExtension", + "qpfControllerExtensions": "ldffq:Controller/QuadPatternFragments#controllerExtension", "QuadPatternRouter": "ldffq:Router/QuadPattern", "routerPrefix": "ldffq:QuadPattern/Page#routerPrefix", diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index ddee1885..9b9cb696 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -17,7 +17,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index b23e0223..38d9eb76 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -20,7 +20,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index f09c8d07..5661d49f 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -17,7 +17,6 @@ }, "files": [ "components", - "config", "lib/**/*.js", "bin/**/*.js", "index.js" diff --git a/packages/preset-qpf/config/config-defaults.json b/packages/preset-qpf/config/config-defaults.json index 5f2c6f98..34212abf 100644 --- a/packages/preset-qpf/config/config-defaults.json +++ b/packages/preset-qpf/config/config-defaults.json @@ -8,6 +8,7 @@ "import": [ "preset-qpf:sets/controllers.json", "preset-qpf:sets/datasources.json", + "preset-qpf:sets/memento.json", "preset-qpf:sets/prefixes.json", "preset-qpf:sets/routers.json", "preset-qpf:sets/views.json" diff --git a/packages/preset-qpf/config/sets/memento.json b/packages/preset-qpf/config/sets/memento.json new file mode 100644 index 00000000..244be169 --- /dev/null +++ b/packages/preset-qpf/config/sets/memento.json @@ -0,0 +1,33 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld" + ], + "@id": "urn:ldf-server:my", + + "controllers": [ + { + "@id": "preset-qpf:sets/memento.json#myTimegateController", + "@type": "TimegateController" + }, + { + "@id": "preset-qpf:sets/controllers.json#myQuadPatternFragmentsController", + "qpfControllerExtension": { + "@id": "preset-qpf:sets/memento.json#myMementoControllerExtension", + "@type": "MementoControllerExtension" + } + } + ], + + "views": [ + { + "@id": "preset-qpf:sets/views.json#myQpfHtmlView", + "viewExtension": { + "@id": "preset-qpf:sets/memento.json#myMementoQpfHtmlView", + "@type": "MementoQpfHtmlView" + } + } + ] +} From dd65124f7bb6ebd2a75ab12ec73e63cebb5ab5ea Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 2 Mar 2020 15:39:35 +0100 Subject: [PATCH 069/165] Add documentation for QPF feature --- packages/feature-memento/README.md | 33 +++++++++++ packages/feature-qpf/README.md | 56 ++++++++++++++++++- .../components/Router/QuadPattern.jsonld | 2 +- .../feature-qpf/components/context.jsonld | 1 - 4 files changed, 88 insertions(+), 4 deletions(-) diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md index e26cdb84..0445b28a 100644 --- a/packages/feature-memento/README.md +++ b/packages/feature-memento/README.md @@ -77,6 +77,10 @@ This package exposes the following config entries: * `versionEnd`: The end datetime of a given version. _Should be used as key in memento version value._ * `mementoBaseURL`: An optional external memento base URL to override. _Should be used as key in memento version value._ +`@ldf/server-qpf` and `@ldf/preset-qpf` provide default instantiations of `TimegateController`, `MementoControllerExtension` and `MementoQpfHtmlView`, +which means that you don't have to define them in your config file yourself. +The only thing you still need to do is defining the time gate and its mementos, as shown in the example below. + Example: ```json { @@ -137,8 +141,37 @@ For example: "@context": [ "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld", ], + "@id": "urn:ldf-server:my", + + "controllers": [ + { + "@id": "ex:myTimegateController", + "@type": "TimegateController" + }, + { + "@id": "ex:myQuadPatternFragmentsController", // This should refer to your existing QuadPatternFragmentsController + "@type": "QuadPatternFragmentsController", + "qpfControllerExtension": { + "@id": "ex:myMementoControllerExtension", + "@type": "MementoControllerExtension" + } + } + ], + + "views": [ + { + "@id": "ex:myQpfHtmlView", // This should refer to your existing QpfHtmlView + "@type": "QpfHtmlView", + "viewExtension": { + "@id": "ex:myMementoQpfHtmlView", + "@type": "MementoQpfHtmlView" + } + } + ] + // Same as above... } ``` diff --git a/packages/feature-qpf/README.md b/packages/feature-qpf/README.md index 552f074c..eb9573e6 100644 --- a/packages/feature-qpf/README.md +++ b/packages/feature-qpf/README.md @@ -1,9 +1,61 @@ # Linked Data Fragments Server - Quad Pattern Fragments -This module adds Quad Pattern Fragments (or [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support. +This module adds Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). -TODO: add documentation +## Usage in `@ldf/server-qpf` + +This package exposes the following config entries: +* `QuadPatternFragmentsController`: A QuadPatternFragmentsController responds to requests for TPFs and QPFs. _Should be used as controller `@type` value._ +* `QuadPatternRouter`: A QuadPatternRouter routes basic quad patterns. _Should be used as router `@type` value._ +* `QpfHtmlView`: A QuadPatternFragmentsRdfView represents a TPF or QPF in HTML. _Should be used as view `@type` value._ +* `QpfRdfView`: A QuadPatternFragmentsRdfView represents a TPF or QPF in RDF. _Should be used as view `@type` value._ +* `qpfControllerExtension` or `qpfControllerExtensions`: One or more optional controller extensions for a QPF controller. See [`MementoControllerExtension`](https://github.com/LinkedDataFragments/Server.js/tree/release/3/packages/feature-memento#usage-in-ldfserver-qpf) as an example. _Should be used as a field on a `QuadPatternFragmentsController`._ + +`@ldf/server-qpf` and `@ldf/preset-qpf` provide default instantiations of `QuadPatternFragmentsController`, `QuadPatternRouter`, `QpfHtmlView` and `QpfRdfView`, +which means that no configuration is required here. + +## Usage in other packages + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-sparql.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld" + ], + "@id": "urn:ldf-server:my", + + "controllers": [ + { + "@id": "ex:myQuadPatternFragmentsController", + "@type": "QuadPatternFragmentsController" + } + ], + + "routers": [ + { + "@id": "ex:myQuadPatternRouter", + "@type": "QuadPatternRouter" + } + ], + + "views": [ + { + "@id": "ex:myQpfHtmlView", + "@type": "QpfHtmlView" + }, + { + "@id": "ex:myQpfRdfView", + "@type": "QpfRdfView" + } + ] +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/feature-qpf/components/Router/QuadPattern.jsonld b/packages/feature-qpf/components/Router/QuadPattern.jsonld index 7d1c7426..9e975829 100644 --- a/packages/feature-qpf/components/Router/QuadPattern.jsonld +++ b/packages/feature-qpf/components/Router/QuadPattern.jsonld @@ -13,7 +13,7 @@ "comment": "A QuadPatternRouter routes basic quad patterns", "parameters": [ { - "@id": "ldffq:QuadPattern/Page#routerPrefix", + "@id": "ldffq:QuadPattern/QuadPattern#routerPrefix", "inheritValues": { "@type": "InheritanceValue", "onParameter": "ldfc:Server#prefix", diff --git a/packages/feature-qpf/components/context.jsonld b/packages/feature-qpf/components/context.jsonld index 204a20ad..672538c2 100644 --- a/packages/feature-qpf/components/context.jsonld +++ b/packages/feature-qpf/components/context.jsonld @@ -11,7 +11,6 @@ "qpfControllerExtensions": "ldffq:Controller/QuadPatternFragments#controllerExtension", "QuadPatternRouter": "ldffq:Router/QuadPattern", - "routerPrefix": "ldffq:QuadPattern/Page#routerPrefix", "QpfHtmlView": "ldffq:View/Html/Qpf", "QpfRdfView": "ldffq:View/Rdf/Qpf" From 509ae6db3a058b1a866436035e8ab364de8cc473 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 2 Mar 2020 15:46:52 +0100 Subject: [PATCH 070/165] Measure code coverage --- .travis.yml | 2 + README.md | 1 + package.json | 6 +- packages/core/package.json | 2 +- packages/datasource-composite/package.json | 2 +- packages/datasource-hdt/package.json | 2 +- packages/datasource-jsonld/package.json | 2 +- packages/datasource-n3/package.json | 2 +- packages/datasource-sparql/package.json | 2 +- packages/feature-memento/package.json | 2 +- packages/feature-qpf/package.json | 2 +- packages/feature-summary/package.json | 2 +- packages/feature-webid/package.json | 2 +- packages/preset-qpf/package.json | 2 +- packages/server-qpf/package.json | 2 +- yarn.lock | 702 ++++++++++++++++++++- 16 files changed, 712 insertions(+), 23 deletions(-) diff --git a/.travis.yml b/.travis.yml index e4eb4428..3f4cebb0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,8 @@ install: yarn install --pure-lockfile script: - yarn run lint - yarn test +after_success: + - yarn run coveralls env: - CXX=g++-4.8 addons: diff --git a/README.md b/README.md index f06673b0..8505c22c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![Build Status](https://travis-ci.org/LinkedDataFragments/Server.js.svg?branch=master)](https://travis-ci.org/LinkedDataFragments/Server.js) +[![Coverage Status](https://coveralls.io/repos/github/LinkedDataFragments/Server.js/badge.svg?branch=master)](https://coveralls.io/github/LinkedDataFragments/Server.js?branch=master) [![npm version](https://badge.fury.io/js/ldf-server.svg)](https://www.npmjs.com/package/ldf-server) [![Docker Automated Build](https://img.shields.io/docker/automated/linkeddatafragments/server.js.svg)](https://hub.docker.com/r/linkeddatafragments/server.js/) [![DOI](https://zenodo.org/badge/16891600.svg)](https://zenodo.org/badge/latestdoi/16891600) diff --git a/package.json b/package.json index 9617053a..35c501a3 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,11 @@ }, "devDependencies": { "chai": "^3.5.0", + "coveralls": "^3.0.9", "eslint": "^3.4.0", "lerna": "^3.4.0", "mocha": "^5.2.0", + "nyc": "^15.0.0", "pre-commit": "^1.1.3", "sinon": "^1.17.4", "sinon-chai": "^2.8.0", @@ -24,7 +26,9 @@ "scripts": { "test-changed": "lerna run test --since HEAD", "lint-changed": "lerna run lint --since HEAD", - "test": "mocha \"packages/*/test/**/*-test.js\" --recursive --require ./test/test-setup --timeout 500", + "mocha": "mocha \"packages/*/test/**/*-test.js\" --recursive --require ./test/test-setup --timeout 500", + "test": "nyc npm run mocha", + "coveralls": "nyc --reporter=text-lcov npm run mocha | coveralls", "lint": "eslint packages/*/bin/* packages/*/lib packages/*/test", "clean": "rm -rf ./node_modules && rm -rf ./packages/*/node_modules", "publish": "lerna publish", diff --git a/packages/core/package.json b/packages/core/package.json index 6774b9be..40e0017c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -27,7 +27,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 6c7cd269..05354a78 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index 93a51d05..d474f43f 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index ddedbd07..fb314bda 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index efe7af46..20248ab3 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index bd92f393..5922a4fb 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 1831a372..24ec9f71 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index 9b9cb696..377eed76 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index 38d9eb76..763fc7b2 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -29,7 +29,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index 5661d49f..f7943650 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -26,7 +26,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/packages/preset-qpf/package.json b/packages/preset-qpf/package.json index f63450ba..dcc0dd6a 100644 --- a/packages/preset-qpf/package.json +++ b/packages/preset-qpf/package.json @@ -27,7 +27,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" } } diff --git a/packages/server-qpf/package.json b/packages/server-qpf/package.json index 27a85ead..78793ca6 100644 --- a/packages/server-qpf/package.json +++ b/packages/server-qpf/package.json @@ -29,7 +29,7 @@ "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, "scripts": { - "test": "mocha", + "test": "nyc mocha", "lint": "eslint bin/* lib test" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index 61bdf0cd..e543306c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,123 @@ # yarn lockfile v1 +"@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/core@^7.7.5": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.6.tgz#27d7df9258a45c2e686b6f18b6c659e563aa4636" + integrity sha512-Sheg7yEJD51YHAvLEV/7Uvw95AeWqYPL3Vk3zGujJKIhJ+8oLw2ALaf3hbucILhKsgSoADOvtKRJuNVdcJkOrg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.6" + "@babel/helpers" "^7.8.4" + "@babel/parser" "^7.8.6" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.6.tgz#57adf96d370c9a63c241cd719f9111468578537a" + integrity sha512-4bpOR5ZBz+wWcMeVtcf7FbjcFzCp+817z2/gHNncIRcM9MmKzUhtWCYAq27RAfUrAFwb+OCG1s9WEaVxfi6cjg== + dependencies: + "@babel/types" "^7.8.6" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helpers@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" + integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" + +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.7.5", "@babel/parser@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.6.tgz#ba5c9910cddb77685a008e3c587af8d27b67962c" + integrity sha512-trGNYSfwq5s0SgM1BMEB8hX3NDmO7EP2wsDGDexiaKMB92BaRpS+qZfpkMqUBhcsOTBwNy9B/jieo4ad/t/z2g== + +"@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.7.4", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" + integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.6" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.8.3", "@babel/types@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.6.tgz#629ecc33c2557fcde7126e58053127afdb3e6d01" + integrity sha512-wqz7pgWMIrht3gquyEFPVXeXCti72Rm8ep9b5tQKz9Yg9LzJA3HxosF1SB3Kc81KD1A3XBkkVYtJvCKS2Z/QrA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -76,6 +193,21 @@ unique-filename "^1.1.1" which "^1.3.1" +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" + integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + "@lerna/add@3.20.0": version "3.20.0" resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309" @@ -867,6 +999,11 @@ dependencies: "@types/node" ">= 8" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -958,6 +1095,14 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-keywords@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" @@ -1006,6 +1151,11 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1018,11 +1168,26 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1033,6 +1198,11 @@ aproba@^2.0.0: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1298,6 +1468,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -1361,7 +1541,7 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -camelcase@^5.0.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -1391,7 +1571,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.3.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1430,6 +1610,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-cursor@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -1458,6 +1643,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -1497,11 +1691,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -1527,6 +1733,11 @@ commander@~2.20.3: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + compare-func@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" @@ -1673,6 +1884,13 @@ conventional-recommended-bump@^5.0.0: meow "^4.0.0" q "^1.5.1" +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + cookiejar@^2.0.6: version "2.1.2" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" @@ -1710,6 +1928,17 @@ cosmiconfig@^5.1.0: js-yaml "^3.13.1" parse-json "^4.0.0" +coveralls@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.9.tgz#8cfc5a5525f84884e2948a0bf0f1c0e90aac0420" + integrity sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg== + dependencies: + js-yaml "^3.13.1" + lcov-parse "^1.0.0" + log-driver "^1.2.7" + minimist "^1.2.0" + request "^2.88.0" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -1730,6 +1959,15 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -1790,6 +2028,13 @@ debug@^3.1.0: dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -1835,6 +2080,13 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +default-require-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + dependencies: + strip-bom "^4.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -1960,6 +2212,11 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -2031,6 +2288,11 @@ es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: es6-symbol "~3.1.3" next-tick "~1.0.0" +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@ -2375,6 +2637,15 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +find-cache-dir@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.0.tgz#4d74ed1fe9ef1731467ca24378e8f8f5c8b6ed11" + integrity sha512-PtXtQb7IrD8O+h6Cq1dbpJH5NzD8+9keN1zZ0YlpDzl1PwXEJEBj6u1Xa92t1Hwluoozd9TNKul5Hi2iqpsWwg== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -2397,6 +2668,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + flat-cache@^1.2.1: version "1.3.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" @@ -2420,6 +2699,14 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2475,6 +2762,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fromentries@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.2.0.tgz#e6aa06f240d6267f913cea422075ef88b63e7897" + integrity sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ== + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -2544,6 +2836,11 @@ genfun@^5.0.0: resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -2670,7 +2967,7 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -2702,6 +2999,11 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^9.14.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2767,6 +3069,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -2815,6 +3122,14 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasha@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.0.tgz#33094d1f69c40a4a6ac7be53d5fe3ff95a269e0c" + integrity sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + hdt@^2.1.3: version "2.2.2" resolved "https://registry.yarnpkg.com/hdt/-/hdt-2.2.2.tgz#4e570250a42043050a345dc7b84d2838c40fa7ca" @@ -2841,6 +3156,11 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.6.tgz#3a6e6d0324c5371fc8c7ba7175e1e5d14578724d" integrity sha512-Kp6rShEsCHhF5dD3EWKdkgVA8ix90oSUJ0VY4g9goxxa0+f4lx63muTftn0mlJ/+8IESGWyKnP//V2D7S4ZbIQ== +html-escaper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" + integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== + http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -2945,6 +3265,11 @@ indent-string@^3.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -3147,6 +3472,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-function@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" @@ -3247,6 +3577,11 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -3261,7 +3596,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -3308,11 +3643,80 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + +istanbul-lib-instrument@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" + integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== + dependencies: + "@babel/core" "^7.7.5" + "@babel/parser" "^7.7.5" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-processinfo@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" + integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.0" + istanbul-lib-coverage "^3.0.0-alpha.1" + make-dir "^3.0.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^3.3.3" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.0.tgz#d4d16d035db99581b6194e119bbf36c963c5eb70" + integrity sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@^3.13.1, js-yaml@^3.5.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -3326,6 +3730,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3353,6 +3762,13 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== + dependencies: + minimist "^1.2.0" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -3419,6 +3835,11 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +lcov-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" + integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= + lerna@^3.4.0: version "3.20.2" resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.20.2.tgz#abf84e73055fe84ee21b46e64baf37b496c24864" @@ -3499,6 +3920,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -3509,6 +3937,11 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -3554,11 +3987,16 @@ lodash@^2.4.2: resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" integrity sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4= -lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + lolex@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" @@ -3607,6 +4045,13 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" + integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + dependencies: + semver "^6.0.0" + make-fetch-happen@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" @@ -4002,6 +4447,13 @@ node-gyp@^5.0.2: tar "^4.4.12" which "^1.3.1" +node-preload@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -4101,6 +4553,40 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +nyc@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.0.0.tgz#eb32db2c0f29242c2414fe46357f230121cfc162" + integrity sha512-qcLBlNCKMDVuKb7d1fpxjPR8sHeMVX0CHarXAVzrVWoFrigCkYR8xcrjfXSPi5HXM7EU78L6ywO7w1c5rZNCNg== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.0" + js-yaml "^3.13.1" + make-dir "^3.0.0" + node-preload "^0.2.0" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + uuid "^3.3.3" + yargs "^15.0.2" + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -4249,7 +4735,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== @@ -4270,6 +4756,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-map-series@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" @@ -4282,6 +4775,13 @@ p-map@^2.1.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-pipe@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" @@ -4316,6 +4816,16 @@ p-waterfall@^1.0.0: dependencies: p-reduce "^1.0.0" +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + parallel-transform@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" @@ -4395,6 +4905,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -4410,6 +4925,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -4470,6 +4990,13 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + pkginfo@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" @@ -4504,6 +5031,13 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" + progress@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" @@ -4769,6 +5303,13 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + dependencies: + es6-error "^4.0.1" + repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" @@ -4869,12 +5410,17 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.10.0: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -4921,6 +5467,13 @@ rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -4998,7 +5551,7 @@ samsam@~1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.2.0: +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -5032,11 +5585,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shelljs@^0.7.5: version "0.7.8" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" @@ -5155,7 +5720,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -5173,6 +5738,18 @@ spawn-sync@^1.0.15: concat-stream "^1.4.7" os-shim "^0.1.2" +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -5299,6 +5876,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string.prototype.trimleft@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" @@ -5350,6 +5936,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -5362,6 +5955,11 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -5436,6 +6034,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -5478,6 +6083,15 @@ temp-write@^3.4.0: temp-dir "^1.0.0" uuid "^3.0.1" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" @@ -5529,6 +6143,11 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -5623,6 +6242,11 @@ type-fest@^0.3.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== +type-fest@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" @@ -5633,6 +6257,13 @@ type@^2.0.0: resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -5763,7 +6394,7 @@ util-promisify@^2.1.0: is-generator-function "^1.0.7" safe-buffer "^5.1.2" -uuid@^3.0.1, uuid@^3.3.2: +uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -5832,6 +6463,13 @@ which@^1.2.14, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -5865,6 +6503,15 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -5879,6 +6526,16 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + write-json-file@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" @@ -5958,6 +6615,14 @@ yargs-parser@^15.0.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^16.1.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" + integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs@^14.2.2: version "14.2.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" @@ -5974,3 +6639,20 @@ yargs@^14.2.2: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^15.0.0" + +yargs@^15.0.2: + version "15.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219" + integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^16.1.0" From 3669620bf11b4a142b9bb4b0139ea3c740c415d5 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 3 Mar 2020 10:17:31 +0100 Subject: [PATCH 071/165] Remove unneeded uritemplate dependency --- packages/core/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 40e0017c..dbb78cde 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -40,8 +40,7 @@ "negotiate": "^1.0.1", "q": "^1.4.1", "qejs": "^3.0.5", - "request": "^2.88.0", - "uritemplate": "^0.3.4" + "request": "^2.88.0" }, "optionalDependencies": { "access-log": "^0.3.9" From d0ad4c8129760d96a59573d6e12007dc564edd94 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 3 Mar 2020 10:48:24 +0100 Subject: [PATCH 072/165] Add documentation for summary feature --- packages/feature-summary/README.md | 78 ++++++++++++++++++- .../components/Controller/Summary.jsonld | 14 +++- .../config/config-example.json | 19 +++++ packages/feature-summary/index.js | 4 +- .../QuadPatternFragmentsHtmlView-Summary.js | 2 +- .../QuadPatternFragmentsRdfView-Summary.js | 2 +- packages/feature-webid/README.md | 3 +- .../preset-qpf/config/config-defaults.json | 1 + packages/preset-qpf/config/sets/summary.json | 37 +++++++++ 9 files changed, 150 insertions(+), 10 deletions(-) create mode 100644 packages/feature-summary/config/config-example.json create mode 100644 packages/preset-qpf/config/sets/summary.json diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md index a3fd0c24..d5c060fd 100644 --- a/packages/feature-summary/README.md +++ b/packages/feature-summary/README.md @@ -1,10 +1,82 @@ # Linked Data Fragments Server - Summary -This module adds a controller extension that only allows authenticated client with WebID's to perform requests. -This extension will only be active when the server is running in [https-mode](https://github.com/LinkedDataFragments/Server.js/wiki/WebID-authentication). +This module adds summaries to datasources based on turtle files corresponding to the datasource name. -TODO: add documentation +## Usage in `@ldf/server-qpf` + +This package exposes the following config entries: +* `SummaryController`: Responds to requests for summaries. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `SummaryQpfHtmlView`: Extends the Quad Pattern Fragments HTML view with a summary link. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `SummaryQpfRdfView`: Extends the Quad Pattern Fragments RDF view with a summary link. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `SummaryRdfView`: Represents a data summary in RDF. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `summaryDir`: Path to a directory where summaries can be found. _Should be used as key in a `Server` config or `SummaryController`._ +* `summaryPath`: URL path for summaries. _Should be used as key in a `Server` config or `SummaryController`._ + +`@ldf/server-qpf` and `@ldf/preset-qpf` provide default instantiations of `SummaryController`, `SummaryQpfHtmlView`, `SummaryQpfRdfView` and `SummaryRdfView`, +which means that you don't have to define them in your config file yourself. +The only thing you still need to do is defining the time gate and its mementos, as shown in the example below. + +Example: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "summaryDir": "../../summaries", + "summaryPath": "/summaries/" +} + +``` + +## Usage in other packages + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/feature-memento.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld", + ], + "@id": "urn:ldf-server:my", + + "controllers": [ + { + "@id": "ex:mySummaryController", + "@type": "SummaryController" + } + ], + + "views": [ + { + "@id": "ex:myQpfHtmlView", // This should refer to your existing QpfHtmlView + "viewExtension": { + "@id": "ex:mySummaryQpfHtmlView", + "@type": "SummaryQpfHtmlView" + } + }, + { + "@id": "ex:myQpfRdfView", // This should refer to your existing QpfRdfView + "viewExtension": { + "@id": "ex:mySummaryQpfRdfView", + "@type": "SummaryQpfRdfView" + } + }, + { + "@id": "ex:mySummaryRdfView", + "@type": "SummaryRdfView" + } + ] + + // Same as above... +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/feature-summary/components/Controller/Summary.jsonld b/packages/feature-summary/components/Controller/Summary.jsonld index 3beccdf6..47e4fbd8 100644 --- a/packages/feature-summary/components/Controller/Summary.jsonld +++ b/packages/feature-summary/components/Controller/Summary.jsonld @@ -16,13 +16,23 @@ "@id": "ldffs:Controller/Summary#directory", "comment": "Path to a directory where summaries can be found", "range": "xsd:string", - "unique": true + "unique": true, + "inheritValues": { + "@type": "InheritanceValue", + "onParameter": "ldffs:Controller/Summary#directory", + "from": "ldfc:Server" + } }, { "@id": "ldffs:Controller/Summary#path", "comment": "URL matching for summaries", "range": "xsd:string", - "unique": true + "unique": true, + "inheritValues": { + "@type": "InheritanceValue", + "onParameter": "ldffs:Controller/Summary#path", + "from": "ldfc:Server" + } } ], "constructorArguments": { diff --git a/packages/feature-summary/config/config-example.json b/packages/feature-summary/config/config-example.json new file mode 100644 index 00000000..be99a090 --- /dev/null +++ b/packages/feature-summary/config/config-example.json @@ -0,0 +1,19 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "ex:myDatasourceVersion1", + "@type": "SparqlDatasource", + "datasourceTitle": "My SPARQL source", + "description": "My datasource with a SPARQL-endpoint back-end", + "datasourcePath": "mysparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + } + ], + + "summaryDir": "../../summaries", + "summaryPath": "/summaries/" +} diff --git a/packages/feature-summary/index.js b/packages/feature-summary/index.js index 3e69c30d..9e49f4e0 100644 --- a/packages/feature-summary/index.js +++ b/packages/feature-summary/index.js @@ -7,8 +7,8 @@ module.exports = { }, views: { summary: { - 'QuadPatternFragmentsHtmlView-Memento': require('./lib/views/summary/QuadPatternFragmentsHtmlView-Summary'), - 'QuadPatternFragmentsRdfView-Memento': require('./lib/views/summary/QuadPatternFragmentsRdfView-Summary'), + 'QuadPatternFragmentsHtmlView-Summary': require('./lib/views/summary/QuadPatternFragmentsHtmlView-Summary'), + 'QuadPatternFragmentsRdfView-Summary': require('./lib/views/summary/QuadPatternFragmentsRdfView-Summary'), 'SummaryRdfView': require('./lib/views/summary/SummaryRdfView'), }, }, diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js index f0361d5f..dca810ee 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js @@ -17,7 +17,7 @@ class SummaryHtmlViewExtension extends HtmlView { if (settings.summaries) { // TODO: summary URL should be generated by router settings.summary = { - url: settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource), + url: settings.baseURL + 'summaries' + encodeURIComponent(settings.query.datasource), }; this._renderTemplate(path.join(__dirname, 'summary-link'), settings, request, response, done); } diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js index 7d09186e..cbae4941 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js @@ -18,7 +18,7 @@ class SummaryRdfViewExtension extends RdfView { if (settings.summaries) { // TODO: summary URL should be generated by router metadata(settings.datasource.url, ds + 'hasDatasetSummary', - settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource)); + settings.baseURL + 'summaries' + encodeURIComponent(settings.query.datasource)); } done(); } diff --git a/packages/feature-webid/README.md b/packages/feature-webid/README.md index 0c27f215..a3fd0c24 100644 --- a/packages/feature-webid/README.md +++ b/packages/feature-webid/README.md @@ -1,7 +1,8 @@ # Linked Data Fragments Server - Summary -This module adds summaries to datasources based on turtle files corresponding to the datasource name. +This module adds a controller extension that only allows authenticated client with WebID's to perform requests. +This extension will only be active when the server is running in [https-mode](https://github.com/LinkedDataFragments/Server.js/wiki/WebID-authentication). TODO: add documentation diff --git a/packages/preset-qpf/config/config-defaults.json b/packages/preset-qpf/config/config-defaults.json index 34212abf..4de96545 100644 --- a/packages/preset-qpf/config/config-defaults.json +++ b/packages/preset-qpf/config/config-defaults.json @@ -11,6 +11,7 @@ "preset-qpf:sets/memento.json", "preset-qpf:sets/prefixes.json", "preset-qpf:sets/routers.json", + "preset-qpf:sets/summary.json", "preset-qpf:sets/views.json" ] } diff --git a/packages/preset-qpf/config/sets/summary.json b/packages/preset-qpf/config/sets/summary.json new file mode 100644 index 00000000..35fa7370 --- /dev/null +++ b/packages/preset-qpf/config/sets/summary.json @@ -0,0 +1,37 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld" + ], + "@id": "urn:ldf-server:my", + + "controllers": [ + { + "@id": "preset-qpf:sets/summary.json#mySummaryController", + "@type": "SummaryController" + } + ], + + "views": [ + { + "@id": "preset-qpf:sets/views.json#myQpfHtmlView", + "viewExtension": { + "@id": "preset-qpf:sets/summary.json#mySummaryQpfHtmlView", + "@type": "SummaryQpfHtmlView" + } + }, + { + "@id": "preset-qpf:sets/views.json#myQpfRdfView", + "viewExtension": { + "@id": "preset-qpf:sets/summary.json#mySummaryQpfRdfView", + "@type": "SummaryQpfRdfView" + } + }, + { + "@id": "preset-qpf:sets/summary.json#mySummaryRdfView", + "@type": "SummaryRdfView" + } + ] +} From 5b719321a8fb4e6e3eb7e8ddb6543e73d4deb494 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 3 Mar 2020 11:00:45 +0100 Subject: [PATCH 073/165] Add documentation for WebID feature --- packages/feature-summary/README.md | 4 +- packages/feature-webid/README.md | 40 ++++++++++++++++++- .../feature-webid/components/context.jsonld | 2 +- packages/server-qpf/package.json | 1 - 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md index d5c060fd..9b2b6f96 100644 --- a/packages/feature-summary/README.md +++ b/packages/feature-summary/README.md @@ -15,7 +15,7 @@ This package exposes the following config entries: `@ldf/server-qpf` and `@ldf/preset-qpf` provide default instantiations of `SummaryController`, `SummaryQpfHtmlView`, `SummaryQpfRdfView` and `SummaryRdfView`, which means that you don't have to define them in your config file yourself. -The only thing you still need to do is defining the time gate and its mementos, as shown in the example below. +The only thing you still need to do is defining the summary directory and the URL on which they should be exposed, as shown in the example below. Example: ```json @@ -33,7 +33,7 @@ Example: ## Usage in other packages When this module is used in a package other than `@ldf/server-qpf`, -then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/feature-memento.jsonld` must be imported. +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/feature-summary.jsonld` must be imported. For example: ``` diff --git a/packages/feature-webid/README.md b/packages/feature-webid/README.md index a3fd0c24..f33d1212 100644 --- a/packages/feature-webid/README.md +++ b/packages/feature-webid/README.md @@ -1,10 +1,46 @@ -# Linked Data Fragments Server - Summary +# Linked Data Fragments Server - WebID This module adds a controller extension that only allows authenticated client with WebID's to perform requests. This extension will only be active when the server is running in [https-mode](https://github.com/LinkedDataFragments/Server.js/wiki/WebID-authentication). -TODO: add documentation +This package is **not** included by default in `@ldf/server-qpf` and `@ldf/preset-qpf`. + +## Usage in other packages + +When this module is used in a package`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/feature-webid.jsonld` must be imported. + +This package exposes the following config entries: +* `WebIdControllerExtension`: Extends Quad Pattern Fragments responses with WebID authentication. _Should be used as `@type` value._ + +Next to adding the WebID controller extension, you must enable HTTPS-mode, as shown in the example below. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/context.jsonld", + ], + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "controllers": [ + { + "@id": "ex:myQuadPatternFragmentsController", // This should refer to your existing QuadPatternFragmentsController + "@type": "QuadPatternFragmentsController", + "qpfControllerExtension": { + "@id": "ex:myWebIdControllerExtension", + "@type": "WebIdControllerExtension" + } + } + ], + + "protocol": "https" +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/feature-webid/components/context.jsonld b/packages/feature-webid/components/context.jsonld index 88d7849f..3669100a 100644 --- a/packages/feature-webid/components/context.jsonld +++ b/packages/feature-webid/components/context.jsonld @@ -6,7 +6,7 @@ "ldffw": "npmd:@ldf/feature-webid/", "files-ldffw": "ldffw:^3.0.0/", - "WebIdController": "ldffw:Controller/WebId" + "WebIdControllerExtension": "ldffw:ControllerExtension/WebId" } ] } diff --git a/packages/server-qpf/package.json b/packages/server-qpf/package.json index 78793ca6..f862a392 100644 --- a/packages/server-qpf/package.json +++ b/packages/server-qpf/package.json @@ -42,7 +42,6 @@ "@ldf/feature-memento": "2.2.5", "@ldf/feature-qpf": "2.2.5", "@ldf/feature-summary": "2.2.5", - "@ldf/feature-webid": "2.2.5", "@ldf/preset-qpf": "2.2.5" } } From 6c81d295122d72f74a13ae7348fb00749f7aa416 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 3 Mar 2020 11:01:32 +0100 Subject: [PATCH 074/165] Add .nyc_output to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0c13fec2..034f0832 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ data summaries *.log *.hdt.index* +.nyc_output # Ignore deployment configuration files, but keep defaults and examples config.json From 8b301c919bdb0ebd9af4ffe5184279ca0fe44249 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 3 Mar 2020 11:16:59 +0100 Subject: [PATCH 075/165] Add documentation for QPF presets --- packages/preset-qpf/README.md | 65 +++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/packages/preset-qpf/README.md b/packages/preset-qpf/README.md index 49cdcce6..9a13e7fe 100644 --- a/packages/preset-qpf/README.md +++ b/packages/preset-qpf/README.md @@ -1,9 +1,70 @@ # Linked Data Fragments Server - Preset Quad Pattern Fragments -Configuration presets for Quad Pattern Fragments servers. +This package provides configuration presets for Quad Pattern Fragments servers. -TODO: add documentation +This package should be used if you want to create your own LDF server configuration, +and include the default QPF configurations. +If you just want to run a QPF server, you can make use of [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf) instead. + +Concretely, it configures the following packages: + +* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. +* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). +* [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. +* [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). +* [`@ldf/datasource-hdt`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt): Datasource that allows HDT files to be loaded. +* [`@ldf/datasource-jsonld`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld): Datasource that allows JSON-LD files to be loaded. +* [`@ldf/datasource-n3`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3): Datasource that allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. +* [`@ldf/datasource-sparql`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql): Datasource that allows SPARQL endpoints to be used as a data proxy. +* [`@ldf/datasource-composite`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite): Datasource that delegates queries to an sequence of other datasources. + +## Usage + +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/preset-qpf.jsonld` must be imported. + +The following configs will become available for import: + +* [`"preset-qpf:config-defaults.json"`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf/config/config-defaults.json): Default configurations for QPF-related modules. +* [`"preset-qpf:sets/controllers.json"`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf/config/sets/controllers.json): Configurations for QPF controllers. (included in `"preset-qpf:config-defaults.json"`). +* [`"preset-qpf:sets/datasources.json"`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf/config/sets/datasources.json): Configurations for default datasources. (included in `"preset-qpf:config-defaults.json"`). +* [`"preset-qpf:sets/memento.json"`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf/config/sets/memento.json): Configurations for allowing Memento to be used. (included in `"preset-qpf:config-defaults.json"`). +* [`"preset-qpf:sets/prefixes.json"`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf/config/sets/prefixes.json): Configurations for default prefixes. (included in `"preset-qpf:config-defaults.json"`). +* [`"preset-qpf:sets/routers.json"`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf/config/sets/routers.json): Configurations for QPF routers. (included in `"preset-qpf:config-defaults.json"`). +* [`"preset-qpf:sets/summary.json"`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf/config/sets/summary.json): Configurations for allowing summaries. (included in `"preset-qpf:config-defaults.json"`). +* [`"preset-qpf:sets/views.json"`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf/config/sets/views.json): Configurations for QPF views. (included in `"preset-qpf:config-defaults.json"`). + +Example: Importing all defaults: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld" + ], + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json" + + // Rest of your config +} +``` + +Example: Importing only QPF controllers and datasources: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld" + ], + "@id": "urn:ldf-server:my", + "import": [ + "preset-qpf:config-defaults.json", + "preset-qpf:sets/datasources.json" + ] + + // Rest of your config +} +``` ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. From 26e293132580c504325ae0f8b4f975bbebc3e2f6 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 3 Mar 2020 11:34:19 +0100 Subject: [PATCH 076/165] Add documentation for server QPF --- packages/server-qpf/README.md | 220 +++++++++++++++++- .../server-qpf/config/config-example.json | 73 +++--- 2 files changed, 249 insertions(+), 44 deletions(-) diff --git a/packages/server-qpf/README.md b/packages/server-qpf/README.md index b00d9a80..f1f4d079 100644 --- a/packages/server-qpf/README.md +++ b/packages/server-qpf/README.md @@ -3,7 +3,225 @@ A Linked Data Fragments server with Quad Pattern Fragments support. -TODO: add documentation +## Motivation + +On today's Web, Linked Data is published in different ways, +which include [data dumps](http://downloads.dbpedia.org/3.9/en/), +[subject pages](http://dbpedia.org/page/Linked_data), +and [results of SPARQL queries](http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=CONSTRUCT+%7B+%3Fp+a+dbpedia-owl%3AArtist+%7D%0D%0AWHERE+%7B+%3Fp+a+dbpedia-owl%3AArtist+%7D&format=text%2Fturtle). +We call each such part a [**Linked Data Fragment**](http://linkeddatafragments.org/). + +The issue with the current Linked Data Fragments +is that they are either so powerful that their servers suffer from low availability rates +([as is the case with SPARQL](http://sw.deri.org/~aidanh/docs/epmonitorISWC.pdf)), +or either don't allow efficient querying. + +Instead, this server offers Quad Pattern Fragments (a.k.a. **[Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)**). +Each Quad Pattern Fragment offers: + +- **data** that corresponds to a _quad/triple pattern_ + _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=rdf%3Atype&object=dbpedia-owl%3ARestaurant))_. +- **metadata** that consists of the (approximate) total triple count + _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=rdf%3Atype&object=))_. +- **controls** that lead to all other fragments of the same dataset + _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=&object=%22John%22%40en))_. + +An example server is available at [data.linkeddatafragments.org](http://data.linkeddatafragments.org/). + +## Install the server + +This server requires [Node.js](http://nodejs.org/) 10.0 or higher +and is tested on OSX and Linux. +To install, execute: +```bash +$ [sudo] npm install -g @ldf/server-qpf +``` + +## Use the server + +### Configure the data sources + +First, create a configuration file `config.json` similar to `config/config-example.json`, +in which you detail your data sources. +For example, this configuration uses an [HDT file](http://www.rdfhdt.org/) +and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "title": "My Linked Data Fragments server", + + "datasources": [ + { + "@id": "ex:myHdtDatasource", + "@type": "HdtDatasource", + "datasourceTitle": "DBpedia 2014", + "description": "DBpedia 2014 with an HDT back-end", + "datasourcePath": "dbpedia", + "hdtFile": "data/dbpedia2014.hdt" + }, + { + "@id": "ex:mySparqlDatasource", + "@type": "SparqlDatasource", + "datasourceTitle": "DBpedia (Virtuoso)", + "description": "DBpedia with a Virtuoso back-end", + "datasourcePath": "dbpedia-sparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + } + ], +} +``` + +The following sources are supported out of the box: +- HDT files ([`HdtDatasource`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt) with `hdtFile` setting) +- N-Triples documents ([`NTriplesDatasource`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3) with `file` setting) +- Turtle documents ([`TurtleDatasource`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3) with `file` setting) +- N-Quads documents ([`NQuadsDatasource`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3) with `file` setting) +- TriG documents ([`TrigDatasource`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3) with `file` setting) +- JSON-LD documents ([`JsonLdDatasource`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld) with `file` setting) +- SPARQL endpoints ([`SparqlDatasource`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql) with `sparqlEndpoint`) + +Support for new sources is possible by creating a new module implementing the [`Datasource`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core) interface. + +### Start the server + +After creating a configuration file, execute +```bash +$ ldf-server-qpf config.json 5000 4 +``` +Here, `5000` is the HTTP port on which the server will listen, +and `4` the number of worker processes. + +Now visit `http://localhost:5000/` in your browser. + +### Reload running server + +You can reload the server without any downtime +in order to load a new configuration or version. +
+In order to do this, you need the process ID of the server master process. +
+One possibility to obtain this are the server logs: +```bash +$ bin/ldf-server-qpf config.json +Master 28106 running. +Worker 28107 running on http://localhost:3000/. +``` + +If you send the server a `SIGHUP` signal: +```bash +$ kill -s SIGHUP 28106 +``` +it will reload by replacing its workers. + +Note that crashed or killed workers are always replaced automatically. + +### _(Optional)_ Set up a reverse proxy + +A typical Linked Data Fragments server will be exposed +on a public domain or subdomain along with other applications. +Therefore, you need to configure the server to run behind an HTTP reverse proxy. +
+To set this up, configure the server's public URL in your server's `config.json`: +```json +{ + "title": "My Linked Data Fragments server", + "baseURL": "http://data.example.org/", + "datasources": { … } +} +``` +Then configure your reverse proxy to pass requests to your server. +Here's an example for [nginx](http://nginx.org/): +```nginx +server { + server_name data.example.org; + + location / { + proxy_pass http://127.0.0.1:3000$request_uri; + proxy_set_header Host $http_host; + proxy_pass_header Server; + } +} +``` +Change the value `3000` into the port on which your Linked Data Fragments server runs. + +If you would like to proxy the data in a subfolder such as `http://example.org/my/data`, +modify the `baseURL` in your `config.json` to `"http://example.org/my/data"` +and change `location` from `/` to `/my/data` (excluding a trailing slash). + +### _(Optional)_ Running under HTTPS + +HTTPS can be enabled in two ways: natively by the server, or through a proxy (explained above). + +With native HTTPS, the server will establish the SSL layer. Set the following values in your config file to enable this: + + { + "protocol": "https", + "ssl": { + "keys" : { + "key": "./private-key-server.key.pem", + "ca": ["./root-ca.crt.pem"], + "cert": "./server-certificate.crt.pem" + } + } + } + + If `protocol`is not specified, it will derive the protocol from the `baseURL`. Hence, HTTPS can also be enabled as such: + + { + "baseURL": "https://data.example.org/", + "ssl": { + "keys" : { + "key": "./private-key-server.key.pem", + "ca": ["./root-ca.crt.pem"], + "cert": "./server-certificate.crt.pem" + } + } + } + +If you decide to let a proxy handle HTTPS, use this configuration to run the server as `http`, but construct links as `https` (so clients don't break): + + { + "protocol": "http", + "baseURL": "https://data.example.org/", + } + + +### _(Optional)_ Running in a Docker container + +If you want to rapidly deploy the server as a microservice, you can build a [Docker](https://www.docker.com/) container as follows: + +```bash +$ docker build -t ldf-server . +``` +After that, you can run your newly created container: +```bash +$ docker run -p 3000:3000 -t -i --rm -v $(pwd)/config.json:/tmp/config.json ldf-server /tmp/config.json +``` + +### _(Optional)_ Host historical version of datasets + +You can [enable the Memento protocol](https://github.com/LinkedDataFragments/Server.js/wiki/Configuring-Memento) to offer different versions of an evolving dataset. + +## Relation to other modules + +This package should be used if you want to use an LDF server with the QPF feature. +If you want to extend this server with additional modules, +you can make use of [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf) instead. + +Concretely, it configures the following packages: + +* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. +* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). +* [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. +* [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). +* [`@ldf/datasource-hdt`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt): Datasource that allows HDT files to be loaded. +* [`@ldf/datasource-jsonld`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld): Datasource that allows JSON-LD files to be loaded. +* [`@ldf/datasource-n3`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3): Datasource that allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. +* [`@ldf/datasource-sparql`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql): Datasource that allows SPARQL endpoints to be used as a data proxy. +* [`@ldf/datasource-composite`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite): Datasource that delegates queries to an sequence of other datasources. ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/server-qpf/config/config-example.json b/packages/server-qpf/config/config-example.json index 228792e4..4b31adfc 100644 --- a/packages/server-qpf/config/config-example.json +++ b/packages/server-qpf/config/config-example.json @@ -1,52 +1,39 @@ { "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", - "@graph": [ - { - "@id": "urn:ldf-server:my", - "import": "preset-qpf:config-defaults.json", - - "title": "My Linked Data Fragments server", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", - "datasources": [ - { - "@id": "ex:myHdtDatasource", - "@type": "HdtDatasource", - "datasourceTitle": "DBpedia 2014", - "description": "DBpedia 2014 with an HDT back-end", - "datasourcePath": "dbpedia", - "hdtFile": "data/dbpedia2014.hdt" - }, - { - "@id": "ex:mySparqlDatasource", - "@type": "SparqlDatasource", - "datasourceTitle": "DBpedia (Virtuoso)", - "description": "DBpedia with a Virtuoso back-end", - "datasourcePath": "dbpedia-sparql", - "sparqlEndpoint": "https://dbpedia.org/sparql" - } - ], + "title": "My Linked Data Fragments server", - "prefixes": [ - { "prefix": "rdf", "uri": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" }, - { "prefix": "rdfs", "uri": "http://www.w3.org/2000/01/rdf-schema#" }, - { "prefix": "xsd", "uri": "http://www.w3.org/2001/XMLSchema#" }, - { "prefix": "dc", "uri": "http://purl.org/dc/terms/" }, - { "prefix": "foaf", "uri": "http://xmlns.com/foaf/0.1/" }, - { "prefix": "dbpedia", "uri": "http://dbpedia.org/resource/" }, - { "prefix": "dbpedia-owl", "uri": "http://dbpedia.org/ontology/" }, - { "prefix": "dbpprop", "uri": "http://dbpedia.org/property/" }, - { "prefix": "hydra", "uri": "http://www.w3.org/ns/hydra/core#" }, - { "prefix": "void", "uri": "http://rdfs.org/ns/void#" } - ] + "datasources": [ + { + "@id": "ex:myHdtDatasource", + "@type": "HdtDatasource", + "datasourceTitle": "DBpedia 2014", + "description": "DBpedia 2014 with an HDT back-end", + "datasourcePath": "dbpedia", + "hdtFile": "data/dbpedia2014.hdt" }, { - "@id": "ldfc:Server#defaultDereferenceController", - "ldfs:dereference": [ - { - "dereferencePath": "/resource/", - "dereferenceDatasource": "ex:myHdtDatasource" - } - ] + "@id": "ex:mySparqlDatasource", + "@type": "SparqlDatasource", + "datasourceTitle": "DBpedia (Virtuoso)", + "description": "DBpedia with a Virtuoso back-end", + "datasourcePath": "dbpedia-sparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" } + ], + + "prefixes": [ + { "prefix": "rdf", "uri": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" }, + { "prefix": "rdfs", "uri": "http://www.w3.org/2000/01/rdf-schema#" }, + { "prefix": "xsd", "uri": "http://www.w3.org/2001/XMLSchema#" }, + { "prefix": "dc", "uri": "http://purl.org/dc/terms/" }, + { "prefix": "foaf", "uri": "http://xmlns.com/foaf/0.1/" }, + { "prefix": "dbpedia", "uri": "http://dbpedia.org/resource/" }, + { "prefix": "dbpedia-owl", "uri": "http://dbpedia.org/ontology/" }, + { "prefix": "dbpprop", "uri": "http://dbpedia.org/property/" }, + { "prefix": "hydra", "uri": "http://www.w3.org/ns/hydra/core#" }, + { "prefix": "void", "uri": "http://rdfs.org/ns/void#" } ] } From 88718cc0e958a5bf91d472c0f4c50ec215f9e12e Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 3 Mar 2020 13:02:53 +0100 Subject: [PATCH 077/165] Add documentation for core --- packages/core/README.md | 431 ++++++++++-------- packages/core/components/Server.jsonld | 2 +- packages/core/components/context.jsonld | 1 + .../core/config/config-example-advanced.json | 56 --- .../core/config/config-example-composite.json | 49 -- .../core/config/config-example-memento.json | 51 --- packages/core/config/config-example.json | 81 ++++ .../lib/controllers/DereferenceController.js | 2 +- 8 files changed, 332 insertions(+), 341 deletions(-) delete mode 100644 packages/core/config/config-example-advanced.json delete mode 100644 packages/core/config/config-example-composite.json delete mode 100644 packages/core/config/config-example-memento.json create mode 100644 packages/core/config/config-example.json diff --git a/packages/core/README.md b/packages/core/README.md index e57f7821..7c54daef 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,204 +1,269 @@ -# Linked Data Fragments Server +# Linked Data Fragments Server - Core -[![Build Status](https://travis-ci.org/LinkedDataFragments/Server.js.svg?branch=master)](https://travis-ci.org/LinkedDataFragments/Server.js) -[![npm version](https://badge.fury.io/js/ldf-server.svg)](https://www.npmjs.com/package/ldf-server) -[![Docker Automated Build](https://img.shields.io/docker/automated/linkeddatafragments/server.js.svg)](https://hub.docker.com/r/linkeddatafragments/server.js/) -[![DOI](https://zenodo.org/badge/16891600.svg)](https://zenodo.org/badge/latestdoi/16891600) - -On today's Web, Linked Data is published in different ways, -which include [data dumps](http://downloads.dbpedia.org/3.9/en/), -[subject pages](http://dbpedia.org/page/Linked_data), -and [results of SPARQL queries](http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=CONSTRUCT+%7B+%3Fp+a+dbpedia-owl%3AArtist+%7D%0D%0AWHERE+%7B+%3Fp+a+dbpedia-owl%3AArtist+%7D&format=text%2Fturtle). -We call each such part a [**Linked Data Fragment**](http://linkeddatafragments.org/). - -The issue with the current Linked Data Fragments -is that they are either so powerful that their servers suffer from low availability rates -([as is the case with SPARQL](http://sw.deri.org/~aidanh/docs/epmonitorISWC.pdf)), -or either don't allow efficient querying. - -Instead, this server offers **[Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)**. -Each Triple Pattern Fragment offers: - -- **data** that corresponds to a _triple pattern_ - _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=rdf%3Atype&object=dbpedia-owl%3ARestaurant))_. -- **metadata** that consists of the (approximate) total triple count - _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=rdf%3Atype&object=))_. -- **controls** that lead to all other fragments of the same dataset - _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=&object=%22John%22%40en))_. - -An example server is available at [data.linkeddatafragments.org](http://data.linkeddatafragments.org/). - - -## Install the server - -This server requires [Node.js](http://nodejs.org/) 4.0 or higher -and is tested on OSX and Linux. -To install, execute: -```bash -$ [sudo] npm install -g ldf-server -``` - - -## Use the server - -### Configure the data sources - -First, create a configuration file `config.json` similar to `config/config-example.json`, -in which you detail your data sources. -For example, this configuration uses an [HDT file](http://www.rdfhdt.org/) -and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: +This package provides core classes for Linked Data Fragments servers. + +This package should be used if you want to create your own LDF server configuration or LDF server module. +If you just want to run a QPF server, you can make use of [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf) instead. + +## Usage in `@ldf/server-qpf` + +This package exposes the the following context entries: + +**Controllers:** +* `AssetsController`: Responds to requests for assets. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` controller value._ +* `DereferenceController`: Responds to dereferencing requests. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` controller value._ +* `NotFoundController`: Responds to requests that cannot be resolved. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` controller value._ +* `Controller`: An abstract controller. _Should be used as `extends` value when creating new controllers._ +* `ControllerExtension`: An abstract controller extension. _Should be used as `extends` value when creating new controller extensions._ +* `assetsDir`: Path to a directory where assets can be found. _Should be used as key in a `Server` config._ +* `assetsPath`: URL matching for assets. _Should be used as key in a `Server` config._ +* `dereference`: A dereferencing entry for a datasource to a path. _Should be used as key in a `Server` config._ +* `dereferenceDatasource`: The datasource of a dereferencing entry. _Should be used as key in a dereferencing entry._ +* `dereferencePath`: The path of a dereferencing entry. _Should be used as key in a dereferencing entry._ + +**Datasources:** +* `EmptyDatasource`: An empty data source doesn't contain any quads. _Should be used as `@type` datasource value._ +* `IndexDatasource`: A datasource that lists other data sources. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` datasource value._ +* `MemoryDatasource`: An abstract in-memory datasource. _Should be used as `extends` value when creating new in-memory datasources._ +* `Datasource`: An abstract datasource. _Should be used as `extends` value when creating new datasources._ +* `datasourceTitle`: The title of a datasource. _Should be used as key in a datasource._ +* `description`: The description of a datasource. _Should be used as key in a datasource._ +* `datasourcePath`: The relative path to the datasource from the baseURL. _Should be used as key in a datasource._ +* `enabled`: If the datasource is enabled, by default true. _Should be used as key in a datasource._ +* `hide`: If the datasource must be hide from the index, by default false. _Should be used as key in a datasource._ +* `graph`: The default graph of the datasource. _Should be used as key in a datasource._ +* `license`: The license of the datasource. _Should be used as key in a datasource._ +* `licenseUrl`: A link to the license of the datasource. _Should be used as key in a datasource._ +* `copyright`: The copyright statement of the datasource. _Should be used as key in a datasource._ +* `homepage`: The homepage url of the datasource. _Should be used as key in a datasource._ +* `file`: The dataset file path. _Should be used as key in a memory datasource._ +* `datasourceUrl`: The dataset file URL from the baseURL. _Should be used as key in a memory datasource._ + +**Routers:** +* `DatasourceRouter`: Routes URLs to data sources. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` router value._ +* `PageRouter`: Routes page numbers to offsets. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` router value._ +* `Router`: An abstract router. _Should be used as `extends` value when creating new routers._ +* `pageSize`: The triple page size, which defaults to 100. _Should be used as key in a page router._ + +**Views:** +* `ErrorHtmlView`: Represents a 500 response in HTML. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ +* `ForbiddenHtmlView`: Represents a 401 response in HTML. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ +* `NotFoundHtmlView`: Represents a 404 response in HTML. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ +* `ErrorRdfView`: Represents a 500 response in RDF. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ +* `NotFoundRdfView`: Represents a 404 response in RDF. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ +* `ViewCollection`: Provides access to content-negotiated views by name. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ +* `HtmlView`: An abstract HTML view. _Should be used as `extends` value when creating new HTML views._ +* `RdfView`: An abstract RDF view. _Should be used as `extends` value when creating new RDF views._ +* `View`: An abstract view. _Should be used as `extends` value when creating new views._ +* `viewExtensions`: A view extension. _Should be used as key in a view._ +* `viewCache`: If views should be cached. _Should be used as key in an HTML view._ +* `n3Util`: The N3Util class. _Should be used as key in an HTML view._ +* `viewHeader`: The view header title. _Should be used as key in an HTML view._ + +**Other:** +* `Server`: An HTTP server that provides access to Linked Data Fragments. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `title`: The server name. _Should be used as key in a `Server` config._ +* `baseURL`: The base URL path for the server. _Should be used as key in a `Server` config._ +* `port`: The port the server will bind with. _Should be used as key in a `Server` config._ +* `workers`: The number of server instances that will be started. _Should be used as key in a `Server` config._ +* `protocol`: Explicitly set the protocol, default will be the protocol derived from the baseURL. _Should be used as key in a `Server` config._ +* `datasource` or `datasources`: One or more datasources for the server. _Should be used as key in a `Server` config._ +* `prefixes`: A collection of default URI prefixes. _Should be used as key in a `Server` config._ +* `prefix`: The prefix label of a prefix entry. _Should be used as key in a prefix entry._ +* `uri`: The prefix URI of a prefix entry. _Should be used as key in a prefix entry._ +* `responseHeaders`: Default headers that should be set in responses. _Should be used as key in a prefix entry._ +* `headerName`: The header name in a response header entry. _Should be used as key in a response header entry._ +* `headerValue`: The header value in a response header entry. _Should be used as key in a response header entry._ +* `sslKey`: Path to an SSL key. _Should be used as key in a `Server` config._ +* `sslCert`: Path to an SSL certificate. _Should be used as key in a `Server` config._ +* `sslCa`: Path to an SSL certificate authority. _Should be used as key in a `Server` config._ +* `logging`: If the server should perform logging, defaults to `false`. _Should be used as key in a `Server` config._ +* `loggingFile`: Path to a log file. _Should be used as key in a `Server` config._ +* `routers`: Routers for the server. This is configured by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ +* `controllers`: Controllers for the server. This is configured by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ +* `viewCollection`: Override the default view collection. This is configured by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ +* `views`: Views for the server. This is configured by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ +* `UrlData`: A data object class for preset URL information. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `urlData`: The UrlData helper object. This is enabled by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ + +`@ldf/server-qpf` and `@ldf/preset-qpf` provide default instantiations of all core classes, +which means that you don't have to define them in your config file yourself. +The only thing you still need to do is defining different optional parameters, as shown below. + +Example: ```json { + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + "title": "My Linked Data Fragments server", - "datasources": { - "dbpedia": { - "title": "DBpedia 2014", - "type": "HdtDatasource", - "description": "DBpedia 2014 with an HDT back-end", - "settings": { "file": "data/dbpedia2014.hdt" } + "baseURL": "https://example.org/", + "port": 3000, + "workers": 2, + "protocol": "http", + + "datasources": [ + { + "@id": "ex:myDatasourceVersion1", + "@type": "SparqlDatasource", + "datasourceTitle": "My SPARQL source", + "description": "My datasource with a SPARQL-endpoint back-end", + "datasourcePath": "mysparql", + "sparqlEndpoint": "https://dbpedia.org/sparql", + "enabled": true, + "hide": false, + "license": "MIT", + "licenseUrl": "http://example.org/my-license", + "copyright": "This datasource is owned by Alice", + "homepage": "http://example.org/alice" }, - "dbpedia-sparql": { - "title": "DBpedia 3.9 (Virtuoso)", - "type": "SparqlDatasource", - "description": "DBpedia 3.9 with a Virtuoso back-end", - "settings": { "endpoint": "https://dbpedia.org/sparql", "defaultGraph": "http://dbpedia.org" } + { + "@id": "ex:myDatasourceVersion2", + "@type": "TurtleDatasource", + "datasourceTitle": "My Turtle file", + "description": "My dataset with a Turtle back-end", + "datasourcePath": "myttl", + "file": "path/to/file.ttl", + "graph": "http://example.org/default-graph" } - } + ], + + "prefixes": [ + { "prefix": "rdf", "uri": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" }, + { "prefix": "rdfs", "uri": "http://www.w3.org/2000/01/rdf-schema#" }, + { "prefix": "owl", "uri": "http://www.w3.org/2002/07/owl#" }, + { "prefix": "xsd", "uri": "http://www.w3.org/2001/XMLSchema#" }, + { "prefix": "hydra", "uri": "http://www.w3.org/ns/hydra/core#" }, + { "prefix": "void", "uri": "http://rdfs.org/ns/void#" }, + { "prefix": "skos", "uri": "http://www.w3.org/2004/02/skos/core#" }, + { "prefix": "dcterms", "uri": "http://purl.org/dc/terms/" }, + { "prefix": "dc11", "uri": "http://purl.org/dc/elements/1.1/" }, + { "prefix": "foaf", "uri": "http://xmlns.com/foaf/0.1/" }, + { "prefix": "geo", "uri": "http://www.w3.org/2003/01/geo/wgs84_pos#" }, + { "prefix": "dbpedia", "uri": "http://dbpedia.org/resource/" }, + { "prefix": "dbpedia-owl", "uri": "http://dbpedia.org/ontology/" }, + { "prefix": "dbpprop", "uri": "http://dbpedia.org/property/" } + ], + + "logging": true, + "loggingFile": "access.log", + + "dereference": [ + { + "dereferenceDatasource": "ex:myDatasourceVersion2", + "dereferencePath": "/resource/" + } + ], + + "responseHeaders": [ + { "headerName": "Access-Control-Allow-Origin", "headerValue": "*" }, + { "headerName": "Access-Control-Allow-Headers", "headerValue": "Accept-Datetime" }, + { "headerName": "Access-Control-Expose-Headers", "headerValue": "Content-Location,Link,Memento-Datetime" } + ], + + "sslKey": "../core/config/certs/localhost-server.key", + "sslCert": "../core/config/certs/localhost-server.crt", + "sslCa": "../core/config/certs/localhost-ca.crt", + + "router": [ + { + "@id": "preset-qpf:sets/routers.json#myPageRouter", + "pageSize": 50 + } + ] } -``` - -The following sources are supported out of the box: -- HDT files ([`HdtDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/HdtDatasource.js) with `file` setting) -- N-Triples documents ([`NTriplesDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/NTriplesDatasource.js) with `url` setting) -- Turtle documents ([`TurtleDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/TurtleDatasource.js) with `url` setting) -- N-Quads documents ([`NQuadsDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/NQuadsDatasource.js) with `url` setting) -- TriG documents ([`TrigDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/TrigDatasource.js) with `url` setting) -- JSON-LD documents ([`JsonLdDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/JsonLdDatasource.js) with `url` setting) -- SPARQL endpoints ([`SparqlDatasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/SparqlDatasource.js) with `endpoint` and optionally `defaultGraph` settings) - -Support for new sources is possible by implementing the [`Datasource`](https://github.com/LinkedDataFragments/Server.js/blob/master/lib/datasources/Datasource.js) interface. - -### Start the server - -After creating a configuration file, execute -```bash -$ ldf-server config.json 5000 4 -``` -Here, `5000` is the HTTP port on which the server will listen, -and `4` the number of worker processes. - -Now visit `http://localhost:5000/` in your browser. - -### Reload running server - -You can reload the server without any downtime -in order to load a new configuration or version. -
-In order to do this, you need the process ID of the server master process. -
-One possibility to obtain this are the server logs: -```bash -$ bin/ldf-server config.json -Master 28106 running. -Worker 28107 running on http://localhost:3000/. -``` -If you send the server a `SIGHUP` signal: -```bash -$ kill -s SIGHUP 28106 ``` -it will reload by replacing its workers. -Note that crashed or killed workers are always replaced automatically. +## Usage in other packages -### _(Optional)_ Set up a reverse proxy +When this module is used in a package other than `@ldf/server-qpf`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/core.jsonld` must be imported. -A typical Linked Data Fragments server will be exposed -on a public domain or subdomain along with other applications. -Therefore, you need to configure the server to run behind an HTTP reverse proxy. -
-To set this up, configure the server's public URL in your server's `config.json`: -```json -{ - "title": "My Linked Data Fragments server", - "baseURL": "http://data.example.org/", - "datasources": { … } -} +For example: ``` -Then configure your reverse proxy to pass requests to your server. -Here's an example for [nginx](http://nginx.org/): -```nginx -server { - server_name data.example.org; - - location / { - proxy_pass http://127.0.0.1:3000$request_uri; - proxy_set_header Host $http_host; - proxy_pass_header Server; - } -} -``` -Change the value `3000` into the port on which your Linked Data Fragments server runs. - -If you would like to proxy the data in a subfolder such as `http://example.org/my/data`, -modify the `baseURL` in your `config.json` to `"http://example.org/my/data"` -and change `location` from `/` to `/my/data` (excluding a trailing slash). - -### _(Optional)_ Running under HTTPS - -HTTPS can be enabled in two ways: natively by the server, or through a proxy (explained above). - -With native HTTPS, the server will establish the SSL layer. Set the following values in your config file to enable this: - - { - "protocol": "https", - "ssl": { - "keys" : { - "key": "./private-key-server.key.pem", - "ca": ["./root-ca.crt.pem"], - "cert": "./server-certificate.crt.pem" - } - } - } - - If `protocol`is not specified, it will derive the protocol from the `baseURL`. Hence, HTTPS can also be enabled as such: - - { - "baseURL": "https://data.example.org/", - "ssl": { - "keys" : { - "key": "./private-key-server.key.pem", - "ca": ["./root-ca.crt.pem"], - "cert": "./server-certificate.crt.pem" - } - } - } - -If you decide to let a proxy handle HTTPS, use this configuration to run the server as `http`, but construct links as `https` (so clients don't break): - - { - "protocol": "http", - "baseURL": "https://data.example.org/", - } - - -### _(Optional)_ Running in a Docker container +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld" + ], + "@id": "urn:ldf-server:my", + + "controllers": [ + { + "@id": "ex:myAssetsController", + "@type": "AssetsController" + }, + { + "@id": "ex:myDereferenceController", + "@type": "DereferenceController" + }, + { + "@id": "ex:myNotFoundController", + "@type": "NotFoundController" + } + ], + + "datasources": [ + { + "@id": "ex:myIndexDatasource", + "@type": "IndexDatasource", + "datasourceTitle": "dataset index", + "datasourcePath": "/", + "hide": true + } + ], + + "prefixes": [ + { "prefix": "rdf", "uri": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" }, + { "prefix": "rdfs", "uri": "http://www.w3.org/2000/01/rdf-schema#" }, + { "prefix": "owl", "uri": "http://www.w3.org/2002/07/owl#" }, + { "prefix": "xsd", "uri": "http://www.w3.org/2001/XMLSchema#" }, + { "prefix": "hydra", "uri": "http://www.w3.org/ns/hydra/core#" }, + { "prefix": "void", "uri": "http://rdfs.org/ns/void#" } + ], + + "routers": [ + { + "@id": "ex:myDatasourceRouter", + "@type": "DatasourceRouter" + }, + { + "@id": "ex:myPageRouter", + "@type": "PageRouter" + } + ], -If you want to rapidly deploy the server as a microservice, you can build a [Docker](https://www.docker.com/) container as follows: + "views": [ + { + "@id": "ex:myErrorHtmlView", + "@type": "ErrorHtmlView" + }, + { + "@id": "ex:myErrorRdfView", + "@type": "ErrorRdfView" + }, + { + "@id": "ex:myForbiddenHtmlView", + "@type": "ForbiddenHtmlView" + }, + { + "@id": "ex:myNotFoundHtmlView", + "@type": "NotFoundHtmlView" + }, + { + "@id": "ex:myNotFoundRdfView", + "@type": "NotFoundRdfView" + } + ] -```bash -$ docker build -t ldf-server . -``` -After that, you can run your newly created container: -```bash -$ docker run -p 3000:3000 -t -i --rm -v $(pwd)/config.json:/tmp/config.json ldf-server /tmp/config.json + // Same as above... +} ``` -### _(Optional)_ Host historical version of datasets - -You can [enable the Memento protocol](https://github.com/LinkedDataFragments/Server.js/wiki/Configuring-Memento) to offer different versions of an evolving dataset. - ## License The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. diff --git a/packages/core/components/Server.jsonld b/packages/core/components/Server.jsonld index bbc2cf23..76372c4c 100644 --- a/packages/core/components/Server.jsonld +++ b/packages/core/components/Server.jsonld @@ -249,7 +249,7 @@ "value": { "fields": [ { - "keyRaw": "header", + "keyRaw": "headers", "value": { "fields": [ { diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 5e630a97..4dbaadcf 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -68,6 +68,7 @@ "urlData": "ldfc:Server#urlData", "port": "ldfc:Server#port", "workers": "ldfc:Server#workers", + "protocol": "ldfc:Server#protocol", "datasource": "ldfc:Server#datasource", "datasources": "ldfc:Server#datasource", "prefixes": "ldfc:Server#prefixes", diff --git a/packages/core/config/config-example-advanced.json b/packages/core/config/config-example-advanced.json deleted file mode 100644 index 6835ad17..00000000 --- a/packages/core/config/config-example-advanced.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "title": "My Linked Data Fragments server", - "baseURL": "http://example.org/", - - "datasources": { - "dbpedia": { - "title": "DBpedia 2014", - "description": "DBpedia 2014 with an HDT back-end", - "license": "Creative Commons Attribution-ShareAlike 3.0", - "licenseUrl": "https://creativecommons.org/licenses/by-sa/3.0/", - "copyright": "The DBpedia dataset is Open Knowledge.", - "homepage": "http://dbpedia.org/", - "type": "HdtDatasource", - "settings": { "file": "data/dbpedia2014.hdt" } - }, - "dbpedia-sparql": { - "title": "DBpedia (Virtuoso)", - "type": "SparqlDatasource", - "description": "DBpedia with a Virtuoso back-end", - "settings": { "endpoint": "https://dbpedia.org/sparql" } - } - }, - - "dereference": { - "/resource/": "dbpedia" - }, - - "routers": [ - { "type": "DatasourceRouter" }, - { "type": "QuadPatternRouter" }, - { "type": "PageRouter", "settings": { "pageSize": 100 } } - ], - - "prefixes": { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "owl": "http://www.w3.org/2002/07/owl#", - "skos": "http://www.w3.org/2004/02/skos/core#", - "xsd": "http://www.w3.org/2001/XMLSchema#", - "dc": "http://purl.org/dc/terms/", - "dcterms": "http://purl.org/dc/terms/", - "dc11": "http://purl.org/dc/elements/1.1/", - "foaf": "http://xmlns.com/foaf/0.1/", - "geo": "http://www.w3.org/2003/01/geo/wgs84_pos#", - "dbpedia": "http://dbpedia.org/resource/", - "dbpedia-owl": "http://dbpedia.org/ontology/", - "dbpprop": "http://dbpedia.org/property/", - "hydra": "http://www.w3.org/ns/hydra/core#", - "void": "http://rdfs.org/ns/void#" - }, - - "logging": { - "enabled": true, - "file": "access.log" - } -} diff --git a/packages/core/config/config-example-composite.json b/packages/core/config/config-example-composite.json deleted file mode 100644 index 79dad176..00000000 --- a/packages/core/config/config-example-composite.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "title": "Composite Linked Data Fragments server", - - "datasources": { - "test-composite": { - "title": "Composite", - "type": "CompositeDatasource", - "description": "An example composite datasource", - "settings": { - "references": [ "hdt", "ttl", "jsonld", "hdtext", "trig" ] - } - }, - "hdt": { - "hide": true, - "title": "HDT", - "type": "HdtDatasource", - "description": "A test HDT datasource", - "settings": { "file": "test/assets/test.hdt", "graph": "http://example.org/graph0" } - }, - "ttl": { - "hide": true, - "title": "Turtle", - "type": "TurtleDatasource", - "description": "A test turtle datasource", - "settings": { "file": "test/assets/test.ttl", "graph": "http://example.org/graph1" } - }, - "jsonld": { - "hide": true, - "title": "JSONLD", - "type": "JsonLdDatasource", - "description": "A test jsonld datasource", - "settings": { "file": "test/assets/test.jsonld", "graph": "http://example.org/graph2" } - }, - "hdtext": { - "hide": true, - "title": "HDT-EXT", - "type": "ExternalHdtDatasource", - "description": "A blank test HDT datasource", - "settings": { "file": "test/assets/test-blank.hdt", "graph": "http://example.org/graph3" } - }, - "trig": { - "hide": true, - "title": "Trig", - "type": "TrigDatasource", - "description": "A test Trig datasource", - "settings": { "file": "test/assets/test.trig" } - } - } -} diff --git a/packages/core/config/config-example-memento.json b/packages/core/config/config-example-memento.json deleted file mode 100644 index 626bc41b..00000000 --- a/packages/core/config/config-example-memento.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "title": "Memento-aware server", - - "datasources": { - "dbpedia2015": { - "title": "DBpedia 2015", - "type": "HdtDatasource", - "settings": { - "file": "data/dbpedia2015en.hdt" - }, - "memento": { - "interval": ["2014-09-14T11:59:59Z", "2015-04-15T00:00:00Z"] - } - }, - "dbpedia2014": { - "title": "DBpedia 2014", - "type": "HdtDatasource", - "settings": { - "file": "data/dbpedia2014en.hdt" - }, - "memento": { - "interval": ["2013-06-15T11:59:59Z", "2014-09-15T00:00:00Z"] - } - } - }, - - "timegates": { - "baseURL": "/timegate/", - "mementos": { - "dbpedia": { - "versions": [ - "dbpedia2015", - "dbpedia2014" - ] - } - } - }, - - "prefixes": { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "xsd": "http://www.w3.org/2001/XMLSchema#", - "dc": "http://purl.org/dc/terms/", - "foaf": "http://xmlns.com/foaf/0.1/", - "dbpedia": "http://dbpedia.org/resource/", - "dbpedia-owl": "http://dbpedia.org/ontology/", - "dbpprop": "http://dbpedia.org/property/", - "hydra": "http://www.w3.org/ns/hydra/core#", - "void": "http://rdfs.org/ns/void#" - } -} diff --git a/packages/core/config/config-example.json b/packages/core/config/config-example.json new file mode 100644 index 00000000..c33cf876 --- /dev/null +++ b/packages/core/config/config-example.json @@ -0,0 +1,81 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "title": "My Linked Data Fragments server", + "baseURL": "https://example.org/", + "port": 3000, + "workers": 2, + "protocol": "http", + + "datasources": [ + { + "@id": "ex:myDatasourceVersion1", + "@type": "SparqlDatasource", + "datasourceTitle": "My SPARQL source", + "description": "My datasource with a SPARQL-endpoint back-end", + "datasourcePath": "mysparql", + "sparqlEndpoint": "https://dbpedia.org/sparql", + "enabled": true, + "hide": false, + "license": "MIT", + "licenseUrl": "http://example.org/my-license", + "copyright": "This datasource is owned by Alice", + "homepage": "http://example.org/alice" + }, + { + "@id": "ex:myDatasourceVersion2", + "@type": "TurtleDatasource", + "datasourceTitle": "My Turtle file", + "description": "My dataset with a Turtle back-end", + "datasourcePath": "myttl", + "file": "path/to/file.ttl", + "graph": "http://example.org/default-graph" + } + ], + + "prefixes": [ + { "prefix": "rdf", "uri": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" }, + { "prefix": "rdfs", "uri": "http://www.w3.org/2000/01/rdf-schema#" }, + { "prefix": "owl", "uri": "http://www.w3.org/2002/07/owl#" }, + { "prefix": "xsd", "uri": "http://www.w3.org/2001/XMLSchema#" }, + { "prefix": "hydra", "uri": "http://www.w3.org/ns/hydra/core#" }, + { "prefix": "void", "uri": "http://rdfs.org/ns/void#" }, + { "prefix": "skos", "uri": "http://www.w3.org/2004/02/skos/core#" }, + { "prefix": "dcterms", "uri": "http://purl.org/dc/terms/" }, + { "prefix": "dc11", "uri": "http://purl.org/dc/elements/1.1/" }, + { "prefix": "foaf", "uri": "http://xmlns.com/foaf/0.1/" }, + { "prefix": "geo", "uri": "http://www.w3.org/2003/01/geo/wgs84_pos#" }, + { "prefix": "dbpedia", "uri": "http://dbpedia.org/resource/" }, + { "prefix": "dbpedia-owl", "uri": "http://dbpedia.org/ontology/" }, + { "prefix": "dbpprop", "uri": "http://dbpedia.org/property/" } + ], + + "logging": true, + "loggingFile": "access.log", + + "dereference": [ + { + "dereferenceDatasource": "ex:myDatasourceVersion2", + "dereferencePath": "/resource/" + } + ], + + "responseHeaders": [ + { "headerName": "Access-Control-Allow-Origin", "headerValue": "*" }, + { "headerName": "Access-Control-Allow-Headers", "headerValue": "Accept-Datetime" }, + { "headerName": "Access-Control-Expose-Headers", "headerValue": "Content-Location,Link,Memento-Datetime" } + ], + + "sslKey": "../core/config/certs/localhost-server.key", + "sslCert": "../core/config/certs/localhost-server.crt", + "sslCa": "../core/config/certs/localhost-ca.crt", + + "router": [ + { + "@id": "preset-qpf:sets/routers.json#myPageRouter", + "pageSize": 50 + } + ] +} diff --git a/packages/core/lib/controllers/DereferenceController.js b/packages/core/lib/controllers/DereferenceController.js index 487a568f..4b15f14f 100644 --- a/packages/core/lib/controllers/DereferenceController.js +++ b/packages/core/lib/controllers/DereferenceController.js @@ -22,7 +22,7 @@ class DeferenceController extends Controller { var match = this._matcher.exec(request.url), datasource; if (datasource = match && this._paths[match[1]]) { var entity = url.format(_.defaults({ - pathname: '/' + datasource.path, + pathname: datasource.path, query: { subject: url.format(request.parsedUrl) }, }, request.parsedUrl)); response.writeHead(303, { 'Location': entity, 'Content-Type': Util.MIME_PLAINTEXT }); From 6b8ca0159427a282039a67b5d8f6adbd2898dac2 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 3 Mar 2020 13:03:38 +0100 Subject: [PATCH 078/165] Fix summary controller being enabled by default --- packages/feature-summary/lib/controllers/SummaryController.js | 4 ++++ .../lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js | 2 +- .../lib/views/summary/QuadPatternFragmentsRdfView-Summary.js | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/feature-summary/lib/controllers/SummaryController.js b/packages/feature-summary/lib/controllers/SummaryController.js index 7355f13e..3c3e71ab 100644 --- a/packages/feature-summary/lib/controllers/SummaryController.js +++ b/packages/feature-summary/lib/controllers/SummaryController.js @@ -14,6 +14,7 @@ class SummaryController extends Controller { super(options); // Settings for data summaries var summaries = options.summaries || {}; + this._enabled = summaries.dir || summaries.path; this._summariesFolder = summaries.dir || path.join(__dirname, '../../summaries'); // Set up path matching this._summariesPath = summaries.path || '/summaries/', @@ -21,6 +22,9 @@ class SummaryController extends Controller { } _handleRequest(request, response, next) { + if (!this._enabled) + return next(); + var summaryMatch = this._matcher && this._matcher.exec(request.url), datasource; if (datasource = summaryMatch && summaryMatch[1]) { var summaryFile = path.join(this._summariesFolder, datasource + '.ttl'); diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js index dca810ee..0213dac6 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js @@ -14,7 +14,7 @@ class SummaryHtmlViewExtension extends HtmlView { _render(settings, request, response, done) { // If summaries are enabled, connect the datasource to its summary // TODO: summary should be of/off per dataset - if (settings.summaries) { + if (settings.summaries && (settings.summaries.dir || settings.summaries.path)) { // TODO: summary URL should be generated by router settings.summary = { url: settings.baseURL + 'summaries' + encodeURIComponent(settings.query.datasource), diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js index cbae4941..e29ce84a 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js @@ -15,7 +15,7 @@ class SummaryRdfViewExtension extends RdfView { _generateRdf(settings, data, metadata, done) { // If summaries are enabled, connect the datasource to its summary // TODO: summary should be of/off per dataset - if (settings.summaries) { + if (settings.summaries && (settings.summaries.dir || settings.summaries.path)) { // TODO: summary URL should be generated by router metadata(settings.datasource.url, ds + 'hasDatasetSummary', settings.baseURL + 'summaries' + encodeURIComponent(settings.query.datasource)); From ec6a5d44cbefe3d7475724382ecd0d41b338c8ad Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 08:51:27 +0100 Subject: [PATCH 079/165] Add documentation for root README --- README.md | 53 ++++++++++++++++++++++------------- packages/server-qpf/README.md | 2 ++ 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 8505c22c..c31bbbd4 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,36 @@ [![Docker Automated Build](https://img.shields.io/docker/automated/linkeddatafragments/server.js.svg)](https://hub.docker.com/r/linkeddatafragments/server.js/) [![DOI](https://zenodo.org/badge/16891600.svg)](https://zenodo.org/badge/latestdoi/16891600) +This repository contains modules for [Linked Data Fragments (LDF)](https://linkeddatafragments.org/) Servers. + +**If you just want to use this server, have a look at these default configurations**: +* [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf): an LDF server with Quad/Triple Pattern Fragments support. _(previously known as `ldf-server`)_ + +This repository should be used by LDF Server module **developers** as it contains multiple LDF Server modules that can be composed. +We manage this repository as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) +using [Lerna](https://lernajs.io/). + +The following modules are available: +* [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf): An LDF server with Quad/Triple Pattern Fragments support. +* [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf): Configuration presets for Quad/Triple Pattern Fragments servers. +* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. +* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). +* [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. +* [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). +* [`@ldf/feature-webid`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-webid): Feature that enables authenticated requests from clients with WebID. +* [`@ldf/datasource-hdt`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt): Datasource that allows HDT files to be loaded. +* [`@ldf/datasource-jsonld`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld): Datasource that allows JSON-LD files to be loaded. +* [`@ldf/datasource-n3`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3): Datasource that allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. +* [`@ldf/datasource-sparql`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql): Datasource that allows SPARQL endpoints to be used as a data proxy. +* [`@ldf/datasource-composite`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite): Datasource that delegates queries to an sequence of other datasources. + +These modules can be used to configure your own LDF server with the features you want. +As an example on how to make such a server, +you can have a look at [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf), +which is a default server configuration that has all possible features enabled. + +## Motivation + On today's Web, Linked Data is published in different ways, which include [data dumps](http://downloads.dbpedia.org/3.9/en/), [subject pages](http://dbpedia.org/page/Linked_data), @@ -18,10 +48,10 @@ is that they are either so powerful that their servers suffer from low availabil ([as is the case with SPARQL](http://sw.deri.org/~aidanh/docs/epmonitorISWC.pdf)), or either don't allow efficient querying. -Instead, this server offers **[Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)**. -Each Triple Pattern Fragment offers: +Instead, this server offers Quad Pattern Fragments (a.k.a. **[Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)**). +Each Quad Pattern Fragment offers: -- **data** that corresponds to a _triple pattern_ +- **data** that corresponds to a _quad/triple pattern_ _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=rdf%3Atype&object=dbpedia-owl%3ARestaurant))_. - **metadata** that consists of the (approximate) total triple count _([example](http://data.linkeddatafragments.org/dbpedia?subject=&predicate=rdf%3Atype&object=))_. @@ -30,23 +60,6 @@ Each Triple Pattern Fragment offers: An example server is available at [data.linkeddatafragments.org](http://data.linkeddatafragments.org/). -TODO: briefly explain configurations - -**If you just want to use this server, have a look at these default configurations**: -* TODO - -This repository should be used by LDF Server module **developers** as it contains multiple LDF Server modules that can be composed. -This repository is managed as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) -using [Lerna](https://lernajs.io/). - -## Install the server - -TODO: basic installation, and refer to packages for more details - -## Use the server - -TODO: basic usage, and refer to packages for more details - ## Development Setup If you want to develop new features diff --git a/packages/server-qpf/README.md b/packages/server-qpf/README.md index f1f4d079..71168de0 100644 --- a/packages/server-qpf/README.md +++ b/packages/server-qpf/README.md @@ -3,6 +3,8 @@ A Linked Data Fragments server with Quad Pattern Fragments support. +_This package has been renamed from `ldf-server` to `@ldf/server-qpf`._ + ## Motivation On today's Web, Linked Data is published in different ways, From 09ed4b3071450ea42901e868639780269addfe2d Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 09:18:40 +0100 Subject: [PATCH 080/165] Add quick-start guide to root README --- README.md | 114 ++++++++++++++++++------ packages/core/README.md | 2 + packages/datasource-composite/README.md | 2 + packages/datasource-hdt/README.md | 2 + packages/datasource-jsonld/README.md | 2 + packages/datasource-n3/README.md | 2 + packages/datasource-sparql/README.md | 2 + packages/feature-memento/README.md | 2 + packages/feature-qpf/README.md | 2 + packages/feature-summary/README.md | 2 + packages/feature-webid/README.md | 2 + packages/preset-qpf/README.md | 2 + packages/server-qpf/README.md | 4 +- 13 files changed, 113 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index c31bbbd4..23fe73b3 100644 --- a/README.md +++ b/README.md @@ -9,32 +9,6 @@ This repository contains modules for [Linked Data Fragments (LDF)](https://linkeddatafragments.org/) Servers. -**If you just want to use this server, have a look at these default configurations**: -* [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf): an LDF server with Quad/Triple Pattern Fragments support. _(previously known as `ldf-server`)_ - -This repository should be used by LDF Server module **developers** as it contains multiple LDF Server modules that can be composed. -We manage this repository as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) -using [Lerna](https://lernajs.io/). - -The following modules are available: -* [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf): An LDF server with Quad/Triple Pattern Fragments support. -* [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf): Configuration presets for Quad/Triple Pattern Fragments servers. -* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. -* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). -* [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. -* [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). -* [`@ldf/feature-webid`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-webid): Feature that enables authenticated requests from clients with WebID. -* [`@ldf/datasource-hdt`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt): Datasource that allows HDT files to be loaded. -* [`@ldf/datasource-jsonld`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld): Datasource that allows JSON-LD files to be loaded. -* [`@ldf/datasource-n3`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3): Datasource that allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. -* [`@ldf/datasource-sparql`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql): Datasource that allows SPARQL endpoints to be used as a data proxy. -* [`@ldf/datasource-composite`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite): Datasource that delegates queries to an sequence of other datasources. - -These modules can be used to configure your own LDF server with the features you want. -As an example on how to make such a server, -you can have a look at [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf), -which is a default server configuration that has all possible features enabled. - ## Motivation On today's Web, Linked Data is published in different ways, @@ -60,6 +34,94 @@ Each Quad Pattern Fragment offers: An example server is available at [data.linkeddatafragments.org](http://data.linkeddatafragments.org/). +## Quick Start + +The easiest way to start using this server is via +[`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf), +the default configuration of an LDF server with Quad/Triple Pattern Fragments support. _(previously known as `ldf-server`)_ + +### Install the server + +This server requires [Node.js](http://nodejs.org/) 10.0 or higher +and is tested on OSX and Linux. +To install, execute: +```bash +$ [sudo] npm install -g @ldf/server-qpf +``` + +### Configure the data sources + +First, create a configuration file `config.json` similar to `config/config-example.json`, +in which you detail your data sources. +For example, this configuration uses an [HDT file](http://www.rdfhdt.org/) +and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "title": "My Linked Data Fragments server", + + "datasources": [ + { + "@id": "ex:myHdtDatasource", + "@type": "HdtDatasource", + "datasourceTitle": "DBpedia 2014", + "description": "DBpedia 2014 with an HDT back-end", + "datasourcePath": "dbpedia", + "hdtFile": "data/dbpedia2014.hdt" + }, + { + "@id": "ex:mySparqlDatasource", + "@type": "SparqlDatasource", + "datasourceTitle": "DBpedia (Virtuoso)", + "description": "DBpedia with a Virtuoso back-end", + "datasourcePath": "dbpedia-sparql", + "sparqlEndpoint": "https://dbpedia.org/sparql" + } + ] +} +``` + +_More details on how to configure this server can be found in the README of [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf)._ + +### Start the server + +After creating a configuration file, execute +```bash +$ ldf-server-qpf config.json 5000 4 +``` +Here, `5000` is the HTTP port on which the server will listen, +and `4` the number of worker processes. + +Now visit `http://localhost:5000/` in your browser. + +## Configure your own server + +This repository should be used by LDF Server module **developers** as it contains multiple LDF Server modules that can be composed. +We manage this repository as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) +using [Lerna](https://lernajs.io/). + +The following modules are available: +* [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf): An LDF server with Quad/Triple Pattern Fragments support. +* [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf): Configuration presets for Quad/Triple Pattern Fragments servers. +* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. +* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). +* [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. +* [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). +* [`@ldf/feature-webid`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-webid): Feature that enables authenticated requests from clients with WebID. +* [`@ldf/datasource-hdt`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt): Datasource that allows HDT files to be loaded. +* [`@ldf/datasource-jsonld`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld): Datasource that allows JSON-LD files to be loaded. +* [`@ldf/datasource-n3`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3): Datasource that allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. +* [`@ldf/datasource-sparql`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql): Datasource that allows SPARQL endpoints to be used as a data proxy. +* [`@ldf/datasource-composite`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite): Datasource that delegates queries to an sequence of other datasources. + +These modules can be used to configure your own LDF server with the features you want. +As an example on how to make such a server, +you can have a look at [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf), +which is a default server configuration that has all possible features enabled. + ## Development Setup If you want to develop new features diff --git a/packages/core/README.md b/packages/core/README.md index 7c54daef..dae84e72 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -6,6 +6,8 @@ This package provides core classes for Linked Data Fragments servers. This package should be used if you want to create your own LDF server configuration or LDF server module. If you just want to run a QPF server, you can make use of [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf) instead. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in `@ldf/server-qpf` This package exposes the the following context entries: diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md index 17e95ebf..47d041da 100644 --- a/packages/datasource-composite/README.md +++ b/packages/datasource-composite/README.md @@ -4,6 +4,8 @@ This module contains a composite datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It delegates queries to an sequence of other datasources. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in `@ldf/server-qpf` This package exposes the following config entries: diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md index afd64425..5c0514d9 100644 --- a/packages/datasource-hdt/README.md +++ b/packages/datasource-hdt/README.md @@ -4,6 +4,8 @@ This module contains a HDT datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows HDT files to be loaded. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in `@ldf/server-qpf` This package exposes the following config entries: diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md index 9d2cd87e..e72a8ac6 100644 --- a/packages/datasource-jsonld/README.md +++ b/packages/datasource-jsonld/README.md @@ -4,6 +4,8 @@ This module contains a JSON-LD datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows JSON-LD files to be loaded. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in `@ldf/server-qpf` This package exposes the following config entries: diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md index 4d40a9a2..0cf01321 100644 --- a/packages/datasource-n3/README.md +++ b/packages/datasource-n3/README.md @@ -4,6 +4,8 @@ This module contains a N3 datasources for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in `@ldf/server-qpf` This package exposes the following config entries: diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index 92dbfbe1..db0919f6 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -4,6 +4,8 @@ This module contains a SPARQL datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows SPARQL endpoints to be used as a data proxy. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in `@ldf/server-qpf` This package exposes the following config entries: diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md index 0445b28a..c821c13d 100644 --- a/packages/feature-memento/README.md +++ b/packages/feature-memento/README.md @@ -5,6 +5,8 @@ This module adds support for the [Memento Protocol](http://mementoweb.org/about/ If your Linked Data source evolve over time and has multiple versions, it makes access and query across the various versions straightforward. To enable the [Memento Protocol](http://mementoweb.org/about/), follow the guide below. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Memento basics Any data source can be configured as a Memento resource, meaning it represents a prior version of an existing data source. diff --git a/packages/feature-qpf/README.md b/packages/feature-qpf/README.md index eb9573e6..6f899711 100644 --- a/packages/feature-qpf/README.md +++ b/packages/feature-qpf/README.md @@ -3,6 +3,8 @@ This module adds Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in `@ldf/server-qpf` This package exposes the following config entries: diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md index 9b2b6f96..b7b93990 100644 --- a/packages/feature-summary/README.md +++ b/packages/feature-summary/README.md @@ -3,6 +3,8 @@ This module adds summaries to datasources based on turtle files corresponding to the datasource name. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in `@ldf/server-qpf` This package exposes the following config entries: diff --git a/packages/feature-webid/README.md b/packages/feature-webid/README.md index f33d1212..72c96863 100644 --- a/packages/feature-webid/README.md +++ b/packages/feature-webid/README.md @@ -6,6 +6,8 @@ This extension will only be active when the server is running in [https-mode](ht This package is **not** included by default in `@ldf/server-qpf` and `@ldf/preset-qpf`. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage in other packages When this module is used in a package`, diff --git a/packages/preset-qpf/README.md b/packages/preset-qpf/README.md index 9a13e7fe..7faf4e9e 100644 --- a/packages/preset-qpf/README.md +++ b/packages/preset-qpf/README.md @@ -19,6 +19,8 @@ Concretely, it configures the following packages: * [`@ldf/datasource-sparql`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql): Datasource that allows SPARQL endpoints to be used as a data proxy. * [`@ldf/datasource-composite`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite): Datasource that delegates queries to an sequence of other datasources. +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Usage When this module is used in a package other than `@ldf/server-qpf`, diff --git a/packages/server-qpf/README.md b/packages/server-qpf/README.md index 71168de0..02a81406 100644 --- a/packages/server-qpf/README.md +++ b/packages/server-qpf/README.md @@ -5,6 +5,8 @@ A Linked Data Fragments server with Quad Pattern Fragments support. _This package has been renamed from `ldf-server` to `@ldf/server-qpf`._ +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + ## Motivation On today's Web, Linked Data is published in different ways, @@ -72,7 +74,7 @@ and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: "datasourcePath": "dbpedia-sparql", "sparqlEndpoint": "https://dbpedia.org/sparql" } - ], + ] } ``` From 07b0358a77ed8ad975b5a63d5018dfb952b09511 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 09:23:43 +0100 Subject: [PATCH 081/165] Rename server-qpf to server --- README.md | 14 +++--- packages/core/README.md | 50 +++++++++---------- packages/core/config/config-example.json | 2 +- packages/datasource-composite/README.md | 6 +-- .../config/config-example.json | 2 +- packages/datasource-hdt/README.md | 6 +-- .../datasource-hdt/config/config-example.json | 2 +- packages/datasource-jsonld/README.md | 6 +-- .../config/config-example.json | 2 +- packages/datasource-n3/README.md | 6 +-- .../datasource-n3/config/config-example.json | 2 +- packages/datasource-sparql/README.md | 6 +-- .../config/config-example.json | 2 +- packages/feature-memento/README.md | 14 +++--- .../config/config-example.json | 2 +- packages/feature-qpf/README.md | 8 +-- packages/feature-summary/README.md | 16 +++--- .../config/config-example.json | 2 +- packages/feature-webid/README.md | 2 +- packages/preset-qpf/README.md | 4 +- packages/{server-qpf => server}/Dockerfile | 2 +- packages/{server-qpf => server}/README.md | 12 ++--- .../ldf-server-qpf => server/bin/ldf-server} | 0 .../components/context.jsonld | 0 .../config/config-example.json | 2 +- packages/{server-qpf => server}/package.json | 14 +++--- yarn.lock | 5 -- 27 files changed, 92 insertions(+), 97 deletions(-) rename packages/{server-qpf => server}/Dockerfile (99%) rename packages/{server-qpf => server}/README.md (97%) rename packages/{server-qpf/bin/ldf-server-qpf => server/bin/ldf-server} (100%) rename packages/{server-qpf => server}/components/context.jsonld (100%) rename packages/{server-qpf => server}/config/config-example.json (96%) rename packages/{server-qpf => server}/package.json (81%) diff --git a/README.md b/README.md index 23fe73b3..4382838b 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ An example server is available at [data.linkeddatafragments.org](http://data.lin ## Quick Start The easiest way to start using this server is via -[`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf), +[`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server), the default configuration of an LDF server with Quad/Triple Pattern Fragments support. _(previously known as `ldf-server`)_ ### Install the server @@ -46,7 +46,7 @@ This server requires [Node.js](http://nodejs.org/) 10.0 or higher and is tested on OSX and Linux. To install, execute: ```bash -$ [sudo] npm install -g @ldf/server-qpf +$ [sudo] npm install -g @ldf/server ``` ### Configure the data sources @@ -57,7 +57,7 @@ For example, this configuration uses an [HDT file](http://www.rdfhdt.org/) and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: ```json { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", @@ -84,13 +84,13 @@ and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: } ``` -_More details on how to configure this server can be found in the README of [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf)._ +_More details on how to configure this server can be found in the README of [`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server)._ ### Start the server After creating a configuration file, execute ```bash -$ ldf-server-qpf config.json 5000 4 +$ ldf-server config.json 5000 4 ``` Here, `5000` is the HTTP port on which the server will listen, and `4` the number of worker processes. @@ -104,7 +104,7 @@ We manage this repository as a [monorepo](https://github.com/babel/babel/blob/ma using [Lerna](https://lernajs.io/). The following modules are available: -* [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf): An LDF server with Quad/Triple Pattern Fragments support. +* [`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server): An LDF server with Quad/Triple Pattern Fragments support. * [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf): Configuration presets for Quad/Triple Pattern Fragments servers. * [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. * [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). @@ -119,7 +119,7 @@ The following modules are available: These modules can be used to configure your own LDF server with the features you want. As an example on how to make such a server, -you can have a look at [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf), +you can have a look at [`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server), which is a default server configuration that has all possible features enabled. ## Development Setup diff --git a/packages/core/README.md b/packages/core/README.md index dae84e72..f2209c0f 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -4,18 +4,18 @@ This package provides core classes for Linked Data Fragments servers. This package should be used if you want to create your own LDF server configuration or LDF server module. -If you just want to run a QPF server, you can make use of [`@ldf/server-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf) instead. +If you just want to run a QPF server, you can make use of [`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server) instead. _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ -## Usage in `@ldf/server-qpf` +## Usage in `@ldf/server` This package exposes the the following context entries: **Controllers:** -* `AssetsController`: Responds to requests for assets. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` controller value._ -* `DereferenceController`: Responds to dereferencing requests. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` controller value._ -* `NotFoundController`: Responds to requests that cannot be resolved. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` controller value._ +* `AssetsController`: Responds to requests for assets. This is enabled by default in `@ldf/server`. _Should be used as `@type` controller value._ +* `DereferenceController`: Responds to dereferencing requests. This is enabled by default in `@ldf/server`. _Should be used as `@type` controller value._ +* `NotFoundController`: Responds to requests that cannot be resolved. This is enabled by default in `@ldf/server`. _Should be used as `@type` controller value._ * `Controller`: An abstract controller. _Should be used as `extends` value when creating new controllers._ * `ControllerExtension`: An abstract controller extension. _Should be used as `extends` value when creating new controller extensions._ * `assetsDir`: Path to a directory where assets can be found. _Should be used as key in a `Server` config._ @@ -26,7 +26,7 @@ This package exposes the the following context entries: **Datasources:** * `EmptyDatasource`: An empty data source doesn't contain any quads. _Should be used as `@type` datasource value._ -* `IndexDatasource`: A datasource that lists other data sources. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` datasource value._ +* `IndexDatasource`: A datasource that lists other data sources. This is enabled by default in `@ldf/server`. _Should be used as `@type` datasource value._ * `MemoryDatasource`: An abstract in-memory datasource. _Should be used as `extends` value when creating new in-memory datasources._ * `Datasource`: An abstract datasource. _Should be used as `extends` value when creating new datasources._ * `datasourceTitle`: The title of a datasource. _Should be used as key in a datasource._ @@ -43,18 +43,18 @@ This package exposes the the following context entries: * `datasourceUrl`: The dataset file URL from the baseURL. _Should be used as key in a memory datasource._ **Routers:** -* `DatasourceRouter`: Routes URLs to data sources. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` router value._ -* `PageRouter`: Routes page numbers to offsets. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` router value._ +* `DatasourceRouter`: Routes URLs to data sources. This is enabled by default in `@ldf/server`. _Should be used as `@type` router value._ +* `PageRouter`: Routes page numbers to offsets. This is enabled by default in `@ldf/server`. _Should be used as `@type` router value._ * `Router`: An abstract router. _Should be used as `extends` value when creating new routers._ * `pageSize`: The triple page size, which defaults to 100. _Should be used as key in a page router._ **Views:** -* `ErrorHtmlView`: Represents a 500 response in HTML. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ -* `ForbiddenHtmlView`: Represents a 401 response in HTML. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ -* `NotFoundHtmlView`: Represents a 404 response in HTML. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ -* `ErrorRdfView`: Represents a 500 response in RDF. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ -* `NotFoundRdfView`: Represents a 404 response in RDF. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ -* `ViewCollection`: Provides access to content-negotiated views by name. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` view value._ +* `ErrorHtmlView`: Represents a 500 response in HTML. This is enabled by default in `@ldf/server`. _Should be used as `@type` view value._ +* `ForbiddenHtmlView`: Represents a 401 response in HTML. This is enabled by default in `@ldf/server`. _Should be used as `@type` view value._ +* `NotFoundHtmlView`: Represents a 404 response in HTML. This is enabled by default in `@ldf/server`. _Should be used as `@type` view value._ +* `ErrorRdfView`: Represents a 500 response in RDF. This is enabled by default in `@ldf/server`. _Should be used as `@type` view value._ +* `NotFoundRdfView`: Represents a 404 response in RDF. This is enabled by default in `@ldf/server`. _Should be used as `@type` view value._ +* `ViewCollection`: Provides access to content-negotiated views by name. This is enabled by default in `@ldf/server`. _Should be used as `@type` view value._ * `HtmlView`: An abstract HTML view. _Should be used as `extends` value when creating new HTML views._ * `RdfView`: An abstract RDF view. _Should be used as `extends` value when creating new RDF views._ * `View`: An abstract view. _Should be used as `extends` value when creating new views._ @@ -64,7 +64,7 @@ This package exposes the the following context entries: * `viewHeader`: The view header title. _Should be used as key in an HTML view._ **Other:** -* `Server`: An HTTP server that provides access to Linked Data Fragments. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ +* `Server`: An HTTP server that provides access to Linked Data Fragments. This is enabled by default in `@ldf/server`. _Should be used as `@type` value._ * `title`: The server name. _Should be used as key in a `Server` config._ * `baseURL`: The base URL path for the server. _Should be used as key in a `Server` config._ * `port`: The port the server will bind with. _Should be used as key in a `Server` config._ @@ -82,21 +82,21 @@ This package exposes the the following context entries: * `sslCa`: Path to an SSL certificate authority. _Should be used as key in a `Server` config._ * `logging`: If the server should perform logging, defaults to `false`. _Should be used as key in a `Server` config._ * `loggingFile`: Path to a log file. _Should be used as key in a `Server` config._ -* `routers`: Routers for the server. This is configured by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ -* `controllers`: Controllers for the server. This is configured by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ -* `viewCollection`: Override the default view collection. This is configured by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ -* `views`: Views for the server. This is configured by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ -* `UrlData`: A data object class for preset URL information. This is enabled by default in `@ldf/server-qpf`. _Should be used as `@type` value._ -* `urlData`: The UrlData helper object. This is enabled by default in `@ldf/server-qpf`. _Should be used as key in a `Server` config._ - -`@ldf/server-qpf` and `@ldf/preset-qpf` provide default instantiations of all core classes, +* `routers`: Routers for the server. This is configured by default in `@ldf/server`. _Should be used as key in a `Server` config._ +* `controllers`: Controllers for the server. This is configured by default in `@ldf/server`. _Should be used as key in a `Server` config._ +* `viewCollection`: Override the default view collection. This is configured by default in `@ldf/server`. _Should be used as key in a `Server` config._ +* `views`: Views for the server. This is configured by default in `@ldf/server`. _Should be used as key in a `Server` config._ +* `UrlData`: A data object class for preset URL information. This is enabled by default in `@ldf/server`. _Should be used as `@type` value._ +* `urlData`: The UrlData helper object. This is enabled by default in `@ldf/server`. _Should be used as key in a `Server` config._ + +`@ldf/server` and `@ldf/preset-qpf` provide default instantiations of all core classes, which means that you don't have to define them in your config file yourself. The only thing you still need to do is defining different optional parameters, as shown below. Example: ```json { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", @@ -181,7 +181,7 @@ Example: ## Usage in other packages -When this module is used in a package other than `@ldf/server-qpf`, +When this module is used in a package other than `@ldf/server`, then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/core.jsonld` must be imported. For example: diff --git a/packages/core/config/config-example.json b/packages/core/config/config-example.json index c33cf876..20786c20 100644 --- a/packages/core/config/config-example.json +++ b/packages/core/config/config-example.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md index 47d041da..11e6a883 100644 --- a/packages/datasource-composite/README.md +++ b/packages/datasource-composite/README.md @@ -6,7 +6,7 @@ It delegates queries to an sequence of other datasources. _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ -## Usage in `@ldf/server-qpf` +## Usage in `@ldf/server` This package exposes the following config entries: * `CompositeDatasource`: A composite datasource that requires at least one `compose` field. _Should be used as `@type` value._ @@ -15,7 +15,7 @@ This package exposes the following config entries: Example: ```json { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", @@ -50,7 +50,7 @@ Example: ## Usage in other packages -When this module is used in a package other than `@ldf/server-qpf`, +When this module is used in a package other than `@ldf/server`, then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-composite.jsonld` must be imported. For example: diff --git a/packages/datasource-composite/config/config-example.json b/packages/datasource-composite/config/config-example.json index 64e320f0..49889771 100644 --- a/packages/datasource-composite/config/config-example.json +++ b/packages/datasource-composite/config/config-example.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md index 5c0514d9..6452fe38 100644 --- a/packages/datasource-hdt/README.md +++ b/packages/datasource-hdt/README.md @@ -6,7 +6,7 @@ It allows HDT files to be loaded. _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ -## Usage in `@ldf/server-qpf` +## Usage in `@ldf/server` This package exposes the following config entries: * `HdtDatasource`: An HDT datasource that requires at least one `hdtFile` field. _Should be used as `@type` value._ @@ -16,7 +16,7 @@ This package exposes the following config entries: Example: ```json { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", @@ -35,7 +35,7 @@ Example: ## Usage in other packages -When this module is used in a package other than `@ldf/server-qpf`, +When this module is used in a package other than `@ldf/server`, then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-hdt.jsonld` must be imported. For example: diff --git a/packages/datasource-hdt/config/config-example.json b/packages/datasource-hdt/config/config-example.json index bcdde45e..1a41e558 100644 --- a/packages/datasource-hdt/config/config-example.json +++ b/packages/datasource-hdt/config/config-example.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md index e72a8ac6..db38145a 100644 --- a/packages/datasource-jsonld/README.md +++ b/packages/datasource-jsonld/README.md @@ -6,7 +6,7 @@ It allows JSON-LD files to be loaded. _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ -## Usage in `@ldf/server-qpf` +## Usage in `@ldf/server` This package exposes the following config entries: * `JsonLdDatasource`: A JSON-LD datasource that requires at least one `file` field. _Should be used as `@type` value._ @@ -14,7 +14,7 @@ This package exposes the following config entries: Example: ```json { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", @@ -33,7 +33,7 @@ Example: ## Usage in other packages -When this module is used in a package other than `@ldf/server-qpf`, +When this module is used in a package other than `@ldf/server`, then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-jsonld.jsonld` must be imported. For example: diff --git a/packages/datasource-jsonld/config/config-example.json b/packages/datasource-jsonld/config/config-example.json index a308e175..efa71ba8 100644 --- a/packages/datasource-jsonld/config/config-example.json +++ b/packages/datasource-jsonld/config/config-example.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md index 0cf01321..03fa69a7 100644 --- a/packages/datasource-n3/README.md +++ b/packages/datasource-n3/README.md @@ -6,7 +6,7 @@ It allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3. _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ -## Usage in `@ldf/server-qpf` +## Usage in `@ldf/server` This package exposes the following config entries: * `NQuadsDatasource`: An N-Quads datasource that requires at least one `file` field. _Should be used as `@type` value._ @@ -18,7 +18,7 @@ This package exposes the following config entries: Example: ```json { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", @@ -37,7 +37,7 @@ Example: ## Usage in other packages -When this module is used in a package other than `@ldf/server-qpf`, +When this module is used in a package other than `@ldf/server`, then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-n3.jsonld` must be imported. For example: diff --git a/packages/datasource-n3/config/config-example.json b/packages/datasource-n3/config/config-example.json index 366f33c7..736f6b96 100644 --- a/packages/datasource-n3/config/config-example.json +++ b/packages/datasource-n3/config/config-example.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index db0919f6..a072f711 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -6,7 +6,7 @@ It allows SPARQL endpoints to be used as a data proxy. _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ -## Usage in `@ldf/server-qpf` +## Usage in `@ldf/server` This package exposes the following config entries: * `SparqlDatasource`: A SPARQL-endpoint-based datasource that requires at least one `sparqlEndpoint` field. _Should be used as `@type` value._ @@ -15,7 +15,7 @@ This package exposes the following config entries: Example: ```json { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", @@ -34,7 +34,7 @@ Example: ## Usage in other packages -When this module is used in a package other than `@ldf/server-qpf`, +When this module is used in a package other than `@ldf/server`, then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-sparql.jsonld` must be imported. For example: diff --git a/packages/datasource-sparql/config/config-example.json b/packages/datasource-sparql/config/config-example.json index f34025ce..74bc94b4 100644 --- a/packages/datasource-sparql/config/config-example.json +++ b/packages/datasource-sparql/config/config-example.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md index c821c13d..5cfbca0c 100644 --- a/packages/feature-memento/README.md +++ b/packages/feature-memento/README.md @@ -64,12 +64,12 @@ Link: ; rel="original", -A Linked Data Fragments server with Quad Pattern Fragments support. +A Linked Data Fragments server with Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support. -_This package has been renamed from `ldf-server` to `@ldf/server-qpf`._ +_This package has been renamed from `ldf-server` to `@ldf/server`._ _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ @@ -38,7 +38,7 @@ This server requires [Node.js](http://nodejs.org/) 10.0 or higher and is tested on OSX and Linux. To install, execute: ```bash -$ [sudo] npm install -g @ldf/server-qpf +$ [sudo] npm install -g @ldf/server ``` ## Use the server @@ -51,7 +51,7 @@ For example, this configuration uses an [HDT file](http://www.rdfhdt.org/) and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: ```json { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", @@ -93,7 +93,7 @@ Support for new sources is possible by creating a new module implementing the [` After creating a configuration file, execute ```bash -$ ldf-server-qpf config.json 5000 4 +$ ldf-server config.json 5000 4 ``` Here, `5000` is the HTTP port on which the server will listen, and `4` the number of worker processes. @@ -109,7 +109,7 @@ In order to do this, you need the process ID of the server master process.
One possibility to obtain this are the server logs: ```bash -$ bin/ldf-server-qpf config.json +$ bin/ldf-server config.json Master 28106 running. Worker 28107 running on http://localhost:3000/. ``` diff --git a/packages/server-qpf/bin/ldf-server-qpf b/packages/server/bin/ldf-server similarity index 100% rename from packages/server-qpf/bin/ldf-server-qpf rename to packages/server/bin/ldf-server diff --git a/packages/server-qpf/components/context.jsonld b/packages/server/components/context.jsonld similarity index 100% rename from packages/server-qpf/components/context.jsonld rename to packages/server/components/context.jsonld diff --git a/packages/server-qpf/config/config-example.json b/packages/server/config/config-example.json similarity index 96% rename from packages/server-qpf/config/config-example.json rename to packages/server/config/config-example.json index 4b31adfc..c5887782 100644 --- a/packages/server-qpf/config/config-example.json +++ b/packages/server/config/config-example.json @@ -1,5 +1,5 @@ { - "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld", + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", "@id": "urn:ldf-server:my", "import": "preset-qpf:config-defaults.json", diff --git a/packages/server-qpf/package.json b/packages/server/package.json similarity index 81% rename from packages/server-qpf/package.json rename to packages/server/package.json index f862a392..1af1860c 100644 --- a/packages/server-qpf/package.json +++ b/packages/server/package.json @@ -1,18 +1,18 @@ { - "name": "@ldf/server-qpf", + "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", "version": "2.2.5", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf", + "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/context.jsonld": "components/context.jsonld" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" }, "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/components/": "components/", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server-qpf/^3.0.0/config/": "config/" + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/": "components/", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/config/": "config/" }, "license": "MIT", "bin": { - "ldf-server-qpf": "./bin/ldf-server-qpf" + "ldf-server": "./bin/ldf-server" }, "publishConfig": { "access": "public" @@ -24,7 +24,7 @@ "bin/**/*.js", "index.js" ], - "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server-qpf", + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server", "bugs": { "url": "https://github.com/LinkedDataFragments/Server.js/issues" }, diff --git a/yarn.lock b/yarn.lock index e543306c..e7b32a1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6350,11 +6350,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -uritemplate@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/uritemplate/-/uritemplate-0.3.4.tgz#05d0a853ffbc8b0f49aa3d4d2ad777b0d1ee070c" - integrity sha1-BdCoU/+8iw9Jqj1NKtd3sNHuBww= - urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" From 09e5981f78e9bdb0a0e348e85f1fcf57d65cb04d Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 09:26:26 +0100 Subject: [PATCH 082/165] Update licensees --- README.md | 2 +- packages/core/README.md | 2 +- packages/datasource-composite/README.md | 2 +- packages/datasource-hdt/README.md | 2 +- packages/datasource-jsonld/README.md | 2 +- packages/datasource-n3/README.md | 2 +- packages/datasource-sparql/README.md | 2 +- packages/feature-memento/README.md | 2 +- packages/feature-qpf/README.md | 2 +- packages/feature-summary/README.md | 2 +- packages/feature-webid/README.md | 2 +- packages/preset-qpf/README.md | 2 +- packages/server/README.md | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 4382838b..fd0e8f9b 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ to build, lint and test. These hooks can temporarily be disabled at your own risk by adding the `-n` flag to the commit command. ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/core/README.md b/packages/core/README.md index f2209c0f..cc86c886 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -267,7 +267,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md index 11e6a883..b07a928c 100644 --- a/packages/datasource-composite/README.md +++ b/packages/datasource-composite/README.md @@ -68,7 +68,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md index 6452fe38..d16b6e45 100644 --- a/packages/datasource-hdt/README.md +++ b/packages/datasource-hdt/README.md @@ -51,7 +51,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md index db38145a..1ff841b1 100644 --- a/packages/datasource-jsonld/README.md +++ b/packages/datasource-jsonld/README.md @@ -49,7 +49,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md index 03fa69a7..9388af4b 100644 --- a/packages/datasource-n3/README.md +++ b/packages/datasource-n3/README.md @@ -53,7 +53,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index a072f711..aa5b5364 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -50,7 +50,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md index 5cfbca0c..754c806c 100644 --- a/packages/feature-memento/README.md +++ b/packages/feature-memento/README.md @@ -179,7 +179,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/feature-qpf/README.md b/packages/feature-qpf/README.md index 32a7da50..9d917432 100644 --- a/packages/feature-qpf/README.md +++ b/packages/feature-qpf/README.md @@ -60,7 +60,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md index d4f35d3d..d9febd5e 100644 --- a/packages/feature-summary/README.md +++ b/packages/feature-summary/README.md @@ -81,7 +81,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/feature-webid/README.md b/packages/feature-webid/README.md index 965e8324..97536766 100644 --- a/packages/feature-webid/README.md +++ b/packages/feature-webid/README.md @@ -45,7 +45,7 @@ For example: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/preset-qpf/README.md b/packages/preset-qpf/README.md index 81ebd3f5..c72bb3b7 100644 --- a/packages/preset-qpf/README.md +++ b/packages/preset-qpf/README.md @@ -69,7 +69,7 @@ Example: Importing only QPF controllers and datasources: ``` ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/server/README.md b/packages/server/README.md index e4917084..39e2c791 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -228,7 +228,7 @@ Concretely, it configures the following packages: * [`@ldf/datasource-composite`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite): Datasource that delegates queries to an sequence of other datasources. ## License -The Linked Data Fragments server is written by [Ruben Verborgh](http://ruben.verborgh.org/) and colleagues. +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) and released under the [MIT license](http://opensource.org/licenses/MIT). From 832b4486500d93e3695d89b331e0e1b859dbaf67 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 09:28:01 +0100 Subject: [PATCH 083/165] Mention core package earlier in listings --- README.md | 7 +++---- packages/core/README.md | 2 +- packages/server/README.md | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index fd0e8f9b..0cb8fd66 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Docker Automated Build](https://img.shields.io/docker/automated/linkeddatafragments/server.js.svg)](https://hub.docker.com/r/linkeddatafragments/server.js/) [![DOI](https://zenodo.org/badge/16891600.svg)](https://zenodo.org/badge/latestdoi/16891600) -This repository contains modules for [Linked Data Fragments (LDF)](https://linkeddatafragments.org/) Servers. +This repository contains modules for [Linked Data Fragments (LDF)](https://linkeddatafragments.org/) servers. ## Motivation @@ -37,8 +37,7 @@ An example server is available at [data.linkeddatafragments.org](http://data.lin ## Quick Start The easiest way to start using this server is via -[`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server), -the default configuration of an LDF server with Quad/Triple Pattern Fragments support. _(previously known as `ldf-server`)_ +[`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server). _(previously known as `ldf-server`)_ ### Install the server @@ -104,9 +103,9 @@ We manage this repository as a [monorepo](https://github.com/babel/babel/blob/ma using [Lerna](https://lernajs.io/). The following modules are available: +* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Shared functionality for LDF servers. * [`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server): An LDF server with Quad/Triple Pattern Fragments support. * [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf): Configuration presets for Quad/Triple Pattern Fragments servers. -* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. * [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). * [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. * [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). diff --git a/packages/core/README.md b/packages/core/README.md index cc86c886..15726f2f 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,7 +1,7 @@ # Linked Data Fragments Server - Core -This package provides core classes for Linked Data Fragments servers. +This package provides core classes with shared functionality for Linked Data Fragments servers. This package should be used if you want to create your own LDF server configuration or LDF server module. If you just want to run a QPF server, you can make use of [`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server) instead. diff --git a/packages/server/README.md b/packages/server/README.md index 39e2c791..3132f2c7 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -217,7 +217,7 @@ you can make use of [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/S Concretely, it configures the following packages: -* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. +* [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Shared functionality for LDF servers. * [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). * [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. * [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). From 6f18e5e9cfe6cfffafc079a36b8e8be14d92ec95 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 10:39:11 +0100 Subject: [PATCH 084/165] Automatically build all Docker images using lerna-docker --- .travis.yml | 30 +++++++++++++++++++--- README.md | 1 - packages/core/package.json | 3 ++- packages/datasource-composite/package.json | 1 - packages/datasource-hdt/package.json | 1 - packages/datasource-jsonld/package.json | 1 - packages/datasource-n3/package.json | 1 - packages/datasource-sparql/package.json | 1 - packages/feature-memento/package.json | 2 +- packages/feature-qpf/package.json | 2 +- packages/feature-summary/package.json | 3 ++- packages/feature-webid/package.json | 2 +- packages/preset-qpf/package.json | 1 - packages/server/.dockerignore | 3 +++ packages/server/Dockerfile | 18 ++++++++----- packages/server/README.md | 2 ++ packages/server/components/context.jsonld | 1 - packages/server/package.json | 2 +- 18 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 packages/server/.dockerignore diff --git a/.travis.yml b/.travis.yml index 3f4cebb0..c75de4ee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,18 @@ +sudo: required +services: + - docker language: node_js -node_js: - - "10" - - "12" +matrix: + include: + - node_js: '10' + - node_js: '12' + - node_js: 'node' + env: DOCUMENTATION_BUILD=true DOCKER_BUILD=true install: yarn install --pure-lockfile script: - yarn run lint - yarn test + - if [ "$DOCKER_BUILD" = "true" ]; then ( sh -c "`curl -fsSl https://raw.githubusercontent.com/rubensworks/lerna-docker/master/install.sh`" && ~/.lerna-docker/bin/lerna-docker linkeddatafragments build ) fi after_success: - yarn run coveralls env: @@ -20,3 +27,20 @@ cache: yarn: true directories: - node_modules +deploy: + - provider: script + skip-cleanup: true + script: ~/.lerna-docker/bin/lerna-docker linkeddatafragments push + on: + tags: false + branch: master + node_js: "node" + os: "linux" + - provider: script + skip-cleanup: true + script: ~/.lerna-docker/bin/lerna-docker linkeddatafragments push + on: + tags: true + all_branches: true + node_js: "node" + os: "linux" diff --git a/README.md b/README.md index 0cb8fd66..2bd052a1 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ [![Build Status](https://travis-ci.org/LinkedDataFragments/Server.js.svg?branch=master)](https://travis-ci.org/LinkedDataFragments/Server.js) [![Coverage Status](https://coveralls.io/repos/github/LinkedDataFragments/Server.js/badge.svg?branch=master)](https://coveralls.io/github/LinkedDataFragments/Server.js?branch=master) [![npm version](https://badge.fury.io/js/ldf-server.svg)](https://www.npmjs.com/package/ldf-server) -[![Docker Automated Build](https://img.shields.io/docker/automated/linkeddatafragments/server.js.svg)](https://hub.docker.com/r/linkeddatafragments/server.js/) [![DOI](https://zenodo.org/badge/16891600.svg)](https://zenodo.org/badge/latestdoi/16891600) This repository contains modules for [Linked Data Fragments (LDF)](https://linkeddatafragments.org/) servers. diff --git a/packages/core/package.json b/packages/core/package.json index dbb78cde..3100084b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -19,7 +19,8 @@ "components", "config", "lib/**/*.js", - "bin/**/*.js", + "lib/**/*.html", + "assets/**/*", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core", diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 05354a78..c3a2080d 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -18,7 +18,6 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite", diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index d474f43f..a69fd301 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -18,7 +18,6 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt", diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index fb314bda..9e7960b5 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -18,7 +18,6 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld", diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 20248ab3..2b7caedd 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -18,7 +18,6 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3", diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 5922a4fb..75c3bc9f 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -18,7 +18,6 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql", diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 24ec9f71..c157a256 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -18,7 +18,7 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", + "lib/**/*.html", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento", diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index 377eed76..c9d7a782 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -18,7 +18,7 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", + "lib/**/*.html", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf", diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index 763fc7b2..ad71e1c9 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -21,7 +21,8 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", + "lib/**/*.html", + "bin/**/*", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary", diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index f7943650..e2354e13 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -18,7 +18,7 @@ "files": [ "components", "lib/**/*.js", - "bin/**/*.js", + "lib/**/*.html", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-webid", diff --git a/packages/preset-qpf/package.json b/packages/preset-qpf/package.json index dcc0dd6a..66d5128a 100644 --- a/packages/preset-qpf/package.json +++ b/packages/preset-qpf/package.json @@ -19,7 +19,6 @@ "components", "config", "lib/**/*.js", - "bin/**/*.js", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf", diff --git a/packages/server/.dockerignore b/packages/server/.dockerignore new file mode 100644 index 00000000..f9f8f754 --- /dev/null +++ b/packages/server/.dockerignore @@ -0,0 +1,3 @@ +dist +test +node_modules diff --git a/packages/server/Dockerfile b/packages/server/Dockerfile index c0ae6216..1f041bd0 100644 --- a/packages/server/Dockerfile +++ b/packages/server/Dockerfile @@ -1,18 +1,25 @@ -FROM node:8-slim +FROM node:10-slim # Install location -ENV dir /var/www/ldf-server +ENV dir /var/www/@ldf/server # Copy the server files -ADD . ${dir} +COPY components ${dir}/components/ +COPY config ${dir}/config/ +COPY bin ${dir}/bin/ +COPY package.json ${dir} + +# Set the npm registry +ARG NPM_REGISTRY=https://registry.npmjs.org/ +RUN npm config set @ldf:registry $NPM_REGISTRY # Install the node module RUN apt-get update && \ apt-get install -y g++ make python && \ - cd ${dir} && npm install && \ + cd ${dir} && npm install --only=production && \ apt-get remove -y g++ make python && apt-get autoremove -y && \ rm -rf /var/cache/apt/archives -w + # Expose the default port EXPOSE 3000 @@ -22,4 +29,3 @@ ENTRYPOINT ["node", "bin/ldf-server"] # Default command CMD ["--help"] - diff --git a/packages/server/README.md b/packages/server/README.md index 3132f2c7..fd7eab9c 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - Quad Pattern Fragments +[![Docker Pulls](https://img.shields.io/docker/pulls/linkeddatafragments/server.svg)](https://hub.docker.com/r/linkeddatafragments/server/) + A Linked Data Fragments server with Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support. _This package has been renamed from `ldf-server` to `@ldf/server`._ diff --git a/packages/server/components/context.jsonld b/packages/server/components/context.jsonld index f29787ce..f515447d 100644 --- a/packages/server/components/context.jsonld +++ b/packages/server/components/context.jsonld @@ -9,7 +9,6 @@ "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld" ] } diff --git a/packages/server/package.json b/packages/server/package.json index 1af1860c..ba0ca740 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -21,7 +21,7 @@ "components", "config", "lib/**/*.js", - "bin/**/*.js", + "bin/**/*", "index.js" ], "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server", From 8326598053bbe90275b67cfec89447bd6b07a83e Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 10:58:24 +0100 Subject: [PATCH 085/165] Add npm badges for each package --- README.md | 2 +- packages/core/README.md | 2 ++ packages/datasource-composite/README.md | 2 ++ packages/datasource-hdt/README.md | 2 ++ packages/datasource-jsonld/README.md | 2 ++ packages/datasource-n3/README.md | 2 ++ packages/datasource-sparql/README.md | 2 ++ packages/feature-memento/README.md | 2 ++ packages/feature-qpf/README.md | 2 ++ packages/feature-summary/README.md | 2 ++ packages/feature-webid/README.md | 2 ++ packages/preset-qpf/README.md | 2 ++ packages/server/README.md | 1 + 13 files changed, 24 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2bd052a1..57be0be6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Build Status](https://travis-ci.org/LinkedDataFragments/Server.js.svg?branch=master)](https://travis-ci.org/LinkedDataFragments/Server.js) [![Coverage Status](https://coveralls.io/repos/github/LinkedDataFragments/Server.js/badge.svg?branch=master)](https://coveralls.io/github/LinkedDataFragments/Server.js?branch=master) -[![npm version](https://badge.fury.io/js/ldf-server.svg)](https://www.npmjs.com/package/ldf-server) +[![npm version](https://badge.fury.io/js/%40ldf%2Fserver.svg)](https://www.npmjs.com/package/@ldf/server) [![DOI](https://zenodo.org/badge/16891600.svg)](https://zenodo.org/badge/latestdoi/16891600) This repository contains modules for [Linked Data Fragments (LDF)](https://linkeddatafragments.org/) servers. diff --git a/packages/core/README.md b/packages/core/README.md index 15726f2f..d37cb94b 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - Core +[![npm version](https://badge.fury.io/js/%40ldf%2Fcore.svg)](https://www.npmjs.com/package/@ldf/core) + This package provides core classes with shared functionality for Linked Data Fragments servers. This package should be used if you want to create your own LDF server configuration or LDF server module. diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md index b07a928c..cd133c1c 100644 --- a/packages/datasource-composite/README.md +++ b/packages/datasource-composite/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - Composite Datasource +[![npm version](https://badge.fury.io/js/%40ldf%2Fdatasource-composite.svg)](https://www.npmjs.com/package/@ldf/datasource-composite) + This module contains a composite datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It delegates queries to an sequence of other datasources. diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md index d16b6e45..d8123f8c 100644 --- a/packages/datasource-hdt/README.md +++ b/packages/datasource-hdt/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - HDT Datasource +[![npm version](https://badge.fury.io/js/%40ldf%2Fdatasource-hdt.svg)](https://www.npmjs.com/package/@ldf/datasource-hdt) + This module contains a HDT datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows HDT files to be loaded. diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md index 1ff841b1..a974c8e2 100644 --- a/packages/datasource-jsonld/README.md +++ b/packages/datasource-jsonld/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - JSON-LD Datasource +[![npm version](https://badge.fury.io/js/%40ldf%2Fdatasource-jsonld.svg)](https://www.npmjs.com/package/@ldf/datasource-jsonld) + This module contains a JSON-LD datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows JSON-LD files to be loaded. diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md index 9388af4b..5beaf4c3 100644 --- a/packages/datasource-n3/README.md +++ b/packages/datasource-n3/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - N3 Datasources +[![npm version](https://badge.fury.io/js/%40ldf%2Fdatasource-n3.svg)](https://www.npmjs.com/package/@ldf/datasource-n3) + This module contains a N3 datasources for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index aa5b5364..90e260a6 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - SPARQL Datasource +[![npm version](https://badge.fury.io/js/%40ldf%2Fdatasource-sparql.svg)](https://www.npmjs.com/package/@ldf/datasource-sparql) + This module contains a SPARQL datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). It allows SPARQL endpoints to be used as a data proxy. diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md index 754c806c..725f314b 100644 --- a/packages/feature-memento/README.md +++ b/packages/feature-memento/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - Memento +[![npm version](https://badge.fury.io/js/%40ldf%2Ffeature-memento.svg)](https://www.npmjs.com/package/@ldf/feature-memento) + This module adds support for the [Memento Protocol](http://mementoweb.org/about/) to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). If your Linked Data source evolve over time and has multiple versions, it makes access and query across the various versions straightforward. To enable the [Memento Protocol](http://mementoweb.org/about/), follow the guide below. diff --git a/packages/feature-qpf/README.md b/packages/feature-qpf/README.md index 9d917432..0d151279 100644 --- a/packages/feature-qpf/README.md +++ b/packages/feature-qpf/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - Quad Pattern Fragments +[![npm version](https://badge.fury.io/js/%40ldf%2Ffeature-qpf.svg)](https://www.npmjs.com/package/@ldf/feature-qpf) + This module adds Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md index d9febd5e..d6aea15e 100644 --- a/packages/feature-summary/README.md +++ b/packages/feature-summary/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - Summary +[![npm version](https://badge.fury.io/js/%40ldf%2Ffeature-summary.svg)](https://www.npmjs.com/package/@ldf/feature-summary) + This module adds summaries to datasources based on turtle files corresponding to the datasource name. _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ diff --git a/packages/feature-webid/README.md b/packages/feature-webid/README.md index 97536766..dc2b5d19 100644 --- a/packages/feature-webid/README.md +++ b/packages/feature-webid/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - WebID +[![npm version](https://badge.fury.io/js/%40ldf%2Ffeature-webid.svg)](https://www.npmjs.com/package/@ldf/feature-webid) + This module adds a controller extension that only allows authenticated client with WebID's to perform requests. This extension will only be active when the server is running in [https-mode](https://github.com/LinkedDataFragments/Server.js/wiki/WebID-authentication). diff --git a/packages/preset-qpf/README.md b/packages/preset-qpf/README.md index c72bb3b7..84b24cb4 100644 --- a/packages/preset-qpf/README.md +++ b/packages/preset-qpf/README.md @@ -1,6 +1,8 @@ # Linked Data Fragments Server - Preset Quad Pattern Fragments +[![npm version](https://badge.fury.io/js/%40ldf%2Fpreset-qpf.svg)](https://www.npmjs.com/package/@ldf/preset-qpf) + This package provides configuration presets for Quad Pattern Fragments servers. This package should be used if you want to create your own LDF server configuration, diff --git a/packages/server/README.md b/packages/server/README.md index fd7eab9c..c097a1bc 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -1,6 +1,7 @@ # Linked Data Fragments Server - Quad Pattern Fragments +[![npm version](https://badge.fury.io/js/%40ldf%2Fserver.svg)](https://www.npmjs.com/package/@ldf/server) [![Docker Pulls](https://img.shields.io/docker/pulls/linkeddatafragments/server.svg)](https://hub.docker.com/r/linkeddatafragments/server/) A Linked Data Fragments server with Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support. From 721c84a9b97817c383c1f245a8c0991ce6dde0c0 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 11:05:01 +0100 Subject: [PATCH 086/165] Autogenerate changelog upon each release --- CHANGELOG.md | 7 +++++++ package.json | 4 +++- yarn.lock | 44 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..507dcc1a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog +All notable changes to this project will be documented in this file. + + +## [v2.2.5] - 2010-01-015 + +_Start tracking changelog_ diff --git a/package.json b/package.json index 35c501a3..794d8e1f 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "coveralls": "^3.0.9", "eslint": "^3.4.0", "lerna": "^3.4.0", + "manual-git-changelog": "^1.0.1", "mocha": "^5.2.0", "nyc": "^15.0.0", "pre-commit": "^1.1.3", @@ -33,6 +34,7 @@ "clean": "rm -rf ./node_modules && rm -rf ./packages/*/node_modules", "publish": "lerna publish", "publish-bare": "lerna exec -- npm publish --silent", - "postinstall": "lerna run prepare" + "postinstall": "lerna run prepare", + "version": "manual-git-changelog onversion" } } diff --git a/yarn.lock b/yarn.lock index e7b32a1c..37378304 100644 --- a/yarn.lock +++ b/yarn.lock @@ -193,6 +193,11 @@ unique-filename "^1.1.1" which "^1.3.1" +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" @@ -1265,6 +1270,11 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +arrayify-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/arrayify-stream/-/arrayify-stream-1.0.0.tgz#9e8e113d43325c3a44e965c59b5b89d962b9a37f" + integrity sha512-RP80ep76Lbew2wWN5ogrl2NluTnBVYYh2K3NNCcWfcmmUB7nBcNBctiJeEZAixp3I1vQ9H88iHZ9MbHSdkuupQ== + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -2857,6 +2867,16 @@ get-pkg-repo@^1.0.0: parse-github-repo-url "^1.3.0" through2 "^2.0.0" +get-pkg-repo@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.1.0.tgz#bd2b109e297af8ec541ba271607aab439f9a8610" + integrity sha512-BHJovsEz9igoxU9Idfa9XjKr0OuAfg6/wInYegP0/M3efsdVtKo1DipPebwnTZXtL9gzaPLvJv74J/U68yiiMg== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^2.1.4" + meow "^5.0.0" + through2 "^2.0.0" + get-port@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" @@ -2897,6 +2917,17 @@ git-raw-commits@2.0.0: split2 "^2.0.0" through2 "^2.0.0" +git-raw-commits@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.3.tgz#f040e67b8445962d4d168903a9e84c4240c17655" + integrity sha512-SoSsFL5lnixVzctGEi2uykjA7B5I0AhO9x6kdzvGRHbxsa6JSEgrgy1esRKsfOKE1cgyOJ/KDR2Trxu157sb8w== + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^5.0.0" + split2 "^2.0.0" + through2 "^3.0.0" + git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" @@ -2905,7 +2936,7 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^2.0.3: +git-semver-tags@^2.0.0, git-semver-tags@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== @@ -4069,6 +4100,17 @@ make-fetch-happen@^5.0.0: socks-proxy-agent "^4.0.0" ssri "^6.0.0" +manual-git-changelog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/manual-git-changelog/-/manual-git-changelog-1.0.1.tgz#63ce94f6d3ca4611b954bbc7a6921e4f7baad837" + integrity sha512-sORVeVpUtnEuE59icgPqs0AzwgWJjTjSUy1RZ4VrAMOmHQaRh2L9nFCA/NRkvI4b7WbXMGt98NuI8dgOIFNSyA== + dependencies: + arrayify-stream "^1.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.0" + git-semver-tags "^2.0.0" + minimist "^1.2.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" From 2c944a05eb99d64a15a711c368625cef7c7dd949 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 11:08:55 +0100 Subject: [PATCH 087/165] Setup greenkeeper configuration --- .travis.yml | 1 + .travis/mkgreenkeeper.sh | 2 ++ .travis/validate_greenkeeper.sh | 7 +++++++ greenkeeper.json | 25 +++++++++++++++++++++++++ package.json | 11 +++++++++++ 5 files changed, 46 insertions(+) create mode 100755 .travis/mkgreenkeeper.sh create mode 100755 .travis/validate_greenkeeper.sh create mode 100644 greenkeeper.json diff --git a/.travis.yml b/.travis.yml index c75de4ee..0ab42653 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ matrix: env: DOCUMENTATION_BUILD=true DOCKER_BUILD=true install: yarn install --pure-lockfile script: + - .travis/validate_greenkeeper.sh - yarn run lint - yarn test - if [ "$DOCKER_BUILD" = "true" ]; then ( sh -c "`curl -fsSl https://raw.githubusercontent.com/rubensworks/lerna-docker/master/install.sh`" && ~/.lerna-docker/bin/lerna-docker linkeddatafragments build ) fi diff --git a/.travis/mkgreenkeeper.sh b/.travis/mkgreenkeeper.sh new file mode 100755 index 00000000..5d350755 --- /dev/null +++ b/.travis/mkgreenkeeper.sh @@ -0,0 +1,2 @@ +# Create entries for the greenkeeper.json file +find . -name package.json -maxdepth 3 | grep "^./packages" | sed "s/\.\///g" | gsed "s/^\(.*\)$/\"\1\",/g" diff --git a/.travis/validate_greenkeeper.sh b/.travis/validate_greenkeeper.sh new file mode 100755 index 00000000..9298c2f3 --- /dev/null +++ b/.travis/validate_greenkeeper.sh @@ -0,0 +1,7 @@ +find . -name package.json -maxdepth 3 | grep "^./packages" | sed "s/\.\///g" | while read p; do + if ! grep -q "$p" greenkeeper.json; then + echo "Could not find an entry for '$p' in greenkeeper.json." + echo "You can use .travis/mkgreenkeeper.sh to help you auto-generate the entries." + exit 1 + fi +done diff --git a/greenkeeper.json b/greenkeeper.json new file mode 100644 index 00000000..8d040f71 --- /dev/null +++ b/greenkeeper.json @@ -0,0 +1,25 @@ +{ + "groups": { + "root": { + "packages": [ + "package.json" + ] + }, + "allPackages": { + "packages": [ + "packages/datasource-hdt/package.json", + "packages/core/package.json", + "packages/feature-memento/package.json", + "packages/datasource-sparql/package.json", + "packages/server/package.json", + "packages/feature-webid/package.json", + "packages/datasource-n3/package.json", + "packages/datasource-composite/package.json", + "packages/preset-qpf/package.json", + "packages/datasource-jsonld/package.json", + "packages/feature-qpf/package.json", + "packages/feature-summary/package.json" + ] + } + } +} diff --git a/package.json b/package.json index 794d8e1f..12f7aec0 100644 --- a/package.json +++ b/package.json @@ -36,5 +36,16 @@ "publish-bare": "lerna exec -- npm publish --silent", "postinstall": "lerna run prepare", "version": "manual-git-changelog onversion" + }, + "greenkeeper": { + "commitMessages": { + "initialBadge": "Add Greenkeeper badge", + "initialDependencies": "Update dependencies", + "initialBranches": "Whitelist greenkeeper branches", + "dependencyUpdate": "Update ${dependency} to version ${version}", + "devDependencyUpdate": "Update dev ${dependency} to version ${version}", + "dependencyPin": "Pin ${dependency} to ${oldVersion}", + "devDependencyPin": "Pin ${dependency} to ${oldVersion}" + } } } From 6d8298a6057ddd3947eb71b998243c636bb871d4 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 11:52:12 +0100 Subject: [PATCH 088/165] Allow QPF to be disabled to TPF per datasource --- packages/core/README.md | 1 + packages/core/components/Datasource.jsonld | 11 +++++++++++ packages/core/components/context.jsonld | 1 + packages/core/lib/datasources/Datasource.js | 3 +++ 4 files changed, 16 insertions(+) diff --git a/packages/core/README.md b/packages/core/README.md index d37cb94b..6ce2f110 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -41,6 +41,7 @@ This package exposes the the following context entries: * `licenseUrl`: A link to the license of the datasource. _Should be used as key in a datasource._ * `copyright`: The copyright statement of the datasource. _Should be used as key in a datasource._ * `homepage`: The homepage url of the datasource. _Should be used as key in a datasource._ +* `quads`: If quad patterns are supported, otherwise only triple patterns are supported. Defaults to `true`. _Should be used as key in a datasource._ * `file`: The dataset file path. _Should be used as key in a memory datasource._ * `datasourceUrl`: The dataset file URL from the baseURL. _Should be used as key in a memory datasource._ diff --git a/packages/core/components/Datasource.jsonld b/packages/core/components/Datasource.jsonld index b1c37b5c..d4cfcb04 100644 --- a/packages/core/components/Datasource.jsonld +++ b/packages/core/components/Datasource.jsonld @@ -79,6 +79,13 @@ "comment": "The homepage url of the datasource", "range": "xsd:string", "unique": true + }, + { + "@id": "ldfc:Datasource#quads", + "comment": "If quad patterns are supported, otherwise only triple patterns are supported", + "range": "xsd:boolean", + "unique": true, + "default": true } ], "constructorArguments": { @@ -131,6 +138,10 @@ { "keyRaw": "homepage", "value": "ldfc:Datasource#homepage" + }, + { + "keyRaw": "quads", + "value": "ldfc:Datasource#quads" } ] } diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 4dbaadcf..d6c21b30 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -33,6 +33,7 @@ "licenseUrl": "ldfc:Datasource#licenseUrl", "copyright": "ldfc:Datasource#copyright", "homepage": "ldfc:Datasource#homepage", + "quads": "ldfc:Datasource#quads", "file": "ldfc:Datasource/Memory#file", "datasourceUrl": "ldfc:Datasource/Memory#url", diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index 425768e8..8bc7da1a 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -38,6 +38,7 @@ class Datasource extends EventEmitter { this._queryGraphReplacements[''] = 'urn:ldf:emptyGraph'; this._queryGraphReplacements[options.graph] = ''; } + this._supportsQuads = 'quads' in options ? options.quads : true; // Whether the datasource can be queried this.initialized = false; @@ -51,6 +52,8 @@ class Datasource extends EventEmitter { } else this.supportedFeatures = {}; + if (!this._supportsQuads) + delete this.supportedFeatures.quadPattern; Object.freeze(this.supportedFeatures); } From 05d3eaa330e84ebaced8f32743407ae9cb16ae13 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 4 Mar 2020 12:00:33 +0100 Subject: [PATCH 089/165] Temporarily publish Docker dev builds from release/3 branch --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index 0ab42653..6df335bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,3 +45,11 @@ deploy: all_branches: true node_js: "node" os: "linux" + - provider: script + skip-cleanup: true + script: ~/.lerna-docker/bin/lerna-docker linkeddatafragments push + on: + tags: false + branch: release/3 + node_js: "node" + os: "linux" From be6a7ec54417b9cae21e5c5093a90ab5a4f4d255 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 5 Mar 2020 12:57:43 +0100 Subject: [PATCH 090/165] Add config migration tool --- .eslintrc | 5 + packages/feature-summary/bin/generate-summary | 2 +- .../server/bin/ldf-server-migrate-config-3x | 160 ++++++++++++++++++ packages/server/package.json | 3 +- 4 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 packages/server/bin/ldf-server-migrate-config-3x diff --git a/.eslintrc b/.eslintrc index 0257f0cb..c7584b23 100644 --- a/.eslintrc +++ b/.eslintrc @@ -4,6 +4,11 @@ es6: true, }, + parserOptions: { + ecmaVersion: 9, + sourceType: "module" + }, + globals: { Promise: true, }, diff --git a/packages/feature-summary/bin/generate-summary b/packages/feature-summary/bin/generate-summary index ea051250..72ba2da6 100755 --- a/packages/feature-summary/bin/generate-summary +++ b/packages/feature-summary/bin/generate-summary @@ -16,7 +16,7 @@ var DS_NS = 'http://semweb.mmlab.be/ns/datasummaries#', var args = process.argv.slice(2); if (args.length < 1 || args.length > 2) { console.error('usage: generate-summary config.json [datasourceName]'); - return process.exit(1); + process.exit(1); } // Init variables diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x new file mode 100644 index 00000000..aeb74dd9 --- /dev/null +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -0,0 +1,160 @@ +#!/usr/bin/env node +/* Migrates an LDF server config file to the new 3.x.x format. */ +const fs = require('fs'); +const path = require('path'); + +var args = process.argv.slice(2); +if (!(args.length === 1 || (args.length === 2 && args[1] === '--apply'))) { + process.stdout.write('usage: ldf-server-migrate-config-3x config.json [--apply]\n'); + process.stdout.write(' Migrates an LDF server config file to the new 3.x.x format.\n'); + process.exit(1); +} + +migrateConfig(args[0], args[1] === '--apply'); + +function migrateConfig(configFile, updateFile) { + const configDefaults = { + '@context': 'https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld', + '@id': 'urn:ldf-server:my', + 'import': 'preset-qpf:config-defaults.json', + }; + + const configOld = JSON.parse(fs.readFileSync(path.join(__dirname, configFile))); + let config = configOld; + + if ('@context' in configOld) { + process.stderr.write('The config file already appears to be updated to 3.x.x, aborting.\n'); + process.exit(1); + } + + // Add pre-amble + config = { ...configDefaults, ...config }; + + // Convert Memento + if ('timegates' in config) { + const timegatesOld = config.timegates; + if ('baseURL' in timegatesOld) + config.timegateBaseUrl = timegatesOld.baseURL; + delete config.timegates; + const mementos = []; + for (const timegatePath in timegatesOld.mementos) { + const memento = timegatesOld.mementos[timegatePath]; + const versions = []; + for (const datasourceId of memento.versions) { + const mementoInterval = config.datasources[datasourceId].memento.interval; + versions.push({ + mementoDatasource: datasourcePathToId(datasourceId), + versionStart: mementoInterval[0], + versionEnd: mementoInterval[1], + ... memento.originalBaseURL ? { mementoBaseURL: memento.originalBaseURL } : {}, + }); + } + mementos.push({ timegatePath, versions }); + } + config.mementos = mementos; + } + + // Convert datasources + if ('datasources' in config) { + const datasourcesOld = config.datasources; + const datasourcesNew = []; + for (const datasourcePath in datasourcesOld) { + const datasourceOld = datasourcesOld[datasourcePath]; + + const settingsOld = datasourceOld.settings; + const settings = {}; + if (settingsOld) { + if ('endpoint' in settingsOld) settings.sparqlEndpoint = settingsOld.endpoint; + if ('file' in settingsOld && datasourceOld.type !== 'HdtDatasource') settings.file = settingsOld.file; + if ('file' in settingsOld && datasourceOld.type === 'HdtDatasource') settings.hdtFile = settingsOld.hdtFile; + if ('references' in settingsOld) settings.compose = settingsOld.references.map(datasourcePathToId); + } + + datasourcesNew.push({ + '@id': datasourcePathToId(datasourcePath), + '@type': datasourceOld.type, + 'datasourcePath': datasourcePath, + 'datasourceTitle': datasourceOld.title, + ... datasourceOld.description ? { datasourceDescription: datasourceOld.description } : {}, + ... datasourceOld.license ? { license: datasourceOld.license } : {}, + ... datasourceOld.licenseUrl ? { licenseUrl: datasourceOld.licenseUrl } : {}, + ... datasourceOld.copyright ? { licenseUrl: datasourceOld.copyright } : {}, + ... datasourceOld.homepage ? { licenseUrl: datasourceOld.homepage } : {}, + ... datasourceOld.hide ? { licenseUrl: datasourceOld.hide } : {}, + ... datasourceOld.enabled ? { licenseUrl: datasourceOld.enabled } : {}, + ... settings, + }); + } + config.datasources = datasourcesNew; + } + + // Convert prefixes + if ('prefixes' in config) { + const prefixesOld = config.prefixes; + const prefixesNew = []; + for (const prefix in prefixesOld) + prefixesNew.push({ prefix, uri: prefixesOld[prefix] }); + config.prefixes = prefixesNew; + } + + // Convert dereference + if ('dereference' in config) { + const dereferenceOld = config.dereference; + const dereferenceNew = []; + for (const dereferencePath in dereferenceOld) + dereferenceNew.push({ dereferenceDatasource: datasourcePathToId(dereferenceOld[dereferencePath]), dereferencePath }); + config.dereference = dereferenceNew; + } + + // Convert logging + if ('logging' in config) { + const loggingOld = config.logging; + config.logging = 'enabled' in loggingOld ? loggingOld.enabled : true; + config.loggingFile = loggingOld.file; + } + + // Convert SSL + if ('ssl' in config) { + const keys = config.ssl.keys; + config.sslKey = keys.key; + config.sslCert = keys.cert; + config.sslCa = keys.ca; + delete config.ssl; + } + + // Convert response headers + if ('response' in config) { + const headersOld = config.response.headers; + delete config.response; + const headersNew = []; + for (const headerName in headersOld) + headersNew.push({ headerName, headerValue: headersOld[headerName] }); + config.responseHeaders = headersNew; + } + + // Convert Routers, Controllers and Views + if ('routers' in config || 'controllers' in config || 'views' in config) { + process.stderr.write('Custom routers, controllers and views are not supported by this tool, they have been omitted from the config.\n'); + process.stderr.write('Please refer to the documentation: https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core/README.md\n'); + delete config.routers; + delete config.controllers; + delete config.views; + } + + if (updateFile) { + const configFileBack = configFile + '.back'; + if (fs.existsSync(configFileBack)) { + process.stderr.write(`The backup file ${configFileBack} already exists, aborting.\n`); + process.exit(1); + } + fs.writeFileSync(configFileBack, JSON.stringify(configOld, null, ' ')); + fs.writeFileSync(configFile, JSON.stringify(config, null, ' ')); + process.stderr.write(`Config file has been successfully updated at ${configFile}\n`); + } + else + process.stdout.write(JSON.stringify(config, null, ' ') + '\n'); +} + +function datasourcePathToId(datasourcePath) { + return 'ex:myDatasource' + datasourcePath; +} diff --git a/packages/server/package.json b/packages/server/package.json index ba0ca740..3cf4ceb4 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -12,7 +12,8 @@ }, "license": "MIT", "bin": { - "ldf-server": "./bin/ldf-server" + "ldf-server": "./bin/ldf-server", + "ldf-server-migrate-config-3x": "./bin/ldf-server-migrate-config-3x" }, "publishConfig": { "access": "public" From cba41cdce43deea9e4106b5976608769db879cfb Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 11 Mar 2020 10:13:08 +0100 Subject: [PATCH 091/165] Fix literals from Virtuoso endpoints being seen as URIs, Closes #94 --- .../lib/datasources/SparqlDatasource.js | 25 ++++-------- packages/datasource-sparql/package.json | 4 +- .../test/datasources/SparqlDatasource-test.js | 38 ------------------- .../server/bin/ldf-server-migrate-config-3x | 0 yarn.lock | 38 ++++++++++++++++++- 5 files changed, 48 insertions(+), 57 deletions(-) mode change 100644 => 100755 packages/server/bin/ldf-server-migrate-config-3x diff --git a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js index 84276863..6afedc9f 100644 --- a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -3,6 +3,8 @@ var Datasource = require('@ldf/core').datasources.Datasource, N3 = require('n3'), + SparqlJsonParser = require('sparqljson-parse').SparqlJsonParser, + termToString = require('rdf-string').termToString, LRU = require('lru-cache'); var DEFAULT_COUNT_ESTIMATE = { totalCount: 1e9, hasExactCount: false }; @@ -17,6 +19,7 @@ class SparqlDatasource extends Datasource { this._countCache = new LRU({ max: 1000, maxAge: 1000 * 60 * 60 * 3 }); this._resolvingCountQueries = {}; + this._sparqlJsonParser = new SparqlJsonParser(); // Set endpoint URL and default graph options = options || {}; @@ -44,11 +47,12 @@ class SparqlDatasource extends Datasource { catch (e) { return emitError({ message: INVALID_JSON_RESPONSE }); } response.results.bindings.forEach(function (binding) { + binding = self._sparqlJsonParser.parseJsonBindings(binding); var triple = { - subject: binding.s ? self._parseJsonEntity(binding.s) : query.subject, - predicate: binding.p ? self._parseJsonEntity(binding.p) : query.predicate, - object: binding.o ? self._parseJsonEntity(binding.o) : query.object, - graph: binding.g ? self._parseJsonEntity(binding.g) : query.graph, + subject: binding.s ? termToString(binding.s) : query.subject, + predicate: binding.p ? termToString(binding.p) : query.predicate, + object: binding.o ? termToString(binding.o) : query.object, + graph: binding.g ? termToString(binding.g) : query.graph, }; destination._push(triple); }); @@ -169,19 +173,6 @@ class SparqlDatasource extends Datasource { return query.push('}'), query.join(''); } - - // Parses an entity from a JSON SPARQL response - _parseJsonEntity(entity) { - if (entity.type === 'literal') { - var suffixes = ''; - if (entity.datatype) - suffixes += '^^<' + entity.datatype + '>'; - if (entity['xml:lang']) - suffixes += '@' + entity['xml:lang']; - return '"' + entity.value + '"' + suffixes; - } - return entity.value; - } } module.exports = SparqlDatasource; diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 75c3bc9f..36da39b4 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -29,8 +29,10 @@ "lint": "eslint bin/* lib test" }, "dependencies": { + "sparqljson-parse": "^1.5.1", "lru-cache": "^4.0.1", - "n3": "^0.9.0" + "n3": "^0.9.0", + "rdf-string": "^1.3.1" }, "peerDependencies": { "@ldf/core": "2.2.5" diff --git a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js index 497962af..81732ea9 100644 --- a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js +++ b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js @@ -253,44 +253,6 @@ describe('SparqlDatasource', function () { expect(totalCount).to.equal(1e9); }); }); - - describe('when a JSON URI value is received', function () { - var component = { type: 'uri', value: 'http://example.org/someuri' }; - it('should deserialize it as an N3.js URI', function () { - expect(datasource._parseJsonEntity(component)).to.equal('http://example.org/someuri'); - }); - }); - - describe('when a JSON literal value is received', function () { - var component = { type: 'literal', value: 'somevalue' }; - it('should deserialize it as an N3.js literal', function () { - expect(datasource._parseJsonEntity(component)).to.equal('"somevalue"'); - }); - }); - - describe('when a JSON literal value with a language is received', function () { - var component = { 'type': 'literal', 'value': 'somevalue', 'xml:lang': 'en' }; - it('should deserialize it as an N3.js literal with the language', function () { - expect(datasource._parseJsonEntity(component)).to.equal('"somevalue"@en'); - }); - }); - - describe('when a JSON literal value with a datatype is received', function () { - var component = { type: 'literal', value: 'somevalue', datatype: 'http://www.w3.org/2001/XMLSchema#integer' }; - it('should deserialize it as an N3.js literal with the datatype', function () { - expect(datasource._parseJsonEntity(component)) - .to.equal('"somevalue"^^'); - }); - }); - - describe('when a JSON literal value with a language and datatype is received', function () { - var component = { 'type': 'literal', 'value': 'somevalue', 'xml:lang': 'en', - 'datatype': 'http://www.w3.org/2001/XMLSchema#integer' }; - it('should deserialize it as an N3.js literal with the language and datatype', function () { - expect(datasource._parseJsonEntity(component)) - .to.equal('"somevalue"^^@en'); - }); - }); }); }); diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x old mode 100644 new mode 100755 diff --git a/yarn.lock b/yarn.lock index 37378304..73229025 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1004,6 +1004,13 @@ dependencies: "@types/node" ">= 8" +"@rdfjs/data-model@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@rdfjs/data-model/-/data-model-1.1.2.tgz#e2f48a422c7e837b8a7d96d240732be3287df713" + integrity sha512-pk/G/JLYGaXesoBLvEmoC/ic0H3B79fTyS0Ujjh5YQB2DZW+mn05ZowFFv88rjB9jf7c1XE5XSmf8jzn6U0HHA== + dependencies: + "@types/rdf-js" "^2.0.1" + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -1033,6 +1040,18 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" integrity sha512-eyK7MWD0R1HqVTp+PtwRgFeIsemzuj4gBFSQxfPHY5iMjS7474e5wq+VFgTcdpyHeNxyKSaetYAjdMLJlKoWqA== +"@types/node@^10.12.18": + version "10.17.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.17.tgz#7a183163a9e6ff720d86502db23ba4aade5999b8" + integrity sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q== + +"@types/rdf-js@^2.0.1", "@types/rdf-js@^2.0.2": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/rdf-js/-/rdf-js-2.0.11.tgz#b9e398504ceb9f00eaa3b3036b643dc3490cf362" + integrity sha512-GC5MZU2HbL5JnlrLAzoxSqLprqtKwocz0TNVugqM04t1ZeeNFpZRqqBQc9Jhev35hEwdH84siRLaCesxHHYlmA== + dependencies: + "@types/node" "*" + "@zkochan/cmd-shim@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" @@ -1042,7 +1061,7 @@ mkdirp-promise "^5.0.1" mz "^2.5.0" -JSONStream@^1.0.4, JSONStream@^1.3.4: +JSONStream@^1.0.4, JSONStream@^1.3.3, JSONStream@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -5204,6 +5223,13 @@ rc@~1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +rdf-string@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/rdf-string/-/rdf-string-1.3.1.tgz#a9f49db4dbe0ff06bb17bf46e0389862f6a77e49" + integrity sha512-Pcw6aZRfto2cZodK5kSqFZW8mz6nfKLxSfjOSrTi5ajb2CSIwzqGx7UniysgKoV2i7tQL5dpPgCgY80upCiRUw== + dependencies: + "@rdfjs/data-model" "^1.1.1" + read-cmd-shim@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" @@ -5772,6 +5798,16 @@ source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sparqljson-parse@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sparqljson-parse/-/sparqljson-parse-1.5.1.tgz#a3f1b08724e31c6c7e96f182ca9685b606f15ebf" + integrity sha512-+hlVthsoADK/gZkNrV6GCz7Ep3GwtY8DNJSjt9Mt32vuTL9QbQlCRalqOQRaz7D/oyRAsNvkW6/KldMA7s2YCQ== + dependencies: + "@rdfjs/data-model" "^1.1.1" + "@types/node" "^10.12.18" + "@types/rdf-js" "^2.0.2" + JSONStream "^1.3.3" + spawn-sync@^1.0.15: version "1.0.15" resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" From b38026fd32bc4034c4aca36dac1c7f024d175b29 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 12 Mar 2020 09:25:31 +0100 Subject: [PATCH 092/165] Add SparqlDatasource option to force typed literals This is needed in cases where endpoints (such as Virtuoso) make a distinction between simple literals and literals typed with xsd:string. When enabling the sparqlForceTypedLiterals flag on a datasource, only typed literals will be sent to the endpoint. --- .../components/Datasource/Sparql.jsonld | 11 ++++++ .../components/context.jsonld | 3 +- .../lib/datasources/SparqlDatasource.js | 10 ++++-- .../test/datasources/SparqlDatasource-test.js | 36 +++++++++++++++++++ 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/packages/datasource-sparql/components/Datasource/Sparql.jsonld b/packages/datasource-sparql/components/Datasource/Sparql.jsonld index 9ac0ff36..bddf68ed 100644 --- a/packages/datasource-sparql/components/Datasource/Sparql.jsonld +++ b/packages/datasource-sparql/components/Datasource/Sparql.jsonld @@ -17,6 +17,13 @@ "comment": "The SPARQL endpoint URL", "range": "xsd:string", "unique": true + }, + { + "@id": "ldfds:Datasource/Sparql#forceTypedLiterals", + "comment": "If simple literals should be converted into explicitly typed literals with xsd:string when sending a query to the endpoint.", + "range": "xsd:boolean", + "unique": true, + "default": false } ], "constructorArguments": { @@ -25,6 +32,10 @@ { "keyRaw": "endpoint", "value": "ldfds:Datasource/Sparql#endpoint" + }, + { + "keyRaw": "forceTypedLiterals", + "value": "ldfds:Datasource/Sparql#forceTypedLiterals" } ] } diff --git a/packages/datasource-sparql/components/context.jsonld b/packages/datasource-sparql/components/context.jsonld index 02fe65b0..3833d296 100644 --- a/packages/datasource-sparql/components/context.jsonld +++ b/packages/datasource-sparql/components/context.jsonld @@ -7,7 +7,8 @@ "files-ldfds": "ldfds:^3.0.0/", "SparqlDatasource": "ldfds:Datasource/Sparql", - "sparqlEndpoint": "ldfds:Datasource/Sparql#endpoint" + "sparqlEndpoint": "ldfds:Datasource/Sparql#endpoint", + "sparqlForceTypedLiterals": "ldfds:Datasource/Sparql#forceTypedLiterals" } ] } diff --git a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js index 6afedc9f..cef09353 100644 --- a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -25,6 +25,8 @@ class SparqlDatasource extends Datasource { options = options || {}; this._endpoint = this._endpointUrl = (options.endpoint || '').replace(/[\?#][^]*$/, ''); this._endpointUrl += '?query='; + + this._forceTypedLiterals = options.forceTypedLiterals; } // Writes the results of the query to the given triple stream @@ -164,8 +166,12 @@ class SparqlDatasource extends Datasource { query.push('"', literalMatch[1], '"'); else query.push('"""', literalMatch[1].replace(/(["\\])/g, '\\$1'), '"""'); - literalMatch[2] ? query.push(literalMatch[2]) - : literalMatch[3] && query.push('^^<', literalMatch[3], '>'); + if (literalMatch[2]) + query.push(literalMatch[2]); + else if (this._forceTypedLiterals) + query.push('^^<', literalMatch[3] || 'http://www.w3.org/2001/XMLSchema#string', '>'); + else + literalMatch[3] && query.push('^^<', literalMatch[3], '>'); } if (quad.graph !== '') diff --git a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js index 81732ea9..7eaa0e34 100644 --- a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js +++ b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js @@ -254,6 +254,42 @@ describe('SparqlDatasource', function () { }); }); }); + + describe('A SparqlDatasource instance with forceTypedLiterals true', function () { + var request = sinon.stub(); + var datasource = new SparqlDatasource({ endpoint: 'http://ex.org/sparql', request: request, forceTypedLiterals: true }); + datasource.initialize(); + + itShouldExecute(datasource, request, + 'a query for an object IRI', + { object: 'http://example.org/bar#foo', features: { quadPattern: true } }, + 'SELECT * WHERE {GRAPH ?g{?s ?p }}', + 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p }}'); + + itShouldExecute(datasource, request, + 'a query for an object literal', + { object: '"a literal"', features: { quadPattern: true } }, + 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"^^}}', + 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"^^}}'); + + itShouldExecute(datasource, request, + 'a query for an object literal with newlines and quotes', + { object: '"a\rb\nc"\r\n\\""', features: { quadPattern: true } }, + 'SELECT * WHERE {GRAPH ?g{?s ?p """a\rb\nc\\"\r\n\\\\\\""""^^}}', + 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p """a\rb\nc\\"\r\n\\\\\\""""^^}}'); + + itShouldExecute(datasource, request, + 'a query for an object literal with a language', + { object: '"a literal"@nl-be', features: { quadPattern: true } }, + 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"@nl-be}}', + 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"@nl-be}}'); + + itShouldExecute(datasource, request, + 'a query for an object literal with a type', + { object: '"a literal"^^http://ex.org/foo#literal', features: { quadPattern: true } }, + 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"^^}}', + 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"^^}}'); + }); }); function itShouldExecute(datasource, request, name, query, constructQuery, countQuery) { From b014f67c55550260dc3f0032594c759bf570e983 Mon Sep 17 00:00:00 2001 From: Ruben Dedecker Date: Wed, 11 Mar 2020 12:43:34 +0100 Subject: [PATCH 093/165] Refactor codebase to use RDFJS terms instead of strings. --- packages/core/README.md | 2 +- packages/core/components/Datasource.jsonld | 7 +- packages/core/components/View/Html.jsonld | 9 - packages/core/components/context.jsonld | 1 - packages/core/lib/datasources/Datasource.js | 44 +-- .../core/lib/datasources/IndexDatasource.js | 15 +- .../core/lib/datasources/MemoryDatasource.js | 5 +- packages/core/lib/views/HtmlView.js | 4 +- packages/core/lib/views/RdfView.js | 79 ++--- packages/core/lib/views/ViewCollection.js | 28 +- packages/core/package.json | 12 +- .../core/test/datasources/Datasource-test.js | 43 ++- packages/datasource-composite/package.json | 2 +- .../datasources/CompositeDatasource-test.js | 31 +- .../lib/datasources/ExternalHdtDatasource.js | 7 +- .../lib/datasources/HdtDatasource.js | 14 +- packages/datasource-hdt/package.json | 4 +- .../test/datasources/HdtDatasource-test.js | 36 +-- .../lib/datasources/JsonLdDatasource.js | 55 +--- packages/datasource-jsonld/package.json | 3 +- .../test/datasources/JsonLdDatasource-test.js | 19 +- packages/datasource-n3/package.json | 2 +- .../test/datasources/N3Datasource-test.js | 21 +- .../lib/datasources/SparqlDatasource.js | 71 +++-- packages/datasource-sparql/package.json | 4 +- .../test/datasources/SparqlDatasource-test.js | 82 ++--- .../QuadPatternFragmentsController.js | 5 +- .../lib/routers/QuadPatternRouter.js | 15 +- .../QuadPatternFragmentsRdfView.js | 84 +++--- .../views/quadpatternfragments/fragment.html | 16 +- packages/feature-qpf/package.json | 3 +- .../test/routers/QuadPatternRouter-test.js | 81 ++--- .../QuadPatternFragmentsRdfView-test.js | 17 +- packages/feature-summary/bin/generate-summary | 2 +- .../lib/controllers/SummaryController.js | 2 +- .../QuadPatternFragmentsRdfView-Summary.js | 6 +- packages/feature-summary/package.json | 2 +- .../controllers/WebIDControllerExtension.js | 5 +- packages/feature-webid/package.json | 4 +- packages/server/config/config-example.json | 7 + .../basic-fragment-metadata-last.jsonld | 284 +++++++++++------ test/assets/basic-fragment-metadata-last.nq | 72 ++--- test/assets/basic-fragment-metadata-last.nt | 70 ++--- test/assets/basic-fragment.jsonld | 285 ++++++++++++------ test/assets/basic-fragment.nq | 72 ++--- test/assets/basic-fragment.nt | 70 ++--- test/assets/empty-fragment.jsonld | 272 +++++++++++------ test/assets/empty-fragment.nq | 66 ++-- test/assets/empty-fragment.nt | 64 ++-- test/assets/summary.nt | 236 +++++++-------- yarn.lock | 89 ++++-- 51 files changed, 1367 insertions(+), 1062 deletions(-) diff --git a/packages/core/README.md b/packages/core/README.md index 6ce2f110..f2c7cab3 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -63,11 +63,11 @@ This package exposes the the following context entries: * `View`: An abstract view. _Should be used as `extends` value when creating new views._ * `viewExtensions`: A view extension. _Should be used as key in a view._ * `viewCache`: If views should be cached. _Should be used as key in an HTML view._ -* `n3Util`: The N3Util class. _Should be used as key in an HTML view._ * `viewHeader`: The view header title. _Should be used as key in an HTML view._ **Other:** * `Server`: An HTTP server that provides access to Linked Data Fragments. This is enabled by default in `@ldf/server`. _Should be used as `@type` value._ +* `dataFactory`: A factory object used to construct rdfjs terms._ * `title`: The server name. _Should be used as key in a `Server` config._ * `baseURL`: The base URL path for the server. _Should be used as key in a `Server` config._ * `port`: The port the server will bind with. _Should be used as key in a `Server` config._ diff --git a/packages/core/components/Datasource.jsonld b/packages/core/components/Datasource.jsonld index d4cfcb04..a7aecd19 100644 --- a/packages/core/components/Datasource.jsonld +++ b/packages/core/components/Datasource.jsonld @@ -86,7 +86,12 @@ "range": "xsd:boolean", "unique": true, "default": true - } + }, + { + "@id": "ldfc:Datasource#dataFactory", + "comment": "Used to create rdfjs terms", + "unique": true + } ], "constructorArguments": { "@id": "ldfc:Datasource#constructorArgumentsObject", diff --git a/packages/core/components/View/Html.jsonld b/packages/core/components/View/Html.jsonld index 890c6ee5..5285ba8d 100644 --- a/packages/core/components/View/Html.jsonld +++ b/packages/core/components/View/Html.jsonld @@ -16,11 +16,6 @@ "range": "xsd:boolean", "unique": true }, - { - "@id": "ldfc:View/Html#n3Util", - "comment": "The N3Util class", - "unique": true - }, { "@id": "ldfc:View/Html#urlData", "inheritValues": { @@ -54,10 +49,6 @@ "keyRaw": "cache", "value": "ldfc:View/Html#cache" }, - { - "keyRaw": "N3Util", - "value": "ldfc:View/Html#n3Util" - }, { "@id": "ldfc:Server#urlDataField" }, diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index d6c21b30..5b933eb8 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -52,7 +52,6 @@ "viewExtension": "ldfc:View#extension", "viewExtensions": "ldfc:View#extension", "viewCache": "ldfc:View/Html#cache", - "n3Util": "ldfc:View/Html#n3Util", "viewTitle": "ldfc:View/Html#title", "viewHeader": "ldfc:View/Html#header", diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index 8bc7da1a..9ba2f41a 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -5,7 +5,9 @@ var fs = require('fs'), _ = require('lodash'), UrlData = require('../UrlData'), BufferedIterator = require('asynciterator').BufferedIterator, - EventEmitter = require('events'); + EventEmitter = require('events'), + stringToTerm = require('rdf-string').stringToTerm, + N3 = require('n3'); // Creates a new Datasource class Datasource extends EventEmitter { @@ -32,8 +34,9 @@ class Datasource extends EventEmitter { this._request = options.request || require('request'); this._blankNodePrefix = options.blankNodePrefix || this._blankNodePrefix; this._blankNodePrefixLength = this._blankNodePrefix.length; + this.dataFactory = options.dataFactory || N3.DataFactory; if (options.graph) { - this._graph = options.graph; + this._graph = this.dataFactory.namedNode(options.graph); this._queryGraphReplacements = Object.create(null); this._queryGraphReplacements[''] = 'urn:ldf:emptyGraph'; this._queryGraphReplacements[options.graph] = ''; @@ -114,32 +117,31 @@ class Datasource extends EventEmitter { // Translate blank nodes IRIs in the query to blank nodes var blankNodePrefix = this._blankNodePrefix, blankNodePrefixLength = this._blankNodePrefixLength; - if (query.subject && query.subject.indexOf(blankNodePrefix) === 0) - query.subject = '_:' + query.subject.substr(blankNodePrefixLength); - if (query.object && query.object.indexOf(blankNodePrefix) === 0) - query.object = '_:' + query.object.substr(blankNodePrefixLength); - if (query.graph && query.graph.indexOf(blankNodePrefix) === 0) - query.graph = '_:' + query.graph.substr(blankNodePrefixLength); + if (query.subject && query.subject.value.indexOf(blankNodePrefix) === 0) + query.subject = this.dataFactory.blankNode(query.subject.value.substr(blankNodePrefixLength)); + if (query.object && query.object.value.indexOf(blankNodePrefix) === 0) + query.object = this.dataFactory.blankNode(query.object.value.substr(blankNodePrefixLength)); + if (query.graph && query.graph.value.indexOf(blankNodePrefix) === 0) + query.graph = this.dataFactory.blankNode(query.graph.value.substr(blankNodePrefixLength)); // If a custom default graph was set, query it as the default graph - if (this._graph && (query.graph in this._queryGraphReplacements)) - query.graph = this._queryGraphReplacements[query.graph]; + if (this._graph && query.graph && query.graph.value in this._queryGraphReplacements) + query.graph = stringToTerm(this._queryGraphReplacements[query.graph.value], this.dataFactory); // Transform the received quads var destination = new BufferedIterator(), outputQuads, graph = this._graph, self = this; outputQuads = destination.map(function (quad) { - // Translate blank nodes in the result to blank node IRIs - if (quad.subject[0] === '_' && !self._skolemizeBlacklist[quad.subject]) - quad.subject = blankNodePrefix + quad.subject.substr(2); - if (quad.object[0] === '_' && !self._skolemizeBlacklist[quad.object]) - quad.object = blankNodePrefix + quad.object.substr(2); - if (quad.graph) { - if (quad.graph[0] === '_' && !self._skolemizeBlacklist[quad.graph]) - quad.graph = blankNodePrefix + quad.graph.substr(2); + // Translate blank nodes in the result to blank node IRIs. + if (quad.subject && quad.subject.termType === 'BlankNode' && !self._skolemizeBlacklist[quad.subject.value]) + quad.subject = self.dataFactory.namedNode(blankNodePrefix + quad.subject.value); + if (quad.object && quad.object.termType === 'BlankNode' && !self._skolemizeBlacklist[quad.object.value]) + quad.object = self.dataFactory.namedNode(blankNodePrefix + quad.object.value); + if (quad.graph && quad.graph.termType !== 'DefaultGraph') { + if (quad.graph.termType === 'BlankNode' && !self._skolemizeBlacklist[quad.graph.value]) + quad.graph = self.dataFactory.namedNode(blankNodePrefix + quad.graph.value); } - // If a custom default graph was set, move default graph triples there - else if (graph) - quad.graph = graph; + // If a custom default graph was set, move default graph triples there. + quad.graph = quad.graph && quad.graph.termType !== 'DefaultGraph' ? quad.graph : (graph || quad.graph); return quad; }); outputQuads.copyProperties(destination, ['metadata']); diff --git a/packages/core/lib/datasources/IndexDatasource.js b/packages/core/lib/datasources/IndexDatasource.js index f51074d4..6f43ceeb 100644 --- a/packages/core/lib/datasources/IndexDatasource.js +++ b/packages/core/lib/datasources/IndexDatasource.js @@ -18,19 +18,16 @@ class IndexDatasource extends MemoryDatasource { // Creates quads for each data source _getAllQuads(addQuad, done) { + const quad = this.dataFactory.quad, namedNode = this.dataFactory.namedNode, literal = this.dataFactory.literal; for (var name in this._datasources) { var datasource = this._datasources[name], datasourceUrl = datasource.url; - if (!datasource.hide) { - triple(datasourceUrl, rdf + 'type', voID + 'Dataset'); - triple(datasourceUrl, rdfs + 'label', datasource.title, true); - triple(datasourceUrl, dc + 'title', datasource.title, true); - triple(datasourceUrl, dc + 'description', datasource.description, true); + if (!datasource.hide && datasourceUrl) { + addQuad(quad(namedNode(datasourceUrl), namedNode(rdf + 'type'), namedNode(voID + 'Dataset'))); + datasource.title && addQuad(quad(namedNode(datasourceUrl), namedNode(rdfs + 'label'), literal(datasource.title))); + datasource.title && addQuad(quad(namedNode(datasourceUrl), namedNode(dc + 'title'), literal(datasource.title))); + datasource.description && addQuad(quad(namedNode(datasourceUrl), namedNode(dc + 'description'), literal(datasource.description))); } } - function triple(subject, predicate, object, isLiteral) { - if (subject && predicate && object) - addQuad(subject, predicate, isLiteral ? '"' + object + '"' : object); - } delete this._datasources; done(); } diff --git a/packages/core/lib/datasources/MemoryDatasource.js b/packages/core/lib/datasources/MemoryDatasource.js index fea93f39..362a59e5 100644 --- a/packages/core/lib/datasources/MemoryDatasource.js +++ b/packages/core/lib/datasources/MemoryDatasource.js @@ -14,7 +14,7 @@ class MemoryDatasource extends Datasource { // Prepares the datasource for querying _initialize(done) { var quadStore = this._quadStore = new N3Store(); - this._getAllQuads(function (s, p, o, g) { quadStore.addTriple(s, p, o, g); }, done); + this._getAllQuads(function (quad) { quadStore.addQuad(quad); }, done); } // Retrieves all quads in the datasource @@ -25,8 +25,7 @@ class MemoryDatasource extends Datasource { // Writes the results of the query to the given quad stream _executeQuery(query, destination) { var offset = query.offset || 0, limit = query.limit || Infinity, - quads = this._quadStore.findByIRI(query.subject, query.predicate, query.object, - query.graph); + quads = this._quadStore.getQuads(query.subject, query.predicate, query.object, query.graph); // Send the metadata destination.setProperty('metadata', { totalCount: quads.length, hasExactCount: true }); // Send the requested subset of quads diff --git a/packages/core/lib/views/HtmlView.js b/packages/core/lib/views/HtmlView.js index 4a1b9589..62ab0a87 100644 --- a/packages/core/lib/views/HtmlView.js +++ b/packages/core/lib/views/HtmlView.js @@ -6,7 +6,7 @@ var View = require('./View'), q = require('q'), path = require('path'), _ = require('lodash'), - N3Util = require('n3').Util, + RdfString = require('rdf-string'), UrlData = require('../UrlData'); // Creates a new HTML view with the given name and settings @@ -15,7 +15,7 @@ class HtmlView extends View { settings = settings || {}; settings.urlData = settings.urlData || new UrlData(); var defaults = { - cache: true, N3Util: N3Util, + cache: true, RdfString: RdfString, assetsPath: settings.urlData.assetsPath || '/', baseURL: settings.urlData.baseURL || '/', title: '', header: settings && settings.title, }; diff --git a/packages/core/lib/views/RdfView.js b/packages/core/lib/views/RdfView.js index 417bbea3..372623ac 100644 --- a/packages/core/lib/views/RdfView.js +++ b/packages/core/lib/views/RdfView.js @@ -3,7 +3,7 @@ var View = require('./View'), N3 = require('n3'), - jsonld = require('jsonld'), + JsonLdSerializer = require('jsonld-streaming-serializer').JsonLdSerializer, _ = require('lodash'); var dcTerms = 'http://purl.org/dc/terms/', @@ -21,6 +21,7 @@ var contentTypes = 'application/trig;q=0.9,application/n-quads;q=0.7,' + class RdfView extends View { constructor(viewName, settings) { super(viewName, contentTypes, settings); + this.dataFactory = N3.DataFactory; } // Renders the view with the given settings to the response @@ -58,9 +59,12 @@ class RdfView extends View { var datasources = settings.datasources; for (var datasourceName in datasources) { var datasource = datasources[datasourceName]; - metadata(datasource.url, rdf + 'type', voID + 'Dataset'); - metadata(datasource.url, rdf + 'type', hydra + 'Collection'); - metadata(datasource.url, dcTerms + 'title', '"' + datasource.title + '"'); + if (datasource.url) { + const quad = this.dataFactory.quad, namedNode = this.dataFactory.namedNode, literal = this.dataFactory.literal; + metadata(quad(namedNode(datasource.url), namedNode(rdf + 'type'), namedNode(voID + 'Dataset'))); + metadata(quad(namedNode(datasource.url), namedNode(rdf + 'type'), namedNode(hydra + 'Collection'))); + metadata(quad(namedNode(datasource.url), namedNode(dcTerms + 'title'), literal('"' + datasource.title + '"', 'en'))); + } } } @@ -68,24 +72,23 @@ class RdfView extends View { _createN3Writer(settings, response, done) { var writer = new N3.Writer({ format: settings.contentType, prefixes: settings.prefixes }), supportsGraphs = /trig|quad/.test(settings.contentType), metadataGraph; + + const dataFactory = this.dataFactory; return { // Adds the data quad to the output // NOTE: The first parameter can also be a quad object - data: function (s, p, o, g) { - // If graphs are unsupported, only write triples in the default graph - if (supportsGraphs || (p ? !g : !s.graph)) - writer.addTriple(s, p, o, g); + data: function (quad) { + writer.addQuad(quad); }, // Adds the metadata triple to the output - meta: function (s, p, o) { - // Relate the metadata graph to the data + meta: function (quad) { + // Relate the metadata graph to the data. if (supportsGraphs && !metadataGraph) { metadataGraph = settings.metadataGraph; - writer.addTriple(metadataGraph, primaryTopic, settings.fragmentUrl, metadataGraph); + writer.addQuad(dataFactory.namedNode(metadataGraph), dataFactory.namedNode(primaryTopic), dataFactory.namedNode(settings.fragmentUrl), dataFactory.namedNode(metadataGraph)); } - // Write the metadata triple - if (s && p && o && !N3.Util.isLiteral(s)) - writer.addTriple(s, p, o, metadataGraph); + quad.graph = quad.graph.termType === 'DefaultGraph' ? (metadataGraph ? dataFactory.namedNode(metadataGraph) : dataFactory.defaultGraph()) : quad.graph; + writer.addQuad(quad); }, // Ends the output and flushes the stream end: function () { @@ -99,50 +102,32 @@ class RdfView extends View { // Creates a writer for JSON-LD _createJsonLdWriter(settings, response, done) { - // Initialize triples, prefixes, and document base - var quads = { '@default': [] }, metadata = quads[settings.metadataGraph] = [], - prefixes = settings.prefixes || {}, context = _.omit(prefixes, ''), base = prefixes['']; + var prefixes = settings.prefixes || {}, context = _.omit(prefixes, ''), base = prefixes['']; base && (context['@base'] = base); + const mySerializer = new JsonLdSerializer({ space: ' ', context: context, baseIRI: prefixes[''], useNativeTypes: true }) + .on('error', done); + mySerializer.pipe(response); + mySerializer.on('error', (e => done(e))); + mySerializer.on('end', (e => done(null))); + + const dataFactory = this.dataFactory; return { // Adds the data triple to the output - data: function (s, p, o, g) { - if (!p) g = s.graph, o = s.object, p = s.predicate, s = s.subject; - if (!g) g = '@default'; - var graph = quads[g] || (quads[g] = []); - graph.push(toJsonLdTriple(s, p, o)); + data: function (quad) { + mySerializer.write(quad); }, // Adds the metadata triple to the output - meta: function (s, p, o) { - if (s && p && o && !N3.Util.isLiteral(s)) - metadata.push(toJsonLdTriple(s, p, o)); + meta: function (quad) { + quad.graph = quad.graph.termType === 'DefaultGraph' ? (settings.metadataGraph ? dataFactory.namedNode(settings.metadataGraph) : dataFactory.defaultGraph()) : quad.graph; + mySerializer.write(quad); }, // Ends the output and flushes the stream end: function () { - jsonld.fromRDF(quads, { format: false, useNativeTypes: true }, - function (error, json) { - jsonld.compact(error ? {} : json, context, function (error, compacted) { - response.write(JSON.stringify(compacted, null, ' ') + '\n'); - done(error); - }); - }); + // We need to wait for the serializer stream to end before calling done() + mySerializer.end(); }, }; } } -// Converts a triple to the JSON-LD library representation -function toJsonLdTriple(subject, predicate, object) { - return { - subject: { value: subject, type: subject[0] !== '_' ? 'IRI' : 'blank node' }, - predicate: { value: predicate, type: predicate[0] !== '_' ? 'IRI' : 'blank node' }, - object: !N3.Util.isLiteral(object) ? - { value: object, type: object[0] !== '_' ? 'IRI' : 'blank node' } : - { - value: N3.Util.getLiteralValue(object), - datatype: N3.Util.getLiteralType(object), - language: N3.Util.getLiteralLanguage(object), - }, - }; -} - module.exports = RdfView; diff --git a/packages/core/lib/views/ViewCollection.js b/packages/core/lib/views/ViewCollection.js index 6262f8da..36431c60 100644 --- a/packages/core/lib/views/ViewCollection.js +++ b/packages/core/lib/views/ViewCollection.js @@ -11,6 +11,7 @@ var _ = require('lodash'), negotiate = require('negotiate'), Util = require('../Util'); +var ViewCollectionError = Util.createErrorType('ViewCollectionError'); // Creates a new ViewCollection class ViewCollection { @@ -41,21 +42,20 @@ class ViewCollection { getViews(name) { return this._views[name] || []; } -} - -var ViewCollectionError = ViewCollection.ViewCollectionError = Util.createErrorType('ViewCollectionError'); // Gets the best match for views with the given name that accommodate the request -ViewCollection.prototype.matchView = function (name, request) { - // Retrieve the views with the given name - var viewList = this._viewMatchers[name]; - if (!viewList || !viewList.length) - throw new ViewCollectionError('No view named ' + name + ' found.'); - // Negotiate the view best matching the request's requirements - var viewDetails = negotiate.choose(viewList, request)[0]; - if (!viewDetails) - throw new ViewCollectionError('No matching view named ' + name + ' found.'); - return viewDetails; -}; + matchView(name, request) { + // Retrieve the views with the given name + var viewList = this._viewMatchers[name]; + if (!viewList || !viewList.length) + throw new ViewCollectionError('No view named ' + name + ' found.'); + // Negotiate the view best matching the request's requirements + var viewDetails = negotiate.choose(viewList, request)[0]; + if (!viewDetails) + throw new ViewCollectionError('No matching view named ' + name + ' found.'); + return viewDetails; + } +} +ViewCollection.ViewCollectionError = ViewCollectionError; module.exports = ViewCollection; diff --git a/packages/core/package.json b/packages/core/package.json index 3100084b..d227d4ed 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -32,16 +32,18 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "asynciterator": "^1.1.0", - "forwarded-parse": "^2.0.0", - "lodash": "^2.4.2", + "asynciterator": "^2.0.1", "componentsjs": "3.3.0", + "forwarded-parse": "^2.1.0", + "jsonld-streaming-serializer": "^1.0.1", + "lodash": "^2.4.2", "mime": "^1.3.4", - "n3": "^0.9.0", + "n3": "^1.3.5", "negotiate": "^1.0.1", "q": "^1.4.1", "qejs": "^3.0.5", - "request": "^2.88.0" + "request": "^2.88.2", + "uritemplate": "^0.3.4" }, "optionalDependencies": { "access-log": "^0.3.9" diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index 6d61a313..79bbadb0 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -1,11 +1,13 @@ /*! @license MIT ©2013-2016 Ruben Verborgh, Ghent University - imec */ -var Datasource = require('../../lib/datasources/Datasource'); +const Datasource = require('../../lib/datasources/Datasource'); -var EventEmitter = require('events'), +const EventEmitter = require('events'), fs = require('fs'), - path = require('path'); + path = require('path'), + N3 = require('n3'); -var exampleFile = path.join(__dirname, '../../../../test/assets/test.ttl'); +const exampleFile = path.join(__dirname, '../../../../test/assets/test.ttl'); +const dataFactory = N3.DataFactory; describe('Datasource', function () { describe('The Datasource module', function () { @@ -294,9 +296,9 @@ describe('Datasource', function () { }); datasource.initialize(); datasource._executeQuery = sinon.spy(function (query, destination) { - destination._push({ subject: 's', predicate: 'p', object: 'o1' }); - destination._push({ subject: 's', predicate: 'p', object: 'o2', graph: '' }); - destination._push({ subject: 's', predicate: 'p', object: 'o3', graph: 'g' }); + destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o1') }); + destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o2'), graph: dataFactory.defaultGraph() }); + destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o3'), graph: dataFactory.namedNode('g') }); destination.close(); }); @@ -308,35 +310,32 @@ describe('Datasource', function () { var result = datasource.select({ features: { custom: true } }, done), quads = []; result.on('data', function (q) { quads.push(q); }); result.on('end', function () { - quads.should.deep.equal([ - { subject: 's', predicate: 'p', object: 'o1', graph: 'http://example.org/#mygraph' }, - { subject: 's', predicate: 'p', object: 'o2', graph: 'http://example.org/#mygraph' }, - { subject: 's', predicate: 'p', object: 'o3', graph: 'g' }, - ]); + let matchingquads = [{ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o1'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, + { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o2'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, + { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o3'), graph: dataFactory.namedNode('g') }]; + matchingquads.length.should.be.equal(quads.length); + for (let i = 0; i < quads.length; i++) + matchingquads[i].should.deep.equal(quads[i]); done(); }); }); it('should query the given graph as the default graph', function () { datasource.select({ - graph: 'http://example.org/#mygraph', - features: { custom: true }, - }); - datasource._executeQuery.args[0][0].should.deep.equal({ - graph: '', + graph: dataFactory.namedNode('http://example.org/#mygraph'), features: { custom: true }, }); + datasource._executeQuery.args[0][0].features.should.deep.equal({ custom: true }), + datasource._executeQuery.args[0][0].graph.equals(dataFactory.defaultGraph()); }); it('should query the default graph as the empty graph', function () { datasource.select({ - graph: '', - features: { custom: true }, - }); - datasource._executeQuery.args[0][0].should.deep.equal({ - graph: 'urn:ldf:emptyGraph', + graph: dataFactory.defaultGraph(), features: { custom: true }, }); + datasource._executeQuery.args[0][0].features.should.deep.equal({ custom: true }), + datasource._executeQuery.args[0][0].graph.equals(dataFactory.namedNode('urn:ldf:emptyGraph')); }); }); }); diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index c3a2080d..327f94e6 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -29,7 +29,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "lru-cache": "^4.0.1" + "lru-cache": "^5.1.1" }, "peerDependencies": { "@ldf/core": "2.2.5" diff --git a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js index f7cf597a..c716c92e 100644 --- a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js +++ b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js @@ -4,7 +4,8 @@ var CompositeDatasource = require('../../').datasources.CompositeDatasource; var Datasource = require('@ldf/core').datasources.Datasource, HdtDatasource = require('@ldf/datasource-hdt').datasources.HdtDatasource, N3Datasource = require('@ldf/datasource-n3').datasources.N3Datasource, - path = require('path'); + path = require('path'), + dataFactory = require('n3').DataFactory; var exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); var exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); @@ -15,7 +16,7 @@ describe('CompositeDatasource', function () { var references = { data0: { settings: { file: exampleHdtFile }, datasourceType: HdtDatasource, size: 132 }, data1: { settings: { file: exampleHdtFileWithBlanks, graph: 'http://example.org/graph0' }, datasourceType: HdtDatasource, size: 6 }, - data2: { settings: { url: exampleTurtleUrl }, datasourceType: N3Datasource, size: 132 }, + data2: { settings: { url: exampleTurtleUrl }, datasourceType: N3Datasource, size: 129 }, data3: { settings: { url: exampleTrigUrl }, datasourceType: N3Datasource, size: 7 }, }; Object.keys(references).forEach(function (datasourceId) { @@ -98,57 +99,57 @@ describe('CompositeDatasource', function () { itShouldExecute(getDatasource, 'a query for an existing subject', - { subject: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { subject: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 10, 200); itShouldExecute(getDatasource, 'a query for a non-existing subject', - { subject: 'http://example.org/p1', limit: 10, features: { triplePattern: true, limit: true } }, + { subject: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(getDatasource, 'a query for an existing predicate', - { predicate: 'http://example.org/p1', limit: 10, features: { triplePattern: true, limit: true } }, + { predicate: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, 10, 220); itShouldExecute(getDatasource, 'a query for a non-existing predicate', - { predicate: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { predicate: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(getDatasource, 'a query for an existing object', - { object: 'http://example.org/o001', limit: 10, features: { triplePattern: true, limit: true } }, + { object: dataFactory.namedNode('http://example.org/o001'), limit: 10, features: { triplePattern: true, limit: true } }, 6, 6); itShouldExecute(getDatasource, 'a query for a non-existing object', - { object: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { object: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(getDatasource, 'a query for an existing graph', - { graph: 'http://example.org/bob', limit: 10, features: { quadPattern: true, limit: true } }, + { graph: dataFactory.namedNode('http://example.org/bob'), limit: 10, features: { quadPattern: true, limit: true } }, 3, 3); itShouldExecute(getDatasource, 'a query for a non-existing graph', - { graph: 'http://example.org/notbob', limit: 10, features: { quadPattern: true, limit: true } }, + { graph: dataFactory.namedNode('http://example.org/notbob'), limit: 10, features: { quadPattern: true, limit: true } }, 0, 0); itShouldExecute(getDatasource, 'a query for the default graph', - { graph: '', limit: 10, features: { quadPattern: true, limit: true } }, - 10, 266); + { graph: dataFactory.defaultGraph(), limit: 10, features: { quadPattern: true, limit: true } }, + 10, 263); itShouldExecute(getDatasource, 'a query for the default graph without a limit', - { graph: '', features: { quadPattern: true, limit: true } }, - 266, 266); + { graph: dataFactory.defaultGraph(), features: { quadPattern: true, limit: true } }, + 263, 263); itShouldExecute(getDatasource, 'a query for graph0', - { graph: 'http://example.org/graph0', limit: 10, features: { quadPattern: true, limit: true } }, + { graph: dataFactory.namedNode('http://example.org/graph0'), limit: 10, features: { quadPattern: true, limit: true } }, 6, 6); }); }); diff --git a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js index bdd06e24..03bc6cbf 100644 --- a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js @@ -5,6 +5,7 @@ var Datasource = require('@ldf/core').datasources.Datasource, fs = require('fs'), path = require('path'), N3Parser = require('n3').Parser, + RdfString = require('rdf-string'), spawn = require('child_process').spawn; var hdtUtility = path.join(__dirname, '../../node_modules/.bin/hdt'); @@ -35,7 +36,7 @@ class ExternalHdtDatasource extends Datasource { // Writes the results of the query to the given quad stream _executeQuery(query, destination) { // Only the default graph has results - if (query.graph) { + if (query.graph && query.graph.termType !== 'DefaultGraph') { destination.setProperty('metadata', { totalCount: 0, hasExactCount: true }); destination.close(); return; @@ -51,12 +52,12 @@ class ExternalHdtDatasource extends Datasource { ], { stdio: ['ignore', 'pipe', 'ignore'] }); // Parse the result triples hdt.stdout.setEncoding('utf8'); - var parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true; + var parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true, dataFactory = this.dataFactory; parser.parse(hdt.stdout, function (error, triple) { if (error) destination.emit('error', new Error('Invalid query result: ' + error.message)); else if (triple) - tripleCount++, destination._push(triple); + tripleCount++, destination._push(RdfString.stringQuadToQuad(triple, dataFactory)); else { // Ensure the estimated total count is as least as large as the number of triples if (tripleCount && estimatedTotalCount < offset + tripleCount) diff --git a/packages/datasource-hdt/lib/datasources/HdtDatasource.js b/packages/datasource-hdt/lib/datasources/HdtDatasource.js index c146f000..51d03919 100644 --- a/packages/datasource-hdt/lib/datasources/HdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/HdtDatasource.js @@ -3,7 +3,8 @@ var Datasource = require('@ldf/core').datasources.Datasource, hdt = require('hdt'), - ExternalHdtDatasource = require('./ExternalHdtDatasource'); + ExternalHdtDatasource = require('./ExternalHdtDatasource'), + RdfString = require('rdf-string'); // Creates a new HdtDatasource class HdtDatasource extends Datasource { @@ -11,7 +12,6 @@ class HdtDatasource extends Datasource { let supportedFeatureList = ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']; super(options, supportedFeatureList); - options = options || {}; // Switch to external HDT datasource if the `external` flag is set if (options.external) @@ -30,13 +30,15 @@ class HdtDatasource extends Datasource { // Writes the results of the query to the given quad stream _executeQuery(query, destination) { // Only the default graph has results - if (query.graph) { + if (query.graph && query.graph.termType !== 'DefaultGraph') { destination.setProperty('metadata', { totalCount: 0, hasExactCount: true }); destination.close(); return; } - - this._hdtDocument.searchTriples(query.subject, query.predicate, query.object, + let dataFactory = this.dataFactory; + this._hdtDocument.searchTriples(query.subject ? RdfString.termToString(query.subject) : null, + query.predicate ? RdfString.termToString(query.predicate) : null, + query.object ? RdfString.termToString(query.object) : null, { limit: query.limit, offset: query.offset }) .then(function (result) { var triples = result.triples, @@ -49,7 +51,7 @@ class HdtDatasource extends Datasource { destination.setProperty('metadata', { totalCount: estimatedTotalCount, hasExactCount: hasExactCount }); // Add the triples to the output for (var i = 0; i < tripleCount; i++) - destination._push(triples[i]); + destination._push(RdfString.stringQuadToQuad(triples[i], dataFactory)); destination.close(); }, function (error) { destination.emit('error', error); }); diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index a69fd301..c36ee8b9 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -29,7 +29,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "n3": "^0.9.0" + "n3": "^1.3.5" }, "peerDependencies": { "@ldf/core": "2.2.5" @@ -38,6 +38,6 @@ "@ldf/core": "2.2.5" }, "optionalDependencies": { - "hdt": "^2.1.3" + "hdt": "^2.2.2" } } diff --git a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js index 4cb7ebbb..22b4112e 100644 --- a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js +++ b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js @@ -2,7 +2,9 @@ var HdtDatasource = require('../../').datasources.HdtDatasource; var Datasource = require('@ldf/core').datasources.Datasource, - path = require('path'); + path = require('path'), + dataFactory = require('n3').DataFactory, + RdfString = require('rdf-string'); var exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); var exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); @@ -57,37 +59,37 @@ describe('HdtDatasource', function () { itShouldExecute(getDatasource, 'a query for an existing subject', - { subject: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { subject: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 10, 100); itShouldExecute(getDatasource, 'a query for a non-existing subject', - { subject: 'http://example.org/p1', limit: 10, features: { triplePattern: true, limit: true } }, + { subject: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(getDatasource, 'a query for an existing predicate', - { predicate: 'http://example.org/p1', limit: 10, features: { triplePattern: true, limit: true } }, + { predicate: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, 10, 110); itShouldExecute(getDatasource, 'a query for a non-existing predicate', - { predicate: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { predicate: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(getDatasource, 'a query for an existing object', - { object: 'http://example.org/o001', limit: 10, features: { triplePattern: true, limit: true } }, + { object: dataFactory.namedNode('http://example.org/o001'), limit: 10, features: { triplePattern: true, limit: true } }, 3, 3); itShouldExecute(getDatasource, 'a query for a non-existing object', - { object: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { object: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(getDatasource, 'a query for a non-default graph', - { object: 'http://example.org/s1', graph: 'g', features: { quadPattern: true } }, + { object: dataFactory.namedNode('http://example.org/s1'), graph: dataFactory.namedNode('g'), features: { quadPattern: true } }, 0, 0); }); @@ -118,12 +120,12 @@ describe('HdtDatasource', function () { itShouldExecute(getDatasource, 'a query for a blank subject', - { suject: '_:a', features: { triplePattern: true } }, - 6, 6); + { subject: dataFactory.blankNode('a'), features: { triplePattern: true } }, + 3, 3); itShouldExecute(getDatasource, 'a query for a IRI that corresponds to a blank node as subject', - { subject: 'genid:a', features: { triplePattern: true } }, + { subject: dataFactory.namedNode('genid:a'), features: { triplePattern: true } }, 3, 3, [ { subject: 'genid:a', predicate: 'b', object: 'c1' }, @@ -133,7 +135,7 @@ describe('HdtDatasource', function () { itShouldExecute(getDatasource, 'a query for a IRI that corresponds to a blank node as object', - { object: 'genid:c1', features: { triplePattern: true } }, + { object: dataFactory.namedNode('genid:c1'), features: { triplePattern: true } }, 1, 1, [ { subject: 'a', predicate: 'b', object: 'genid:c1' }, @@ -170,12 +172,12 @@ describe('HdtDatasource', function () { itShouldExecute(getDatasource, 'a query for a blank subject', - { suject: '_:a', features: { triplePattern: true } }, - 6, 6); + { subject: dataFactory.blankNode('a'), features: { triplePattern: true } }, + 3, 3); itShouldExecute(getDatasource, 'a query for a IRI that corresponds to a blank node as subject', - { subject: 'http://example.org/.well-known/genid/a', features: { triplePattern: true } }, + { subject: dataFactory.namedNode('http://example.org/.well-known/genid/a'), features: { triplePattern: true } }, 3, 3, [ { subject: 'http://example.org/.well-known/genid/a', predicate: 'b', object: 'c1' }, @@ -185,7 +187,7 @@ describe('HdtDatasource', function () { itShouldExecute(getDatasource, 'a query for a IRI that corresponds to a blank node as object', - { object: 'http://example.org/.well-known/genid/c1', features: { triplePattern: true } }, + { object: dataFactory.namedNode('http://example.org/.well-known/genid/c1'), features: { triplePattern: true } }, 1, 1, [ { subject: 'a', predicate: 'b', object: 'http://example.org/.well-known/genid/c1' }, @@ -216,7 +218,7 @@ function itShouldExecute(getDatasource, name, query, it('should emit the expected triples', function () { expect(triples.length).to.equal(expectedTriples.length); for (var i = 0; i < expectedTriples.length; i++) - triples[i].should.deep.equal(expectedTriples[i]); + triples[i].should.deep.equal(RdfString.stringQuadToQuad(expectedTriples[i], dataFactory)); }); } }); diff --git a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js index 582310bb..a2366787 100644 --- a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js +++ b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js @@ -2,7 +2,7 @@ /* An JsonLdDatasource fetches data from a JSON-LD document. */ var MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, - jsonld = require('jsonld'); + JsonLdParser = require('jsonld-streaming-parser').JsonLdParser; var ACCEPT = 'application/ld+json;q=1.0,application/json;q=0.7'; @@ -15,53 +15,12 @@ class JsonLdDatasource extends MemoryDatasource { // Retrieves all quads from the document _getAllQuads(addQuad, done) { - // Read the JSON-LD document - var json = '', - document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }); - document.on('data', function (data) { json += data; }); - document.on('end', function () { - // Parse the JSON document - try { json = JSON.parse(json); } - catch (error) { return done(error); } - // Convert the JSON-LD to quads - extractQuads(json, addQuad, done); - }); - } -} - - -// Extracts quads from a JSON-LD document -function extractQuads(json, addQuad, done) { - jsonld.toRDF(json, function (error, graphs) { - var graphNames = Object.keys(graphs); - for (var i = 0; i < graphNames.length; i++) { - var graphName = graphNames[i], - graph = graphs[graphName], - graphIRI = graphName === '@default' ? '' : graphName; - for (var j = 0; j < graph.length; j++) { - var triple = graph[j]; - addQuad(triple.subject.value, triple.predicate.value, - convertEntity(triple.object), graphIRI); - } - } - done(error); - }); -} - -// Converts a jsonld.js entity to the N3.js in-memory representation -function convertEntity(entity) { - // Return IRIs and blank nodes as-is - if (entity.type !== 'literal') - return entity.value; - else { - // Add a language tag to the literal if present - if ('language' in entity) - return '"' + entity.value + '"@' + entity.language; - // Add a datatype to the literal if present - if (entity.datatype !== 'http://www.w3.org/2001/XMLSchema#string') - return '"' + entity.value + '"^^' + entity.datatype; - // Otherwise, return the regular literal - return '"' + entity.value + '"'; + var document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }); + new JsonLdParser({ baseIRI: this._url }) + .import(document) + .on('error', done) + .on('data', function (quad) { addQuad(quad); }) + .on('end', done); } } diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 9e7960b5..14ebc51b 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -29,7 +29,8 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "jsonld": "^0.4.11" + "jsonld-streaming-parser": "^1.1.2", + "rdf-string": "^1.3.1" }, "peerDependencies": { "@ldf/core": "2.2.5" diff --git a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js index 4667c884..fc050b26 100644 --- a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js +++ b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js @@ -2,7 +2,8 @@ var JsonLdDatasource = require('../../').datasources.JsonLdDatasource; var Datasource = require('@ldf/core').datasources.Datasource, - path = require('path'); + path = require('path'), + dataFactory = require('n3').DataFactory; var exampleJsonLdUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.jsonld'); @@ -47,42 +48,42 @@ describe('JsonLdDatasource', function () { itShouldExecute(datasource, 'a query for an existing subject', - { subject: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { subject: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 10, 100); itShouldExecute(datasource, 'a query for a non-existing subject', - { subject: 'http://example.org/p1', limit: 10, features: { triplePattern: true, limit: true } }, + { subject: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(datasource, 'a query for an existing predicate', - { predicate: 'http://example.org/p1', limit: 10, features: { triplePattern: true, limit: true } }, + { predicate: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, 10, 110); itShouldExecute(datasource, 'a query for a non-existing predicate', - { predicate: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { predicate: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(datasource, 'a query for an existing object', - { object: 'http://example.org/o001', limit: 10, features: { triplePattern: true, limit: true } }, + { object: dataFactory.namedNode('http://example.org/o001'), limit: 10, features: { triplePattern: true, limit: true } }, 3, 3); itShouldExecute(datasource, 'a query for a non-existing object', - { object: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { object: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(datasource, 'a query for an existing graph', - { graph: 'http://example.org/g', limit: 10, features: { quadPattern: true, limit: true } }, + { graph: dataFactory.namedNode('http://example.org/g'), limit: 10, features: { quadPattern: true, limit: true } }, 10, 10); itShouldExecute(datasource, 'a query for a non-existing graph', - { graph: 'http://example.org/s1', limit: 10, features: { quadPattern: true, limit: true } }, + { graph: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { quadPattern: true, limit: true } }, 0, 0); }); }); diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 2b7caedd..96c3551d 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -29,7 +29,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "n3": "^0.9.0" + "n3": "^1.3.5" }, "peerDependencies": { "@ldf/core": "2.2.5" diff --git a/packages/datasource-n3/test/datasources/N3Datasource-test.js b/packages/datasource-n3/test/datasources/N3Datasource-test.js index 808ab3af..872e6edb 100644 --- a/packages/datasource-n3/test/datasources/N3Datasource-test.js +++ b/packages/datasource-n3/test/datasources/N3Datasource-test.js @@ -2,7 +2,8 @@ var N3Datasource = require('../../').datasources.N3Datasource; var Datasource = require('@ldf/core').datasources.Datasource, - path = require('path'); + path = require('path'), + dataFactory = require('n3').DataFactory; var exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); @@ -33,46 +34,46 @@ describe('N3Datasource', function () { itShouldExecute(datasource, 'the empty query', { features: { triplePattern: true } }, - 132, 132); + 129, 129); itShouldExecute(datasource, 'the empty query with a limit', { limit: 10, features: { triplePattern: true, limit: true } }, - 10, 132); + 10, 129); itShouldExecute(datasource, 'the empty query with an offset', { offset: 10, features: { triplePattern: true, offset: true } }, - 122, 132); + 119, 129); itShouldExecute(datasource, 'a query for an existing subject', - { subject: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { subject: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 10, 100); itShouldExecute(datasource, 'a query for a non-existing subject', - { subject: 'http://example.org/p1', limit: 10, features: { triplePattern: true, limit: true } }, + { subject: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(datasource, 'a query for an existing predicate', - { predicate: 'http://example.org/p1', limit: 10, features: { triplePattern: true, limit: true } }, + { predicate: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, 10, 110); itShouldExecute(datasource, 'a query for a non-existing predicate', - { predicate: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { predicate: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); itShouldExecute(datasource, 'a query for an existing object', - { object: 'http://example.org/o001', limit: 10, features: { triplePattern: true, limit: true } }, + { object: dataFactory.namedNode('http://example.org/o001'), limit: 10, features: { triplePattern: true, limit: true } }, 3, 3); itShouldExecute(datasource, 'a query for a non-existing object', - { object: 'http://example.org/s1', limit: 10, features: { triplePattern: true, limit: true } }, + { object: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, 0, 0); }); }); diff --git a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js index cef09353..3c9931c8 100644 --- a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -2,14 +2,13 @@ /* A SparqlDatasource provides queryable access to a SPARQL endpoint. */ var Datasource = require('@ldf/core').datasources.Datasource, - N3 = require('n3'), SparqlJsonParser = require('sparqljson-parse').SparqlJsonParser, - termToString = require('rdf-string').termToString, LRU = require('lru-cache'); var DEFAULT_COUNT_ESTIMATE = { totalCount: 1e9, hasExactCount: false }; var ENDPOINT_ERROR = 'Error accessing SPARQL endpoint'; var INVALID_JSON_RESPONSE = 'The endpoint returned an invalid SPARQL results JSON response.'; +const xsd = 'http://www.w3.org/2001/XMLSchema#'; // Creates a new SparqlDatasource class SparqlDatasource extends Datasource { @@ -51,10 +50,10 @@ class SparqlDatasource extends Datasource { response.results.bindings.forEach(function (binding) { binding = self._sparqlJsonParser.parseJsonBindings(binding); var triple = { - subject: binding.s ? termToString(binding.s) : query.subject, - predicate: binding.p ? termToString(binding.p) : query.predicate, - object: binding.o ? termToString(binding.o) : query.object, - graph: binding.g ? termToString(binding.g) : query.graph, + subject: binding.s || query.subject, + predicate: binding.p || query.predicate, + object: binding.o || query.object, + graph: binding.g || query.graph, }; destination._push(triple); }); @@ -141,44 +140,56 @@ class SparqlDatasource extends Datasource { // Creates a SPARQL pattern for the given triple pattern _createQuadPattern(quad) { - var query = ['{'], literalMatch; + var query = ['{']; // Encapsulate in graph if we are not querying the default graph - if (quad.graph !== '') { + if (!quad.graph || quad.graph.termType !== 'DefaultGraph') { query.push('GRAPH '); - quad.graph ? query.push('<', quad.graph, '>') : query.push('?g'); + quad.graph ? query.push(this._encodeObject(quad.graph)) : query.push('?g'); query.push('{'); } // Add a possible subject IRI - quad.subject ? query.push('<', quad.subject, '> ') : query.push('?s '); + quad.subject ? query.push(this._encodeObject(quad.subject) + ' ') : query.push('?s '); // Add a possible predicate IRI - quad.predicate ? query.push('<', quad.predicate, '> ') : query.push('?p '); + quad.predicate ? query.push(this._encodeObject(quad.predicate) + ' ') : query.push('?p '); - // Add a possible object IRI or literal - if (N3.Util.isIRI(quad.object)) - query.push('<', quad.object, '>'); - else if (!(literalMatch = /^"([^]*)"(?:(@[^"]+)|\^\^([^"]+))?$/.exec(quad.object))) - query.push('?o'); - else { - if (!/["\\]/.test(literalMatch[1])) - query.push('"', literalMatch[1], '"'); - else - query.push('"""', literalMatch[1].replace(/(["\\])/g, '\\$1'), '"""'); - if (literalMatch[2]) - query.push(literalMatch[2]); - else if (this._forceTypedLiterals) - query.push('^^<', literalMatch[3] || 'http://www.w3.org/2001/XMLSchema#string', '>'); - else - literalMatch[3] && query.push('^^<', literalMatch[3], '>'); - } + // Add a possible object IRI + quad.object ? query.push(this._encodeObject(quad.object)) : query.push('?o'); - if (quad.graph !== '') - query.push('}'); + if (!quad.graph || quad.graph.termType !== 'DefaultGraph') + query.push('}'); // close the GRAPH brackets return query.push('}'), query.join(''); } + + _encodeObject(term) { + switch (term.termType) { + case 'NamedNode': + return '<' + term.value + '>'; + case 'BlankNode': + return '_:' + term.value; + case 'Variable': + return '?' + term.value; + case 'DefaultGraph': + return ''; + case 'Literal': + return this._convertLiteral(term); + default: + return null; + } + } + + _convertLiteral(term) { + if (!term) + return '?o'; + else { + return ((!/["\\]/.test(term.value)) ? '"' + term.value + '"' : '"""' + term.value.replace(/(["\\])/g, '\\$1') + '"""') + + (term.language ? '@' + term.language : + (term.datatype && term.datatype.value !== xsd + 'string' ? '^^' + this._encodeObject(term.datatype) : this._forceTypedLiterals ? '^^' : '')); + } + } } module.exports = SparqlDatasource; diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 36da39b4..59ee1304 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -30,8 +30,8 @@ }, "dependencies": { "sparqljson-parse": "^1.5.1", - "lru-cache": "^4.0.1", - "n3": "^0.9.0", + "lru-cache": "^5.1.1", + "n3": "^1.3.5", "rdf-string": "^1.3.1" }, "peerDependencies": { diff --git a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js index 7eaa0e34..b6c669a4 100644 --- a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js +++ b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js @@ -4,7 +4,8 @@ var SparqlDatasource = require('../../').datasources.SparqlDatasource; var Datasource = require('@ldf/core').datasources.Datasource, fs = require('fs'), path = require('path'), - URL = require('url'); + URL = require('url'), + dataFactory = require('n3').DataFactory; var jsonResult = fs.readFileSync(path.join(__dirname, '../../../../test/assets/sparql-quads-response.json')); var countResult = '"c"\n12345678\n'; @@ -79,58 +80,58 @@ describe('SparqlDatasource', function () { itShouldExecute(datasource, request, 'a query for a subject IRI', - { subject: 'http://example.org/bar#foo', features: { quadPattern: true } }, + { subject: dataFactory.namedNode('http://example.org/bar#foo'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{ ?p ?o}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{ ?p ?o}}'); itShouldExecute(datasource, request, 'a query for a predicate IRI', - { predicate: 'http://example.org/bar#foo', features: { quadPattern: true } }, + { predicate: dataFactory.namedNode('http://example.org/bar#foo'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?o}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?o}}'); itShouldExecute(datasource, request, 'a query for an object IRI', - { object: 'http://example.org/bar#foo', features: { quadPattern: true } }, + { object: dataFactory.namedNode('http://example.org/bar#foo'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p }}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p }}'); itShouldExecute(datasource, request, 'a query for an object literal', - { object: '"a literal"', features: { quadPattern: true } }, + { object: dataFactory.literal('a literal'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"}}'); itShouldExecute(datasource, request, 'a query for an object literal with newlines and quotes', - { object: '"a\rb\nc"\r\n\\""', features: { quadPattern: true } }, + { object: dataFactory.literal('a\rb\nc"\r\n\\"'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p """a\rb\nc\\"\r\n\\\\\\""""}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p """a\rb\nc\\"\r\n\\\\\\""""}}'); itShouldExecute(datasource, request, 'a query for an object literal with a language', - { object: '"a literal"@nl-be', features: { quadPattern: true } }, + { object: dataFactory.literal('a literal', 'nl-be'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"@nl-be}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"@nl-be}}'); itShouldExecute(datasource, request, 'a query for an object literal with a type', - { object: '"a literal"^^http://ex.org/foo#literal', features: { quadPattern: true } }, + { object: dataFactory.literal('a literal', dataFactory.namedNode('http://ex.org/foo#literal')), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"^^}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"^^}}'); itShouldExecute(datasource, request, 'a query for a predicate and object URI', - { predicate: 'http://example.org/bar#foo', - object: 'http://example.org/baz#bar', + { predicate: dataFactory.namedNode('http://example.org/bar#foo'), + object: dataFactory.namedNode('http://example.org/baz#bar'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s }}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s }}'); itShouldExecute(datasource, request, 'a query for a predicate and object URI with offset and limit', - { predicate: 'http://example.org/bar#foo', - object: 'http://example.org/baz#bar', + { predicate: dataFactory.namedNode('http://example.org/bar#foo'), + object: dataFactory.namedNode('http://example.org/baz#bar'), limit: 50, offset: 150, features: { quadPattern: true, offset: true, limit: true } }, 'SELECT * WHERE {GRAPH ?g{?s }} ' + @@ -139,18 +140,18 @@ describe('SparqlDatasource', function () { itShouldExecute(datasource, request, 'a query for a predicate and object URI for the default graph', - { predicate: 'http://example.org/bar#foo', - object: 'http://example.org/baz#bar', - graph: '', + { predicate: dataFactory.namedNode('http://example.org/bar#foo'), + object: dataFactory.namedNode('http://example.org/baz#bar'), + graph: dataFactory.defaultGraph(), features: { quadPattern: true } }, 'SELECT * WHERE {?s }', 'SELECT (COUNT(*) AS ?c) WHERE {?s }'); itShouldExecute(datasource, request, 'a query for a predicate and object URI for the default graph with offset and limit', - { predicate: 'http://example.org/bar#foo', - object: 'http://example.org/baz#bar', - graph: '', + { predicate: dataFactory.namedNode('http://example.org/bar#foo'), + object: dataFactory.namedNode('http://example.org/baz#bar'), + graph: dataFactory.defaultGraph(), limit: 50, offset: 150, features: { quadPattern: true, offset: true, limit: true } }, 'SELECT * WHERE {?s } ' + @@ -159,23 +160,23 @@ describe('SparqlDatasource', function () { itShouldExecute(datasource, request, 'a query for a graph IRI', - { graph: 'http://dbpedia.org', features: { quadPattern: true } }, + { graph: dataFactory.namedNode('http://dbpedia.org'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH {?s ?p ?o}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH {?s ?p ?o}}'); itShouldExecute(datasource, request, 'a query for a predicate and graph IRI', - { predicate: 'http://example.org/bar#foo', - graph: 'http://dbpedia.org', + { predicate: dataFactory.namedNode('http://example.org/bar#foo'), + graph: dataFactory.namedNode('http://dbpedia.org'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH {?s ?o}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH {?s ?o}}'); itShouldExecute(datasource, request, 'a query for a predicate, object and graph URI', - { predicate: 'http://example.org/bar#foo', - object: 'http://example.org/baz#bar', - graph: 'http://dbpedia.org', + { predicate: dataFactory.namedNode('http://example.org/bar#foo'), + object: dataFactory.namedNode('http://example.org/baz#bar'), + graph: dataFactory.namedNode('http://dbpedia.org'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH {?s }}', 'SELECT (COUNT(*) AS ?c) ' + @@ -183,9 +184,9 @@ describe('SparqlDatasource', function () { itShouldExecute(datasource, request, 'a query for a predicate, object and graph URI with offset and limit', - { predicate: 'http://example.org/bar#foo', - object: 'http://example.org/baz#bar', - graph: 'http://dbpedia.org', + { predicate: dataFactory.namedNode('http://example.org/bar#foo'), + object: dataFactory.namedNode('http://example.org/baz#bar'), + graph: dataFactory.namedNode('http://dbpedia.org'), limit: 50, offset: 150, features: { quadPattern: true, offset: true, limit: true } }, 'SELECT * WHERE {GRAPH {?s }} ' + @@ -198,8 +199,8 @@ describe('SparqlDatasource', function () { request.reset(); request.onFirstCall().returns(test.createHttpResponse('invalid', 'application/sparql-results+json')); request.onSecondCall().returns(test.createHttpResponse(countResult, 'text/csv')); - - result = datasource.select({ subject: 'abcd', features: { quadPattern: true } }); + let query = { subject: dataFactory.namedNode('abcd'), features: { quadPattern: true } }; + result = datasource.select(query); result.on('error', function (e) { error = e; done(); }); }); @@ -214,8 +215,8 @@ describe('SparqlDatasource', function () { request.reset(); request.onFirstCall().returns(test.createHttpResponse(jsonResult, 'application/sparql-results+json')); request.onSecondCall().returns(test.createHttpResponse('invalid', 'application/trig')); - - result = datasource.select({ subject: 'abcde', features: { quadPattern: true } }); + let query = { subject: dataFactory.namedNode('abcde'), features: { quadPattern: true } }; + result = datasource.select(query); result.on('error', function (e) { error = e; done(); }); }); @@ -228,8 +229,8 @@ describe('SparqlDatasource', function () { var result, error; before(function (done) { request.reset(); - - result = datasource.select({ subject: 'abcde', features: { quadPattern: true } }); + let query = { subject: dataFactory.namedNode('abcde'), features: { quadPattern: true } }; + result = datasource.select(query); result.on('error', function (e) { error = e; done(); }); request.getCall(0).callArgWith(1, Error('query response error')); }); @@ -243,8 +244,8 @@ describe('SparqlDatasource', function () { var result, totalCount; before(function () { request.reset(); - - result = datasource.select({ subject: 'abcdef', features: { quadPattern: true } }); + let query = { subject: dataFactory.namedNode('abcdef'), features: { quadPattern: true } } + result = datasource.select(query); request.returnValues[1].emit('error', new Error()); result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); }); @@ -262,31 +263,31 @@ describe('SparqlDatasource', function () { itShouldExecute(datasource, request, 'a query for an object IRI', - { object: 'http://example.org/bar#foo', features: { quadPattern: true } }, + { object: dataFactory.namedNode('http://example.org/bar#foo'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p }}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p }}'); itShouldExecute(datasource, request, 'a query for an object literal', - { object: '"a literal"', features: { quadPattern: true } }, + { object: dataFactory.literal('a literal'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"^^}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"^^}}'); itShouldExecute(datasource, request, 'a query for an object literal with newlines and quotes', - { object: '"a\rb\nc"\r\n\\""', features: { quadPattern: true } }, + { object: dataFactory.literal('a\rb\nc"\r\n\\"'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p """a\rb\nc\\"\r\n\\\\\\""""^^}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p """a\rb\nc\\"\r\n\\\\\\""""^^}}'); itShouldExecute(datasource, request, 'a query for an object literal with a language', - { object: '"a literal"@nl-be', features: { quadPattern: true } }, + { object: dataFactory.literal('a literal', 'nl-be'), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"@nl-be}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"@nl-be}}'); itShouldExecute(datasource, request, 'a query for an object literal with a type', - { object: '"a literal"^^http://ex.org/foo#literal', features: { quadPattern: true } }, + { object: dataFactory.literal('a literal', dataFactory.namedNode('http://ex.org/foo#literal')), features: { quadPattern: true } }, 'SELECT * WHERE {GRAPH ?g{?s ?p "a literal"^^}}', 'SELECT (COUNT(*) AS ?c) WHERE {GRAPH ?g{?s ?p "a literal"^^}}'); }); @@ -299,7 +300,6 @@ function itShouldExecute(datasource, request, name, query, constructQuery, count request.reset(); request.onFirstCall().returns(test.createHttpResponse(jsonResult, 'application/sparql-results+json')); request.onSecondCall().returns(test.createHttpResponse(countResult, 'text/csv')); - result = datasource.select(query); result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); }); diff --git a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js index ab4b3751..e99eee57 100644 --- a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js +++ b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js @@ -3,8 +3,7 @@ var Controller = require('@ldf/core').controllers.Controller, url = require('url'), - _ = require('lodash'), - N3Util = require('n3').Util; + _ = require('lodash'); // Creates a new QuadPatternFragmentsController class QuadPatternFragmentsController extends Controller { @@ -76,7 +75,7 @@ class QuadPatternFragmentsController extends Controller { subject = subject ? '<' + query.subject + '> ' : '?s '; predicate = predicate ? '<' + query.predicate + '> ' : '?p '; // Serialize object IRI, literal, or variable - if (N3Util.isIRI(query.object)) + if (query.object && query.object.termType === 'NamedNode') object = '<' + query.object + '> '; else object = query.object ? query.object : '?o'; diff --git a/packages/feature-qpf/lib/routers/QuadPatternRouter.js b/packages/feature-qpf/lib/routers/QuadPatternRouter.js index 023cf75c..a15f8c6a 100644 --- a/packages/feature-qpf/lib/routers/QuadPatternRouter.js +++ b/packages/feature-qpf/lib/routers/QuadPatternRouter.js @@ -1,6 +1,9 @@ /*! @license MIT ©2014–17 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /** A QuadPatternRouter routes basic quad patterns */ +const stringToTerm = require('rdf-string').stringToTerm; +const DataFactory = require('n3').DataFactory; + var iriMatcher = /^(][^"<>]*)>?$/; var literalMatcher = /^("[^]*")(?:|\^\^]+)>?|@[a-z0-9\-]+)$/i; var prefixedNameMatcher = /^([a-z0-9\-]*):([^\/#:]*)$/i; @@ -23,20 +26,20 @@ class QuadPatternRouter { // Try to extract a subject IRI if (queryString.subject && (match = iriMatcher.exec(queryString.subject))) - hasTriplePattern = query.subject = match[1] ? match[2] : this._expandIRI(match[2]); + hasTriplePattern = query.subject = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), DataFactory); // Try to extract a predicate IRI if (queryString.predicate && (match = iriMatcher.exec(queryString.predicate))) - hasTriplePattern = query.predicate = match[1] ? match[2] : this._expandIRI(match[2]); + hasTriplePattern = query.predicate = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), DataFactory); // Try to extract an object if (queryString.object) { // The object can be an IRI… if (match = iriMatcher.exec(queryString.object)) - hasTriplePattern = query.object = match[1] ? match[2] : this._expandIRI(match[2]); + hasTriplePattern = query.object = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), DataFactory); // or the object can be a literal (with a type or language) else if (match = literalMatcher.exec(queryString.object)) - hasTriplePattern = query.object = match[2] ? match[1] + '^^' + this._expandIRI(match[2]) : match[0]; + hasTriplePattern = query.object = stringToTerm(match[2] ? match[1] + '^^' + this._expandIRI(match[2]) : match[0], DataFactory); } // Try to extract a graph IRI @@ -46,9 +49,9 @@ class QuadPatternRouter { // When a client specifies DEFAULT_GRAPH as graph, // we search the actual default graph rather than the graph with that name. if (hasQuadPattern === DEFAULT_GRAPH || hasQuadPattern === DEFAULT_GRAPH_ALT) - query.graph = ''; + query.graph = stringToTerm('', DataFactory); else - query.graph = hasQuadPattern; + query.graph = stringToTerm(hasQuadPattern, DataFactory); } // Indicate in the query whether the triple/quad pattern feature was used diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js index 033863d5..085718da 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -1,7 +1,8 @@ /*! @license MIT ©2015-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* A QuadPatternFragmentsRdfView represents a Quad Pattern Fragment in RDF. */ -var RdfView = require('@ldf/core').views.RdfView; +var RdfView = require('@ldf/core').views.RdfView, + stringQuadToQuad = require('rdf-string').stringQuadToQuad; var dcTerms = 'http://purl.org/dc/terms/', rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', @@ -43,63 +44,70 @@ class QuadPatternFragmentsRdfView extends RdfView { // Generate the datasource metadata _generateMetadata(metadata, fragment, query, datasource) { - metadata(datasource.index, hydra + 'member', datasource.url); - metadata(datasource.url, rdf + 'type', voID + 'Dataset'); - metadata(datasource.url, rdf + 'type', hydra + 'Collection'); - metadata(datasource.url, voID + 'subset', fragment.pageUrl); - if (fragment.url !== fragment.pageUrl) - metadata(datasource.url, voID + 'subset', fragment.url); + if (!datasource.url) return; + datasource.index && metadata(this.quad({ subject: datasource.index, predicate: hydra + 'member', object: datasource.url })); + metadata(this.quad({ subject: datasource.url, predicate: rdf + 'type', object: voID + 'Dataset' })); + metadata(this.quad({ subject: datasource.url, predicate: rdf + 'type', object: hydra + 'Collection' })); + fragment.pageUrl && metadata(this.quad({ subject: datasource.url, predicate: voID + 'subset', object: fragment.pageUrl })); + if (fragment.url && fragment.pageUrl && fragment.url !== fragment.pageUrl) + metadata(this.quad({ subject: datasource.url, predicate: voID + 'subset', object: fragment.url })); } // Generate the datasource controls _generateControls(metadata, fragment, query, datasource) { + if (datasource.url && datasource.supportsQuads) + metadata(this.quad({ subject: datasource.url, predicate: sd + 'defaultGraph', object: 'urn:ldf:defaultGraph' })); + datasource.url && metadata(this.quad({ subject: datasource.url, predicate: hydra + 'search', object: '_:pattern' })); + datasource.templateUrl && metadata(this.quad({ subject: '_:pattern', predicate: hydra + 'template', object: '"' + datasource.templateUrl + '"' })); + metadata(this.quad({ subject: '_:pattern', predicate: hydra + 'variableRepresentation', object: hydra + 'ExplicitRepresentation' })); + metadata(this.quad({ subject: '_:pattern', predicate: hydra + 'mapping', object: '_:subject' })); + metadata(this.quad({ subject: '_:pattern', predicate: hydra + 'mapping', object: '_:predicate' })); + metadata(this.quad({ subject: '_:pattern', predicate: hydra + 'mapping', object: '_:object' })); if (datasource.supportsQuads) - metadata(datasource.url, sd + 'defaultGraph', 'urn:ldf:defaultGraph'); - metadata(datasource.url, hydra + 'search', '_:pattern'); - metadata('_:pattern', hydra + 'template', '"' + datasource.templateUrl + '"'); - metadata('_:pattern', hydra + 'variableRepresentation', hydra + 'ExplicitRepresentation'); - metadata('_:pattern', hydra + 'mapping', '_:subject'); - metadata('_:pattern', hydra + 'mapping', '_:predicate'); - metadata('_:pattern', hydra + 'mapping', '_:object'); - if (datasource.supportsQuads) - metadata('_:pattern', hydra + 'mapping', '_:graph'); - metadata('_:subject', hydra + 'variable', '"subject"'); - metadata('_:subject', hydra + 'property', rdf + 'subject'); - metadata('_:predicate', hydra + 'variable', '"predicate"'); - metadata('_:predicate', hydra + 'property', rdf + 'predicate'); - metadata('_:object', hydra + 'variable', '"object"'); - metadata('_:object', hydra + 'property', rdf + 'object'); + metadata(this.quad({ subject: '_:pattern', predicate: hydra + 'mapping', object: '_:graph' })); + metadata(this.quad({ subject: '_:subject', predicate: hydra + 'variable', object: '"subject"' })); + metadata(this.quad({ subject: '_:subject', predicate: hydra + 'property', object: rdf + 'subject' })); + metadata(this.quad({ subject: '_:predicate', predicate: hydra + 'variable', object: '"predicate"' })); + metadata(this.quad({ subject: '_:predicate', predicate: hydra + 'property', object: rdf + 'predicate' })); + metadata(this.quad({ subject: '_:object', predicate: hydra + 'variable', object: '"object"' })); + metadata(this.quad({ subject: '_:object', predicate: hydra + 'property', object: rdf + 'object' })); if (datasource.supportsQuads) { - metadata('_:graph', hydra + 'variable', '"graph"'); - metadata('_:graph', hydra + 'property', sd + 'graph'); + metadata(this.quad({ subject: '_:graph', predicate: hydra + 'variable', object: '"graph"' })); + metadata(this.quad({ subject: '_:graph', predicate: hydra + 'property', object: sd + 'graph' })); } } // Generate the fragment metadata sendFragmentMetadata(metadata, fragment, query, datasource, meta) { + if (!fragment.pageUrl) return; // General fragment metadata - metadata(fragment.url, voID + 'subset', fragment.pageUrl); - metadata(fragment.pageUrl, rdf + 'type', hydra + 'PartialCollectionView'); - metadata(fragment.pageUrl, dcTerms + 'title', - '"Linked Data Fragment of ' + (datasource.title || '') + '"@en'); - metadata(fragment.pageUrl, dcTerms + 'description', - '"Triple/Quad Pattern Fragment of the \'' + (datasource.title || '') + '\' dataset ' + - 'containing triples matching the pattern ' + query.patternString + '."@en'); - metadata(fragment.pageUrl, dcTerms + 'source', datasource.url); + fragment.url && metadata(this.quad({ subject: fragment.url, predicate: voID + 'subset', object: fragment.pageUrl })); + metadata(this.quad({ subject: fragment.pageUrl, predicate: rdf + 'type', object: hydra + 'PartialCollectionView' })); + metadata(this.quad({ subject: fragment.pageUrl, predicate: dcTerms + 'title', + object: '"Linked Data Fragment of ' + (datasource.title || '') + '"@en' })); + metadata(this.quad({ subject: fragment.pageUrl, predicate: dcTerms + 'description', + object: '"Triple/Quad Pattern Fragment of the \'' + (datasource.title || '') + '\' dataset ' + + 'containing triples matching the pattern ' + query.patternString + '."@en' })); + datasource.url && metadata(this.quad({ subject: fragment.pageUrl, predicate: dcTerms + 'source', object: datasource.url })); // Total pattern matches count var totalCount = meta.totalCount; - metadata(fragment.pageUrl, hydra + 'totalItems', '"' + totalCount + '"^^' + xsd + 'integer'); - metadata(fragment.pageUrl, voID + 'triples', '"' + totalCount + '"^^' + xsd + 'integer'); + metadata(this.quad({ subject: fragment.pageUrl, predicate: hydra + 'totalItems', object: '"' + totalCount + '"^^' + xsd + 'integer' })); + metadata(this.quad({ subject: fragment.pageUrl, predicate: voID + 'triples', object: '"' + totalCount + '"^^' + xsd + 'integer' })); // Page metadata - metadata(fragment.pageUrl, hydra + 'itemsPerPage', '"' + query.limit + '"^^' + xsd + 'integer'); - metadata(fragment.pageUrl, hydra + 'first', fragment.firstPageUrl); + metadata(this.quad({ subject: fragment.pageUrl, predicate: hydra + 'itemsPerPage', object: '"' + query.limit + '"^^' + xsd + 'integer' })); + fragment.firstPageUrl && metadata(this.quad({ subject: fragment.pageUrl, predicate: hydra + 'first', object: fragment.firstPageUrl })); if (query.offset) - metadata(fragment.pageUrl, hydra + 'previous', fragment.previousPageUrl); + fragment.previousPageUrl && metadata(this.quad({ subject: fragment.pageUrl, predicate: hydra + 'previous', object: fragment.previousPageUrl })); if (totalCount >= query.limit + (query.offset || 0)) - metadata(fragment.pageUrl, hydra + 'next', fragment.nextPageUrl); + fragment.nextPageUrl && metadata(this.quad({ subject: fragment.pageUrl, predicate: hydra + 'next', object: fragment.nextPageUrl })); + } + + quad(quadObject) { + return stringQuadToQuad(quadObject, this.dataFactory); } + } module.exports = QuadPatternFragmentsRdfView; diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html b/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html index 3b2cf9e9..db7903e0 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html +++ b/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html @@ -23,7 +23,7 @@

<%= capitalizeFirst(datasource.title) %> about="#<%= component %>" property="hydra:variable" lang=""><%= component %> value="<%= query[component] || + %> value="<%= query[component] && RdfString.termToString(query[component]) || // The empty string as graph means the default graph (i === 3 && query.graph === '' ? 'urn:ldf:defaultGraph' : '') %>" /> @@ -71,7 +71,7 @@

Matches in <%= datasource.title %> for <%= query.pattern

    <% quads.forEach(function (quad) { - var subject = quad.subject, predicate = quad.predicate, object = quad.object, graph = quad.graph, urlAppendix = quad.urlAppendix ? quad.urlAppendix : ''; + var subject = quad.subject.value, predicate = quad.predicate.value, object = quad.object.value, graph = quad.graph.value, urlAppendix = quad.urlAppendix ? quad.urlAppendix : ''; -%>
  • <%- extensions.QuadBefore({ quad: quad }) %> @@ -81,20 +81,20 @@

    Matches in <%= datasource.title %> for <%= query.pattern <% %><%= shorten(predicate) %><% %> - <% if (!N3Util.isLiteral(object)) { -%> + <% if (quad.object.termType !== 'Literal') { -%> <% %><%= shorten(object) %><% } else { - var type = N3Util.getLiteralType(object), - language = N3Util.getLiteralLanguage(object); + var type = quad.object.datatype, + language = quad.object.language -%> - <% + <% %>"datatype="<%= type %>"<% } + if (!language) { %>datatype="<%= type.value %>"<% } else { %>lang="<%= language %>" xml:lang="<%= language %>"<% } %>><%= - N3Util.getLiteralValue(object) + object %>"<% } if (datasource.supportsQuads) { -%> diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index c9d7a782..db985bff 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -31,7 +31,8 @@ }, "dependencies": { "lodash": "^2.4.2", - "n3": "^0.9.0" + "n3": "^1.3.5", + "rdf-string": "^1.3.1" }, "peerDependencies": { "@ldf/core": "2.2.5" diff --git a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js index c772588e..3be1c800 100644 --- a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js +++ b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js @@ -1,5 +1,6 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ var QuadPatternRouter = require('../../').routers.QuadPatternRouter; +const DataFactory = require('n3').DataFactory; describe('QuadPatternRouter', function () { describe('The QuadPatternRouter module', function () { @@ -37,14 +38,14 @@ describe('QuadPatternRouter', function () { 'http://example.org/?subject=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with an IRI subject parameter in angular brackets', 'http://example.org/?subject=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a variable subject parameter', @@ -79,14 +80,14 @@ describe('QuadPatternRouter', function () { 'http://example.org/?predicate=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the predicate to the query', { a: 1, features: { a: true } }, - { a: 1, features: { a: true, triplePattern: true }, predicate: 'http://example.org/foo#bar' }, + { a: 1, features: { a: true, triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with an IRI predicate parameter in angular brackets', 'http://example.org/?predicate=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the predicate to the query', { a: 1, features: { a: true } }, - { a: 1, features: { a: true, triplePattern: true }, predicate: 'http://example.org/foo#bar' }, + { a: 1, features: { a: true, triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a variable predicate parameter', @@ -121,14 +122,14 @@ describe('QuadPatternRouter', function () { 'http://example.org/?object=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with an IRI object parameter in angular brackets', 'http://example.org/?object=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a variable object parameter', @@ -149,28 +150,28 @@ describe('QuadPatternRouter', function () { 'http://example.org/?object=%22foo%22', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: '"foo"' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo') }, ], [ 'a URL with a language literal object parameter', 'http://example.org/?object=%22foo%22@nl-be', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: '"foo"@nl-be' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', 'nl-be') }, ], [ 'a URL with a typed literal object parameter', 'http://example.org/?object=%22foo%22%5E%5Ehttp%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: '"foo"^^http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with a typed literal object parameter in angular brackets', 'http://example.org/?object=%22foo%22%5E%5E%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: '"foo"^^http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with an empty graph parameter', @@ -184,14 +185,14 @@ describe('QuadPatternRouter', function () { 'http://example.org/?graph=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: 'http://example.org/foo#bar' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with an IRI graph parameter in angular brackets', 'http://example.org/?graph=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: 'http://example.org/foo#bar' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a variable graph parameter', @@ -219,7 +220,7 @@ describe('QuadPatternRouter', function () { 'http://example.org/?graph=urn%3Aldf%3AdefaultGraph', 'should add the default graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: '' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.defaultGraph() }, ], ] .forEach(function (args) { test.extractQueryParams.apply(router, args); }); @@ -257,42 +258,42 @@ describe('QuadPatternRouter', function () { 'http://example.org/?subject=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name subject parameter', 'http://example.org/?subject=foo%3Abar', 'should add the expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name subject parameter with the "http" prefix', 'http://example.org/?subject=http%3AConnection', 'should add the expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: 'http://www.w3.org/2011/http#Connection' }, + { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, ], [ 'a URL with a prefixed name subject parameter with an unknown prefix', 'http://example.org/?subject=bar%3Afoo', 'should add the non-expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: 'bar:foo' }, + { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('bar:foo') }, ], [ 'a URL with an IRI subject parameter in angular brackets', 'http://example.org/?subject=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the non-expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name subject parameter in angular brackets', 'http://example.org/?subject=%3Cfoo%3Abar%3E', 'should add the non-expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: 'foo:bar' }, + { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('foo:bar') }, ], [ 'a URL with an empty predicate parameter', @@ -306,42 +307,42 @@ describe('QuadPatternRouter', function () { 'http://example.org/?predicate=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name predicate parameter', 'http://example.org/?predicate=foo%3Abar', 'should add the expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name predicate parameter with the "http" prefix', 'http://example.org/?predicate=http%3Aauthority', 'should add the expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: 'http://www.w3.org/2011/http#authority' }, + { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('http://www.w3.org/2011/http#authority') }, ], [ 'a URL with a prefixed name predicate parameter with an unknown prefix', 'http://example.org/?predicate=bar%3Afoo', 'should add the non-expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: 'bar:foo' }, + { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('bar:foo') }, ], [ 'a URL with an IRI predicate parameter in angular brackets', 'http://example.org/?predicate=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the non-expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name predicate parameter in angular brackets', 'http://example.org/?predicate=%3Cfoo%3Abar%3E', 'should add the non-expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: 'foo:bar' }, + { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('foo:bar') }, ], [ 'a URL with an empty object parameter', @@ -355,63 +356,63 @@ describe('QuadPatternRouter', function () { 'http://example.org/?object=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name object parameter', 'http://example.org/?object=foo%3Abar', 'should add the expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name object parameter with the "http" prefix', 'http://example.org/?object=http%3AConnection', 'should add the expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: 'http://www.w3.org/2011/http#Connection' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, ], [ 'a URL with a prefixed name object parameter with an unknown prefix', 'http://example.org/?object=bar%3Afoo', 'should add the non-expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: 'bar:foo' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('bar:foo') }, ], [ 'a URL with an IRI object parameter in angular brackets', 'http://example.org/?object=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the non-expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: 'http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name object parameter in angular brackets', 'http://example.org/?object=%3Cfoo%3Abar%3E', 'should add the non-expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: 'foo:bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('foo:bar') }, ], [ 'a URL with a typed literal object parameter', 'http://example.org/?object=%22foo%22%5E%5Ehttp%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: '"foo"^^http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with a typed literal object parameter in angular brackets', 'http://example.org/?object=%22foo%22%5E%5E%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: '"foo"^^http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with a prefixed literal object parameter', 'http://example.org/?object=%22foo%22%5E%5Efoo%3Abar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: '"foo"^^http://example.org/foo#bar' }, + { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with an empty graph parameter', @@ -425,42 +426,42 @@ describe('QuadPatternRouter', function () { 'http://example.org/?graph=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: 'http://example.org/foo#bar' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name graph parameter', 'http://example.org/?graph=foo%3Abar', 'should add the expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: 'http://example.org/foo#bar' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name graph parameter with the "http" prefix', 'http://example.org/?graph=http%3AConnection', 'should add the expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: 'http://www.w3.org/2011/http#Connection' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, ], [ 'a URL with a prefixed name graph parameter with an unknown prefix', 'http://example.org/?graph=bar%3Afoo', 'should add the non-expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: 'bar:foo' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('bar:foo') }, ], [ 'a URL with an IRI graph parameter in angular brackets', 'http://example.org/?graph=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the non-expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: 'http://example.org/foo#bar' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name graph parameter in angular brackets', 'http://example.org/?graph=%3Cfoo%3Abar%3E', 'should add the non-expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: 'foo:bar' }, + { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('foo:bar') }, ], ] .forEach(function (args) { test.extractQueryParams.apply(router, args); }); diff --git a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js index 45e15c89..fda18914 100644 --- a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js +++ b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js @@ -4,7 +4,10 @@ var QuadPatternFragmentsRdfView = require('../../../').views.quadpatternfragment var _ = require('lodash'), fs = require('fs'), path = require('path'), - AsyncIterator = require('asynciterator'); + AsyncIterator = require('asynciterator'), + N3 = require('n3'); + +const dataFactory = N3.DataFactory; describe('QuadPatternFragmentsRdfView', function () { describe('The QuadPatternFragmentsRdfView module', function () { @@ -79,9 +82,9 @@ describe('QuadPatternFragmentsRdfView', function () { describe('with a non-empty triple stream that writes metadata first', function () { var results = AsyncIterator.fromArray([ - { subject: 'a', predicate: 'b', object: 'c' }, - { subject: 'a', predicate: 'd', object: 'e' }, - { subject: 'f', predicate: 'g', object: 'h' }, + dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('b'), dataFactory.namedNode('c'), dataFactory.defaultGraph()), + dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('d'), dataFactory.namedNode('e'), dataFactory.defaultGraph()), + dataFactory.quad(dataFactory.namedNode('f'), dataFactory.namedNode('g'), dataFactory.namedNode('h'), dataFactory.defaultGraph()), ]); var response = test.createStreamCapture(); before(function (done) { @@ -99,9 +102,9 @@ describe('QuadPatternFragmentsRdfView', function () { describe('with a non-empty triple stream that writes metadata afterwards', function () { var results = AsyncIterator.fromArray([ - { subject: 'a', predicate: 'b', object: 'c' }, - { subject: 'a', predicate: 'd', object: 'e' }, - { subject: 'f', predicate: 'g', object: 'h' }, + dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('b'), dataFactory.namedNode('c'), dataFactory.defaultGraph()), + dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('d'), dataFactory.namedNode('e'), dataFactory.defaultGraph()), + dataFactory.quad(dataFactory.namedNode('f'), dataFactory.namedNode('g'), dataFactory.namedNode('h'), dataFactory.defaultGraph()), ]); var response = test.createStreamCapture(); before(function (done) { diff --git a/packages/feature-summary/bin/generate-summary b/packages/feature-summary/bin/generate-summary index 72ba2da6..a79932ba 100755 --- a/packages/feature-summary/bin/generate-summary +++ b/packages/feature-summary/bin/generate-summary @@ -52,7 +52,7 @@ function generate(datasourceName) { var writer = new N3.Writer({ prefixes: { ds: DS_NS, rdf: RDF_NS } }); fromDataSource(url, datasource, function (triple) { - writer.addTriple(triple); + writer.addQuad(triple); }, function () { writer.end(function (error, result) { fs.appendFileSync(datasourceName + '.ttl', result); diff --git a/packages/feature-summary/lib/controllers/SummaryController.js b/packages/feature-summary/lib/controllers/SummaryController.js index 3c3e71ab..73a27b9d 100644 --- a/packages/feature-summary/lib/controllers/SummaryController.js +++ b/packages/feature-summary/lib/controllers/SummaryController.js @@ -30,7 +30,7 @@ class SummaryController extends Controller { var summaryFile = path.join(this._summariesFolder, datasource + '.ttl'); // Read summary triples from file - var streamParser = new StreamParser({ blankNodePrefix: '' }), + var streamParser = new StreamParser({ blankNodePrefix: '', baseIRI: this._baseUrl.pathname }), inputStream = fs.createReadStream(summaryFile); // If the summary cannot be read, invoke the next controller without error diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js index e29ce84a..63a0fa10 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js @@ -17,8 +17,10 @@ class SummaryRdfViewExtension extends RdfView { // TODO: summary should be of/off per dataset if (settings.summaries && (settings.summaries.dir || settings.summaries.path)) { // TODO: summary URL should be generated by router - metadata(settings.datasource.url, ds + 'hasDatasetSummary', - settings.baseURL + 'summaries' + encodeURIComponent(settings.query.datasource)); + if (settings.datasource.url && settings.baseURL && settings.query.datasource) { + metadata(this.dataFactory.quad(this.dataFactory.namedNode(settings.datasource.url), this.dataFactory.namedNode(ds + 'hasDatasetSummary'), + this.dataFactory.namedNode(settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource)))); + } } done(); } diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index ad71e1c9..871b847c 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -34,7 +34,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "n3": "^0.9.0" + "n3": "^1.3.5" }, "peerDependencies": { "@ldf/core": "2.2.5" diff --git a/packages/feature-webid/lib/controllers/WebIDControllerExtension.js b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js index 583527f8..360d7cd7 100644 --- a/packages/feature-webid/lib/controllers/WebIDControllerExtension.js +++ b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js @@ -6,7 +6,6 @@ var http = require('http'), parseCacheControl = require('parse-cache-control'), N3 = require('n3'), n3parser = N3.Parser, - N3Util = N3.Util, Util = require('@ldf/core').Util, Controller = require('@ldf/core').controllers.Controller; @@ -62,13 +61,13 @@ class WebIDControllerExtension extends Controller { switch (triple.predicate) { case CERT_NS + 'modulus': // Add modulus - var literalValue = N3Util.getLiteralValue(triple.object); + var literalValue = triple.object.value; // Apply parsing method by nodejs id.modulus = literalValue.slice(literalValue.indexOf('00:') === 0 ? 3 : 0).replace(/:/g, '').toUpperCase(); break; case CERT_NS + 'exponent': // Add exponent - id.exponent = parseInt(N3Util.getLiteralValue(triple.object), 10); + id.exponent = parseInt(triple.object.value, 10); break; } } diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index e2354e13..f887f1b3 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -30,8 +30,8 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "lru-cache": "^4.0.1", - "n3": "^0.9.0", + "lru-cache": "^5.1.1", + "n3": "^1.3.5", "parse-cache-control": "^1.0.1" }, "peerDependencies": { diff --git a/packages/server/config/config-example.json b/packages/server/config/config-example.json index c5887782..8c536cbb 100644 --- a/packages/server/config/config-example.json +++ b/packages/server/config/config-example.json @@ -5,6 +5,13 @@ "title": "My Linked Data Fragments server", + "dataFactory": { + "@id": "ldfc:DataFactory#dataFactory", + "requireName": "n3", + "requireElement": "DataFactory", + "comment": "Used to create rdfjs terms from strings" + }, + "datasources": [ { "@id": "ex:myHdtDatasource", diff --git a/test/assets/basic-fragment-metadata-last.jsonld b/test/assets/basic-fragment-metadata-last.jsonld index 1e439f99..38ce2c4a 100644 --- a/test/assets/basic-fragment-metadata-last.jsonld +++ b/test/assets/basic-fragment-metadata-last.jsonld @@ -1,5 +1,6 @@ { - "@context": { + "@context": + { "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "xsd": "http://www.w3.org/2001/XMLSchema#", "hydra": "http://www.w3.org/ns/hydra/core#", @@ -8,114 +9,213 @@ }, "@graph": [ { - "@id": "_:graph", - "hydra:property": { - "@id": "http://www.w3.org/ns/sparql-service-description#graph" - }, - "hydra:variable": "graph" - }, - { - "@id": "_:object", - "hydra:property": { - "@id": "rdf:object" - }, - "hydra:variable": "object" - }, - { - "@id": "_:pattern", - "hydra:mapping": [ + "@id": "http://ex.org/data?fragment#metadata", + "@graph": [ { - "@id": "_:subject" + "@id": "http://ex.org/#dataset", + "hydra:member": [ + { + "@id": "http://ex.org/data#dataset" + } + ] }, { - "@id": "_:predicate" + "@id": "http://ex.org/data#dataset", + "@type": [ + "void:Dataset" + , + "hydra:Collection" + ], + "void:subset": [ + { + "@id": "http://ex.org/data?fragment&page=3" + } + , + { + "@id": "http://ex.org/data?fragment" + } + ], + "http://www.w3.org/ns/sparql-service-description#defaultGraph": [ + { + "@id": "urn:ldf:defaultGraph" + } + ], + "hydra:search": [ + { + "@id": "_:pattern" + } + ] }, { - "@id": "_:object" + "@id": "_:pattern", + "hydra:template": [ + { + "@value": "http://ex.org/data{?subject,predicate,object,graph}" + } + ], + "hydra:variableRepresentation": [ + { + "@id": "hydra:ExplicitRepresentation" + } + ], + "hydra:mapping": [ + { + "@id": "_:subject" + } + , + { + "@id": "_:predicate" + } + , + { + "@id": "_:object" + } + , + { + "@id": "_:graph" + } + ] }, { - "@id": "_:graph" + "@id": "_:subject", + "hydra:variable": [ + { + "@value": "subject" + } + ], + "hydra:property": [ + { + "@id": "rdf:subject" + } + ] + }, + { + "@id": "_:predicate", + "hydra:variable": [ + { + "@value": "predicate" + } + ], + "hydra:property": [ + { + "@id": "rdf:predicate" + } + ] + }, + { + "@id": "_:object", + "hydra:variable": [ + { + "@value": "object" + } + ], + "hydra:property": [ + { + "@id": "rdf:object" + } + ] + }, + { + "@id": "_:graph", + "hydra:variable": [ + { + "@value": "graph" + } + ], + "hydra:property": [ + { + "@id": "http://www.w3.org/ns/sparql-service-description#graph" + } + ] } - ], - "hydra:template": "http://ex.org/data{?subject,predicate,object,graph}", - "hydra:variableRepresentation": { - "@id": "hydra:ExplicitRepresentation" - } - }, - { - "@id": "_:predicate", - "hydra:property": { - "@id": "rdf:predicate" - }, - "hydra:variable": "predicate" + ] }, { - "@id": "_:subject", - "hydra:property": { - "@id": "rdf:subject" - }, - "hydra:variable": "subject" + "@id": "a", + "b": [ + { + "@id": "c" + } + ], + "d": [ + { + "@id": "e" + } + ] }, { - "@id": "http://ex.org/#dataset", - "hydra:member": { - "@id": "http://ex.org/data#dataset" - } + "@id": "f", + "g": [ + { + "@id": "h" + } + ] }, { - "@id": "http://ex.org/data#dataset", - "@type": [ - "void:Dataset", - "hydra:Collection" - ], - "void:subset": [ + "@id": "http://ex.org/data?fragment#metadata", + "@graph": [ { - "@id": "http://ex.org/data?fragment&page=3" + "@id": "http://ex.org/data?fragment", + "void:subset": [ + { + "@id": "http://ex.org/data?fragment&page=3" + } + ] }, { - "@id": "http://ex.org/data?fragment" + "@id": "http://ex.org/data?fragment&page=3", + "@type": [ + "hydra:PartialCollectionView" + ], + "dcterms:title": [ + { + "@value": "Linked Data Fragment of My data", + "@language": "en" + } + ], + "dcterms:description": [ + { + "@value": "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }.", + "@language": "en" + } + ], + "dcterms:source": [ + { + "@id": "http://ex.org/data#dataset" + } + ], + "hydra:totalItems": [ + { + "@value": 1234 + } + ], + "void:triples": [ + { + "@value": 1234 + } + ], + "hydra:itemsPerPage": [ + { + "@value": 100 + } + ], + "hydra:first": [ + { + "@id": "http://ex.org/data?fragment&page=1" + } + ], + "hydra:previous": [ + { + "@id": "http://ex.org/data?fragment&page=2" + } + ], + "hydra:next": [ + { + "@id": "http://ex.org/data?fragment&page=4" + } + ] } - ], - "hydra:search": { - "@id": "_:pattern" - }, - "http://www.w3.org/ns/sparql-service-description#defaultGraph": { - "@id": "urn:ldf:defaultGraph" - } - }, - { - "@id": "http://ex.org/data?fragment", - "void:subset": { - "@id": "http://ex.org/data?fragment&page=3" - } - }, - { - "@id": "http://ex.org/data?fragment&page=3", - "@type": "hydra:PartialCollectionView", - "dcterms:description": { - "@language": "en", - "@value": "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }." - }, - "dcterms:source": { - "@id": "http://ex.org/data#dataset" - }, - "dcterms:title": { - "@language": "en", - "@value": "Linked Data Fragment of My data" - }, - "void:triples": 1234, - "hydra:first": { - "@id": "http://ex.org/data?fragment&page=1" - }, - "hydra:itemsPerPage": 100, - "hydra:next": { - "@id": "http://ex.org/data?fragment&page=4" - }, - "hydra:previous": { - "@id": "http://ex.org/data?fragment&page=2" - }, - "hydra:totalItems": 1234 + ] } - ], - "@id": "http://ex.org/data?fragment#metadata" + ] } diff --git a/test/assets/basic-fragment-metadata-last.nq b/test/assets/basic-fragment-metadata-last.nq index eab5360c..a80547ca 100644 --- a/test/assets/basic-fragment-metadata-last.nq +++ b/test/assets/basic-fragment-metadata-last.nq @@ -1,36 +1,36 @@ - . - . - . - . - . - . - . - _:pattern . -_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . -_:pattern . -_:pattern _:subject . -_:pattern _:predicate . -_:pattern _:object . -_:pattern _:graph . -_:subject "subject" . -_:subject . -_:predicate "predicate" . -_:predicate . -_:object "object" . -_:object . -_:graph "graph" . -_:graph . - . - . - . - . - . - "Linked Data Fragment of My data"@en . - "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . - . - "1234"^^ . - "1234"^^ . - "100"^^ . - . - . - . + . + . + . + . + . + . + . + _:pattern . +_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . +_:pattern . +_:pattern _:subject . +_:pattern _:predicate . +_:pattern _:object . +_:pattern _:graph . +_:subject "subject" . +_:subject . +_:predicate "predicate" . +_:predicate . +_:object "object" . +_:object . +_:graph "graph" . +_:graph . + . + . + . + . + . + "Linked Data Fragment of My data"@en . + "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . + . + "1234"^^ . + "1234"^^ . + "100"^^ . + . + . + . diff --git a/test/assets/basic-fragment-metadata-last.nt b/test/assets/basic-fragment-metadata-last.nt index 21dccadb..e87464bb 100644 --- a/test/assets/basic-fragment-metadata-last.nt +++ b/test/assets/basic-fragment-metadata-last.nt @@ -1,35 +1,35 @@ - . - . - . - . - . - . - _:pattern. -_:pattern "http://ex.org/data{?subject,predicate,object,graph}". -_:pattern . -_:pattern _:subject. -_:pattern _:predicate. -_:pattern _:object. -_:pattern _:graph. -_:subject "subject". -_:subject . -_:predicate "predicate". -_:predicate . -_:object "object". -_:object . -_:graph "graph". -_:graph . - . - . - . - . - . - "Linked Data Fragment of My data"@en. - "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en. - . - "1234"^^. - "1234"^^. - "100"^^. - . - . - . + . + . + . + . + . + . + _:pattern . +_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . +_:pattern . +_:pattern _:subject . +_:pattern _:predicate . +_:pattern _:object . +_:pattern _:graph . +_:subject "subject" . +_:subject . +_:predicate "predicate" . +_:predicate . +_:object "object" . +_:object . +_:graph "graph" . +_:graph . + . + . + . + . + . + "Linked Data Fragment of My data"@en . + "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . + . + "1234"^^ . + "1234"^^ . + "100"^^ . + . + . + . diff --git a/test/assets/basic-fragment.jsonld b/test/assets/basic-fragment.jsonld index 1e439f99..4ad60eb3 100644 --- a/test/assets/basic-fragment.jsonld +++ b/test/assets/basic-fragment.jsonld @@ -1,5 +1,6 @@ { - "@context": { + "@context": + { "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "xsd": "http://www.w3.org/2001/XMLSchema#", "hydra": "http://www.w3.org/ns/hydra/core#", @@ -8,114 +9,208 @@ }, "@graph": [ { - "@id": "_:graph", - "hydra:property": { - "@id": "http://www.w3.org/ns/sparql-service-description#graph" - }, - "hydra:variable": "graph" - }, - { - "@id": "_:object", - "hydra:property": { - "@id": "rdf:object" - }, - "hydra:variable": "object" - }, - { - "@id": "_:pattern", - "hydra:mapping": [ + "@id": "http://ex.org/data?fragment#metadata", + "@graph": [ { - "@id": "_:subject" + "@id": "http://ex.org/#dataset", + "hydra:member": [ + { + "@id": "http://ex.org/data#dataset" + } + ] }, { - "@id": "_:predicate" + "@id": "http://ex.org/data#dataset", + "@type": [ + "void:Dataset" + , + "hydra:Collection" + ], + "void:subset": [ + { + "@id": "http://ex.org/data?fragment&page=3" + } + , + { + "@id": "http://ex.org/data?fragment" + } + ], + "http://www.w3.org/ns/sparql-service-description#defaultGraph": [ + { + "@id": "urn:ldf:defaultGraph" + } + ], + "hydra:search": [ + { + "@id": "_:pattern" + } + ] }, { - "@id": "_:object" + "@id": "_:pattern", + "hydra:template": [ + { + "@value": "http://ex.org/data{?subject,predicate,object,graph}" + } + ], + "hydra:variableRepresentation": [ + { + "@id": "hydra:ExplicitRepresentation" + } + ], + "hydra:mapping": [ + { + "@id": "_:subject" + } + , + { + "@id": "_:predicate" + } + , + { + "@id": "_:object" + } + , + { + "@id": "_:graph" + } + ] }, { - "@id": "_:graph" - } - ], - "hydra:template": "http://ex.org/data{?subject,predicate,object,graph}", - "hydra:variableRepresentation": { - "@id": "hydra:ExplicitRepresentation" - } - }, - { - "@id": "_:predicate", - "hydra:property": { - "@id": "rdf:predicate" - }, - "hydra:variable": "predicate" - }, - { - "@id": "_:subject", - "hydra:property": { - "@id": "rdf:subject" - }, - "hydra:variable": "subject" - }, - { - "@id": "http://ex.org/#dataset", - "hydra:member": { - "@id": "http://ex.org/data#dataset" - } - }, - { - "@id": "http://ex.org/data#dataset", - "@type": [ - "void:Dataset", - "hydra:Collection" - ], - "void:subset": [ + "@id": "_:subject", + "hydra:variable": [ + { + "@value": "subject" + } + ], + "hydra:property": [ + { + "@id": "rdf:subject" + } + ] + }, + { + "@id": "_:predicate", + "hydra:variable": [ + { + "@value": "predicate" + } + ], + "hydra:property": [ + { + "@id": "rdf:predicate" + } + ] + }, + { + "@id": "_:object", + "hydra:variable": [ + { + "@value": "object" + } + ], + "hydra:property": [ + { + "@id": "rdf:object" + } + ] + }, + { + "@id": "_:graph", + "hydra:variable": [ + { + "@value": "graph" + } + ], + "hydra:property": [ + { + "@id": "http://www.w3.org/ns/sparql-service-description#graph" + } + ] + }, { - "@id": "http://ex.org/data?fragment&page=3" + "@id": "http://ex.org/data?fragment", + "void:subset": [ + { + "@id": "http://ex.org/data?fragment&page=3" + } + ] }, { - "@id": "http://ex.org/data?fragment" + "@id": "http://ex.org/data?fragment&page=3", + "@type": [ + "hydra:PartialCollectionView" + ], + "dcterms:title": [ + { + "@value": "Linked Data Fragment of My data", + "@language": "en" + } + ], + "dcterms:description": [ + { + "@value": "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }.", + "@language": "en" + } + ], + "dcterms:source": [ + { + "@id": "http://ex.org/data#dataset" + } + ], + "hydra:totalItems": [ + { + "@value": 1234 + } + ], + "void:triples": [ + { + "@value": 1234 + } + ], + "hydra:itemsPerPage": [ + { + "@value": 100 + } + ], + "hydra:first": [ + { + "@id": "http://ex.org/data?fragment&page=1" + } + ], + "hydra:previous": [ + { + "@id": "http://ex.org/data?fragment&page=2" + } + ], + "hydra:next": [ + { + "@id": "http://ex.org/data?fragment&page=4" + } + ] } - ], - "hydra:search": { - "@id": "_:pattern" - }, - "http://www.w3.org/ns/sparql-service-description#defaultGraph": { - "@id": "urn:ldf:defaultGraph" - } + ] }, { - "@id": "http://ex.org/data?fragment", - "void:subset": { - "@id": "http://ex.org/data?fragment&page=3" - } + "@id": "a", + "b": [ + { + "@id": "c" + } + ], + "d": [ + { + "@id": "e" + } + ] }, { - "@id": "http://ex.org/data?fragment&page=3", - "@type": "hydra:PartialCollectionView", - "dcterms:description": { - "@language": "en", - "@value": "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }." - }, - "dcterms:source": { - "@id": "http://ex.org/data#dataset" - }, - "dcterms:title": { - "@language": "en", - "@value": "Linked Data Fragment of My data" - }, - "void:triples": 1234, - "hydra:first": { - "@id": "http://ex.org/data?fragment&page=1" - }, - "hydra:itemsPerPage": 100, - "hydra:next": { - "@id": "http://ex.org/data?fragment&page=4" - }, - "hydra:previous": { - "@id": "http://ex.org/data?fragment&page=2" - }, - "hydra:totalItems": 1234 + "@id": "f", + "g": [ + { + "@id": "h" + } + ] } - ], - "@id": "http://ex.org/data?fragment#metadata" + ] } diff --git a/test/assets/basic-fragment.nq b/test/assets/basic-fragment.nq index 8674cccf..21a68979 100644 --- a/test/assets/basic-fragment.nq +++ b/test/assets/basic-fragment.nq @@ -1,36 +1,36 @@ - . - . - . - . - . - . - . - _:pattern . -_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . -_:pattern . -_:pattern _:subject . -_:pattern _:predicate . -_:pattern _:object . -_:pattern _:graph . -_:subject "subject" . -_:subject . -_:predicate "predicate" . -_:predicate . -_:object "object" . -_:object . -_:graph "graph" . -_:graph . - . - . - "Linked Data Fragment of My data"@en . - "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . - . - "1234"^^ . - "1234"^^ . - "100"^^ . - . - . - . - . - . - . + . + . + . + . + . + . + . + _:pattern . +_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . +_:pattern . +_:pattern _:subject . +_:pattern _:predicate . +_:pattern _:object . +_:pattern _:graph . +_:subject "subject" . +_:subject . +_:predicate "predicate" . +_:predicate . +_:object "object" . +_:object . +_:graph "graph" . +_:graph . + . + . + "Linked Data Fragment of My data"@en . + "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . + . + "1234"^^ . + "1234"^^ . + "100"^^ . + . + . + . + . + . + . diff --git a/test/assets/basic-fragment.nt b/test/assets/basic-fragment.nt index 25a9fba9..2749bef0 100644 --- a/test/assets/basic-fragment.nt +++ b/test/assets/basic-fragment.nt @@ -1,35 +1,35 @@ - . - . - . - . - . - . - _:pattern. -_:pattern "http://ex.org/data{?subject,predicate,object,graph}". -_:pattern . -_:pattern _:subject. -_:pattern _:predicate. -_:pattern _:object. -_:pattern _:graph. -_:subject "subject". -_:subject . -_:predicate "predicate". -_:predicate . -_:object "object". -_:object . -_:graph "graph". -_:graph . - . - . - "Linked Data Fragment of My data"@en. - "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en. - . - "1234"^^. - "1234"^^. - "100"^^. - . - . - . - . - . - . + . + . + . + . + . + . + _:pattern . +_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . +_:pattern . +_:pattern _:subject . +_:pattern _:predicate . +_:pattern _:object . +_:pattern _:graph . +_:subject "subject" . +_:subject . +_:predicate "predicate" . +_:predicate . +_:object "object" . +_:object . +_:graph "graph" . +_:graph . + . + . + "Linked Data Fragment of My data"@en . + "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . + . + "1234"^^ . + "1234"^^ . + "100"^^ . + . + . + . + . + . + . diff --git a/test/assets/empty-fragment.jsonld b/test/assets/empty-fragment.jsonld index 1e439f99..eda6be4c 100644 --- a/test/assets/empty-fragment.jsonld +++ b/test/assets/empty-fragment.jsonld @@ -1,5 +1,6 @@ { - "@context": { + "@context": + { "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "xsd": "http://www.w3.org/2001/XMLSchema#", "hydra": "http://www.w3.org/ns/hydra/core#", @@ -8,114 +9,187 @@ }, "@graph": [ { - "@id": "_:graph", - "hydra:property": { - "@id": "http://www.w3.org/ns/sparql-service-description#graph" - }, - "hydra:variable": "graph" - }, - { - "@id": "_:object", - "hydra:property": { - "@id": "rdf:object" - }, - "hydra:variable": "object" - }, - { - "@id": "_:pattern", - "hydra:mapping": [ + "@id": "http://ex.org/data?fragment#metadata", + "@graph": [ { - "@id": "_:subject" + "@id": "http://ex.org/#dataset", + "hydra:member": [ + { + "@id": "http://ex.org/data#dataset" + } + ] }, { - "@id": "_:predicate" + "@id": "http://ex.org/data#dataset", + "@type": [ + "void:Dataset" + , + "hydra:Collection" + ], + "void:subset": [ + { + "@id": "http://ex.org/data?fragment&page=3" + } + , + { + "@id": "http://ex.org/data?fragment" + } + ], + "http://www.w3.org/ns/sparql-service-description#defaultGraph": [ + { + "@id": "urn:ldf:defaultGraph" + } + ], + "hydra:search": [ + { + "@id": "_:pattern" + } + ] }, { - "@id": "_:object" + "@id": "_:pattern", + "hydra:template": [ + { + "@value": "http://ex.org/data{?subject,predicate,object,graph}" + } + ], + "hydra:variableRepresentation": [ + { + "@id": "hydra:ExplicitRepresentation" + } + ], + "hydra:mapping": [ + { + "@id": "_:subject" + } + , + { + "@id": "_:predicate" + } + , + { + "@id": "_:object" + } + , + { + "@id": "_:graph" + } + ] }, { - "@id": "_:graph" - } - ], - "hydra:template": "http://ex.org/data{?subject,predicate,object,graph}", - "hydra:variableRepresentation": { - "@id": "hydra:ExplicitRepresentation" - } - }, - { - "@id": "_:predicate", - "hydra:property": { - "@id": "rdf:predicate" - }, - "hydra:variable": "predicate" - }, - { - "@id": "_:subject", - "hydra:property": { - "@id": "rdf:subject" - }, - "hydra:variable": "subject" - }, - { - "@id": "http://ex.org/#dataset", - "hydra:member": { - "@id": "http://ex.org/data#dataset" - } - }, - { - "@id": "http://ex.org/data#dataset", - "@type": [ - "void:Dataset", - "hydra:Collection" - ], - "void:subset": [ + "@id": "_:subject", + "hydra:variable": [ + { + "@value": "subject" + } + ], + "hydra:property": [ + { + "@id": "rdf:subject" + } + ] + }, { - "@id": "http://ex.org/data?fragment&page=3" + "@id": "_:predicate", + "hydra:variable": [ + { + "@value": "predicate" + } + ], + "hydra:property": [ + { + "@id": "rdf:predicate" + } + ] }, { - "@id": "http://ex.org/data?fragment" + "@id": "_:object", + "hydra:variable": [ + { + "@value": "object" + } + ], + "hydra:property": [ + { + "@id": "rdf:object" + } + ] + }, + { + "@id": "_:graph", + "hydra:variable": [ + { + "@value": "graph" + } + ], + "hydra:property": [ + { + "@id": "http://www.w3.org/ns/sparql-service-description#graph" + } + ] + }, + { + "@id": "http://ex.org/data?fragment", + "void:subset": [ + { + "@id": "http://ex.org/data?fragment&page=3" + } + ] + }, + { + "@id": "http://ex.org/data?fragment&page=3", + "@type": [ + "hydra:PartialCollectionView" + ], + "dcterms:title": [ + { + "@value": "Linked Data Fragment of My data", + "@language": "en" + } + ], + "dcterms:description": [ + { + "@value": "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }.", + "@language": "en" + } + ], + "dcterms:source": [ + { + "@id": "http://ex.org/data#dataset" + } + ], + "hydra:totalItems": [ + { + "@value": 1234 + } + ], + "void:triples": [ + { + "@value": 1234 + } + ], + "hydra:itemsPerPage": [ + { + "@value": 100 + } + ], + "hydra:first": [ + { + "@id": "http://ex.org/data?fragment&page=1" + } + ], + "hydra:previous": [ + { + "@id": "http://ex.org/data?fragment&page=2" + } + ], + "hydra:next": [ + { + "@id": "http://ex.org/data?fragment&page=4" + } + ] } - ], - "hydra:search": { - "@id": "_:pattern" - }, - "http://www.w3.org/ns/sparql-service-description#defaultGraph": { - "@id": "urn:ldf:defaultGraph" - } - }, - { - "@id": "http://ex.org/data?fragment", - "void:subset": { - "@id": "http://ex.org/data?fragment&page=3" - } - }, - { - "@id": "http://ex.org/data?fragment&page=3", - "@type": "hydra:PartialCollectionView", - "dcterms:description": { - "@language": "en", - "@value": "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }." - }, - "dcterms:source": { - "@id": "http://ex.org/data#dataset" - }, - "dcterms:title": { - "@language": "en", - "@value": "Linked Data Fragment of My data" - }, - "void:triples": 1234, - "hydra:first": { - "@id": "http://ex.org/data?fragment&page=1" - }, - "hydra:itemsPerPage": 100, - "hydra:next": { - "@id": "http://ex.org/data?fragment&page=4" - }, - "hydra:previous": { - "@id": "http://ex.org/data?fragment&page=2" - }, - "hydra:totalItems": 1234 + ] } - ], - "@id": "http://ex.org/data?fragment#metadata" + ] } diff --git a/test/assets/empty-fragment.nq b/test/assets/empty-fragment.nq index e1d9c4df..eb3dbe31 100644 --- a/test/assets/empty-fragment.nq +++ b/test/assets/empty-fragment.nq @@ -1,33 +1,33 @@ - . - . - . - . - . - . - . - _:pattern . -_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . -_:pattern . -_:pattern _:subject . -_:pattern _:predicate . -_:pattern _:object . -_:pattern _:graph . -_:subject "subject" . -_:subject . -_:predicate "predicate" . -_:predicate . -_:object "object" . -_:object . -_:graph "graph" . -_:graph . - . - . - "Linked Data Fragment of My data"@en . - "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . - . - "1234"^^ . - "1234"^^ . - "100"^^ . - . - . - . + . + . + . + . + . + . + . + _:pattern . +_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . +_:pattern . +_:pattern _:subject . +_:pattern _:predicate . +_:pattern _:object . +_:pattern _:graph . +_:subject "subject" . +_:subject . +_:predicate "predicate" . +_:predicate . +_:object "object" . +_:object . +_:graph "graph" . +_:graph . + . + . + "Linked Data Fragment of My data"@en . + "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . + . + "1234"^^ . + "1234"^^ . + "100"^^ . + . + . + . diff --git a/test/assets/empty-fragment.nt b/test/assets/empty-fragment.nt index 000c7e12..df98a344 100644 --- a/test/assets/empty-fragment.nt +++ b/test/assets/empty-fragment.nt @@ -1,32 +1,32 @@ - . - . - . - . - . - . - _:pattern. -_:pattern "http://ex.org/data{?subject,predicate,object,graph}". -_:pattern . -_:pattern _:subject. -_:pattern _:predicate. -_:pattern _:object. -_:pattern _:graph. -_:subject "subject". -_:subject . -_:predicate "predicate". -_:predicate . -_:object "object". -_:object . -_:graph "graph". -_:graph . - . - . - "Linked Data Fragment of My data"@en. - "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en. - . - "1234"^^. - "1234"^^. - "100"^^. - . - . - . + . + . + . + . + . + . + _:pattern . +_:pattern "http://ex.org/data{?subject,predicate,object,graph}" . +_:pattern . +_:pattern _:subject . +_:pattern _:predicate . +_:pattern _:object . +_:pattern _:graph . +_:subject "subject" . +_:subject . +_:predicate "predicate" . +_:predicate . +_:object "object" . +_:object . +_:graph "graph" . +_:graph . + . + . + "Linked Data Fragment of My data"@en . + "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en . + . + "1234"^^ . + "1234"^^ . + "100"^^ . + . + . + . diff --git a/test/assets/summary.nt b/test/assets/summary.nt index a419419c..06adab3e 100644 --- a/test/assets/summary.nt +++ b/test/assets/summary.nt @@ -1,118 +1,118 @@ - _:cap0. -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . -_:cap0 . - _:cap1. -_:cap1 . -_:cap1 . -_:cap1 . - _:cap2. -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . -_:cap2 . - _:cap3. -_:cap3 . -_:cap3 . -_:cap3 . - _:cap4. -_:cap4 . -_:cap4 . -_:cap4 . - _:cap5. -_:cap5 . -_:cap5 . - _:cap6. -_:cap6 . -_:cap6 . - _:cap7. -_:cap7 . -_:cap7 . -_:cap7 . - _:cap8. -_:cap8 . -_:cap8 . -_:cap8 . - _:cap9. -_:cap9 . -_:cap9 . - _:cap10. -_:cap10 . -_:cap10 . - _:cap11. -_:cap11 . -_:cap11 . - _:cap12. -_:cap12 . -_:cap12 . - _:cap13. -_:cap13 . -_:cap13 . -_:cap13 . - _:cap14. -_:cap14 . -_:cap14 . -_:cap14 . - _:cap15. -_:cap15 . -_:cap15 . -_:cap15 . + _:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . +_:cap0 . + _:cap1 . +_:cap1 . +_:cap1 . +_:cap1 . + _:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . +_:cap2 . + _:cap3 . +_:cap3 . +_:cap3 . +_:cap3 . + _:cap4 . +_:cap4 . +_:cap4 . +_:cap4 . + _:cap5 . +_:cap5 . +_:cap5 . + _:cap6 . +_:cap6 . +_:cap6 . + _:cap7 . +_:cap7 . +_:cap7 . +_:cap7 . + _:cap8 . +_:cap8 . +_:cap8 . +_:cap8 . + _:cap9 . +_:cap9 . +_:cap9 . + _:cap10 . +_:cap10 . +_:cap10 . + _:cap11 . +_:cap11 . +_:cap11 . + _:cap12 . +_:cap12 . +_:cap12 . + _:cap13 . +_:cap13 . +_:cap13 . +_:cap13 . + _:cap14 . +_:cap14 . +_:cap14 . +_:cap14 . + _:cap15 . +_:cap15 . +_:cap15 . +_:cap15 . diff --git a/yarn.lock b/yarn.lock index 73229025..0484ff4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1331,12 +1331,10 @@ async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -asynciterator@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-1.1.1.tgz#8d1c06a0436410186ebc889e0b36060fa62b1821" - integrity sha512-NLWjVfwc/I1k/aS9eLH/zfxnN6Ci/WHJiJCfwHcyLlPUnYIY2WHDMYycBIpobyi3qCVGYdqTY4NV0LFURbqZ/g== - dependencies: - immediate "^3.2.3" +asynciterator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-2.0.1.tgz#94d6a059fee4bc63e862ad1edb685c5f5fa26be6" + integrity sha512-aVLheZsDNU5qpOv6jZEHnFv79GfEi+N0w/OLmMmXZfGD8XFFmPsRhkSqleNl9jS6mqy/DNoV7tXGcI0S3cUvHQ== asynckit@^0.4.0: version "0.4.0" @@ -2771,7 +2769,7 @@ formidable@^1.0.17: resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== -forwarded-parse@^2.0.0: +forwarded-parse@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/forwarded-parse/-/forwarded-parse-2.1.0.tgz#1ae9d7a4be3af884f74d936d856f7d8c6abd0439" integrity sha512-as9a7Xelt0CvdUy7/qxrY73dZq2vMx49F556fwjjFrUyzq5uHHfeLgD2cCq/6P4ZvusGZzjD6aL2NdgGdS5Cew== @@ -3180,7 +3178,7 @@ hasha@^5.0.0: is-stream "^2.0.0" type-fest "^0.8.0" -hdt@^2.1.3: +hdt@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/hdt/-/hdt-2.2.2.tgz#4e570250a42043050a345dc7b84d2838c40fa7ca" integrity sha512-CaGQ6z/ncMgL9BXBAbBcjAxEZhozfQKXFi/1Ov2gz7WwYH3muv1PGsml7r8FdhtErRf45owKkITEfpJ2h8+64w== @@ -3277,11 +3275,6 @@ ignore@^4.0.3: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -immediate@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= - import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -3622,7 +3615,7 @@ is-ssh@^1.3.0: dependencies: protocols "^1.1.0" -is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -3688,6 +3681,14 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== +isomorphic-fetch@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -3831,6 +3832,32 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonld-context-parser@^1.2.0, jsonld-context-parser@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-1.3.4.tgz#289f0b05bd3ec3753535ffdf48de36dba7776521" + integrity sha512-mR2uoEWqFLE1PrF1pbUuppKajHSGwodXtI9hlcpKflvolDEFAh4hd7z9874pWaK+TtQfHC3Xqfk0U8SEnt2htw== + dependencies: + isomorphic-fetch "^2.2.1" + relative-to-absolute-iri "^1.0.5" + +jsonld-streaming-parser@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-1.1.2.tgz#6ddb6be9fb92def8dfe06ff8b014eb5ab922ad0e" + integrity sha512-nKCvqHz2JDHJjt2Iv3kW7yoFpIcKX8bWGqe9r5xaadBg9yp7pg3iuwt7Tl8ADOj5z7jYWKGmO8s31Ho+XN1slQ== + dependencies: + "@rdfjs/data-model" "^1.1.1" + "@types/rdf-js" "^2.0.1" + jsonld-context-parser "^1.3.3" + jsonparse "^1.3.1" + +jsonld-streaming-serializer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.0.1.tgz#5ca577eaac5131180597a9fb02b501be8e848806" + integrity sha512-ChO5uzePe63VkMW8chWFARGpcroePKDxJd0WMUvH5FHmMXq9ATrmqo3/7gu6TeRQklBB38x6QB0EVLfsXPrdZg== + dependencies: + "@types/rdf-js" "^2.0.1" + jsonld-context-parser "^1.2.0" + jsonld@^0.4.11: version "0.4.12" resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-0.4.12.tgz#a02f205d5341414df1b6d8414f1b967a712073e8" @@ -3841,7 +3868,7 @@ jsonld@^0.4.11: request "^2.61.0" xmldom "0.1.19" -jsonparse@^1.2.0: +jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= @@ -4420,11 +4447,16 @@ n3@^0.11.2: resolved "https://registry.yarnpkg.com/n3/-/n3-0.11.3.tgz#8e587495240dd21408c2c3aae385ec1651a837f8" integrity sha512-Hk5GSXBeAZrYoqi+NeS/U0H47Hx0Lzj7K6nLWCZpC9E04iUwEwBcrlMb/5foAli7QF4newPNQQQGgM6IAxTxGg== -n3@^0.9.0, n3@^0.9.1: +n3@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/n3/-/n3-0.9.1.tgz#430b547d58dc7381408c45784dd8058171903932" integrity sha1-QwtUfVjcc4FAjEV4TdgFgXGQOTI= +n3@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/n3/-/n3-1.3.5.tgz#ea00062b64fef71dc3a92befc00413a733ef1029" + integrity sha512-McWb1tCWGGAmHeGEakqZj/UqxQR9cpEYZ/JivBj59YfiOAuaIWZxu0B+jnhbCwCZ2AsxdgQ5Dq8fehIJpYQaMQ== + nan@^2.14.0: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -4486,6 +4518,14 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-fetch@^2.3.0, node-fetch@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" @@ -5371,6 +5411,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +relative-to-absolute-iri@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.5.tgz#9ddc91cad85898d10724864a62aacfb35caf5766" + integrity sha512-sHpUlpF3fRWtTcBa8uBIwQ+Z/YnjDjerocV3q0FrP8T9oZ3z6d61I12ZcGlGr9jW2cQbcCkErCT9XLcN18ZLaQ== + release-zalgo@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" @@ -5395,7 +5440,7 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.61.0, request@^2.88.0: +request@^2.61.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -6428,6 +6473,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +uritemplate@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/uritemplate/-/uritemplate-0.3.4.tgz#05d0a853ffbc8b0f49aa3d4d2ad777b0d1ee070c" + integrity sha1-BdCoU/+8iw9Jqj1NKtd3sNHuBww= + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -6508,6 +6558,11 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +whatwg-fetch@>=0.10.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" From 2dc68c76bbd1c225ae15bed079406f92be1ca8dd Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 6 Apr 2020 10:18:12 +0200 Subject: [PATCH 094/165] Add dataFactory parameter to configs, defaulting to N3.DataFactory --- packages/core/README.md | 2 +- packages/core/components/Datasource.jsonld | 12 ++- packages/core/components/Server.jsonld | 15 ++++ packages/core/components/View.jsonld | 11 +++ packages/core/components/context.jsonld | 1 + packages/core/lib/datasources/Datasource.js | 5 +- packages/core/lib/views/RdfView.js | 1 - packages/core/lib/views/View.js | 1 + packages/core/package.json | 2 +- .../controllers/NotFoundController-test.js | 7 +- .../core/test/datasources/Datasource-test.js | 15 ++-- .../datasources/CompositeDatasource-test.js | 8 +- .../test/datasources/HdtDatasource-test.js | 9 +- .../lib/datasources/JsonLdDatasource.js | 4 +- .../test/datasources/JsonLdDatasource-test.js | 6 +- .../lib/datasources/N3Datasource.js | 2 +- .../test/datasources/N3Datasource-test.js | 6 +- .../lib/datasources/SparqlDatasource.js | 2 +- .../test/datasources/SparqlDatasource-test.js | 10 +-- .../components/Router/QuadPattern.jsonld | 12 +++ .../lib/routers/QuadPatternRouter.js | 16 ++-- .../test/routers/QuadPatternRouter-test.js | 87 ++++++++++--------- .../QuadPatternFragmentsRdfView-test.js | 4 +- yarn.lock | 8 +- 24 files changed, 147 insertions(+), 99 deletions(-) diff --git a/packages/core/README.md b/packages/core/README.md index f2c7cab3..103605a5 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -67,7 +67,6 @@ This package exposes the the following context entries: **Other:** * `Server`: An HTTP server that provides access to Linked Data Fragments. This is enabled by default in `@ldf/server`. _Should be used as `@type` value._ -* `dataFactory`: A factory object used to construct rdfjs terms._ * `title`: The server name. _Should be used as key in a `Server` config._ * `baseURL`: The base URL path for the server. _Should be used as key in a `Server` config._ * `port`: The port the server will bind with. _Should be used as key in a `Server` config._ @@ -91,6 +90,7 @@ This package exposes the the following context entries: * `views`: Views for the server. This is configured by default in `@ldf/server`. _Should be used as key in a `Server` config._ * `UrlData`: A data object class for preset URL information. This is enabled by default in `@ldf/server`. _Should be used as `@type` value._ * `urlData`: The UrlData helper object. This is enabled by default in `@ldf/server`. _Should be used as key in a `Server` config._ +* `dataFactory`: A [factory object to construct RDFJS terms](http://rdf.js.org/data-model-spec/#datafactory-interface). `@ldf/server` uses the [N3](https://github.com/rdfjs/N3.js) `DataFactory` by default. _Should be used as key in a `Server` config._ `@ldf/server` and `@ldf/preset-qpf` provide default instantiations of all core classes, which means that you don't have to define them in your config file yourself. diff --git a/packages/core/components/Datasource.jsonld b/packages/core/components/Datasource.jsonld index a7aecd19..ce9030b3 100644 --- a/packages/core/components/Datasource.jsonld +++ b/packages/core/components/Datasource.jsonld @@ -89,9 +89,12 @@ }, { "@id": "ldfc:Datasource#dataFactory", - "comment": "Used to create rdfjs terms", - "unique": true - } + "inheritValues": { + "@type": "InheritanceValue", + "onParameter": "ldfc:Server#dataFactory", + "from": "ldfc:Server" + } + } ], "constructorArguments": { "@id": "ldfc:Datasource#constructorArgumentsObject", @@ -147,6 +150,9 @@ { "keyRaw": "quads", "value": "ldfc:Datasource#quads" + }, + { + "@id": "ldfc:Server#dataFactoryField" } ] } diff --git a/packages/core/components/Server.jsonld b/packages/core/components/Server.jsonld index 76372c4c..a2014e85 100644 --- a/packages/core/components/Server.jsonld +++ b/packages/core/components/Server.jsonld @@ -169,6 +169,16 @@ { "@id": "ldfc:Server#dereferencePath" } ] } + }, + { + "@id": "ldfc:Server#dataFactory", + "comment": "A factory object to construct RDFJS terms", + "unique": true, + "default": { + "requireName": "n3", + "requireElement": "DataFactory", + "requireNoConstructor": true + } } ], "constructorArguments": { @@ -244,6 +254,11 @@ "keyRaw": "viewsRaw", "value": "ldfc:Server#view" }, + { + "@id": "ldfc:Server#dataFactoryField", + "keyRaw": "dataFactory", + "value": "ldfc:Server#dataFactory" + }, { "keyRaw": "response", "value": { diff --git a/packages/core/components/View.jsonld b/packages/core/components/View.jsonld index bf80d7fa..4aa450da 100644 --- a/packages/core/components/View.jsonld +++ b/packages/core/components/View.jsonld @@ -20,6 +20,14 @@ "onParameter": "ldfc:Server#urlData", "from": "ldfc:Server" } + }, + { + "@id": "ldfc:View#dataFactory", + "inheritValues": { + "@type": "InheritanceValue", + "onParameter": "ldfc:Server#dataFactory", + "from": "ldfc:Server" + } } ], "constructorArguments": { @@ -32,6 +40,9 @@ { "keyRaw": "urlData", "value": "ldfc:Server#urlData" + }, + { + "@id": "ldfc:Server#dataFactoryField" } ] } diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index 5b933eb8..c23c86b4 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -19,6 +19,7 @@ "@type": "@id" }, "dereferencePath": "ldfc:Server#dereferencePath", + "dataFactory": "ldfc:Server#dataFactory", "EmptyDatasource": "ldfc:Datasource/Empty", "IndexDatasource": "ldfc:Datasource/Index", diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index 9ba2f41a..b208296b 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -6,8 +6,7 @@ var fs = require('fs'), UrlData = require('../UrlData'), BufferedIterator = require('asynciterator').BufferedIterator, EventEmitter = require('events'), - stringToTerm = require('rdf-string').stringToTerm, - N3 = require('n3'); + stringToTerm = require('rdf-string').stringToTerm; // Creates a new Datasource class Datasource extends EventEmitter { @@ -34,7 +33,7 @@ class Datasource extends EventEmitter { this._request = options.request || require('request'); this._blankNodePrefix = options.blankNodePrefix || this._blankNodePrefix; this._blankNodePrefixLength = this._blankNodePrefix.length; - this.dataFactory = options.dataFactory || N3.DataFactory; + this.dataFactory = options.dataFactory; if (options.graph) { this._graph = this.dataFactory.namedNode(options.graph); this._queryGraphReplacements = Object.create(null); diff --git a/packages/core/lib/views/RdfView.js b/packages/core/lib/views/RdfView.js index 372623ac..7348dcf6 100644 --- a/packages/core/lib/views/RdfView.js +++ b/packages/core/lib/views/RdfView.js @@ -21,7 +21,6 @@ var contentTypes = 'application/trig;q=0.9,application/n-quads;q=0.7,' + class RdfView extends View { constructor(viewName, settings) { super(viewName, contentTypes, settings); - this.dataFactory = N3.DataFactory; } // Renders the view with the given settings to the response diff --git a/packages/core/lib/views/View.js b/packages/core/lib/views/View.js index cf9ac858..9cb37741 100644 --- a/packages/core/lib/views/View.js +++ b/packages/core/lib/views/View.js @@ -11,6 +11,7 @@ class View { this.name = viewName || ''; this._parseContentTypes(contentTypes); this._defaults = defaults || {}; + this.dataFactory = this._defaults.dataFactory; if (this._defaults.views) this._defaults.views = new ViewCollection(defaults.views); } diff --git a/packages/core/package.json b/packages/core/package.json index d227d4ed..b44ba41c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "asynciterator": "^2.0.1", - "componentsjs": "3.3.0", + "componentsjs": "^3.4.0", "forwarded-parse": "^2.1.0", "jsonld-streaming-serializer": "^1.0.1", "lodash": "^2.4.2", diff --git a/packages/core/test/controllers/NotFoundController-test.js b/packages/core/test/controllers/NotFoundController-test.js index ba28c370..06665123 100644 --- a/packages/core/test/controllers/NotFoundController-test.js +++ b/packages/core/test/controllers/NotFoundController-test.js @@ -2,7 +2,8 @@ var NotFoundController = require('../../lib/controllers/NotFoundController'); var request = require('supertest'), - DummyServer = require('../../../../test/DummyServer'); + DummyServer = require('../../../../test/DummyServer'), + dataFactory = require('n3').DataFactory; var NotFoundHtmlView = require('../../lib/views/notfound/NotFoundHtmlView.js'), NotFoundRdfView = require('../../lib/views/notfound/NotFoundRdfView.js'); @@ -57,8 +58,8 @@ describe('NotFoundController', function () { describe('A NotFoundController instance with HTML and RDF views', function () { var controller, htmlView, rdfView, datasources, client; before(function () { - htmlView = new NotFoundHtmlView(); - rdfView = new NotFoundRdfView(); + htmlView = new NotFoundHtmlView({ dataFactory }); + rdfView = new NotFoundRdfView({ dataFactory }); sinon.spy(htmlView, 'render'); sinon.spy(rdfView, 'render'); datasources = { a: { title: 'foo', url: 'http://example.org/foo#dataset' } }; diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index 79bbadb0..2d6d01c2 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -16,16 +16,16 @@ describe('Datasource', function () { }); it('should be a Datasource constructor', function () { - new Datasource().should.be.an.instanceof(Datasource); + new Datasource({ dataFactory }).should.be.an.instanceof(Datasource); }); it('should be an EventEmitter constructor', function () { - new Datasource().should.be.an.instanceof(EventEmitter); + new Datasource({ dataFactory }).should.be.an.instanceof(EventEmitter); }); }); describe('A Datasource instance', function () { - var datasource = new Datasource(); + var datasource = new Datasource({ dataFactory }); datasource.initialize(); it('should not indicate support for any features', function () { @@ -119,7 +119,7 @@ describe('Datasource', function () { describe('A Datasource instance with an initializer', function () { var datasource, initializedListener, errorListener; before(function () { - datasource = new Datasource(); + datasource = new Datasource({ dataFactory }); datasource._initialize = sinon.stub(); Object.defineProperty(datasource, 'supportedFeatures', { value: { all: true }, @@ -183,7 +183,7 @@ describe('Datasource', function () { describe('A Datasource instance with an initializer that errors synchronously', function () { var datasource, initializedListener, errorListener, error; before(function () { - datasource = new Datasource(); + datasource = new Datasource({ dataFactory }); error = new Error('initializer error'); datasource._initialize = sinon.stub().throws(error); datasource.on('initialized', initializedListener = sinon.stub()); @@ -214,7 +214,7 @@ describe('Datasource', function () { describe('A Datasource instance with an initializer that errors asynchronously', function () { var datasource, initializedListener, errorListener, error; before(function () { - datasource = new Datasource(); + datasource = new Datasource({ dataFactory }); error = new Error('initializer error'); datasource._initialize = sinon.stub().callsArgWith(0, error); datasource.on('initialized', initializedListener = sinon.stub()); @@ -243,7 +243,7 @@ describe('Datasource', function () { }); describe('A derived Datasource instance', function () { - var datasource = new Datasource(); + var datasource = new Datasource({ dataFactory }); Object.defineProperty(datasource, 'supportedFeatures', { enumerable: true, value: { a: true, b: true, c: false }, @@ -288,6 +288,7 @@ describe('Datasource', function () { describe('A Datasource instance with a graph property', function () { var datasource = new Datasource({ + dataFactory, graph: 'http://example.org/#mygraph', }); Object.defineProperty(datasource, 'supportedFeatures', { diff --git a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js index c716c92e..661606af 100644 --- a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js +++ b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js @@ -14,10 +14,10 @@ var exampleTrigUrl = 'file://' + path.join(__dirname, '../../../../test/assets/t describe('CompositeDatasource', function () { var references = { - data0: { settings: { file: exampleHdtFile }, datasourceType: HdtDatasource, size: 132 }, - data1: { settings: { file: exampleHdtFileWithBlanks, graph: 'http://example.org/graph0' }, datasourceType: HdtDatasource, size: 6 }, - data2: { settings: { url: exampleTurtleUrl }, datasourceType: N3Datasource, size: 129 }, - data3: { settings: { url: exampleTrigUrl }, datasourceType: N3Datasource, size: 7 }, + data0: { dataFactory, settings: { dataFactory, file: exampleHdtFile }, datasourceType: HdtDatasource, size: 132 }, + data1: { dataFactory, settings: { dataFactory, file: exampleHdtFileWithBlanks, graph: 'http://example.org/graph0' }, datasourceType: HdtDatasource, size: 6 }, + data2: { dataFactory, settings: { dataFactory, url: exampleTurtleUrl }, datasourceType: N3Datasource, size: 129 }, + data3: { dataFactory, settings: { dataFactory, url: exampleTrigUrl }, datasourceType: N3Datasource, size: 7 }, }; Object.keys(references).forEach(function (datasourceId) { var datasource = references[datasourceId]; diff --git a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js index 22b4112e..8c33c128 100644 --- a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js +++ b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js @@ -16,14 +16,14 @@ describe('HdtDatasource', function () { }); it('should be an HdtDatasource constructor', function (done) { - var instance = new HdtDatasource({ file: exampleHdtFile }); + var instance = new HdtDatasource({ dataFactory, file: exampleHdtFile }); instance.initialize(); instance.should.be.an.instanceof(HdtDatasource); instance.close(done); }); it('should create Datasource objects', function (done) { - var instance = new HdtDatasource({ file: exampleHdtFile }); + var instance = new HdtDatasource({ dataFactory, file: exampleHdtFile }); instance.initialize(); instance.should.be.an.instanceof(Datasource); instance.close(done); @@ -34,7 +34,7 @@ describe('HdtDatasource', function () { var datasource; function getDatasource() { return datasource; } before(function (done) { - datasource = new HdtDatasource({ file: exampleHdtFile }); + datasource = new HdtDatasource({ dataFactory, file: exampleHdtFile }); datasource.initialize(); datasource.on('initialized', done); }); @@ -97,7 +97,7 @@ describe('HdtDatasource', function () { var datasource; function getDatasource() { return datasource; } before(function (done) { - datasource = new HdtDatasource({ file: exampleHdtFileWithBlanks }); + datasource = new HdtDatasource({ dataFactory, file: exampleHdtFileWithBlanks }); datasource.initialize(); datasource.on('initialized', done); }); @@ -147,6 +147,7 @@ describe('HdtDatasource', function () { function getDatasource() { return datasource; } before(function (done) { datasource = new HdtDatasource({ + dataFactory, file: exampleHdtFileWithBlanks, blankNodePrefix: 'http://example.org/.well-known/genid/', }); diff --git a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js index a2366787..948e5dd1 100644 --- a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js +++ b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js @@ -16,10 +16,10 @@ class JsonLdDatasource extends MemoryDatasource { // Retrieves all quads from the document _getAllQuads(addQuad, done) { var document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }); - new JsonLdParser({ baseIRI: this._url }) + new JsonLdParser({ baseIRI: this._url, dataFactory: this.dataFactory }) .import(document) .on('error', done) - .on('data', function (quad) { addQuad(quad); }) + .on('data', addQuad) .on('end', done); } } diff --git a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js index fc050b26..a8cb3193 100644 --- a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js +++ b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js @@ -14,20 +14,20 @@ describe('JsonLdDatasource', function () { }); it('should be a JsonLdDatasource constructor', function (done) { - var instance = new JsonLdDatasource({ url: exampleJsonLdUrl }); + var instance = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); instance.should.be.an.instanceof(JsonLdDatasource); instance.close(done); }); it('should create Datasource objects', function (done) { - var instance = new JsonLdDatasource({ url: exampleJsonLdUrl }); + var instance = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); }); describe('A JsonLdDatasource instance for an example JsonLd file', function () { - var datasource = new JsonLdDatasource({ url: exampleJsonLdUrl }); + var datasource = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); datasource.initialize(); after(function (done) { datasource.close(done); }); diff --git a/packages/datasource-n3/lib/datasources/N3Datasource.js b/packages/datasource-n3/lib/datasources/N3Datasource.js index fdc2e2a3..a6541e72 100644 --- a/packages/datasource-n3/lib/datasources/N3Datasource.js +++ b/packages/datasource-n3/lib/datasources/N3Datasource.js @@ -17,7 +17,7 @@ class N3Datasource extends MemoryDatasource { _getAllQuads(addQuad, done) { var document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }, done); N3Parser._resetBlankNodeIds(); - new N3Parser().parse(document, function (error, quad) { + new N3Parser({ factory: this.dataFactory }).parse(document, function (error, quad) { quad ? addQuad(quad) : done(error); }); } diff --git a/packages/datasource-n3/test/datasources/N3Datasource-test.js b/packages/datasource-n3/test/datasources/N3Datasource-test.js index 872e6edb..a73b123e 100644 --- a/packages/datasource-n3/test/datasources/N3Datasource-test.js +++ b/packages/datasource-n3/test/datasources/N3Datasource-test.js @@ -14,20 +14,20 @@ describe('N3Datasource', function () { }); it('should be a N3Datasource constructor', function (done) { - var instance = new N3Datasource({ url: exampleTurtleUrl }); + var instance = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); instance.should.be.an.instanceof(N3Datasource); instance.close(done); }); it('should create Datasource objects', function (done) { - var instance = new N3Datasource({ url: exampleTurtleUrl }); + var instance = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); }); describe('A N3Datasource instance for an example Turtle file', function () { - var datasource = new N3Datasource({ url: exampleTurtleUrl }); + var datasource = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); datasource.initialize(); after(function (done) { datasource.close(done); }); diff --git a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js index 3c9931c8..cb4d9b91 100644 --- a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -18,7 +18,7 @@ class SparqlDatasource extends Datasource { this._countCache = new LRU({ max: 1000, maxAge: 1000 * 60 * 60 * 3 }); this._resolvingCountQueries = {}; - this._sparqlJsonParser = new SparqlJsonParser(); + this._sparqlJsonParser = new SparqlJsonParser({ dataFactory: this.dataFactory }); // Set endpoint URL and default graph options = options || {}; diff --git a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js index b6c669a4..b0ba4bfc 100644 --- a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js +++ b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js @@ -17,17 +17,17 @@ describe('SparqlDatasource', function () { }); it('should be a SparqlDatasource constructor', function () { - new SparqlDatasource().should.be.an.instanceof(SparqlDatasource); + new SparqlDatasource({ dataFactory }).should.be.an.instanceof(SparqlDatasource); }); it('should create Datasource objects', function () { - new SparqlDatasource().should.be.an.instanceof(Datasource); + new SparqlDatasource({ dataFactory }).should.be.an.instanceof(Datasource); }); }); describe('A SparqlDatasource instance', function () { var request = sinon.stub(); - var datasource = new SparqlDatasource({ endpoint: 'http://ex.org/sparql', request: request }); + var datasource = new SparqlDatasource({ dataFactory, endpoint: 'http://ex.org/sparql', request: request }); datasource.initialize(); it('should indicate support for its features', function () { @@ -244,7 +244,7 @@ describe('SparqlDatasource', function () { var result, totalCount; before(function () { request.reset(); - let query = { subject: dataFactory.namedNode('abcdef'), features: { quadPattern: true } } + let query = { subject: dataFactory.namedNode('abcdef'), features: { quadPattern: true } }; result = datasource.select(query); request.returnValues[1].emit('error', new Error()); result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); @@ -258,7 +258,7 @@ describe('SparqlDatasource', function () { describe('A SparqlDatasource instance with forceTypedLiterals true', function () { var request = sinon.stub(); - var datasource = new SparqlDatasource({ endpoint: 'http://ex.org/sparql', request: request, forceTypedLiterals: true }); + var datasource = new SparqlDatasource({ dataFactory, endpoint: 'http://ex.org/sparql', request: request, forceTypedLiterals: true }); datasource.initialize(); itShouldExecute(datasource, request, diff --git a/packages/feature-qpf/components/Router/QuadPattern.jsonld b/packages/feature-qpf/components/Router/QuadPattern.jsonld index 9e975829..59be4d0f 100644 --- a/packages/feature-qpf/components/Router/QuadPattern.jsonld +++ b/packages/feature-qpf/components/Router/QuadPattern.jsonld @@ -20,12 +20,24 @@ "from": "ldfc:Server" }, "unique": true + }, + { + "@id": "ldffq:QuadPattern/QuadPattern#dataFactory", + "inheritValues": { + "@type": "InheritanceValue", + "onParameter": "ldfc:Server#dataFactory", + "from": "ldfc:Server" + }, + "unique": true } ], "constructorArguments": { "fields": [ { "@id": "ldfc:Server#prefixField" + }, + { + "@id": "ldfc:Server#dataFactoryField" } ] } diff --git a/packages/feature-qpf/lib/routers/QuadPatternRouter.js b/packages/feature-qpf/lib/routers/QuadPatternRouter.js index a15f8c6a..5c56018f 100644 --- a/packages/feature-qpf/lib/routers/QuadPatternRouter.js +++ b/packages/feature-qpf/lib/routers/QuadPatternRouter.js @@ -2,7 +2,6 @@ /** A QuadPatternRouter routes basic quad patterns */ const stringToTerm = require('rdf-string').stringToTerm; -const DataFactory = require('n3').DataFactory; var iriMatcher = /^(][^"<>]*)>?$/; var literalMatcher = /^("[^]*")(?:|\^\^]+)>?|@[a-z0-9\-]+)$/i; @@ -16,7 +15,8 @@ var DEFAULT_GRAPH_ALT = '@default'; // Creates a new QuadPatternRouter class QuadPatternRouter { constructor(config) { - this._prefixes = config && config.prefixes || {}; + this._prefixes = config.prefixes || {}; + this.dataFactory = config.dataFactory; } // Extracts triple or quad pattern parameters from the request and add them to the query @@ -26,20 +26,20 @@ class QuadPatternRouter { // Try to extract a subject IRI if (queryString.subject && (match = iriMatcher.exec(queryString.subject))) - hasTriplePattern = query.subject = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), DataFactory); + hasTriplePattern = query.subject = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), this.dataFactory); // Try to extract a predicate IRI if (queryString.predicate && (match = iriMatcher.exec(queryString.predicate))) - hasTriplePattern = query.predicate = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), DataFactory); + hasTriplePattern = query.predicate = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), this.dataFactory); // Try to extract an object if (queryString.object) { // The object can be an IRI… if (match = iriMatcher.exec(queryString.object)) - hasTriplePattern = query.object = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), DataFactory); + hasTriplePattern = query.object = stringToTerm(match[1] ? match[2] : this._expandIRI(match[2]), this.dataFactory); // or the object can be a literal (with a type or language) else if (match = literalMatcher.exec(queryString.object)) - hasTriplePattern = query.object = stringToTerm(match[2] ? match[1] + '^^' + this._expandIRI(match[2]) : match[0], DataFactory); + hasTriplePattern = query.object = stringToTerm(match[2] ? match[1] + '^^' + this._expandIRI(match[2]) : match[0], this.dataFactory); } // Try to extract a graph IRI @@ -49,9 +49,9 @@ class QuadPatternRouter { // When a client specifies DEFAULT_GRAPH as graph, // we search the actual default graph rather than the graph with that name. if (hasQuadPattern === DEFAULT_GRAPH || hasQuadPattern === DEFAULT_GRAPH_ALT) - query.graph = stringToTerm('', DataFactory); + query.graph = stringToTerm('', this.dataFactory); else - query.graph = stringToTerm(hasQuadPattern, DataFactory); + query.graph = stringToTerm(hasQuadPattern, this.dataFactory); } // Indicate in the query whether the triple/quad pattern feature was used diff --git a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js index 3be1c800..bba35073 100644 --- a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js +++ b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js @@ -1,6 +1,6 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ var QuadPatternRouter = require('../../').routers.QuadPatternRouter; -const DataFactory = require('n3').DataFactory; +const dataFactory = require('n3').DataFactory; describe('QuadPatternRouter', function () { describe('The QuadPatternRouter module', function () { @@ -9,12 +9,12 @@ describe('QuadPatternRouter', function () { }); it('should be a QuadPatternRouter constructor', function () { - new QuadPatternRouter().should.be.an.instanceof(QuadPatternRouter); + new QuadPatternRouter({}).should.be.an.instanceof(QuadPatternRouter); }); }); describe('A QuadPatternRouter instance', function () { - var router = new QuadPatternRouter(); + var router = new QuadPatternRouter({ dataFactory }); describe('extractUrlParams', function () { describe('with an existing query', function () { @@ -38,14 +38,14 @@ describe('QuadPatternRouter', function () { 'http://example.org/?subject=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, subject: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with an IRI subject parameter in angular brackets', 'http://example.org/?subject=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, subject: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a variable subject parameter', @@ -80,14 +80,14 @@ describe('QuadPatternRouter', function () { 'http://example.org/?predicate=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the predicate to the query', { a: 1, features: { a: true } }, - { a: 1, features: { a: true, triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { a: true, triplePattern: true }, predicate: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with an IRI predicate parameter in angular brackets', 'http://example.org/?predicate=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the predicate to the query', { a: 1, features: { a: true } }, - { a: 1, features: { a: true, triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { a: true, triplePattern: true }, predicate: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a variable predicate parameter', @@ -122,14 +122,14 @@ describe('QuadPatternRouter', function () { 'http://example.org/?object=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with an IRI object parameter in angular brackets', 'http://example.org/?object=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a variable object parameter', @@ -150,28 +150,28 @@ describe('QuadPatternRouter', function () { 'http://example.org/?object=%22foo%22', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.literal('foo') }, ], [ 'a URL with a language literal object parameter', 'http://example.org/?object=%22foo%22@nl-be', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', 'nl-be') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.literal('foo', 'nl-be') }, ], [ 'a URL with a typed literal object parameter', 'http://example.org/?object=%22foo%22%5E%5Ehttp%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, + { a: 1, features: { triplePattern: true }, object: dataFactory.literal('foo', dataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with a typed literal object parameter in angular brackets', 'http://example.org/?object=%22foo%22%5E%5E%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, + { a: 1, features: { triplePattern: true }, object: dataFactory.literal('foo', dataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with an empty graph parameter', @@ -185,14 +185,14 @@ describe('QuadPatternRouter', function () { 'http://example.org/?graph=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with an IRI graph parameter in angular brackets', 'http://example.org/?graph=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a variable graph parameter', @@ -220,7 +220,7 @@ describe('QuadPatternRouter', function () { 'http://example.org/?graph=urn%3Aldf%3AdefaultGraph', 'should add the default graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.defaultGraph() }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.defaultGraph() }, ], ] .forEach(function (args) { test.extractQueryParams.apply(router, args); }); @@ -234,6 +234,7 @@ describe('QuadPatternRouter', function () { foo: 'http://example.org/foo#', http: 'http://www.w3.org/2011/http#', }, + dataFactory, }); describe('extractUrlParams', function () { @@ -258,42 +259,42 @@ describe('QuadPatternRouter', function () { 'http://example.org/?subject=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, subject: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name subject parameter', 'http://example.org/?subject=foo%3Abar', 'should add the expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, subject: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name subject parameter with the "http" prefix', 'http://example.org/?subject=http%3AConnection', 'should add the expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, + { a: 1, features: { triplePattern: true }, subject: dataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, ], [ 'a URL with a prefixed name subject parameter with an unknown prefix', 'http://example.org/?subject=bar%3Afoo', 'should add the non-expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('bar:foo') }, + { a: 1, features: { triplePattern: true }, subject: dataFactory.namedNode('bar:foo') }, ], [ 'a URL with an IRI subject parameter in angular brackets', 'http://example.org/?subject=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the non-expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, subject: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name subject parameter in angular brackets', 'http://example.org/?subject=%3Cfoo%3Abar%3E', 'should add the non-expanded subject to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, subject: DataFactory.namedNode('foo:bar') }, + { a: 1, features: { triplePattern: true }, subject: dataFactory.namedNode('foo:bar') }, ], [ 'a URL with an empty predicate parameter', @@ -307,42 +308,42 @@ describe('QuadPatternRouter', function () { 'http://example.org/?predicate=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, predicate: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name predicate parameter', 'http://example.org/?predicate=foo%3Abar', 'should add the expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, predicate: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name predicate parameter with the "http" prefix', 'http://example.org/?predicate=http%3Aauthority', 'should add the expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('http://www.w3.org/2011/http#authority') }, + { a: 1, features: { triplePattern: true }, predicate: dataFactory.namedNode('http://www.w3.org/2011/http#authority') }, ], [ 'a URL with a prefixed name predicate parameter with an unknown prefix', 'http://example.org/?predicate=bar%3Afoo', 'should add the non-expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('bar:foo') }, + { a: 1, features: { triplePattern: true }, predicate: dataFactory.namedNode('bar:foo') }, ], [ 'a URL with an IRI predicate parameter in angular brackets', 'http://example.org/?predicate=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the non-expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, predicate: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name predicate parameter in angular brackets', 'http://example.org/?predicate=%3Cfoo%3Abar%3E', 'should add the non-expanded predicate to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, predicate: DataFactory.namedNode('foo:bar') }, + { a: 1, features: { triplePattern: true }, predicate: dataFactory.namedNode('foo:bar') }, ], [ 'a URL with an empty object parameter', @@ -356,63 +357,63 @@ describe('QuadPatternRouter', function () { 'http://example.org/?object=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name object parameter', 'http://example.org/?object=foo%3Abar', 'should add the expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name object parameter with the "http" prefix', 'http://example.org/?object=http%3AConnection', 'should add the expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, ], [ 'a URL with a prefixed name object parameter with an unknown prefix', 'http://example.org/?object=bar%3Afoo', 'should add the non-expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('bar:foo') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.namedNode('bar:foo') }, ], [ 'a URL with an IRI object parameter in angular brackets', 'http://example.org/?object=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the non-expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name object parameter in angular brackets', 'http://example.org/?object=%3Cfoo%3Abar%3E', 'should add the non-expanded object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.namedNode('foo:bar') }, + { a: 1, features: { triplePattern: true }, object: dataFactory.namedNode('foo:bar') }, ], [ 'a URL with a typed literal object parameter', 'http://example.org/?object=%22foo%22%5E%5Ehttp%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, + { a: 1, features: { triplePattern: true }, object: dataFactory.literal('foo', dataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with a typed literal object parameter in angular brackets', 'http://example.org/?object=%22foo%22%5E%5E%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, + { a: 1, features: { triplePattern: true }, object: dataFactory.literal('foo', dataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with a prefixed literal object parameter', 'http://example.org/?object=%22foo%22%5E%5Efoo%3Abar', 'should add the object to the query', { a: 1 }, - { a: 1, features: { triplePattern: true }, object: DataFactory.literal('foo', DataFactory.namedNode('http://example.org/foo#bar')) }, + { a: 1, features: { triplePattern: true }, object: dataFactory.literal('foo', dataFactory.namedNode('http://example.org/foo#bar')) }, ], [ 'a URL with an empty graph parameter', @@ -426,42 +427,42 @@ describe('QuadPatternRouter', function () { 'http://example.org/?graph=http%3A%2F%2Fexample.org%2Ffoo%23bar', 'should add the graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name graph parameter', 'http://example.org/?graph=foo%3Abar', 'should add the expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name graph parameter with the "http" prefix', 'http://example.org/?graph=http%3AConnection', 'should add the expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('http://www.w3.org/2011/http#Connection') }, ], [ 'a URL with a prefixed name graph parameter with an unknown prefix', 'http://example.org/?graph=bar%3Afoo', 'should add the non-expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('bar:foo') }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('bar:foo') }, ], [ 'a URL with an IRI graph parameter in angular brackets', 'http://example.org/?graph=%3Chttp%3A%2F%2Fexample.org%2Ffoo%23bar%3E', 'should add the non-expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('http://example.org/foo#bar') }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('http://example.org/foo#bar') }, ], [ 'a URL with a prefixed name graph parameter in angular brackets', 'http://example.org/?graph=%3Cfoo%3Abar%3E', 'should add the non-expanded graph to the query', { a: 1 }, - { a: 1, features: { quadPattern: true }, graph: DataFactory.namedNode('foo:bar') }, + { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('foo:bar') }, ], ] .forEach(function (args) { test.extractQueryParams.apply(router, args); }); diff --git a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js index fda18914..a847c10c 100644 --- a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js +++ b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js @@ -16,12 +16,12 @@ describe('QuadPatternFragmentsRdfView', function () { }); it('should be a QuadPatternFragmentsRdfView constructor', function () { - new QuadPatternFragmentsRdfView().should.be.an.instanceof(QuadPatternFragmentsRdfView); + new QuadPatternFragmentsRdfView({ dataFactory }).should.be.an.instanceof(QuadPatternFragmentsRdfView); }); }); describe('A QuadPatternFragmentsRdfView instance', function () { - var view = new QuadPatternFragmentsRdfView(); + var view = new QuadPatternFragmentsRdfView({ dataFactory }); var settings = { datasource: { title: 'My data', diff --git a/yarn.lock b/yarn.lock index 0484ff4a..1159b4fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1778,10 +1778,10 @@ component-emitter@^1.2.0, component-emitter@^1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -componentsjs@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/componentsjs/-/componentsjs-3.3.0.tgz#6f881b3889212f0a153636bf9f87de4b3d82743e" - integrity sha512-0ETmraF8ClssNbGbZqp6kTSCwm8YBK6eFly34pglwiJo007HgVWdeXcsLttXsRtJbiVxA0Ox+A/mvjDfExES4A== +componentsjs@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/componentsjs/-/componentsjs-3.4.0.tgz#eae602c51c9e9b024eacbd3cea01e5604eef7a80" + integrity sha512-lxxiYdIoBJHycyiUVt5jMK12OHkbNL7OEJSi/vQKUttT66hoWt3kjg+OY+TMs/sqcvigAjGTladTf7XUYIMJyA== dependencies: global-modules "^1.0.0" jsonld "^0.4.11" From 83fa02ebc34fa4314d8b310c837450c5d34d4378 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 7 Apr 2020 11:39:49 +0200 Subject: [PATCH 095/165] Use let/const instead of var, #104 --- .eslintrc | 1 + packages/core/lib/CliRunner.js | 18 +++---- .../core/lib/LinkedDataFragmentsServer.js | 20 +++---- .../lib/LinkedDataFragmentsServerWorker.js | 20 +++---- packages/core/lib/UrlData.js | 2 +- packages/core/lib/Util.js | 2 +- .../core/lib/controllers/AssetsController.js | 14 ++--- packages/core/lib/controllers/Controller.js | 10 ++-- .../lib/controllers/DereferenceController.js | 8 +-- .../core/lib/controllers/ErrorController.js | 4 +- .../lib/controllers/NotFoundController.js | 4 +- packages/core/lib/datasources/Datasource.js | 20 +++---- .../core/lib/datasources/EmptyDatasource.js | 2 +- .../core/lib/datasources/IndexDatasource.js | 8 +-- .../core/lib/datasources/MemoryDatasource.js | 8 +-- packages/core/lib/routers/DatasourceRouter.js | 6 +-- packages/core/lib/routers/PageRouter.js | 2 +- packages/core/lib/views/HtmlView.js | 16 +++--- packages/core/lib/views/RdfView.js | 20 +++---- packages/core/lib/views/View.js | 12 ++--- packages/core/lib/views/ViewCollection.js | 12 ++--- .../core/lib/views/error/ErrorHtmlView.js | 2 +- packages/core/lib/views/error/ErrorRdfView.js | 2 +- .../lib/views/forbidden/ForbiddenHtmlView.js | 2 +- .../core/lib/views/forbidden/forbidden.html | 4 +- .../lib/views/notfound/NotFoundHtmlView.js | 2 +- .../lib/views/notfound/NotFoundRdfView.js | 2 +- .../core/lib/views/notfound/notfound.html | 4 +- .../test/LinkedDataFragmentsServer-test.js | 8 +-- .../test/controllers/AssetsController-test.js | 12 ++--- .../core/test/controllers/Controller-test.js | 28 +++++----- .../controllers/DereferenceController-test.js | 12 ++--- .../controllers/NotFoundController-test.js | 22 ++++---- .../core/test/datasources/Datasource-test.js | 30 +++++------ .../test/routers/DatasourceRouter-test.js | 6 +-- packages/core/test/routers/PageRouter-test.js | 8 +-- packages/core/test/views/View-test.js | 8 +-- .../core/test/views/ViewCollection-test.js | 20 +++---- .../lib/datasources/CompositeDatasource.js | 50 +++++++++--------- .../datasources/CompositeDatasource-test.js | 36 ++++++------- .../lib/datasources/ExternalHdtDatasource.js | 8 +-- .../lib/datasources/HdtDatasource.js | 10 ++-- .../test/datasources/HdtDatasource-test.js | 24 ++++----- .../lib/datasources/JsonLdDatasource.js | 6 +-- .../test/datasources/JsonLdDatasource-test.js | 16 +++--- .../lib/datasources/N3Datasource.js | 6 +-- .../test/datasources/N3Datasource-test.js | 16 +++--- .../lib/datasources/SparqlDatasource.js | 34 ++++++------ .../test/datasources/SparqlDatasource-test.js | 30 +++++------ .../controllers/MementoControllerExtension.js | 10 ++-- .../lib/controllers/TimegateController.js | 26 +++++----- .../QuadPatternFragmentsHtmlView-Memento.js | 6 +-- .../QuadPatternFragmentsController.js | 18 +++---- .../lib/routers/QuadPatternRouter.js | 14 ++--- .../QuadPatternFragmentsHtmlView.js | 6 +-- .../QuadPatternFragmentsRdfView.js | 8 +-- .../views/quadpatternfragments/fragment.html | 12 ++--- .../lib/views/quadpatternfragments/index.html | 2 +- .../QuadPatternFragmentsController-test.js | 52 +++++++++---------- .../test/routers/QuadPatternRouter-test.js | 6 +-- .../QuadPatternFragmentsRdfView-test.js | 40 +++++++------- packages/feature-summary/bin/generate-summary | 44 ++++++++-------- .../lib/controllers/SummaryController.js | 12 ++--- .../QuadPatternFragmentsHtmlView-Summary.js | 2 +- .../QuadPatternFragmentsRdfView-Summary.js | 4 +- .../lib/views/summary/SummaryRdfView.js | 2 +- .../controllers/SummaryController-test.js | 14 ++--- .../controllers/WebIDControllerExtension.js | 20 +++---- .../server/bin/ldf-server-migrate-config-3x | 2 +- test/DummyServer.js | 4 +- test/test-setup.js | 14 ++--- 71 files changed, 468 insertions(+), 467 deletions(-) diff --git a/.eslintrc b/.eslintrc index c7584b23..8928fe3a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -97,6 +97,7 @@ vars-on-top: 0, wrap-iife: [2, "inside"], yoda: 2, + no-var: "error", // Strict Mode strict: [2, "never"], diff --git a/packages/core/lib/CliRunner.js b/packages/core/lib/CliRunner.js index 5801cd45..9c9972fb 100644 --- a/packages/core/lib/CliRunner.js +++ b/packages/core/lib/CliRunner.js @@ -1,12 +1,12 @@ /*! @license MIT ©2013-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* Logic for starting an LDF server with a given config from the command line. */ -var cluster = require('cluster'), +let cluster = require('cluster'), ComponentsLoader = require('componentsjs').Loader; // Run function for starting the server from the command line function runCli(moduleRootPath) { - var argv = process.argv.slice(2); + let argv = process.argv.slice(2); runCustom(argv, process.stdin, process.stdout, process.stderr, null, { mainModulePath: moduleRootPath }); } @@ -17,11 +17,11 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) return process.exit(1); } - var cliPort = parseInt(args[1], 10), + let cliPort = parseInt(args[1], 10), cliWorkers = parseInt(args[2], 10), configUri = args[3] || componentConfigUri || 'urn:ldf-server:my'; - var loader = new ComponentsLoader(properties); + let loader = new ComponentsLoader(properties); loader.registerAvailableModuleResources() .then(function () { // Start up a cluster master @@ -57,11 +57,11 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) }); function startClusterMaster(config) { - var workers = cliWorkers || config.workers || 1; + let workers = cliWorkers || config.workers || 1; // Create workers stdout.write('Master ' + process.pid + ' running.\n'); - for (var i = 0; i < workers; i++) + for (let i = 0; i < workers; i++) cluster.fork(); // Respawn crashed workers @@ -86,14 +86,14 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) process.removeListener('SIGHUP', respawn); // Retrieve a list of old workers that will be replaced by new ones - var workers = Object.keys(cluster.workers).map(function (id) { return cluster.workers[id]; }); + let workers = Object.keys(cluster.workers).map(function (id) { return cluster.workers[id]; }); (function respawnNext() { // If there are still old workers, respawn a new one if (workers.length) { // Wait until the new worker starts listening to kill the old one - var newWorker = cluster.fork(); + let newWorker = cluster.fork(); newWorker.once('listening', function () { - var worker = workers.pop(); + let worker = workers.pop(); if (!worker) return newWorker.kill(), respawnNext(); // Dead workers are replaced automatically worker.once('exit', function () { diff --git a/packages/core/lib/LinkedDataFragmentsServer.js b/packages/core/lib/LinkedDataFragmentsServer.js index f038db45..073cd785 100644 --- a/packages/core/lib/LinkedDataFragmentsServer.js +++ b/packages/core/lib/LinkedDataFragmentsServer.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* LinkedDataFragmentsServer is an HTTP server that provides access to Linked Data Fragments */ -var _ = require('lodash'), +let _ = require('lodash'), fs = require('fs'), Util = require('./Util'), ErrorController = require('./controllers/ErrorController'), @@ -11,14 +11,14 @@ var _ = require('lodash'), class LinkedDataFragmentsServer { constructor(options) { // Create the HTTP(S) server - var server, sockets = 0; - var urlData = options && options.urlData ? options.urlData : new UrlData(); + let server, sockets = 0; + let urlData = options && options.urlData ? options.urlData : new UrlData(); switch (urlData.protocol) { case 'http': server = require('http').createServer(); break; case 'https': - var ssl = options.ssl || {}, authentication = options.authentication || {}; + const ssl = options.ssl || {}, authentication = options.authentication || {}; // WebID authentication requires a client certificate if (authentication.webid) ssl.requestCert = ssl.rejectUnauthorized = true; @@ -29,7 +29,7 @@ class LinkedDataFragmentsServer { } // Copy over members - for (var member in LinkedDataFragmentsServer.prototype) + for (let member in LinkedDataFragmentsServer.prototype) server[member] = LinkedDataFragmentsServer.prototype[member]; // Assign settings @@ -48,7 +48,7 @@ class LinkedDataFragmentsServer { catch (error) { server._reportError(request, response, error); } }); server.on('connection', function (socket) { - var socketId = sockets++; + let socketId = sockets++; server._sockets[socketId] = socket; socket.on('close', function () { delete server._sockets[socketId]; }); }); @@ -59,7 +59,7 @@ class LinkedDataFragmentsServer { // Handles an incoming HTTP request LinkedDataFragmentsServer.prototype._processRequest = function (request, response) { // Add default response headers - for (var header in this._defaultHeaders) + for (let header in this._defaultHeaders) response.setHeader(header, this._defaultHeaders[header]); // Verify an allowed HTTP method was used @@ -81,7 +81,7 @@ LinkedDataFragmentsServer.prototype._processRequest = function (request, respons } // Try each of the controllers in order - var self = this, controllerId = 0; + let self = this, controllerId = 0; function nextController(error) { // Error if the previous controller failed if (error) @@ -91,7 +91,7 @@ LinkedDataFragmentsServer.prototype._processRequest = function (request, respons response.emit('error', new Error('No controller for ' + request.url)); // Otherwise, try the next controller else { - var controller = self._controllers[controllerId++], next = _.once(nextController); + let controller = self._controllers[controllerId++], next = _.once(nextController); try { controller.handleRequest(request, response, next); } catch (error) { next(error); } } @@ -127,7 +127,7 @@ LinkedDataFragmentsServer.prototype._reportError = function (request, response, LinkedDataFragmentsServer.prototype.stop = function () { // Don't accept new connections, and close existing ones this.close(); - for (var id in this._sockets) + for (let id in this._sockets) this._sockets[id].destroy(); // Close all controllers diff --git a/packages/core/lib/LinkedDataFragmentsServerWorker.js b/packages/core/lib/LinkedDataFragmentsServerWorker.js index 6f9af720..c7fc3610 100644 --- a/packages/core/lib/LinkedDataFragmentsServerWorker.js +++ b/packages/core/lib/LinkedDataFragmentsServerWorker.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* LinkedDataFragmentsServerRunner is able to run a Linked Data Fragments server */ -var _ = require('lodash'), +let _ = require('lodash'), fs = require('fs'), LinkedDataFragmentsServer = require('./LinkedDataFragmentsServer'); @@ -17,7 +17,7 @@ class LinkedDataFragmentsServerWorker { // Create all data sources Object.keys(config.datasources).forEach(function (datasourceId) { - var datasource = config.datasources[datasourceId]; + let datasource = config.datasources[datasourceId]; datasource.on('error', datasourceError); function datasourceError(error) { config.datasources[datasourceId].hide = true; @@ -26,11 +26,11 @@ class LinkedDataFragmentsServerWorker { }); // Set up logging - var loggingSettings = config.logging; + let loggingSettings = config.logging; // eslint-disable-next-line no-console config.log = console.log; if (loggingSettings.enabled) { - var accesslog = require('access-log'); + let accesslog = require('access-log'); config.accesslogger = function (request, response) { accesslog(request, response, null, function (logEntry) { fs.appendFile(loggingSettings.file, logEntry + '\n', function (error) { @@ -41,10 +41,10 @@ class LinkedDataFragmentsServerWorker { } // Make sure the 'last' controllers are last in the array and the 'first' are first. - var lastControllers = _.remove(config.controllers, function (controller) { + let lastControllers = _.remove(config.controllers, function (controller) { return controller._last; }); - var firstControllers = _.remove(config.controllers, function (controller) { + let firstControllers = _.remove(config.controllers, function (controller) { return controller._first; }); config.controllers = firstControllers.concat(config.controllers.concat(lastControllers)); @@ -54,16 +54,16 @@ class LinkedDataFragmentsServerWorker { // Start the worker run(port) { - var config = this._config; + let config = this._config; if (port) config.port = port; - var server = new LinkedDataFragmentsServer(config); + let server = new LinkedDataFragmentsServer(config); // Start the server when all data sources are ready - var pending = _.size(config.datasources); + let pending = _.size(config.datasources); _.each(config.datasources, function (datasource) { // Add datasource ready-listener - var ready = _.once(startWhenReady); + let ready = _.once(startWhenReady); datasource.once('initialized', ready); datasource.once('error', ready); diff --git a/packages/core/lib/UrlData.js b/packages/core/lib/UrlData.js index 484c909a..26ffc700 100644 --- a/packages/core/lib/UrlData.js +++ b/packages/core/lib/UrlData.js @@ -14,7 +14,7 @@ class UrlData { this.assetsPath = this.baseURLPath + 'assets/' || options.assetsPath; this.protocol = options.protocol; if (!this.protocol) { - var protocolMatch = (this.baseURL || '').match(/^(\w+):/); + let protocolMatch = (this.baseURL || '').match(/^(\w+):/); this.protocol = protocolMatch ? protocolMatch[1] : 'http'; } } diff --git a/packages/core/lib/Util.js b/packages/core/lib/Util.js index 87ae231d..4fed774a 100644 --- a/packages/core/lib/Util.js +++ b/packages/core/lib/Util.js @@ -13,7 +13,7 @@ module.exports.createErrorType = function (BaseError, name, init) { if (typeof BaseError !== 'function') init = name, name = BaseError, BaseError = Error; function ErrorType(message) { - var error = this instanceof ErrorType ? this : new ErrorType(message); + let error = this instanceof ErrorType ? this : new ErrorType(message); error.name = name; error.message = message || ''; Error.captureStackTrace(error, error.constructor); diff --git a/packages/core/lib/controllers/AssetsController.js b/packages/core/lib/controllers/AssetsController.js index 338807f3..33b165ba 100644 --- a/packages/core/lib/controllers/AssetsController.js +++ b/packages/core/lib/controllers/AssetsController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* An AssetsController responds to requests for assets */ -var Controller = require('./Controller'), +let Controller = require('./Controller'), fs = require('fs'), path = require('path'), mime = require('mime'), @@ -15,13 +15,13 @@ class AssetsController extends Controller { super(options); // Set up path matching - var assetsPath = (options.urlData || new UrlData()).assetsPath || '/assets/'; + let assetsPath = (options.urlData || new UrlData()).assetsPath || '/assets/'; this._matcher = new RegExp('^' + Util.toRegExp(assetsPath) + '(.+)|^/(\\w*)\\.ico$'); // Read all assets - var assetsFolders = options.assetsFolders || ['file:///' + path.join(__dirname, '../../assets/')]; + let assetsFolders = options.assetsFolders || ['file:///' + path.join(__dirname, '../../assets/')]; this._assets = {}; - for (var i = 0; i < assetsFolders.length; i++) + for (let i = 0; i < assetsFolders.length; i++) this._readAssetsFolder(assetsFolders[i], ''); } @@ -30,10 +30,10 @@ class AssetsController extends Controller { if (assetsFolder.indexOf('file:///') === 0) assetsFolder = assetsFolder.replace('file:///', ''); fs.readdirSync(assetsFolder).forEach(function (name) { - var filename = path.join(assetsFolder, name), stats = fs.statSync(filename); + let filename = path.join(assetsFolder, name), stats = fs.statSync(filename); // Read an asset file into memory if (stats.isFile()) { - var assetType = mime.lookup(filename); + let assetType = mime.lookup(filename); this._assets[assetsPath + name.replace(/[.][^.]+$/, '')] = { type: assetType.indexOf('text/') ? assetType : assetType + ';charset=utf-8', contents: fs.readFileSync(filename), @@ -47,7 +47,7 @@ class AssetsController extends Controller { // Try to serve the requested asset _handleRequest(request, response, next) { - var assetMatch = request.url.match(this._matcher), asset; + let assetMatch = request.url.match(this._matcher), asset; if (asset = assetMatch && this._assets[assetMatch[1] || assetMatch[2]]) { response.writeHead(200, { 'Content-Type': asset.type, diff --git a/packages/core/lib/controllers/Controller.js b/packages/core/lib/controllers/Controller.js index 4575ec93..6b9659cf 100644 --- a/packages/core/lib/controllers/Controller.js +++ b/packages/core/lib/controllers/Controller.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* Controller is a base class for HTTP request handlers */ -var url = require('url'), +let url = require('url'), _ = require('lodash'), ViewCollection = require('../views/ViewCollection'), UrlData = require('../UrlData'), @@ -41,7 +41,7 @@ class Controller { } // Try to handle the request - var self = this; + let self = this; try { this._handleRequest(request, response, done, settings); } catch (error) { done(error); } function done(error) { @@ -60,7 +60,7 @@ class Controller { if (!request.headers.forwarded) return {}; try { - var forwarded = _.defaults.apply(this, parseForwarded(request.headers.forwarded)); + let forwarded = _.defaults.apply(this, parseForwarded(request.headers.forwarded)); return { protocol: forwarded.proto ? forwarded.proto + ':' : undefined, host: forwarded.host, @@ -91,10 +91,10 @@ class Controller { // Finds an appropriate view using content negotiation _negotiateView(viewName, request, response) { // Indicate that the response is content-negotiated - var vary = response.getHeader('Vary'); + let vary = response.getHeader('Vary'); response.setHeader('Vary', 'Accept' + (vary ? ', ' + vary : '')); // Negotiate a view - var viewMatch = this._views.matchView(viewName, request); + let viewMatch = this._views.matchView(viewName, request); response.setHeader('Content-Type', viewMatch.responseType || viewMatch.type); return viewMatch.view; } diff --git a/packages/core/lib/controllers/DereferenceController.js b/packages/core/lib/controllers/DereferenceController.js index 4b15f14f..f6945c6b 100644 --- a/packages/core/lib/controllers/DereferenceController.js +++ b/packages/core/lib/controllers/DereferenceController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* A DeferenceController responds to dereferencing requests */ -var Controller = require('./Controller'), +let Controller = require('./Controller'), url = require('url'), _ = require('lodash'), Util = require('../Util'); @@ -11,7 +11,7 @@ class DeferenceController extends Controller { constructor(options) { options = options || {}; super(options); - var paths = this._paths = options.dereference || {}; + let paths = this._paths = options.dereference || {}; this._matcher = /$0^/; if (!_.isEmpty(paths)) this._matcher = new RegExp('^(' + Object.keys(paths).map(Util.toRegExp).join('|') + ')'); @@ -19,9 +19,9 @@ class DeferenceController extends Controller { // Dereferences a URL by redirecting to its subject fragment of a certain data source _handleRequest(request, response, next) { - var match = this._matcher.exec(request.url), datasource; + let match = this._matcher.exec(request.url), datasource; if (datasource = match && this._paths[match[1]]) { - var entity = url.format(_.defaults({ + let entity = url.format(_.defaults({ pathname: datasource.path, query: { subject: url.format(request.parsedUrl) }, }, request.parsedUrl)); diff --git a/packages/core/lib/controllers/ErrorController.js b/packages/core/lib/controllers/ErrorController.js index 94215cb3..4a5e049c 100644 --- a/packages/core/lib/controllers/ErrorController.js +++ b/packages/core/lib/controllers/ErrorController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* An ErrorController responds to requests that caused an error */ -var Controller = require('./Controller'), +let Controller = require('./Controller'), Util = require('../Util'); // Creates a new ErrorController @@ -13,7 +13,7 @@ class ErrorController extends Controller { // Serves an error response _handleRequest(request, response, next) { // Try to write an error response through an appropriate view - var error = response.error || (response.error = new Error('Unknown error')), + let error = response.error || (response.error = new Error('Unknown error')), view = this._negotiateView('Error', request, response), metadata = { prefixes: this._prefixes, datasources: this._datasources, error: error }; response.writeHead(500); diff --git a/packages/core/lib/controllers/NotFoundController.js b/packages/core/lib/controllers/NotFoundController.js index 84429f0a..3f3f83ae 100644 --- a/packages/core/lib/controllers/NotFoundController.js +++ b/packages/core/lib/controllers/NotFoundController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* A NotFoundController responds to requests that cannot be resolved */ -var Controller = require('./Controller'), +let Controller = require('./Controller'), Util = require('../Util'); // Creates a new NotFoundController @@ -17,7 +17,7 @@ class NotFoundController extends Controller { response.setHeader('Cache-Control', 'public,max-age=3600'); // Render the 404 message using the appropriate view - var view = this._negotiateView('NotFound', request, response), + let view = this._negotiateView('NotFound', request, response), metadata = { url: request.url, prefixes: this._prefixes, datasources: this._datasources }; response.writeHead(404); view.render(metadata, request, response); diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index b208296b..ca316056 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* A Datasource provides base functionality for queryable access to a source of quads. */ -var fs = require('fs'), +let fs = require('fs'), _ = require('lodash'), UrlData = require('../UrlData'), BufferedIterator = require('asynciterator').BufferedIterator, @@ -15,8 +15,8 @@ class Datasource extends EventEmitter { // Set the options options = options || {}; - var urlData = options.urlData || new UrlData(); - var path = (options.path || '').replace(/^\//, ''); + let urlData = options.urlData || new UrlData(); + let path = (options.path || '').replace(/^\//, ''); this._datasourcePath = urlData.baseURLPath + encodeURI(path); this._blankNodePrefix = urlData.blankNodePath || 'genid:'; this._skolemizeBlacklist = options.skolemizeBlacklist || {}; @@ -47,8 +47,8 @@ class Datasource extends EventEmitter { // Expose the supported query features if (supportedFeatureList && supportedFeatureList.length) { - var objectSupportedFeatures = {}; - for (var i = 0; i < supportedFeatureList.length; i++) + let objectSupportedFeatures = {}; + for (let i = 0; i < supportedFeatureList.length; i++) objectSupportedFeatures[supportedFeatureList[i]] = true; this.supportedFeatures = objectSupportedFeatures; } @@ -63,7 +63,7 @@ class Datasource extends EventEmitter { // Initialize the datasource asynchronously initialize() { setImmediate(function (self) { - var done = _.once(function (error) { + let done = _.once(function (error) { if (error) self.emit('error', error); else { @@ -88,7 +88,7 @@ class Datasource extends EventEmitter { return false; // A query is supported if the data source supports all of its features - var features = query.features, supportedFeatures = this.supportedFeatures, feature; + let features = query.features, supportedFeatures = this.supportedFeatures, feature; if (features) { for (feature in features) { if (features[feature] && !supportedFeatures[feature]) @@ -115,7 +115,7 @@ class Datasource extends EventEmitter { query = _.clone(query); // Translate blank nodes IRIs in the query to blank nodes - var blankNodePrefix = this._blankNodePrefix, blankNodePrefixLength = this._blankNodePrefixLength; + let blankNodePrefix = this._blankNodePrefix, blankNodePrefixLength = this._blankNodePrefixLength; if (query.subject && query.subject.value.indexOf(blankNodePrefix) === 0) query.subject = this.dataFactory.blankNode(query.subject.value.substr(blankNodePrefixLength)); if (query.object && query.object.value.indexOf(blankNodePrefix) === 0) @@ -128,7 +128,7 @@ class Datasource extends EventEmitter { query.graph = stringToTerm(this._queryGraphReplacements[query.graph.value], this.dataFactory); // Transform the received quads - var destination = new BufferedIterator(), outputQuads, graph = this._graph, self = this; + let destination = new BufferedIterator(), outputQuads, graph = this._graph, self = this; outputQuads = destination.map(function (quad) { // Translate blank nodes in the result to blank node IRIs. if (quad.subject && quad.subject.termType === 'BlankNode' && !self._skolemizeBlacklist[quad.subject.value]) @@ -159,7 +159,7 @@ class Datasource extends EventEmitter { // Retrieves a stream through HTTP or the local file system _fetch(options) { - var self = this, stream, + let self = this, stream, url = options.url, protocolMatch = /^(?:([a-z]+):)?/.exec(url); switch (protocolMatch[1] || 'file') { // Fetch a representation through HTTP(S) diff --git a/packages/core/lib/datasources/EmptyDatasource.js b/packages/core/lib/datasources/EmptyDatasource.js index be46bbf5..841b4257 100644 --- a/packages/core/lib/datasources/EmptyDatasource.js +++ b/packages/core/lib/datasources/EmptyDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* An empty data source doesn't contain any quads. */ -var MemoryDatasource = require('./MemoryDatasource'); +let MemoryDatasource = require('./MemoryDatasource'); // Creates a new EmptyDatasource class EmptyDatasource extends MemoryDatasource { diff --git a/packages/core/lib/datasources/IndexDatasource.js b/packages/core/lib/datasources/IndexDatasource.js index 6f43ceeb..46277a12 100644 --- a/packages/core/lib/datasources/IndexDatasource.js +++ b/packages/core/lib/datasources/IndexDatasource.js @@ -1,9 +1,9 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* An IndexDatasource is a datasource that lists other data sources. */ -var MemoryDatasource = require('./MemoryDatasource'); +let MemoryDatasource = require('./MemoryDatasource'); -var rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', +let rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', rdfs = 'http://www.w3.org/2000/01/rdf-schema#', dc = 'http://purl.org/dc/terms/', voID = 'http://rdfs.org/ns/void#'; @@ -19,8 +19,8 @@ class IndexDatasource extends MemoryDatasource { // Creates quads for each data source _getAllQuads(addQuad, done) { const quad = this.dataFactory.quad, namedNode = this.dataFactory.namedNode, literal = this.dataFactory.literal; - for (var name in this._datasources) { - var datasource = this._datasources[name], datasourceUrl = datasource.url; + for (let name in this._datasources) { + let datasource = this._datasources[name], datasourceUrl = datasource.url; if (!datasource.hide && datasourceUrl) { addQuad(quad(namedNode(datasourceUrl), namedNode(rdf + 'type'), namedNode(voID + 'Dataset'))); datasource.title && addQuad(quad(namedNode(datasourceUrl), namedNode(rdfs + 'label'), literal(datasource.title))); diff --git a/packages/core/lib/datasources/MemoryDatasource.js b/packages/core/lib/datasources/MemoryDatasource.js index 362a59e5..dc777316 100644 --- a/packages/core/lib/datasources/MemoryDatasource.js +++ b/packages/core/lib/datasources/MemoryDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2015 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* A MemoryDatasource queries a set of in-memory quads. */ -var Datasource = require('./Datasource'), +let Datasource = require('./Datasource'), N3Store = require('n3').Store; // Creates a new MemoryDatasource @@ -13,7 +13,7 @@ class MemoryDatasource extends Datasource { // Prepares the datasource for querying _initialize(done) { - var quadStore = this._quadStore = new N3Store(); + let quadStore = this._quadStore = new N3Store(); this._getAllQuads(function (quad) { quadStore.addQuad(quad); }, done); } @@ -24,12 +24,12 @@ class MemoryDatasource extends Datasource { // Writes the results of the query to the given quad stream _executeQuery(query, destination) { - var offset = query.offset || 0, limit = query.limit || Infinity, + let offset = query.offset || 0, limit = query.limit || Infinity, quads = this._quadStore.getQuads(query.subject, query.predicate, query.object, query.graph); // Send the metadata destination.setProperty('metadata', { totalCount: quads.length, hasExactCount: true }); // Send the requested subset of quads - for (var i = offset, l = Math.min(offset + limit, quads.length); i < l; i++) + for (let i = offset, l = Math.min(offset + limit, quads.length); i < l; i++) destination._push(quads[i]); destination.close(); } diff --git a/packages/core/lib/routers/DatasourceRouter.js b/packages/core/lib/routers/DatasourceRouter.js index 83c6c2f2..4796dfe8 100644 --- a/packages/core/lib/routers/DatasourceRouter.js +++ b/packages/core/lib/routers/DatasourceRouter.js @@ -1,19 +1,19 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* A DatasourceRouter routes URLs to data sources. */ -var UrlData = require('../UrlData'); +let UrlData = require('../UrlData'); // Creates a new DatasourceRouter class DatasourceRouter { constructor(options) { - var urlData = options && options.urlData || new UrlData(); + let urlData = options && options.urlData || new UrlData(); this._baseLength = urlData.baseURLPath.length - 1; } // Extracts the data source parameter from the request and adds it to the query extractQueryParams(request, query) { (query.features || (query.features = {})).datasource = true; - var path = request.url && request.url.pathname || '/'; + let path = request.url && request.url.pathname || '/'; query.datasource = path.substr(this._baseLength); } } diff --git a/packages/core/lib/routers/PageRouter.js b/packages/core/lib/routers/PageRouter.js index 1bcdf3dd..15e56017 100644 --- a/packages/core/lib/routers/PageRouter.js +++ b/packages/core/lib/routers/PageRouter.js @@ -10,7 +10,7 @@ class PageRouter { // Extracts a page parameter from the request and adds it to the query extractQueryParams(request, query) { - var page = request.url && request.url.query && request.url.query.page, + let page = request.url && request.url.query && request.url.query.page, features = query.features || (query.features = {}); // Set the limit to the page size diff --git a/packages/core/lib/views/HtmlView.js b/packages/core/lib/views/HtmlView.js index 62ab0a87..e9347c8e 100644 --- a/packages/core/lib/views/HtmlView.js +++ b/packages/core/lib/views/HtmlView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* HtmlView is a base class for views that generate HTML responses. */ -var View = require('./View'), +let View = require('./View'), qejs = require('qejs'), q = require('q'), path = require('path'), @@ -14,7 +14,7 @@ class HtmlView extends View { constructor(viewName, settings) { settings = settings || {}; settings.urlData = settings.urlData || new UrlData(); - var defaults = { + let defaults = { cache: true, RdfString: RdfString, assetsPath: settings.urlData.assetsPath || '/', baseURL: settings.urlData.baseURL || '/', title: '', header: settings && settings.title, @@ -25,8 +25,8 @@ class HtmlView extends View { // Renders the template with the given name to the response _renderTemplate(templateName, options, request, response, done) { // Initialize all view extensions - var extensions = options.extensions || (options.extensions = {}), self = this; - for (var extension in extensions) { + let extensions = options.extensions || (options.extensions = {}), self = this; + for (let extension in extensions) { if (!extensions[extension]) extensions[extension] = this._renderViewExtensionContents(extension, options, request, response); else if (extensions[extension] === 'function') @@ -34,15 +34,15 @@ class HtmlView extends View { } // Render the template with its options - var fileName = (templateName[0] === '/' ? templateName : path.join(__dirname, templateName)) + '.html'; + let fileName = (templateName[0] === '/' ? templateName : path.join(__dirname, templateName)) + '.html'; qejs.renderFile(fileName, options) .then(function (html) { response.write(html); done(); }) .fail(function (error) { done(error); }); function newExtensionViewConstructor(extension, options, request, response) { return function (data) { - var subOptions = _.clone(options); - for (var key in data) + let subOptions = _.clone(options); + for (let key in data) subOptions[key] = data[key]; return self._renderViewExtensionContents(extension, subOptions, request, response); }; @@ -51,7 +51,7 @@ class HtmlView extends View { // Renders the view extensions to a string, returned through a promise _renderViewExtensionContents(name, options, request, response) { - var buffer = '', writer = { write: function (data) { buffer += data; }, end: _.noop }; + let buffer = '', writer = { write: function (data) { buffer += data; }, end: _.noop }; return q.ninvoke(this, '_renderViewExtensions', name, options, request, writer) .then(function () { return buffer; }); } diff --git a/packages/core/lib/views/RdfView.js b/packages/core/lib/views/RdfView.js index 7348dcf6..57ed609e 100644 --- a/packages/core/lib/views/RdfView.js +++ b/packages/core/lib/views/RdfView.js @@ -1,19 +1,19 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* HtmlView is a base class for views that generate RDF responses. */ -var View = require('./View'), +let View = require('./View'), N3 = require('n3'), JsonLdSerializer = require('jsonld-streaming-serializer').JsonLdSerializer, _ = require('lodash'); -var dcTerms = 'http://purl.org/dc/terms/', +let dcTerms = 'http://purl.org/dc/terms/', rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', hydra = 'http://www.w3.org/ns/hydra/core#', voID = 'http://rdfs.org/ns/void#'; -var primaryTopic = 'http://xmlns.com/foaf/0.1/primaryTopic'; +let primaryTopic = 'http://xmlns.com/foaf/0.1/primaryTopic'; -var contentTypes = 'application/trig;q=0.9,application/n-quads;q=0.7,' + +let contentTypes = 'application/trig;q=0.9,application/n-quads;q=0.7,' + 'application/ld+json;q=0.8,application/json;q=0.8,' + 'text/turtle;q=0.6,application/n-triples;q=0.5,text/n3;q=0.6'; @@ -31,7 +31,7 @@ class RdfView extends View { settings.contentType = response.getHeader('Content-Type'); // Write the triples with a content-type-specific writer - var self = this, + let self = this, writer = /json/.test(settings.contentType) ? this._createJsonLdWriter(settings, response, done) : this._createN3Writer(settings, response, done); settings.writer = writer; @@ -55,9 +55,9 @@ class RdfView extends View { // Adds details about the datasources _addDatasources(settings, data, metadata) { - var datasources = settings.datasources; - for (var datasourceName in datasources) { - var datasource = datasources[datasourceName]; + let datasources = settings.datasources; + for (let datasourceName in datasources) { + let datasource = datasources[datasourceName]; if (datasource.url) { const quad = this.dataFactory.quad, namedNode = this.dataFactory.namedNode, literal = this.dataFactory.literal; metadata(quad(namedNode(datasource.url), namedNode(rdf + 'type'), namedNode(voID + 'Dataset'))); @@ -69,7 +69,7 @@ class RdfView extends View { // Creates a writer for Turtle/N-Triples/TriG/N-Quads _createN3Writer(settings, response, done) { - var writer = new N3.Writer({ format: settings.contentType, prefixes: settings.prefixes }), + let writer = new N3.Writer({ format: settings.contentType, prefixes: settings.prefixes }), supportsGraphs = /trig|quad/.test(settings.contentType), metadataGraph; const dataFactory = this.dataFactory; @@ -101,7 +101,7 @@ class RdfView extends View { // Creates a writer for JSON-LD _createJsonLdWriter(settings, response, done) { - var prefixes = settings.prefixes || {}, context = _.omit(prefixes, ''), base = prefixes['']; + let prefixes = settings.prefixes || {}, context = _.omit(prefixes, ''), base = prefixes['']; base && (context['@base'] = base); const mySerializer = new JsonLdSerializer({ space: ' ', context: context, baseIRI: prefixes[''], useNativeTypes: true }) .on('error', done); diff --git a/packages/core/lib/views/View.js b/packages/core/lib/views/View.js index 9cb37741..30e02974 100644 --- a/packages/core/lib/views/View.js +++ b/packages/core/lib/views/View.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* View is a base class for objects that generate server responses. */ -var _ = require('lodash'), +let _ = require('lodash'), join = require('path').join, ViewCollection = require('./ViewCollection'); @@ -21,10 +21,10 @@ class View { // The "type" represents the MIME type, // whereas "responseType" contains the value of the Content-Type header with encoding. _parseContentTypes(contentTypes) { - var matcher = this._supportedContentTypeMatcher = Object.create(null); + let matcher = this._supportedContentTypeMatcher = Object.create(null); if (typeof contentTypes === 'string') { contentTypes = contentTypes.split(',').map(function (typeString) { - var contentType = typeString.match(/[^;,]*/)[0], + let contentType = typeString.match(/[^;,]*/)[0], responseType = contentType + ';charset=utf-8', quality = typeString.match(/;q=([0-9.]+)/); matcher[contentType] = matcher[responseType] = true; @@ -46,7 +46,7 @@ class View { // Renders the view with the given options to the response render(options, request, response, done) { // Initialize view-specific settings - var settings = _.defaults({}, options, this._defaults); + let settings = _.defaults({}, options, this._defaults); if (!settings.contentType) settings.contentType = response.getHeader('Content-Type'); @@ -64,7 +64,7 @@ class View { // Gets extensions with the given name for this view _getViewExtensions(name, contentType) { - var extensions = this._defaults.views ? this._defaults.views.getViews(this.name + ':' + name) : []; + let extensions = this._defaults.views ? this._defaults.views.getViews(this.name + ':' + name) : []; if (extensions.length) { extensions = extensions.filter(function (extension) { return extension.supportsContentType(contentType); @@ -75,7 +75,7 @@ class View { // Renders the extensions with the given name for this view _renderViewExtensions(name, options, request, response, done) { - var self = this, extensions = this._getViewExtensions(name, options.contentType), i = 0; + let self = this, extensions = this._getViewExtensions(name, options.contentType), i = 0; (function next() { if (i < extensions.length) self._renderViewExtension(extensions[i++], options, request, response, next); diff --git a/packages/core/lib/views/ViewCollection.js b/packages/core/lib/views/ViewCollection.js index 36431c60..fff290e9 100644 --- a/packages/core/lib/views/ViewCollection.js +++ b/packages/core/lib/views/ViewCollection.js @@ -7,11 +7,11 @@ `getViews` returns all views with a given name. */ -var _ = require('lodash'), +let _ = require('lodash'), negotiate = require('negotiate'), Util = require('../Util'); -var ViewCollectionError = Util.createErrorType('ViewCollectionError'); +let ViewCollectionError = Util.createErrorType('ViewCollectionError'); // Creates a new ViewCollection class ViewCollection { @@ -26,7 +26,7 @@ class ViewCollection { // Add the view to the list per type (this._views[view.name] || (this._views[view.name] = [])).push(view); // Add a match entry for each content type supported by the view - var matchers = this._viewMatchers[view.name] || (this._viewMatchers[view.name] = []); + let matchers = this._viewMatchers[view.name] || (this._viewMatchers[view.name] = []); view.supportedContentTypes.forEach(function (contentType) { matchers.push(_.extend({ view: view }, contentType)); }); @@ -34,7 +34,7 @@ class ViewCollection { // Adds the given views to the collection addViews(views) { - for (var i = 0; i < views.length; i++) + for (let i = 0; i < views.length; i++) this.addView(views[i]); } @@ -46,11 +46,11 @@ class ViewCollection { // Gets the best match for views with the given name that accommodate the request matchView(name, request) { // Retrieve the views with the given name - var viewList = this._viewMatchers[name]; + let viewList = this._viewMatchers[name]; if (!viewList || !viewList.length) throw new ViewCollectionError('No view named ' + name + ' found.'); // Negotiate the view best matching the request's requirements - var viewDetails = negotiate.choose(viewList, request)[0]; + let viewDetails = negotiate.choose(viewList, request)[0]; if (!viewDetails) throw new ViewCollectionError('No matching view named ' + name + ' found.'); return viewDetails; diff --git a/packages/core/lib/views/error/ErrorHtmlView.js b/packages/core/lib/views/error/ErrorHtmlView.js index daa9ef84..265c0010 100644 --- a/packages/core/lib/views/error/ErrorHtmlView.js +++ b/packages/core/lib/views/error/ErrorHtmlView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* An ErrorRdfView represents a 500 response in HTML. */ -var HtmlView = require('../HtmlView'); +let HtmlView = require('../HtmlView'); // Creates a new ErrorHtmlView class ErrorHtmlView extends HtmlView { diff --git a/packages/core/lib/views/error/ErrorRdfView.js b/packages/core/lib/views/error/ErrorRdfView.js index 3143a3a1..fe983740 100644 --- a/packages/core/lib/views/error/ErrorRdfView.js +++ b/packages/core/lib/views/error/ErrorRdfView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* An ErrorRdfView represents a 500 response in RDF. */ -var RdfView = require('../RdfView'); +let RdfView = require('../RdfView'); // Creates a new ErrorRdfView class ErrorRdfView extends RdfView { diff --git a/packages/core/lib/views/forbidden/ForbiddenHtmlView.js b/packages/core/lib/views/forbidden/ForbiddenHtmlView.js index 20b55aae..4ebff277 100644 --- a/packages/core/lib/views/forbidden/ForbiddenHtmlView.js +++ b/packages/core/lib/views/forbidden/ForbiddenHtmlView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* A ForbiddenHtmlView represents a 401 response in HTML. */ -var HtmlView = require('../HtmlView'); +let HtmlView = require('../HtmlView'); // Creates a new ForbiddenHtmlView class ForbiddenHtmlView extends HtmlView { diff --git a/packages/core/lib/views/forbidden/forbidden.html b/packages/core/lib/views/forbidden/forbidden.html index a2f15ecd..7fe34f88 100644 --- a/packages/core/lib/views/forbidden/forbidden.html +++ b/packages/core/lib/views/forbidden/forbidden.html @@ -7,8 +7,8 @@

    Not authorized to access resource

    Available datasets

    diff --git a/packages/core/lib/views/notfound/NotFoundHtmlView.js b/packages/core/lib/views/notfound/NotFoundHtmlView.js index d3f9e191..48e9c003 100644 --- a/packages/core/lib/views/notfound/NotFoundHtmlView.js +++ b/packages/core/lib/views/notfound/NotFoundHtmlView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* A NotFoundRdfView represents a 404 response in HTML. */ -var HtmlView = require('../HtmlView'); +let HtmlView = require('../HtmlView'); // Creates a new NotFoundHtmlView class NotFoundHtmlView extends HtmlView { diff --git a/packages/core/lib/views/notfound/NotFoundRdfView.js b/packages/core/lib/views/notfound/NotFoundRdfView.js index 7de70cf0..3a6877bb 100644 --- a/packages/core/lib/views/notfound/NotFoundRdfView.js +++ b/packages/core/lib/views/notfound/NotFoundRdfView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* A NotFoundRdfView represents a 404 response in RDF. */ -var RdfView = require('../RdfView'); +let RdfView = require('../RdfView'); // Creates a new NotFoundRdfView class NotFoundRdfView extends RdfView { diff --git a/packages/core/lib/views/notfound/notfound.html b/packages/core/lib/views/notfound/notfound.html index 81ee110d..f579505b 100644 --- a/packages/core/lib/views/notfound/notfound.html +++ b/packages/core/lib/views/notfound/notfound.html @@ -7,8 +7,8 @@

    Resource not found

    Available datasets

      -<% for (var datasourceName in datasources) { - var datasource = datasources[datasourceName]; +<% for (const datasourceName in datasources) { + const datasource = datasources[datasourceName]; if (datasource.hide) continue; %>
    • <%= datasource.title %>
    • <% } %> diff --git a/packages/core/test/LinkedDataFragmentsServer-test.js b/packages/core/test/LinkedDataFragmentsServer-test.js index 892a2ca4..0ee0e4f5 100644 --- a/packages/core/test/LinkedDataFragmentsServer-test.js +++ b/packages/core/test/LinkedDataFragmentsServer-test.js @@ -1,11 +1,11 @@ /*! @license MIT ©2013-2016 Ruben Verborgh, Ghent University - imec */ -var LinkedDataFragmentsServer = require('../lib/LinkedDataFragmentsServer'); +let LinkedDataFragmentsServer = require('../lib/LinkedDataFragmentsServer'); -var request = require('supertest'); +let request = require('supertest'); describe('LinkedDataFragmentsServer', function () { describe('A LinkedDataFragmentsServer instance with one controller', function () { - var server, controller, client; + let server, controller, client; before(function () { controller = { handleRequest: sinon.spy(function (request, response, next) { @@ -97,7 +97,7 @@ describe('LinkedDataFragmentsServer', function () { }); describe('A LinkedDataFragmentsServer instance with two controllers', function () { - var server, controllerA, controllerB, client; + let server, controllerA, controllerB, client; before(function () { controllerA = { handleRequest: sinon.spy(function (request, response, next) { diff --git a/packages/core/test/controllers/AssetsController-test.js b/packages/core/test/controllers/AssetsController-test.js index a72595ff..600a1da3 100644 --- a/packages/core/test/controllers/AssetsController-test.js +++ b/packages/core/test/controllers/AssetsController-test.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var AssetsController = require('../../lib/controllers/AssetsController'); +let AssetsController = require('../../lib/controllers/AssetsController'); -var request = require('supertest'), +let request = require('supertest'), DummyServer = require('../../../../test/DummyServer'), fs = require('fs'), path = require('path'); @@ -18,7 +18,7 @@ describe('AssetsController', function () { }); describe('An AssetsController instance', function () { - var controller, client; + let controller, client; before(function () { controller = new AssetsController(); client = request.agent(new DummyServer(controller)); @@ -26,7 +26,7 @@ describe('AssetsController', function () { it('should correctly serve SVG assets', function (done) { client.get('/assets/images/logo').expect(function (response) { - var asset = fs.readFileSync(path.join(__dirname, '/../../assets/images/logo.svg'), 'utf8'); + let asset = fs.readFileSync(path.join(__dirname, '/../../assets/images/logo.svg'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'image/svg+xml'); @@ -37,7 +37,7 @@ describe('AssetsController', function () { it('should correctly serve CSS assets', function (done) { client.get('/assets/styles/ldf-server').expect(function (response) { - var asset = fs.readFileSync(path.join(__dirname, '/../../assets/styles/ldf-server.css'), 'utf8'); + let asset = fs.readFileSync(path.join(__dirname, '/../../assets/styles/ldf-server.css'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'text/css;charset=utf-8'); @@ -48,7 +48,7 @@ describe('AssetsController', function () { it('should correctly serve ICO assets', function (done) { client.get('/favicon.ico').expect(function (response) { - var asset = fs.readFileSync(path.join(__dirname, '/../../assets/favicon.ico'), 'utf8'); + let asset = fs.readFileSync(path.join(__dirname, '/../../assets/favicon.ico'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'image/x-icon'); diff --git a/packages/core/test/controllers/Controller-test.js b/packages/core/test/controllers/Controller-test.js index 45c042ab..6e5cf226 100644 --- a/packages/core/test/controllers/Controller-test.js +++ b/packages/core/test/controllers/Controller-test.js @@ -1,8 +1,8 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var Controller = require('../../lib/controllers/Controller'), +let Controller = require('../../lib/controllers/Controller'), UrlData = require('../../lib/UrlData'); -var http = require('http'), +let http = require('http'), request = require('supertest'), DummyServer = require('../../../../test/DummyServer'); @@ -18,7 +18,7 @@ describe('Controller', function () { }); describe('A Controller instance without baseURL', function () { - var controller, client; + let controller, client; before(function () { controller = new Controller(); sinon.spy(controller, '_handleRequest'); @@ -32,7 +32,7 @@ describe('Controller', function () { it('should call _handleRequest with request, response and next', function () { controller._handleRequest.should.have.been.calledOnce; - var args = controller._handleRequest.getCall(0).args; + let args = controller._handleRequest.getCall(0).args; args[0].should.have.property('url'); args[1].should.be.an.instanceof(http.ServerResponse); args[2].should.be.an.instanceof(Function); @@ -40,7 +40,7 @@ describe('Controller', function () { it('should extend _handleRequest with the original URL as parsedUrl property', function () { controller._handleRequest.should.have.been.calledOnce; - var request = controller._handleRequest.getCall(0).args[0]; + let request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); request.parsedUrl.should.deep.equal({ protocol: 'http:', host: request.headers.host, hostname: undefined, port: undefined, @@ -56,7 +56,7 @@ describe('Controller', function () { }); describe('A Controller instance without baseURL using Forwarded header', function () { - var controller, client; + let controller, client; before(function () { controller = new Controller({ urlData: new UrlData({ baseURL: 'http://example.org:1234/base?c=d#f' }) }); sinon.spy(controller, '_handleRequest'); @@ -75,7 +75,7 @@ describe('Controller', function () { it('should call _handleRequest with request, response and next', function () { controller._handleRequest.should.have.been.calledOnce; - var args = controller._handleRequest.getCall(0).args; + let args = controller._handleRequest.getCall(0).args; args[0].should.have.property('url'); args[1].should.be.an.instanceof(http.ServerResponse); args[2].should.be.an.instanceof(Function); @@ -83,7 +83,7 @@ describe('Controller', function () { it('should extend _handleRequest with the original URL as parsedUrl property', function () { controller._handleRequest.should.have.been.calledOnce; - var request = controller._handleRequest.getCall(0).args[0]; + let request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); request.parsedUrl.should.deep.equal({ protocol: 'https:', host: 'bar:8000', hostname: 'example.org', port: '1234', @@ -99,7 +99,7 @@ describe('Controller', function () { }); describe('A Controller instance without baseURL using X-Forwarded-* headers', function () { - var controller, client; + let controller, client; before(function () { controller = new Controller(); sinon.spy(controller, '_handleRequest'); @@ -117,7 +117,7 @@ describe('Controller', function () { it('should call _handleRequest with request, response and next', function () { controller._handleRequest.should.have.been.calledOnce; - var args = controller._handleRequest.getCall(0).args; + let args = controller._handleRequest.getCall(0).args; args[0].should.have.property('url'); args[1].should.be.an.instanceof(http.ServerResponse); args[2].should.be.an.instanceof(Function); @@ -125,7 +125,7 @@ describe('Controller', function () { it('should extend _handleRequest with the original URL as parsedUrl property', function () { controller._handleRequest.should.have.been.calledOnce; - var request = controller._handleRequest.getCall(0).args[0]; + let request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); request.parsedUrl.should.deep.equal({ protocol: 'https:', host: 'foo:5000', hostname: undefined, port: undefined, @@ -141,7 +141,7 @@ describe('Controller', function () { }); describe('A Controller instance with baseURL', function () { - var controller, client; + let controller, client; before(function () { controller = new Controller({ urlData: new UrlData({ baseURL: 'http://example.org:1234/base?c=d#f' }) }); sinon.spy(controller, '_handleRequest'); @@ -155,7 +155,7 @@ describe('Controller', function () { it('should call _handleRequest with request, response and next', function () { controller._handleRequest.should.have.been.calledOnce; - var args = controller._handleRequest.getCall(0).args; + let args = controller._handleRequest.getCall(0).args; args[0].should.have.property('url'); args[1].should.be.an.instanceof(http.ServerResponse); args[2].should.be.an.instanceof(Function); @@ -163,7 +163,7 @@ describe('Controller', function () { it('should extend _handleRequest with the rebased URL as parsedUrl property', function () { controller._handleRequest.should.have.been.calledOnce; - var request = controller._handleRequest.getCall(0).args[0]; + let request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); request.parsedUrl.should.deep.equal({ protocol: 'http:', host: 'example.org:1234', hostname: 'example.org', port: '1234', diff --git a/packages/core/test/controllers/DereferenceController-test.js b/packages/core/test/controllers/DereferenceController-test.js index f8715f84..e9616a11 100644 --- a/packages/core/test/controllers/DereferenceController-test.js +++ b/packages/core/test/controllers/DereferenceController-test.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var DereferenceController = require('../../lib/controllers/DereferenceController'); +let DereferenceController = require('../../lib/controllers/DereferenceController'); -var request = require('supertest'), +let request = require('supertest'), DummyServer = require('../../../../test/DummyServer'); describe('DereferenceController', function () { @@ -16,14 +16,14 @@ describe('DereferenceController', function () { }); describe('A DereferenceController instance', function () { - var controller, client; + let controller, client; before(function () { controller = new DereferenceController({ dereference: { '/resource/': { path: 'dbpedia/2014' } } }); client = request.agent(new DummyServer(controller)); }); describe('receiving a request for a dereferenced URL', function () { - var response; + let response; before(function (done) { client.get('/resource/Mickey_Mouse') .end(function (error, res) { response = res; done(error); }); @@ -42,7 +42,7 @@ describe('DereferenceController', function () { }); it('should set the Location header correctly', function () { - var hostname = response.req.getHeader('Host'), + let hostname = response.req.getHeader('Host'), entityUrl = encodeURIComponent('http://' + hostname + '/resource/Mickey_Mouse'), expectedLocation = 'http://' + hostname + '/dbpedia/2014?subject=' + entityUrl; @@ -50,7 +50,7 @@ describe('DereferenceController', function () { }); it('should mention the desired location in the body', function () { - var hostname = response.req.getHeader('Host'), + let hostname = response.req.getHeader('Host'), entityUrl = encodeURIComponent('http://' + hostname + '/resource/Mickey_Mouse'), expectedLocation = 'http://' + hostname + '/dbpedia/2014?subject=' + entityUrl; diff --git a/packages/core/test/controllers/NotFoundController-test.js b/packages/core/test/controllers/NotFoundController-test.js index 06665123..f73b2fdf 100644 --- a/packages/core/test/controllers/NotFoundController-test.js +++ b/packages/core/test/controllers/NotFoundController-test.js @@ -1,11 +1,11 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var NotFoundController = require('../../lib/controllers/NotFoundController'); +let NotFoundController = require('../../lib/controllers/NotFoundController'); -var request = require('supertest'), +let request = require('supertest'), DummyServer = require('../../../../test/DummyServer'), dataFactory = require('n3').DataFactory; -var NotFoundHtmlView = require('../../lib/views/notfound/NotFoundHtmlView.js'), +let NotFoundHtmlView = require('../../lib/views/notfound/NotFoundHtmlView.js'), NotFoundRdfView = require('../../lib/views/notfound/NotFoundRdfView.js'); describe('NotFoundController', function () { @@ -20,14 +20,14 @@ describe('NotFoundController', function () { }); describe('A NotFoundController instance without views', function () { - var controller, client; + let controller, client; before(function () { controller = new NotFoundController(); client = request.agent(new DummyServer(controller)); }); describe('receiving a request', function () { - var response; + let response; before(function (done) { client.get('/notfound') .end(function (error, res) { response = res; done(error); }); @@ -56,7 +56,7 @@ describe('NotFoundController', function () { }); describe('A NotFoundController instance with HTML and RDF views', function () { - var controller, htmlView, rdfView, datasources, client; + let controller, htmlView, rdfView, datasources, client; before(function () { htmlView = new NotFoundHtmlView({ dataFactory }); rdfView = new NotFoundRdfView({ dataFactory }); @@ -72,7 +72,7 @@ describe('NotFoundController', function () { } describe('receiving a request without Accept header', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/notfound') @@ -109,7 +109,7 @@ describe('NotFoundController', function () { }); describe('receiving a request with an Accept header of */*', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/notfound').set('Accept', '*/*') @@ -146,7 +146,7 @@ describe('NotFoundController', function () { }); describe('receiving a request with an Accept header of text/html', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/notfound').set('Accept', 'text/html') @@ -183,7 +183,7 @@ describe('NotFoundController', function () { }); describe('receiving a request with an Accept header of text/turtle', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/notfound').set('Accept', 'text/turtle') @@ -221,7 +221,7 @@ describe('NotFoundController', function () { }); describe('receiving a request with an Accept header of application/trig', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/notfound').set('Accept', 'application/trig') diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index 2d6d01c2..85ed8a68 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -25,7 +25,7 @@ describe('Datasource', function () { }); describe('A Datasource instance', function () { - var datasource = new Datasource({ dataFactory }); + let datasource = new Datasource({ dataFactory }); datasource.initialize(); it('should not indicate support for any features', function () { @@ -55,7 +55,7 @@ describe('Datasource', function () { describe('fetching a resource', function () { it('fetches an existing resource', function (done) { - var result = datasource._fetch({ url: 'file://' + exampleFile }), buffer = ''; + let result = datasource._fetch({ url: 'file://' + exampleFile }), buffer = ''; result.on('data', function (d) { buffer += d; }); result.on('end', function () { buffer.should.equal(fs.readFileSync(exampleFile, 'utf8')); @@ -65,7 +65,7 @@ describe('Datasource', function () { }); it('assumes file:// as the default protocol', function (done) { - var result = datasource._fetch({ url: exampleFile }), buffer = ''; + let result = datasource._fetch({ url: exampleFile }), buffer = ''; result.on('data', function (d) { buffer += d; }); result.on('end', function () { buffer.should.equal(fs.readFileSync(exampleFile, 'utf8')); @@ -75,7 +75,7 @@ describe('Datasource', function () { }); it('emits an error when the protocol is unknown', function (done) { - var result = datasource._fetch({ url: 'myprotocol:abc' }); + let result = datasource._fetch({ url: 'myprotocol:abc' }); result.on('error', function (error) { error.message.should.contain('Unknown protocol: myprotocol'); done(); @@ -83,7 +83,7 @@ describe('Datasource', function () { }); it('emits an error on the datasource when no error listener is attached to the result', function (done) { - var result = datasource._fetch({ url: exampleFile + 'notfound' }); + let result = datasource._fetch({ url: exampleFile + 'notfound' }); result.on('data', done); datasource.on('error', function (error) { error.message.should.contain('ENOENT: no such file or directory'); @@ -92,7 +92,7 @@ describe('Datasource', function () { }); it('does not emit an error on the datasource when an error listener is attached to the result', function (done) { - var result = datasource._fetch({ url: exampleFile + 'notfound' }); + let result = datasource._fetch({ url: exampleFile + 'notfound' }); result.on('error', function (error) { error.message.should.contain('ENOENT: no such file or directory'); done(); @@ -117,7 +117,7 @@ describe('Datasource', function () { }); describe('A Datasource instance with an initializer', function () { - var datasource, initializedListener, errorListener; + let datasource, initializedListener, errorListener; before(function () { datasource = new Datasource({ dataFactory }); datasource._initialize = sinon.stub(); @@ -181,7 +181,7 @@ describe('Datasource', function () { }); describe('A Datasource instance with an initializer that errors synchronously', function () { - var datasource, initializedListener, errorListener, error; + let datasource, initializedListener, errorListener, error; before(function () { datasource = new Datasource({ dataFactory }); error = new Error('initializer error'); @@ -212,7 +212,7 @@ describe('Datasource', function () { }); describe('A Datasource instance with an initializer that errors asynchronously', function () { - var datasource, initializedListener, errorListener, error; + let datasource, initializedListener, errorListener, error; before(function () { datasource = new Datasource({ dataFactory }); error = new Error('initializer error'); @@ -243,7 +243,7 @@ describe('Datasource', function () { }); describe('A derived Datasource instance', function () { - var datasource = new Datasource({ dataFactory }); + let datasource = new Datasource({ dataFactory }); Object.defineProperty(datasource, 'supportedFeatures', { enumerable: true, value: { a: true, b: true, c: false }, @@ -273,13 +273,13 @@ describe('Datasource', function () { }); it('should not attach an error listener on select if none was passed', function () { - var result = datasource.select({ features: {} }); + let result = datasource.select({ features: {} }); (function () { result.emit('error', new Error()); }).should.throw(); }); it('should attach an error listener on select if one was passed', function () { - var onError = sinon.stub(), error = new Error(); - var result = datasource.select({ features: {} }, onError); + let onError = sinon.stub(), error = new Error(); + let result = datasource.select({ features: {} }, onError); result.emit('error', error); onError.should.have.been.calledOnce; onError.should.have.been.calledWith(error); @@ -287,7 +287,7 @@ describe('Datasource', function () { }); describe('A Datasource instance with a graph property', function () { - var datasource = new Datasource({ + let datasource = new Datasource({ dataFactory, graph: 'http://example.org/#mygraph', }); @@ -308,7 +308,7 @@ describe('Datasource', function () { }); it('should move triples in the default graph to the given graph', function (done) { - var result = datasource.select({ features: { custom: true } }, done), quads = []; + let result = datasource.select({ features: { custom: true } }, done), quads = []; result.on('data', function (q) { quads.push(q); }); result.on('end', function () { let matchingquads = [{ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o1'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, diff --git a/packages/core/test/routers/DatasourceRouter-test.js b/packages/core/test/routers/DatasourceRouter-test.js index 68423dc7..60072f87 100644 --- a/packages/core/test/routers/DatasourceRouter-test.js +++ b/packages/core/test/routers/DatasourceRouter-test.js @@ -1,5 +1,5 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var DatasourceRouter = require('../../lib/routers/DatasourceRouter'); +let DatasourceRouter = require('../../lib/routers/DatasourceRouter'); describe('DatasourceRouter', function () { describe('The DatasourceRouter module', function () { @@ -13,7 +13,7 @@ describe('DatasourceRouter', function () { }); describe('A DatasourceRouter instance', function () { - var router = new DatasourceRouter(); + let router = new DatasourceRouter(); describe('extractUrlParams', function () { describe('with an existing query', function () { @@ -74,7 +74,7 @@ describe('DatasourceRouter', function () { }); describe('A DatasourceRouter instance with a base URL', function () { - var router = new DatasourceRouter({ + let router = new DatasourceRouter({ urlData: { baseURLPath: '/my/base/' }, }); diff --git a/packages/core/test/routers/PageRouter-test.js b/packages/core/test/routers/PageRouter-test.js index e5849a7a..fdc37cb8 100644 --- a/packages/core/test/routers/PageRouter-test.js +++ b/packages/core/test/routers/PageRouter-test.js @@ -1,5 +1,5 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var PageRouter = require('../../lib/routers/PageRouter'); +let PageRouter = require('../../lib/routers/PageRouter'); describe('PageRouter', function () { describe('The PageRouter module', function () { @@ -13,7 +13,7 @@ describe('PageRouter', function () { }); describe('A PageRouter instance', function () { - var router = new PageRouter(); + let router = new PageRouter(); describe('extractUrlParams', function () { describe('with an existing query', function () { @@ -81,7 +81,7 @@ describe('PageRouter', function () { }); describe('A PageRouter instance with a given page size', function () { - var router = new PageRouter({ pageSize: 250 }); + let router = new PageRouter({ pageSize: 250 }); describe('extractUrlParams', function () { describe('with an existing query', function () { @@ -149,7 +149,7 @@ describe('PageRouter', function () { }); describe('A PageRouter instance with an invalid page size', function () { - var router = new PageRouter({ pageSize: -1 }); + let router = new PageRouter({ pageSize: -1 }); describe('extractUrlParams', function () { describe('with an existing query', function () { diff --git a/packages/core/test/views/View-test.js b/packages/core/test/views/View-test.js index 660d8ddd..69906856 100644 --- a/packages/core/test/views/View-test.js +++ b/packages/core/test/views/View-test.js @@ -1,5 +1,5 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var View = require('../../lib/views/View'), +let View = require('../../lib/views/View'), resolve = require('path').resolve; describe('View', function () { @@ -66,7 +66,7 @@ describe('View', function () { describe('without _render method', function () { it('should throw an error on calling render', function () { - var response = { getHeader: sinon.stub() }; + let response = { getHeader: sinon.stub() }; (function () { new View().render(null, null, response); }) .should.throw('The _render method is not yet implemented.'); }); @@ -74,7 +74,7 @@ describe('View', function () { describe('created without defaults', function () { it('should call _render with the given options', function () { - var view = new View(), + let view = new View(), request = {}, response = { getHeader: sinon.stub().returns('text/html') }, options = { a: 'b' }; view._render = sinon.spy(); @@ -96,7 +96,7 @@ describe('View', function () { describe('created with defaults', function () { it('should call _render with the combined defaults and options', function () { - var view = new View(null, null, { c: 'd' }), + let view = new View(null, null, { c: 'd' }), request = {}, response = { getHeader: sinon.stub().returns('text/html') }, options = { a: 'b' }; view._render = sinon.spy(); diff --git a/packages/core/test/views/ViewCollection-test.js b/packages/core/test/views/ViewCollection-test.js index 2c2a35c6..84709b9a 100644 --- a/packages/core/test/views/ViewCollection-test.js +++ b/packages/core/test/views/ViewCollection-test.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var ViewCollection = require('../../lib/views/ViewCollection'); +let ViewCollection = require('../../lib/views/ViewCollection'); -var View = require('../../lib/views/View'); +let View = require('../../lib/views/View'); describe('ViewCollection', function () { describe('The ViewCollection module', function () { @@ -15,7 +15,7 @@ describe('ViewCollection', function () { }); describe('A ViewCollection instance without views', function () { - var viewCollection; + let viewCollection; before(function () { viewCollection = new ViewCollection(); }); @@ -27,7 +27,7 @@ describe('ViewCollection', function () { }); describe('A ViewCollection instance with one view', function () { - var viewCollection, viewA; + let viewCollection, viewA; before(function () { viewA = new View('MyView1', 'text/html,application/trig;q=0.7'); viewCollection = new ViewCollection([viewA]); @@ -39,7 +39,7 @@ describe('ViewCollection', function () { }); describe('when a client requests HTML', function () { - var viewDetails, request, response; + let viewDetails, request, response; before(function () { request = { headers: { accept: 'text/html' } }; response = {}; @@ -54,7 +54,7 @@ describe('ViewCollection', function () { }); describe('when a client requests TriG', function () { - var viewDetails, request, response; + let viewDetails, request, response; before(function () { request = { headers: { accept: 'application/trig' } }; response = {}; @@ -70,7 +70,7 @@ describe('ViewCollection', function () { }); describe('A ViewCollection instance with three views of two types', function () { - var viewCollection, viewA, viewB, viewC; + let viewCollection, viewA, viewB, viewC; before(function () { viewA = new View('MyView1', 'text/html,application/trig;q=0.5'); viewB = new View('MyView1', 'text/html;q=1.0,application/trig'); @@ -84,7 +84,7 @@ describe('ViewCollection', function () { }); describe('when matching a request of one view type as HTML', function () { - var viewDetails, request, response; + let viewDetails, request, response; before(function () { request = { headers: { accept: 'text/html' } }; response = {}; @@ -99,7 +99,7 @@ describe('ViewCollection', function () { }); describe('when matching a request of one view type as TriG', function () { - var viewDetails, request, response; + let viewDetails, request, response; before(function () { request = { headers: { accept: 'application/trig' } }; response = {}; @@ -114,7 +114,7 @@ describe('ViewCollection', function () { }); describe('when matching a request of another view type as HTML', function () { - var viewDetails, request, response; + let viewDetails, request, response; before(function () { request = { headers: { accept: 'text/html' } }; response = {}; diff --git a/packages/datasource-composite/lib/datasources/CompositeDatasource.js b/packages/datasource-composite/lib/datasources/CompositeDatasource.js index dfe8bbd6..97be5530 100644 --- a/packages/datasource-composite/lib/datasources/CompositeDatasource.js +++ b/packages/datasource-composite/lib/datasources/CompositeDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2016 Ruben Taelman, Ghent University - imec */ /* A CompositeDatasource delegates queries to an consecutive list of datasources. */ -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, LRU = require('lru-cache'); // Creates a new CompositeDatasource @@ -15,9 +15,9 @@ class CompositeDatasource extends Datasource { this._datasources = {}; this._datasourceNames = []; - for (var i = 0; i < Object.keys(options.references).length; i++) { - var datasourceName = Object.keys(options.references)[i]; - var datasource = options.references[datasourceName]; + for (let i = 0; i < Object.keys(options.references).length; i++) { + let datasourceName = Object.keys(options.references)[i]; + let datasource = options.references[datasourceName]; if (!datasource) throw new Error('No datasource ' + datasourceName + ' could be found!'); if (datasource.enabled !== false) { @@ -30,7 +30,7 @@ class CompositeDatasource extends Datasource { // Checks whether the data source can evaluate the given query supportsQuery(query) { - for (var datasourceName in this._datasources) { + for (let datasourceName in this._datasources) { if (this._getDatasourceByName(datasourceName).supportsQuery(query)) return true; } @@ -54,14 +54,14 @@ class CompositeDatasource extends Datasource { // Count the quads in the query result to get an exact count. _getExactCount(datasource, query, callback) { // Try to find a cache match - var cacheKey = query.subject + '|' + query.predicate + '|' + query.object + '|' + query.graph; - var cache = this._countCache, count = cache.get(cacheKey); + let cacheKey = query.subject + '|' + query.predicate + '|' + query.object + '|' + query.graph; + let cache = this._countCache, count = cache.get(cacheKey); if (count) return setImmediate(callback, count); // Otherwise, count all quads manually - var emptyQuery = { offset: 0, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; - var exactCount = 0; - var outputQuads = datasource.select(emptyQuery); + let emptyQuery = { offset: 0, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; + let exactCount = 0; + let outputQuads = datasource.select(emptyQuery); outputQuads.on('data', function () { exactCount++; }); @@ -78,7 +78,7 @@ class CompositeDatasource extends Datasource { // The offset to use to start querying from the given datasource id // The total count for all datasources _getDatasourceInfo(query, absoluteOffset, callback) { - var self = this; + let self = this; return findRecursive(0, absoluteOffset, -1, -1, 0, callback, true); function findRecursive(datasourceIndex, offset, chosenDatasource, chosenOffset, totalCount, hasExactCount) { @@ -86,8 +86,8 @@ class CompositeDatasource extends Datasource { // We checked all datasources, return our accumulated information callback(chosenDatasource, chosenOffset, totalCount, hasExactCount); else { - var datasource = self._getDatasourceById(datasourceIndex); - var emptyQuery = { + let datasource = self._getDatasourceById(datasourceIndex); + let emptyQuery = { offset: 0, limit: 1, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph, }; @@ -96,10 +96,10 @@ class CompositeDatasource extends Datasource { if (!self._hasDatasourceMatchingGraph(datasource, datasourceIndex, emptyQuery)) return findRecursive(datasourceIndex + 1, offset, chosenDatasource, chosenOffset, totalCount, hasExactCount); - var outputQuads = datasource.select(emptyQuery); + let outputQuads = datasource.select(emptyQuery); outputQuads.getProperty('metadata', function (metadata) { // If we are still looking for an appropriate datasource, we need exact counts - var count = metadata.totalCount, exact = metadata.hasExactCount; + let count = metadata.totalCount, exact = metadata.hasExactCount; if (offset > 0 && !exact) { self._getExactCount(datasource, query, function (exactCount) { count = exactCount; @@ -133,8 +133,8 @@ class CompositeDatasource extends Datasource { // Writes the results of the query to the given quad stream _executeQuery(query, destination) { - var offset = query.offset || 0, limit = query.limit || Infinity; - var self = this; + let offset = query.offset || 0, limit = query.limit || Infinity; + let self = this; this._getDatasourceInfo(query, offset, function (datasourceIndex, relativeOffset, totalCount, hasExactCount) { if (datasourceIndex < 0) { // No valid datasource has been found @@ -147,7 +147,7 @@ class CompositeDatasource extends Datasource { // Modify our quad stream so that if all results from one datasource have arrived, // check if we haven't reached the limit and if so, trigger a new query for the next datasource. - var emitted = 0; + let emitted = 0; countItems(destination, function (localEmittedCount) { // This is called after the last element has been pushed @@ -155,14 +155,14 @@ class CompositeDatasource extends Datasource { emitted = localEmittedCount; datasourceIndex++; if (emitted < limit && datasourceIndex < self._datasourceNames.length) { - var localLimit = limit - emitted; - var subQuery = { offset: 0, limit: localLimit, + let localLimit = limit - emitted; + let subQuery = { offset: 0, limit: localLimit, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; - var datasource = self._getDatasourceById(datasourceIndex); + let datasource = self._getDatasourceById(datasourceIndex); // If we are have a graph in our query, and this is a triple datasource, make sure it is in the requested graph, // otherwise we skip this datasource if (self._hasDatasourceMatchingGraph(datasource, datasourceIndex, subQuery)) { - var outputQuads = datasource.select(subQuery); + let outputQuads = datasource.select(subQuery); outputQuads.on('data', pushToDestination); outputQuads.on('end', closeDestination); } @@ -175,9 +175,9 @@ class CompositeDatasource extends Datasource { }); // Initiate query to the first datasource. - var subQuery = { offset: relativeOffset, limit: limit, + let subQuery = { offset: relativeOffset, limit: limit, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; - var outputQuads = self._getDatasourceById(datasourceIndex).select(subQuery); + let outputQuads = self._getDatasourceById(datasourceIndex).select(subQuery); outputQuads.on('data', pushToDestination); outputQuads.on('end', closeDestination); } @@ -186,7 +186,7 @@ class CompositeDatasource extends Datasource { // Counts the number of quads and sends them through the callback, // only closing the iterator when the callback returns true. function countItems(destination, closeCallback) { - var count = 0, originalPush = destination._push, originalClose = destination.close; + let count = 0, originalPush = destination._push, originalClose = destination.close; destination._push = function (element) { if (element) count++; originalPush.call(destination, element); diff --git a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js index 661606af..35cb9a31 100644 --- a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js +++ b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js @@ -1,33 +1,33 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var CompositeDatasource = require('../../').datasources.CompositeDatasource; +let CompositeDatasource = require('../../').datasources.CompositeDatasource; -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, HdtDatasource = require('@ldf/datasource-hdt').datasources.HdtDatasource, N3Datasource = require('@ldf/datasource-n3').datasources.N3Datasource, path = require('path'), dataFactory = require('n3').DataFactory; -var exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); -var exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); -var exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); -var exampleTrigUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.trig'); +let exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); +let exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); +let exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); +let exampleTrigUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.trig'); describe('CompositeDatasource', function () { - var references = { + let references = { data0: { dataFactory, settings: { dataFactory, file: exampleHdtFile }, datasourceType: HdtDatasource, size: 132 }, data1: { dataFactory, settings: { dataFactory, file: exampleHdtFileWithBlanks, graph: 'http://example.org/graph0' }, datasourceType: HdtDatasource, size: 6 }, data2: { dataFactory, settings: { dataFactory, url: exampleTurtleUrl }, datasourceType: N3Datasource, size: 129 }, data3: { dataFactory, settings: { dataFactory, url: exampleTrigUrl }, datasourceType: N3Datasource, size: 7 }, }; Object.keys(references).forEach(function (datasourceId) { - var datasource = references[datasourceId]; - var DatasourceType = datasource.datasourceType; - var size = references[datasourceId].size; + let datasource = references[datasourceId]; + let DatasourceType = datasource.datasourceType; + let size = references[datasourceId].size; references[datasourceId] = new DatasourceType(datasource.settings); references[datasourceId].size = size; references[datasourceId].initialize(); }); - var totalSize = Object.keys(references).reduce(function (acc, key) { + let totalSize = Object.keys(references).reduce(function (acc, key) { return acc + references[key].size; }, 0); @@ -37,26 +37,26 @@ describe('CompositeDatasource', function () { }); it('should be an CompositeDatasource constructor', function (done) { - var instance = new CompositeDatasource({ references: references }); + let instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(CompositeDatasource); instance.close(done); }); it('should create CompositeDatasource objects', function (done) { - var instance = new CompositeDatasource({ references: references }); + let instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(CompositeDatasource); instance.close(done); }); it('should create Datasource objects', function (done) { - var instance = new CompositeDatasource({ references: references }); + let instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); }); describe('A CompositeDatasource instance for 4 Datasources', function () { - var datasource; + let datasource; function getDatasource() { return datasource; } before(function (done) { datasource = new CompositeDatasource({ references: references }); @@ -157,9 +157,9 @@ describe('CompositeDatasource', function () { function itShouldExecute(getDatasource, name, query, expectedResultsCount, expectedTotalCount, expectedTriples) { describe('executing ' + name, function () { - var resultsCount = 0, totalCount, triples = []; + let resultsCount = 0, totalCount, triples = []; before(function (done) { - var result = getDatasource().select(query); + let result = getDatasource().select(query); result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); result.on('data', function (triple) { resultsCount++; expectedTriples && triples.push(triple); }); result.on('end', done); @@ -176,7 +176,7 @@ function itShouldExecute(getDatasource, name, query, if (expectedTriples) { it('should emit the expected triples', function () { expect(triples.length).to.equal(expectedTriples.length); - for (var i = 0; i < expectedTriples.length; i++) + for (let i = 0; i < expectedTriples.length; i++) triples[i].should.deep.equal(expectedTriples[i]); }); } diff --git a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js index 03bc6cbf..be6c58e5 100644 --- a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js @@ -1,14 +1,14 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* An ExternalHdtDatasource uses an external process to query an HDT document. */ -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, fs = require('fs'), path = require('path'), N3Parser = require('n3').Parser, RdfString = require('rdf-string'), spawn = require('child_process').spawn; -var hdtUtility = path.join(__dirname, '../../node_modules/.bin/hdt'); +let hdtUtility = path.join(__dirname, '../../node_modules/.bin/hdt'); // Creates a new ExternalHdtDatasource class ExternalHdtDatasource extends Datasource { @@ -43,7 +43,7 @@ class ExternalHdtDatasource extends Datasource { } // Execute the external HDT utility - var hdtFile = this._hdtFile, offset = query.offset || 0, limit = query.limit || Infinity, + let hdtFile = this._hdtFile, offset = query.offset || 0, limit = query.limit || Infinity, hdt = spawn(hdtUtility, [ '--query', (query.subject || '?s') + ' ' + (query.predicate || '?p') + ' ' + (query.object || '?o'), @@ -52,7 +52,7 @@ class ExternalHdtDatasource extends Datasource { ], { stdio: ['ignore', 'pipe', 'ignore'] }); // Parse the result triples hdt.stdout.setEncoding('utf8'); - var parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true, dataFactory = this.dataFactory; + let parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true, dataFactory = this.dataFactory; parser.parse(hdt.stdout, function (error, triple) { if (error) destination.emit('error', new Error('Invalid query result: ' + error.message)); diff --git a/packages/datasource-hdt/lib/datasources/HdtDatasource.js b/packages/datasource-hdt/lib/datasources/HdtDatasource.js index 51d03919..4a676beb 100644 --- a/packages/datasource-hdt/lib/datasources/HdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/HdtDatasource.js @@ -1,7 +1,7 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* An HdtDatasource loads and queries an HDT document in-process. */ -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, hdt = require('hdt'), ExternalHdtDatasource = require('./ExternalHdtDatasource'), RdfString = require('rdf-string'); @@ -21,7 +21,7 @@ class HdtDatasource extends Datasource { // Loads the HDT datasource _initialize(done) { - var datasource = this; + let datasource = this; hdt.fromFile(this._hdtFile).then(function (hdtDocument) { datasource._hdtDocument = hdtDocument; }).then(done, done); @@ -41,16 +41,16 @@ class HdtDatasource extends Datasource { query.object ? RdfString.termToString(query.object) : null, { limit: query.limit, offset: query.offset }) .then(function (result) { - var triples = result.triples, + let triples = result.triples, estimatedTotalCount = result.totalCount, hasExactCount = result.hasExactCount; // Ensure the estimated total count is as least as large as the number of triples - var tripleCount = triples.length, offset = query.offset || 0; + let tripleCount = triples.length, offset = query.offset || 0; if (tripleCount && estimatedTotalCount < offset + tripleCount) estimatedTotalCount = offset + (tripleCount < query.limit ? tripleCount : 2 * tripleCount); destination.setProperty('metadata', { totalCount: estimatedTotalCount, hasExactCount: hasExactCount }); // Add the triples to the output - for (var i = 0; i < tripleCount; i++) + for (let i = 0; i < tripleCount; i++) destination._push(RdfString.stringQuadToQuad(triples[i], dataFactory)); destination.close(); }, diff --git a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js index 8c33c128..1f1697e5 100644 --- a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js +++ b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js @@ -1,13 +1,13 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ -var HdtDatasource = require('../../').datasources.HdtDatasource; +let HdtDatasource = require('../../').datasources.HdtDatasource; -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, path = require('path'), dataFactory = require('n3').DataFactory, RdfString = require('rdf-string'); -var exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); -var exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); +let exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); +let exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); describe('HdtDatasource', function () { describe('The HdtDatasource module', function () { @@ -16,14 +16,14 @@ describe('HdtDatasource', function () { }); it('should be an HdtDatasource constructor', function (done) { - var instance = new HdtDatasource({ dataFactory, file: exampleHdtFile }); + let instance = new HdtDatasource({ dataFactory, file: exampleHdtFile }); instance.initialize(); instance.should.be.an.instanceof(HdtDatasource); instance.close(done); }); it('should create Datasource objects', function (done) { - var instance = new HdtDatasource({ dataFactory, file: exampleHdtFile }); + let instance = new HdtDatasource({ dataFactory, file: exampleHdtFile }); instance.initialize(); instance.should.be.an.instanceof(Datasource); instance.close(done); @@ -31,7 +31,7 @@ describe('HdtDatasource', function () { }); describe('A HdtDatasource instance for an example HDT file', function () { - var datasource; + let datasource; function getDatasource() { return datasource; } before(function (done) { datasource = new HdtDatasource({ dataFactory, file: exampleHdtFile }); @@ -94,7 +94,7 @@ describe('HdtDatasource', function () { }); describe('A HdtDatasource instance with blank nodes', function () { - var datasource; + let datasource; function getDatasource() { return datasource; } before(function (done) { datasource = new HdtDatasource({ dataFactory, file: exampleHdtFileWithBlanks }); @@ -143,7 +143,7 @@ describe('HdtDatasource', function () { }); describe('A HdtDatasource instance with blank nodes and a blank node prefix', function () { - var datasource; + let datasource; function getDatasource() { return datasource; } before(function (done) { datasource = new HdtDatasource({ @@ -199,9 +199,9 @@ describe('HdtDatasource', function () { function itShouldExecute(getDatasource, name, query, expectedResultsCount, expectedTotalCount, expectedTriples) { describe('executing ' + name, function () { - var resultsCount = 0, totalCount, triples = []; + let resultsCount = 0, totalCount, triples = []; before(function (done) { - var result = getDatasource().select(query); + let result = getDatasource().select(query); result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); result.on('data', function (triple) { resultsCount++; expectedTriples && triples.push(triple); }); result.on('end', done); @@ -218,7 +218,7 @@ function itShouldExecute(getDatasource, name, query, if (expectedTriples) { it('should emit the expected triples', function () { expect(triples.length).to.equal(expectedTriples.length); - for (var i = 0; i < expectedTriples.length; i++) + for (let i = 0; i < expectedTriples.length; i++) triples[i].should.deep.equal(RdfString.stringQuadToQuad(expectedTriples[i], dataFactory)); }); } diff --git a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js index 948e5dd1..7635cd40 100644 --- a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js +++ b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js @@ -1,10 +1,10 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ /* An JsonLdDatasource fetches data from a JSON-LD document. */ -var MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, +let MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, JsonLdParser = require('jsonld-streaming-parser').JsonLdParser; -var ACCEPT = 'application/ld+json;q=1.0,application/json;q=0.7'; +let ACCEPT = 'application/ld+json;q=1.0,application/json;q=0.7'; // Creates a new JsonLdDatasource class JsonLdDatasource extends MemoryDatasource { @@ -15,7 +15,7 @@ class JsonLdDatasource extends MemoryDatasource { // Retrieves all quads from the document _getAllQuads(addQuad, done) { - var document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }); + let document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }); new JsonLdParser({ baseIRI: this._url, dataFactory: this.dataFactory }) .import(document) .on('error', done) diff --git a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js index a8cb3193..3af541b1 100644 --- a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js +++ b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js @@ -1,11 +1,11 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ -var JsonLdDatasource = require('../../').datasources.JsonLdDatasource; +let JsonLdDatasource = require('../../').datasources.JsonLdDatasource; -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, path = require('path'), dataFactory = require('n3').DataFactory; -var exampleJsonLdUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.jsonld'); +let exampleJsonLdUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.jsonld'); describe('JsonLdDatasource', function () { describe('The JsonLdDatasource module', function () { @@ -14,20 +14,20 @@ describe('JsonLdDatasource', function () { }); it('should be a JsonLdDatasource constructor', function (done) { - var instance = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); + let instance = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); instance.should.be.an.instanceof(JsonLdDatasource); instance.close(done); }); it('should create Datasource objects', function (done) { - var instance = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); + let instance = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); }); describe('A JsonLdDatasource instance for an example JsonLd file', function () { - var datasource = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); + let datasource = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); datasource.initialize(); after(function (done) { datasource.close(done); }); @@ -90,9 +90,9 @@ describe('JsonLdDatasource', function () { function itShouldExecute(datasource, name, query, expectedResultsCount, expectedTotalCount) { describe('executing ' + name, function () { - var resultsCount = 0, totalCount; + let resultsCount = 0, totalCount; before(function (done) { - var result = datasource.select(query); + let result = datasource.select(query); result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); result.on('data', function (triple) { resultsCount++; }); result.on('end', done); diff --git a/packages/datasource-n3/lib/datasources/N3Datasource.js b/packages/datasource-n3/lib/datasources/N3Datasource.js index a6541e72..83d4540d 100644 --- a/packages/datasource-n3/lib/datasources/N3Datasource.js +++ b/packages/datasource-n3/lib/datasources/N3Datasource.js @@ -1,10 +1,10 @@ /*! @license ©2014–2017 Ruben Verborgh, Ghent University - imec */ /** An N3Datasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents. */ -var MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, +let MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, N3Parser = require('n3').Parser; -var ACCEPT = 'application/trig;q=1.0,application/n-quads;q=0.9,text/turtle;q=0.8,application/n-triples;q=0.7,text/n3;q=0.4'; +let ACCEPT = 'application/trig;q=1.0,application/n-quads;q=0.9,text/turtle;q=0.8,application/n-triples;q=0.7,text/n3;q=0.4'; // Creates a new N3Datasource class N3Datasource extends MemoryDatasource { @@ -15,7 +15,7 @@ class N3Datasource extends MemoryDatasource { // Retrieves all quads from the document _getAllQuads(addQuad, done) { - var document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }, done); + let document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }, done); N3Parser._resetBlankNodeIds(); new N3Parser({ factory: this.dataFactory }).parse(document, function (error, quad) { quad ? addQuad(quad) : done(error); diff --git a/packages/datasource-n3/test/datasources/N3Datasource-test.js b/packages/datasource-n3/test/datasources/N3Datasource-test.js index a73b123e..93bdead7 100644 --- a/packages/datasource-n3/test/datasources/N3Datasource-test.js +++ b/packages/datasource-n3/test/datasources/N3Datasource-test.js @@ -1,11 +1,11 @@ /*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ -var N3Datasource = require('../../').datasources.N3Datasource; +let N3Datasource = require('../../').datasources.N3Datasource; -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, path = require('path'), dataFactory = require('n3').DataFactory; -var exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); +let exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); describe('N3Datasource', function () { describe('The N3Datasource module', function () { @@ -14,20 +14,20 @@ describe('N3Datasource', function () { }); it('should be a N3Datasource constructor', function (done) { - var instance = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); + let instance = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); instance.should.be.an.instanceof(N3Datasource); instance.close(done); }); it('should create Datasource objects', function (done) { - var instance = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); + let instance = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); }); describe('A N3Datasource instance for an example Turtle file', function () { - var datasource = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); + let datasource = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); datasource.initialize(); after(function (done) { datasource.close(done); }); @@ -80,9 +80,9 @@ describe('N3Datasource', function () { function itShouldExecute(datasource, name, query, expectedResultsCount, expectedTotalCount) { describe('executing ' + name, function () { - var resultsCount = 0, totalCount; + let resultsCount = 0, totalCount; before(function (done) { - var result = datasource.select(query); + let result = datasource.select(query); result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); result.on('data', function (triple) { resultsCount++; }); result.on('end', done); diff --git a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js index cb4d9b91..13906178 100644 --- a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -1,13 +1,13 @@ /*! @license MIT ©2014-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* A SparqlDatasource provides queryable access to a SPARQL endpoint. */ -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, SparqlJsonParser = require('sparqljson-parse').SparqlJsonParser, LRU = require('lru-cache'); -var DEFAULT_COUNT_ESTIMATE = { totalCount: 1e9, hasExactCount: false }; -var ENDPOINT_ERROR = 'Error accessing SPARQL endpoint'; -var INVALID_JSON_RESPONSE = 'The endpoint returned an invalid SPARQL results JSON response.'; +let DEFAULT_COUNT_ESTIMATE = { totalCount: 1e9, hasExactCount: false }; +let ENDPOINT_ERROR = 'Error accessing SPARQL endpoint'; +let INVALID_JSON_RESPONSE = 'The endpoint returned an invalid SPARQL results JSON response.'; const xsd = 'http://www.w3.org/2001/XMLSchema#'; // Creates a new SparqlDatasource @@ -31,25 +31,25 @@ class SparqlDatasource extends Datasource { // Writes the results of the query to the given triple stream _executeQuery(query, destination) { // Create the HTTP request - var sparqlPattern = this._createQuadPattern(query), self = this, + let sparqlPattern = this._createQuadPattern(query), self = this, selectQuery = this._createSelectQuery(sparqlPattern, query.offset, query.limit), request = { url: this._endpointUrl + encodeURIComponent(selectQuery), headers: { accept: 'application/sparql-results+json' }, }; // Fetch and parse matching triples using JSON responses - var json = ''; + let json = ''; this._request(request, emitError) .on('data', function (data) { json += data; }) .on('error', emitError) .on('end', function () { - var response; + let response; try { response = JSON.parse(json); } catch (e) { return emitError({ message: INVALID_JSON_RESPONSE }); } response.results.bindings.forEach(function (binding) { binding = self._sparqlJsonParser.parseJsonBindings(binding); - var triple = { + let triple = { subject: binding.s || query.subject, predicate: binding.p || query.predicate, object: binding.o || query.object, @@ -67,7 +67,7 @@ class SparqlDatasource extends Datasource { emitError); // Emits an error on the triple stream - var errored = false; + let errored = false; function emitError(error) { if (!error || errored) return; errored = true; @@ -78,7 +78,7 @@ class SparqlDatasource extends Datasource { // Retrieves the (approximate) number of triples that match the SPARQL pattern _getPatternCount(sparqlPattern) { // Try to find a cache match - var cache = this._countCache, count = cache.get(sparqlPattern); + let cache = this._countCache, count = cache.get(sparqlPattern); if (count) return Promise.resolve({ totalCount: count, hasExactCount: true }); @@ -87,25 +87,25 @@ class SparqlDatasource extends Datasource { return Promise.resolve(DEFAULT_COUNT_ESTIMATE); // Execute the count query - var countResponse = this._request({ + let countResponse = this._request({ url: this._endpointUrl + encodeURIComponent(this._createCountQuery(sparqlPattern)), headers: { accept: 'text/csv' }, timeout: 10000, }); // Parse SPARQL response in CSV format (2 lines: variable name / count value) - var self = this; + let self = this; return new Promise(function (resolve, reject) { - var csv = ''; + let csv = ''; self._resolvingCountQueries[sparqlPattern] = true; countResponse.on('data', function (data) { csv += data; }); countResponse.on('end', function () { delete self._resolvingCountQueries[sparqlPattern]; - var countMatch = csv.match(/\d+/); + let countMatch = csv.match(/\d+/); if (!countMatch) reject(new Error('COUNT query failed.')); else { - var count = parseInt(countMatch[0], 10); + let count = parseInt(countMatch[0], 10); // Cache large values; small ones are calculated fast anyway if (count > 100000) cache.set(sparqlPattern, count); @@ -123,7 +123,7 @@ class SparqlDatasource extends Datasource { // Creates a SELECT query from the given SPARQL pattern _createSelectQuery(sparqlPattern, offset, limit) { - var query = ['SELECT * WHERE', sparqlPattern]; + let query = ['SELECT * WHERE', sparqlPattern]; // Even though the SPARQL spec indicates that // LIMIT and OFFSET might be meaningless without ORDER BY, // this doesn't seem a problem in practice. @@ -140,7 +140,7 @@ class SparqlDatasource extends Datasource { // Creates a SPARQL pattern for the given triple pattern _createQuadPattern(quad) { - var query = ['{']; + let query = ['{']; // Encapsulate in graph if we are not querying the default graph if (!quad.graph || quad.graph.termType !== 'DefaultGraph') { diff --git a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js index b0ba4bfc..f682af51 100644 --- a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js +++ b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js @@ -1,14 +1,14 @@ /*! @license MIT ©2013-2016 Ruben Verborgh, Ghent University - imec */ -var SparqlDatasource = require('../../').datasources.SparqlDatasource; +let SparqlDatasource = require('../../').datasources.SparqlDatasource; -var Datasource = require('@ldf/core').datasources.Datasource, +let Datasource = require('@ldf/core').datasources.Datasource, fs = require('fs'), path = require('path'), URL = require('url'), dataFactory = require('n3').DataFactory; -var jsonResult = fs.readFileSync(path.join(__dirname, '../../../../test/assets/sparql-quads-response.json')); -var countResult = '"c"\n12345678\n'; +let jsonResult = fs.readFileSync(path.join(__dirname, '../../../../test/assets/sparql-quads-response.json')); +let countResult = '"c"\n12345678\n'; describe('SparqlDatasource', function () { describe('The SparqlDatasource module', function () { @@ -26,8 +26,8 @@ describe('SparqlDatasource', function () { }); describe('A SparqlDatasource instance', function () { - var request = sinon.stub(); - var datasource = new SparqlDatasource({ dataFactory, endpoint: 'http://ex.org/sparql', request: request }); + let request = sinon.stub(); + let datasource = new SparqlDatasource({ dataFactory, endpoint: 'http://ex.org/sparql', request: request }); datasource.initialize(); it('should indicate support for its features', function () { @@ -194,7 +194,7 @@ describe('SparqlDatasource', function () { null /* count should be cached, since this pattern already occurred above */); describe('when invalid JSON is returned in response to the data query', function () { - var result, error; + let result, error; before(function (done) { request.reset(); request.onFirstCall().returns(test.createHttpResponse('invalid', 'application/sparql-results+json')); @@ -210,7 +210,7 @@ describe('SparqlDatasource', function () { }); describe('when invalid JSON is returned in response to the count query', function () { - var result, error; + let result, error; before(function (done) { request.reset(); request.onFirstCall().returns(test.createHttpResponse(jsonResult, 'application/sparql-results+json')); @@ -226,7 +226,7 @@ describe('SparqlDatasource', function () { }); describe('when the data query request errors', function () { - var result, error; + let result, error; before(function (done) { request.reset(); let query = { subject: dataFactory.namedNode('abcde'), features: { quadPattern: true } }; @@ -241,7 +241,7 @@ describe('SparqlDatasource', function () { }); describe('when the count query request errors', function () { - var result, totalCount; + let result, totalCount; before(function () { request.reset(); let query = { subject: dataFactory.namedNode('abcdef'), features: { quadPattern: true } }; @@ -257,8 +257,8 @@ describe('SparqlDatasource', function () { }); describe('A SparqlDatasource instance with forceTypedLiterals true', function () { - var request = sinon.stub(); - var datasource = new SparqlDatasource({ dataFactory, endpoint: 'http://ex.org/sparql', request: request, forceTypedLiterals: true }); + let request = sinon.stub(); + let datasource = new SparqlDatasource({ dataFactory, endpoint: 'http://ex.org/sparql', request: request, forceTypedLiterals: true }); datasource.initialize(); itShouldExecute(datasource, request, @@ -295,7 +295,7 @@ describe('SparqlDatasource', function () { function itShouldExecute(datasource, request, name, query, constructQuery, countQuery) { describe('executing ' + name, function () { - var result, totalCount; + let result, totalCount; before(function () { request.reset(); request.onFirstCall().returns(test.createHttpResponse(jsonResult, 'application/sparql-results+json')); @@ -306,7 +306,7 @@ function itShouldExecute(datasource, request, name, query, constructQuery, count it('should request a matching CONSTRUCT query', function () { request.should.have.been.called; - var url = URL.parse(request.firstCall.args[0].url, true); + let url = URL.parse(request.firstCall.args[0].url, true); (url.protocol + '//' + url.host + url.pathname).should.equal('http://ex.org/sparql'); url.query.query.should.equal(constructQuery); }); @@ -314,7 +314,7 @@ function itShouldExecute(datasource, request, name, query, constructQuery, count if (countQuery) { it('should request a matching COUNT query', function () { request.should.have.been.calledTwice; - var url = URL.parse(request.secondCall.args[0].url, true); + let url = URL.parse(request.secondCall.args[0].url, true); (url.protocol + '//' + url.host + url.pathname).should.equal('http://ex.org/sparql'); url.query.query.should.equal(countQuery); }); diff --git a/packages/feature-memento/lib/controllers/MementoControllerExtension.js b/packages/feature-memento/lib/controllers/MementoControllerExtension.js index 502f37c5..407ae058 100644 --- a/packages/feature-memento/lib/controllers/MementoControllerExtension.js +++ b/packages/feature-memento/lib/controllers/MementoControllerExtension.js @@ -1,7 +1,7 @@ /*! @license MIT ©2016 Miel Vander Sande, Ghent University - imec */ /* A MementoControllerExtension extends Triple Pattern Fragments responses with Memento headers. */ -var Controller = require('@ldf/core').controllers.Controller, +let Controller = require('@ldf/core').controllers.Controller, TimegateController = require('./TimegateController'), url = require('url'), _ = require('lodash'); @@ -10,20 +10,20 @@ var Controller = require('@ldf/core').controllers.Controller, class MementoControllerExtension extends Controller { constructor(settings) { super(settings); - var timegates = settings.timegates || {}; + let timegates = settings.timegates || {}; this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, settings.urlData); this._timegateBaseUrl = timegates.baseURL || '/timegate/'; } // Add Memento Link headers _handleRequest(request, response, next, settings) { - var datasource = settings.query.datasource, + let datasource = settings.query.datasource, memento = this._invertedTimegateMap[settings.datasource.id], requestQuery = request.url.match(/\?.*|$/)[0]; // Add link to original if it is a memento if (memento && memento.interval && memento.interval.length === 2) { - var timegatePath = this._timegateBaseUrl + memento.memento, + let timegatePath = this._timegateBaseUrl + memento.memento, timegateUrl = url.format(_.defaults({ pathname: timegatePath }, request.parsedUrl)), originalUrl = memento.original + requestQuery, datetime = new Date(memento.interval[0]).toUTCString(); @@ -33,7 +33,7 @@ class MementoControllerExtension extends Controller { } // Add timegate link if resource is not a memento else { - var timegateSettings = settings.datasource.timegate, timegate; + let timegateSettings = settings.datasource.timegate, timegate; // If a timegate URL is given, use it if (typeof timegateSettings === 'string') timegate = timegateSettings + requestQuery; diff --git a/packages/feature-memento/lib/controllers/TimegateController.js b/packages/feature-memento/lib/controllers/TimegateController.js index 6984816a..6992ddf1 100644 --- a/packages/feature-memento/lib/controllers/TimegateController.js +++ b/packages/feature-memento/lib/controllers/TimegateController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* An TimegateController responds to timegate requests */ -var Controller = require('@ldf/core').controllers.Controller, +let Controller = require('@ldf/core').controllers.Controller, _ = require('lodash'), url = require('url'), Util = require('@ldf/core').Util; @@ -14,7 +14,7 @@ class TimegateController extends Controller { this._first = true; // Settings for timegate - var timegates = options.timegates || {}; + let timegates = options.timegates || {}; this._timemaps = TimegateController.parseTimegateMap(timegates.mementos); // Set up path matching @@ -36,8 +36,8 @@ class TimegateController extends Controller { } static parseInvertedTimegateMap(mementos, urlData) { - var timemaps = TimegateController.parseTimegateMap(mementos); - var invertedTimegateMap = {}; + let timemaps = TimegateController.parseTimegateMap(mementos); + let invertedTimegateMap = {}; _.forIn(timemaps, function (versions, timeGateId) { versions.forEach(function (version) { invertedTimegateMap[version.datasourceId] = { @@ -52,7 +52,7 @@ class TimegateController extends Controller { // Perform time negotiation if applicable _handleRequest(request, response, next) { - var timegateMatch = this._matcher.exec(request.url), + let timegateMatch = this._matcher.exec(request.url), datasource = timegateMatch && timegateMatch[1], timemapDetails = datasource && this._timemaps[datasource]; @@ -63,16 +63,16 @@ class TimegateController extends Controller { return response.end(); // Try to find the memento closest to the requested date - var acceptDatetime = toDate(request.headers['accept-datetime']), + let acceptDatetime = toDate(request.headers['accept-datetime']), memento = this._getClosestMemento(timemapDetails, acceptDatetime); if (memento) { // Determine the URL of the memento - var mementoUrl = _.assign(request.parsedUrl, { pathname: memento.datasource.path }); + let mementoUrl = _.assign(request.parsedUrl, { pathname: memento.datasource.path }); mementoUrl = url.format(mementoUrl); // Determine the URL of the original resource - var originalBaseURL = timemapDetails.original, originalUrl; + let originalBaseURL = timemapDetails.original, originalUrl; if (!originalBaseURL) originalUrl = _.defaults({ pathname: datasource }, request.parsedUrl); else @@ -100,7 +100,7 @@ class TimegateController extends Controller { * @param sorted: bool. If not sorted, the timemap will be sorted using the start time in the interval. * eg: - var timemap = [ + const timemap = [ {"datasource": "dbpedia_2012", "interval": ["2011-10-20T12:22:24Z", new Date("2012-10-19T12:22:24Z")]}, {"datasource": "dbpedia_2015", "interval": ["2014-10-20T12:22:24Z", ""]}, {"datasource": "dbpedia_2013", "interval": [new Date("2012-10-20T12:22:24Z"), new Date("2013-10-19T12:22:24Z")]}, @@ -123,18 +123,18 @@ class TimegateController extends Controller { if (unsorted) sortTimemap(timemap); // if the accept_datetime is less than the first memento, return first memento - var firstMemento = timemap[0], + let firstMemento = timemap[0], firstMementoDatetime = toDate(firstMemento.interval[0]).getTime(); if (acceptDatetime <= firstMementoDatetime) return firstMemento; // return the latest memento if the accept datetime is after it - var lastMemento = timemap[timemap.length - 1], + let lastMemento = timemap[timemap.length - 1], lastMementoDatetime = toDate(lastMemento.interval[1]).getTime(); if (acceptDatetime >= lastMementoDatetime) return lastMemento; // check if the accept datetime falls within any intervals defined in the data sources. - for (var i = 0, memento; memento = timemap[i]; i++) { - var startTime = memento.interval[0].getTime(), + for (let i = 0, memento; memento = timemap[i]; i++) { + let startTime = memento.interval[0].getTime(), endTime = memento.interval[1].getTime(); if (isFinite(startTime) && isFinite(endTime)) { if (startTime > acceptDatetime) return timemap[i - 1]; diff --git a/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js b/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js index f1af894f..d7298146 100644 --- a/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js +++ b/packages/feature-memento/lib/views/memento/QuadPatternFragmentsHtmlView-Memento.js @@ -1,7 +1,7 @@ /*! @license MIT ©2016 Ruben Verborgh, Ghent University - imec */ /* A MementoHtmlViewExtension extends the Quad Pattern Fragments HTML view with Memento details. */ -var HtmlView = require('@ldf/core').views.HtmlView, +let HtmlView = require('@ldf/core').views.HtmlView, TimegateController = require('../../controllers/TimegateController'), path = require('path'); @@ -9,13 +9,13 @@ var HtmlView = require('@ldf/core').views.HtmlView, class MementoHtmlViewExtension extends HtmlView { constructor(settings) { super('QuadPatternFragments:Before', settings); - var timegates = settings.timegates || {}; + let timegates = settings.timegates || {}; this._invertedTimegateMap = TimegateController.parseInvertedTimegateMap(timegates.mementos, settings.urlData); } // Renders the view with the given settings to the response _render(settings, request, response, done) { - var memento = this._invertedTimegateMap[settings.datasource.id]; + let memento = this._invertedTimegateMap[settings.datasource.id]; if (!memento) return done(); this._renderTemplate(path.join(__dirname, 'memento-details'), { diff --git a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js index e99eee57..a6de4818 100644 --- a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js +++ b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2018 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /** A QuadPatternFragmentsController responds to requests for TPFs and QPFs */ -var Controller = require('@ldf/core').controllers.Controller, +let Controller = require('@ldf/core').controllers.Controller, url = require('url'), _ = require('lodash'); @@ -26,7 +26,7 @@ class QuadPatternFragmentsController extends Controller { // Try to serve the requested fragment _handleRequest(request, response, next) { // Create the query from the request by calling the fragment routers - var requestParams = { url: request.parsedUrl, headers: request.headers }, + let requestParams = { url: request.parsedUrl, headers: request.headers }, query = this._routers.reduce(function (query, router) { try { router.extractQueryParams(requestParams, query); } catch (e) { /* ignore routing errors */ } @@ -34,20 +34,20 @@ class QuadPatternFragmentsController extends Controller { }, { features: [] }); // Execute the query on the data source - var datasource = query.features.datasource && this._datasources[query.datasource]; + let datasource = query.features.datasource && this._datasources[query.datasource]; delete query.features.datasource; if (!datasource || !datasource.supportsQuery(query) || !this.supportsDatasource(datasource)) return next(); // Generate the query result - var view = this._negotiateView(this.viewName, request, response), + let view = this._negotiateView(this.viewName, request, response), settings = this._createFragmentMetadata(request, query, datasource); settings.results = datasource.select(query, function (error) { error && next(error); }); // Execute the extensions and render the query result - var extensions = this._extensions, extensionId = 0; + let extensions = this._extensions, extensionId = 0; (function nextExtension(error) { // Log a possible error with the previous extension if (error) @@ -69,7 +69,7 @@ class QuadPatternFragmentsController extends Controller { // Create parameterized pattern string for quad patterns _createPatternString(query, supportsQuads) { - var subject = query.subject, predicate = query.predicate, + let subject = query.subject, predicate = query.predicate, object = query.object, graph = ''; // Serialize subject and predicate IRIs or variables subject = subject ? '<' + query.subject + '> ' : '?s '; @@ -93,7 +93,7 @@ class QuadPatternFragmentsController extends Controller { // Creates metadata about the requested fragment _createFragmentMetadata(request, query, datasourceSettings) { // TODO: these URLs should be generated by the routers - var requestUrl = request.parsedUrl, + let requestUrl = request.parsedUrl, // maintain the originally requested query string to avoid encoding differences origQuery = request.url.replace(/[^?]+/, ''), pageUrl = url.format(requestUrl).replace(/\?.*/, origQuery), @@ -105,7 +105,7 @@ class QuadPatternFragmentsController extends Controller { indexUrl = url.format(_.omit(requestUrl, 'search', 'query', 'pathname')) + '/'; // Generate a textual representation of the pattern - var supportsQuads = datasourceSettings.supportedFeatures.quadPattern || false; + let supportsQuads = datasourceSettings.supportedFeatures.quadPattern || false; query.patternString = this._createPatternString(query, supportsQuads); return { @@ -130,7 +130,7 @@ class QuadPatternFragmentsController extends Controller { // Close all data sources close() { - for (var datasourceName in this._datasources) { + for (let datasourceName in this._datasources) { try { this._datasources[datasourceName].close(); } catch (error) { /* ignore closing errors */ } } diff --git a/packages/feature-qpf/lib/routers/QuadPatternRouter.js b/packages/feature-qpf/lib/routers/QuadPatternRouter.js index 5c56018f..5cf60f5f 100644 --- a/packages/feature-qpf/lib/routers/QuadPatternRouter.js +++ b/packages/feature-qpf/lib/routers/QuadPatternRouter.js @@ -3,14 +3,14 @@ const stringToTerm = require('rdf-string').stringToTerm; -var iriMatcher = /^(][^"<>]*)>?$/; -var literalMatcher = /^("[^]*")(?:|\^\^]+)>?|@[a-z0-9\-]+)$/i; -var prefixedNameMatcher = /^([a-z0-9\-]*):([^\/#:]*)$/i; +let iriMatcher = /^(][^"<>]*)>?$/; +let literalMatcher = /^("[^]*")(?:|\^\^]+)>?|@[a-z0-9\-]+)$/i; +let prefixedNameMatcher = /^([a-z0-9\-]*):([^\/#:]*)$/i; // Clients use `DEFAULT_GRAPH` as value for `graph` to indicate the default graph -var DEFAULT_GRAPH = 'urn:ldf:defaultGraph'; +let DEFAULT_GRAPH = 'urn:ldf:defaultGraph'; // However, users might find "@default" easier to type (not spec-compatible) -var DEFAULT_GRAPH_ALT = '@default'; +let DEFAULT_GRAPH_ALT = '@default'; // Creates a new QuadPatternRouter class QuadPatternRouter { @@ -21,7 +21,7 @@ class QuadPatternRouter { // Extracts triple or quad pattern parameters from the request and add them to the query extractQueryParams(request, query) { - var queryString = request.url && request.url.query, match, + let queryString = request.url && request.url.query, match, hasTriplePattern = false, hasQuadPattern = false; // Try to extract a subject IRI @@ -63,7 +63,7 @@ class QuadPatternRouter { // Expands a prefixed named into a full IRI _expandIRI(name) { - var match = prefixedNameMatcher.exec(name), prefix; + let match = prefixedNameMatcher.exec(name), prefix; return match && (prefix = this._prefixes[match[1]]) ? prefix + match[2] : name; } } diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js index 9282801e..7d65fe46 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* A QuadPatternFragmentsRdfView represents a TPF or QPF in HTML. */ -var HtmlView = require('@ldf/core').views.HtmlView, +let HtmlView = require('@ldf/core').views.HtmlView, join = require('path').join; // Creates a new QuadPatternFragmentsHtmlView @@ -15,7 +15,7 @@ class QuadPatternFragmentsHtmlView extends HtmlView { // Renders the view with the given settings to the response _render(settings, request, response, done) { // Read the data and metadata - var self = this, quads = settings.quads = [], results = settings.results; + let self = this, quads = settings.quads = [], results = settings.results; results.on('data', function (triple) { quads.push(triple); }); results.on('end', function () { settings.metadata && renderHtml(); }); results.getProperty('metadata', function (metadata) { @@ -25,7 +25,7 @@ class QuadPatternFragmentsHtmlView extends HtmlView { // Generates the HTML after the data and metadata have been retrieved function renderHtml() { - var template = settings.datasource.role === 'index' ? 'index' : 'datasource'; + let template = settings.datasource.role === 'index' ? 'index' : 'datasource'; settings.extensions = { Before: null, FormBefore: null, FormAfter: null, QuadBefore: 'function', QuadAfter: 'function', After: null }; self._renderTemplate(join(self.viewDirectory, template), settings, request, response, done); } diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js index 085718da..d8dba226 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -1,10 +1,10 @@ /*! @license MIT ©2015-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ /* A QuadPatternFragmentsRdfView represents a Quad Pattern Fragment in RDF. */ -var RdfView = require('@ldf/core').views.RdfView, +let RdfView = require('@ldf/core').views.RdfView, stringQuadToQuad = require('rdf-string').stringQuadToQuad; -var dcTerms = 'http://purl.org/dc/terms/', +let dcTerms = 'http://purl.org/dc/terms/', rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', xsd = 'http://www.w3.org/2001/XMLSchema#', sd = 'http://www.w3.org/ns/sparql-service-description#', @@ -19,7 +19,7 @@ class QuadPatternFragmentsRdfView extends RdfView { // Generates quads by sending them to the data and/or metadata callbacks _generateRdf(settings, data, metadata, done) { - var datasource = settings.datasource, fragment = settings.fragment, query = settings.query, + let datasource = settings.datasource, fragment = settings.fragment, query = settings.query, results = settings.results, self = this, metadataDone = false; // Add data source metadata @@ -91,7 +91,7 @@ class QuadPatternFragmentsRdfView extends RdfView { datasource.url && metadata(this.quad({ subject: fragment.pageUrl, predicate: dcTerms + 'source', object: datasource.url })); // Total pattern matches count - var totalCount = meta.totalCount; + let totalCount = meta.totalCount; metadata(this.quad({ subject: fragment.pageUrl, predicate: hydra + 'totalItems', object: '"' + totalCount + '"^^' + xsd + 'integer' })); metadata(this.quad({ subject: fragment.pageUrl, predicate: voID + 'triples', object: '"' + totalCount + '"^^' + xsd + 'integer' })); diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html b/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html index db7903e0..d5f78f24 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html +++ b/packages/feature-qpf/lib/views/quadpatternfragments/fragment.html @@ -1,9 +1,9 @@ <% /* @license MIT ©2013-2017 Ruben Verborgh and Ruben Taelman, Ghent University - imec */ -%> <% - var sd = 'http://www.w3.org/ns/sparql-service-description#'; + const sd = 'http://www.w3.org/ns/sparql-service-description#'; - var patternKind = datasource.supportsQuads ? 'triple/quad' : 'triple'; - var components = !datasource.supportsQuads ? ['subject', 'predicate', 'object'] + const patternKind = datasource.supportsQuads ? 'triple/quad' : 'triple'; + const components = !datasource.supportsQuads ? ['subject', 'predicate', 'object'] : ['subject', 'predicate', 'object', 'graph']; %>
      @@ -42,7 +42,7 @@

      <%= capitalizeFirst(datasource.title) %>

      Matches in <%= datasource.title %> for <%= query.patternString %>

      <% - var totalEstimate = metadata.totalCount, + const totalEstimate = metadata.totalCount, offset = query.offset || 0, limit = query.limit || quads.length, start = offset + 1, end = offset + quads.length, hasPrev = offset > 0, hasNext = totalEstimate > end, @@ -71,7 +71,7 @@

      Matches in <%= datasource.title %> for <%= query.pattern

        <% quads.forEach(function (quad) { - var subject = quad.subject.value, predicate = quad.predicate.value, object = quad.object.value, graph = quad.graph.value, urlAppendix = quad.urlAppendix ? quad.urlAppendix : ''; + const subject = quad.subject.value, predicate = quad.predicate.value, object = quad.object.value, graph = quad.graph.value, urlAppendix = quad.urlAppendix ? quad.urlAppendix : ''; -%>
      • <%- extensions.QuadBefore({ quad: quad }) %> @@ -87,7 +87,7 @@

        Matches in <%= datasource.title %> for <%= query.pattern shorten(object) %><% } else { - var type = quad.object.datatype, + const type = quad.object.datatype, language = quad.object.language -%> <% diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/index.html b/packages/feature-qpf/lib/views/quadpatternfragments/index.html index 391d595e..f6e99dbf 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/index.html +++ b/packages/feature-qpf/lib/views/quadpatternfragments/index.html @@ -7,7 +7,7 @@

        Available datasets

        Browse the following datasets as Triple/Quad Pattern Fragments:

        <% Object.keys(datasources).forEach(function (datasourceName) { - var datasource = datasources[datasourceName]; + const datasource = datasources[datasourceName]; if (datasource.hide) return; %>
        <%= datasource.title %>
        <%= datasource.description || ' ' %>
        diff --git a/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js index 5ca3ce03..8ac6bd21 100644 --- a/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js +++ b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js @@ -1,11 +1,11 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var QuadPatternFragmentsController = require('../../').controllers.QuadPatternFragmentsController; +let QuadPatternFragmentsController = require('../../').controllers.QuadPatternFragmentsController; -var request = require('supertest'), +let request = require('supertest'), DummyServer = require('../../../../test/DummyServer'), http = require('http'); -var QuadPatternFragmentsHtmlView = require('../../').views.quadpatternfragments.QuadPatternFragmentsHtmlView, +let QuadPatternFragmentsHtmlView = require('../../').views.quadpatternfragments.QuadPatternFragmentsHtmlView, QuadPatternFragmentsRdfView = require('../../').views.quadpatternfragments.QuadPatternFragmentsRdfView, UrlData = require('@ldf/core').UrlData; @@ -21,7 +21,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('A QuadPatternFragmentsController instance with 3 routers', function () { - var controller, client, routerA, routerB, routerC, datasource, datasources, view, prefixes; + let controller, client, routerA, routerB, routerC, datasource, datasources, view, prefixes; before(function () { routerA = { extractQueryParams: sinon.stub() }; routerB = { extractQueryParams: sinon.stub().throws(new Error('second router error')) }; @@ -69,7 +69,7 @@ describe('QuadPatternFragmentsController', function () { it('should call the first router with the request and an empty query', function () { routerA.extractQueryParams.should.have.been.calledOnce; - var args = routerA.extractQueryParams.firstCall.args; + let args = routerA.extractQueryParams.firstCall.args; expect(args[0]).to.have.property('url'); expect(args[0].url).to.have.property('path', '/my-datasource?a=b&c=d'); expect(args[0].url).to.have.property('pathname', '/my-datasource'); @@ -100,20 +100,20 @@ describe('QuadPatternFragmentsController', function () { }); it('should verify whether the data source supports the query', function () { - var query = routerC.extractQueryParams.firstCall.args[1]; + let query = routerC.extractQueryParams.firstCall.args[1]; datasource.supportsQuery.should.have.been.calledOnce; datasource.supportsQuery.should.have.been.calledWith(query); }); it('should send the query to the right data source', function () { - var query = routerC.extractQueryParams.firstCall.args[1]; + let query = routerC.extractQueryParams.firstCall.args[1]; datasource.select.should.have.been.calledOnce; datasource.select.should.have.been.calledWith(query); }); it('should pass the query result to the output view', function () { view.render.should.have.been.calledOnce; - var args = view.render.firstCall.args; + let args = view.render.firstCall.args; args[0].should.be.an('object'); // settings args[1].should.be.an.instanceof(http.IncomingMessage); @@ -122,8 +122,8 @@ describe('QuadPatternFragmentsController', function () { it('should pass the correct settings to the view', function () { view.render.should.have.been.calledOnce; - var query = routerC.extractQueryParams.firstCall.args[1]; - var settings = view.render.firstCall.args[0]; + let query = routerC.extractQueryParams.firstCall.args[1]; + let settings = view.render.firstCall.args[0]; settings.datasource.should.have.property('title', 'My data'); settings.datasource.should.have.property('index', 'https://example.org/#dataset'); @@ -155,7 +155,7 @@ describe('QuadPatternFragmentsController', function () { }); it('should verify whether the data source supports the query', function () { - var query = routerC.extractQueryParams.firstCall.args[1]; + let query = routerC.extractQueryParams.firstCall.args[1]; datasource.supportsQuery.should.have.been.calledOnce; datasource.supportsQuery.should.have.been.calledWith(query); }); @@ -167,9 +167,9 @@ describe('QuadPatternFragmentsController', function () { }); describe('A QuadPatternFragmentsController instance with 2 views', function () { - var controller, client, htmlView, rdfView; + let controller, client, htmlView, rdfView; before(function () { - var datasource = { + let datasource = { supportsQuery: sinon.stub().returns(true), select: sinon.stub().returns({ on: function (event, callback) { @@ -179,7 +179,7 @@ describe('QuadPatternFragmentsController', function () { }), supportedFeatures: { triplePattern: true }, }; - var router = { + let router = { extractQueryParams: function (request, query) { query.features.datasource = true; query.datasource = '/my-datasource'; @@ -202,7 +202,7 @@ describe('QuadPatternFragmentsController', function () { } describe('receiving a request without Accept header', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/my-datasource') @@ -223,7 +223,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('receiving a request with an Accept header of */*', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/my-datasource').set('Accept', '*/*') @@ -244,7 +244,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('receiving a request with an Accept header of text/html', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/my-datasource').set('Accept', 'text/html') @@ -265,7 +265,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('receiving a request with an Accept header of text/turtle', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/my-datasource').set('Accept', 'text/turtle') @@ -286,7 +286,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('receiving a request with an Accept header of text/n3', function () { - var response; + let response; before(function (done) { resetAll(); client.get('/my-datasource').set('Accept', 'text/n3') @@ -308,14 +308,14 @@ describe('QuadPatternFragmentsController', function () { }); describe('A QuadPatternFragmentsController instance without matching view', function () { - var controller, client; + let controller, client; before(function () { - var datasource = { + let datasource = { supportsQuery: sinon.stub().returns(true), select: sinon.stub(), supportedFeatures: { triplePattern: true }, }; - var router = { + let router = { extractQueryParams: function (request, query) { query.features.datasource = true; query.datasource = '/my-datasource'; @@ -329,7 +329,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('receiving a request without Accept header', function () { - var response; + let response; before(function (done) { client.get('/my-datasource') .end(function (error, res) { response = res; done(error); }); @@ -349,7 +349,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('receiving a request with an Accept header of text/html', function () { - var response; + let response; before(function (done) { client.get('/my-datasource').set('Accept', 'text/html') .end(function (error, res) { response = res; done(error); }); @@ -370,7 +370,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('A QuadPatternFragmentsController instance with a datasource that synchronously errors', function () { - var controller, client, router, datasource, error, view; + let controller, client, router, datasource, error, view; before(function () { router = { extractQueryParams: sinon.spy(function (request, query) { @@ -409,7 +409,7 @@ describe('QuadPatternFragmentsController', function () { }); describe('A QuadPatternFragmentsController instance with a datasource that asynchronously errors', function () { - var controller, client, router, datasource, error, view; + let controller, client, router, datasource, error, view; before(function () { router = { extractQueryParams: sinon.spy(function (request, query) { diff --git a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js index bba35073..347eecfa 100644 --- a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js +++ b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js @@ -1,5 +1,5 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var QuadPatternRouter = require('../../').routers.QuadPatternRouter; +let QuadPatternRouter = require('../../').routers.QuadPatternRouter; const dataFactory = require('n3').DataFactory; describe('QuadPatternRouter', function () { @@ -14,7 +14,7 @@ describe('QuadPatternRouter', function () { }); describe('A QuadPatternRouter instance', function () { - var router = new QuadPatternRouter({ dataFactory }); + let router = new QuadPatternRouter({ dataFactory }); describe('extractUrlParams', function () { describe('with an existing query', function () { @@ -229,7 +229,7 @@ describe('QuadPatternRouter', function () { }); describe('A QuadPatternRouter instance with prefixes', function () { - var router = new QuadPatternRouter({ + let router = new QuadPatternRouter({ prefixes: { foo: 'http://example.org/foo#', http: 'http://www.w3.org/2011/http#', diff --git a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js index a847c10c..acb957dd 100644 --- a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js +++ b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var QuadPatternFragmentsRdfView = require('../../../').views.quadpatternfragments.QuadPatternFragmentsRdfView; +let QuadPatternFragmentsRdfView = require('../../../').views.quadpatternfragments.QuadPatternFragmentsRdfView; -var _ = require('lodash'), +let _ = require('lodash'), fs = require('fs'), path = require('path'), AsyncIterator = require('asynciterator'), @@ -21,8 +21,8 @@ describe('QuadPatternFragmentsRdfView', function () { }); describe('A QuadPatternFragmentsRdfView instance', function () { - var view = new QuadPatternFragmentsRdfView({ dataFactory }); - var settings = { + let view = new QuadPatternFragmentsRdfView({ dataFactory }); + let settings = { datasource: { title: 'My data', index: 'http://ex.org/#dataset', @@ -61,13 +61,13 @@ describe('QuadPatternFragmentsRdfView', function () { function (extension, format) { describe('when render is called for ' + format, function () { function readAsset(name) { - var file = path.join(__dirname, '../../../../../test/assets/', name + '.' + extension); + let file = path.join(__dirname, '../../../../../test/assets/', name + '.' + extension); return fs.readFileSync(file, 'utf8'); } describe('with an empty triple stream', function () { - var results = AsyncIterator.empty(); - var response = test.createStreamCapture(); + let results = AsyncIterator.empty(); + let response = test.createStreamCapture(); before(function (done) { settings.results = results; response.getHeader = sinon.stub().returns(format); @@ -81,12 +81,12 @@ describe('QuadPatternFragmentsRdfView', function () { }); describe('with a non-empty triple stream that writes metadata first', function () { - var results = AsyncIterator.fromArray([ + let results = AsyncIterator.fromArray([ dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('b'), dataFactory.namedNode('c'), dataFactory.defaultGraph()), dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('d'), dataFactory.namedNode('e'), dataFactory.defaultGraph()), dataFactory.quad(dataFactory.namedNode('f'), dataFactory.namedNode('g'), dataFactory.namedNode('h'), dataFactory.defaultGraph()), ]); - var response = test.createStreamCapture(); + let response = test.createStreamCapture(); before(function (done) { settings.results = new AsyncIterator.TransformIterator(); response.getHeader = sinon.stub().returns(format); @@ -101,12 +101,12 @@ describe('QuadPatternFragmentsRdfView', function () { }); describe('with a non-empty triple stream that writes metadata afterwards', function () { - var results = AsyncIterator.fromArray([ + let results = AsyncIterator.fromArray([ dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('b'), dataFactory.namedNode('c'), dataFactory.defaultGraph()), dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('d'), dataFactory.namedNode('e'), dataFactory.defaultGraph()), dataFactory.quad(dataFactory.namedNode('f'), dataFactory.namedNode('g'), dataFactory.namedNode('h'), dataFactory.defaultGraph()), ]); - var response = test.createStreamCapture(); + let response = test.createStreamCapture(); before(function (done) { settings.results = results; response.getHeader = sinon.stub().returns(format); @@ -122,8 +122,8 @@ describe('QuadPatternFragmentsRdfView', function () { }); describe('with a query with a limit but no offset', function () { - var results = AsyncIterator.empty(); - var settings = { + let results = AsyncIterator.empty(); + let settings = { datasource: { }, fragment: { pageUrl: 'mypage', @@ -133,7 +133,7 @@ describe('QuadPatternFragmentsRdfView', function () { }, query: { limit: 100 }, }; - var response = test.createStreamCapture(); + let response = test.createStreamCapture(); before(function (done) { settings.results = results; response.getHeader = sinon.stub().returns(format); @@ -155,8 +155,8 @@ describe('QuadPatternFragmentsRdfView', function () { }); describe('with a query with a limit and offset before the end', function () { - var results = AsyncIterator.empty(); - var settings = { + let results = AsyncIterator.empty(); + let settings = { datasource: { }, fragment: { pageUrl: 'mypage', @@ -166,7 +166,7 @@ describe('QuadPatternFragmentsRdfView', function () { }, query: { limit: 100, offset: 1133 }, }; - var response = test.createStreamCapture(); + let response = test.createStreamCapture(); before(function (done) { settings.results = results; response.getHeader = sinon.stub().returns(format); @@ -188,8 +188,8 @@ describe('QuadPatternFragmentsRdfView', function () { }); describe('with a query with a limit and offset past the end', function () { - var results = AsyncIterator.empty(); - var settings = { + let results = AsyncIterator.empty(); + let settings = { datasource: { }, fragment: { pageUrl: 'mypage', @@ -199,7 +199,7 @@ describe('QuadPatternFragmentsRdfView', function () { }, query: { limit: 100, offset: 1135 }, }; - var response = test.createStreamCapture(); + let response = test.createStreamCapture(); before(function (done) { settings.results = results; response.getHeader = sinon.stub().returns(format); diff --git a/packages/feature-summary/bin/generate-summary b/packages/feature-summary/bin/generate-summary index a79932ba..eae0c899 100755 --- a/packages/feature-summary/bin/generate-summary +++ b/packages/feature-summary/bin/generate-summary @@ -2,31 +2,31 @@ /*! @license MIT ©2014-2016 Miel Vander Sande, Ghent University - imec */ /* This script generates data summaries for a certain server dataset */ -var N3 = require('n3'), +let N3 = require('n3'), fs = require('fs'), path = require('path'), _ = require('lodash'); -var regex = /^(http[s]?:\/?\/?[^:\/\s]+\/).*/; +let regex = /^(http[s]?:\/?\/?[^:\/\s]+\/).*/; -var DS_NS = 'http://semweb.mmlab.be/ns/datasummaries#', +let DS_NS = 'http://semweb.mmlab.be/ns/datasummaries#', RDF_NS = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'; // Parse arguments -var args = process.argv.slice(2); +let args = process.argv.slice(2); if (args.length < 1 || args.length > 2) { console.error('usage: generate-summary config.json [datasourceName]'); process.exit(1); } // Init variables -var configFile = args[0], +let configFile = args[0], config = JSON.parse(fs.readFileSync(configFile)), datasources = config.datasources || {}, datasourceNames = args[1] ? [args[1]] : (datasources && _.keys(datasources)); // Configure preset URLs -var baseURL = config.baseURL ? config.baseURL.replace(/\/?$/, '/') : '/', +let baseURL = config.baseURL ? config.baseURL.replace(/\/?$/, '/') : '/', baseURLRoot = baseURL.match(/^(?:https?:\/\/[^\/]+)?/)[0], baseURLPath = baseURL.substr(baseURLRoot.length), datasourceBase = baseURLPath.substr(1); @@ -35,21 +35,21 @@ generate(datasourceNames.pop()); function generate(datasourceName) { // Create data source - var datasourceConfig = datasources[datasourceName]; + let datasourceConfig = datasources[datasourceName]; try { // Avoid illegal URI characters in data source path - var datasourcePath = datasourceBase + encodeURI(datasourceName); + let datasourcePath = datasourceBase + encodeURI(datasourceName); // Retrieve the data source class and settings - var Datasource = require(path.join('../lib/datasources/', datasourceConfig.type)), + let Datasource = require(path.join('../lib/datasources/', datasourceConfig.type)), settings = _.defaults(datasourceConfig.settings || {}, config); // Create the data source - var datasource = new Datasource(settings), + let datasource = new Datasource(settings), url = baseURLRoot + '/' + datasourcePath; - var writer = new N3.Writer({ prefixes: { ds: DS_NS, rdf: RDF_NS } }); + let writer = new N3.Writer({ prefixes: { ds: DS_NS, rdf: RDF_NS } }); fromDataSource(url, datasource, function (triple) { writer.addQuad(triple); @@ -67,7 +67,7 @@ function generate(datasourceName) { } function fromDataSource(uri, datasource, callback, end, chunksize) { - var capabilities = Object.create(null); + let capabilities = Object.create(null); // Process dataset in batches when possible if (datasource.supportsQuery({ features: { limit: true, offset: true } })) @@ -82,11 +82,11 @@ function fromDataSource(uri, datasource, callback, end, chunksize) { // Processes DataSource in chunks function processSet(limit, offset) { offset = offset || 0; - var count = 0; + let count = 0; - var stream = datasource.select({ limit: limit, offset: offset }, console.error) + const stream = datasource.select({ limit: limit, offset: offset }, console.error) .getProperty('metadata', function (metadata) { - var progress = Math.round((offset / metadata.totalCount) * 100); + let progress = Math.round((offset / metadata.totalCount) * 100); console.log(progress); stream.on('data', function (triple) { @@ -112,7 +112,7 @@ function fromDataSource(uri, datasource, callback, end, chunksize) { if (!capabilities[triple.predicate]) capabilities[triple.predicate] = { subjectAuth: {}, objectAuth: {} }; - var subjectAuth = regex.exec(triple.subject), + let subjectAuth = regex.exec(triple.subject), objectAuth = regex.exec(triple.object); if (subjectAuth !== null) { @@ -127,17 +127,17 @@ function fromDataSource(uri, datasource, callback, end, chunksize) { } function endSummary() { - var cnt = 0; + let cnt = 0; - for (var predicate in capabilities) { - var bnode = '_:cap' + cnt++; + for (let predicate in capabilities) { + let bnode = '_:cap' + cnt++; callback({ subject: baseURL, predicate: DS_NS + 'capability', object: bnode }); callback({ subject: bnode, predicate: DS_NS + 'predicate', object: predicate }); - var capability = capabilities[predicate]; - for (var subjectAuth in capability.subjectAuth) + let capability = capabilities[predicate]; + for (let subjectAuth in capability.subjectAuth) callback({ subject: bnode, predicate: DS_NS + 'sbjAuthority', object: subjectAuth }); - for (var objectAuth in capability.objectAuth) + for (let objectAuth in capability.objectAuth) callback({ subject: bnode, predicate: DS_NS + 'objAuthority', object: objectAuth }); } end(); diff --git a/packages/feature-summary/lib/controllers/SummaryController.js b/packages/feature-summary/lib/controllers/SummaryController.js index 73a27b9d..549b1327 100644 --- a/packages/feature-summary/lib/controllers/SummaryController.js +++ b/packages/feature-summary/lib/controllers/SummaryController.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* An SummaryController responds to requests for summaries */ -var Controller = require('@ldf/core').controllers.Controller, +let Controller = require('@ldf/core').controllers.Controller, fs = require('fs'), path = require('path'), StreamParser = require('n3').StreamParser, @@ -13,7 +13,7 @@ class SummaryController extends Controller { options = options || {}; super(options); // Settings for data summaries - var summaries = options.summaries || {}; + let summaries = options.summaries || {}; this._enabled = summaries.dir || summaries.path; this._summariesFolder = summaries.dir || path.join(__dirname, '../../summaries'); // Set up path matching @@ -25,12 +25,12 @@ class SummaryController extends Controller { if (!this._enabled) return next(); - var summaryMatch = this._matcher && this._matcher.exec(request.url), datasource; + let summaryMatch = this._matcher && this._matcher.exec(request.url), datasource; if (datasource = summaryMatch && summaryMatch[1]) { - var summaryFile = path.join(this._summariesFolder, datasource + '.ttl'); + let summaryFile = path.join(this._summariesFolder, datasource + '.ttl'); // Read summary triples from file - var streamParser = new StreamParser({ blankNodePrefix: '', baseIRI: this._baseUrl.pathname }), + let streamParser = new StreamParser({ blankNodePrefix: '', baseIRI: this._baseUrl.pathname }), inputStream = fs.createReadStream(summaryFile); // If the summary cannot be read, invoke the next controller without error @@ -41,7 +41,7 @@ class SummaryController extends Controller { response.setHeader('Cache-Control', 'public,max-age=604800'); // 14 days // Render the summary - var view = this._negotiateView('Summary', request, response); + let view = this._negotiateView('Summary', request, response); view.render({ prefixes: this._prefixes, results: streamParser }, request, response); } else diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js index 0213dac6..26958b24 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsHtmlView-Summary.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* A SummaryHtmlViewExtension extends the Quad Pattern Fragments RDF view with a summary link. */ -var HtmlView = require('@ldf/core').views.HtmlView, +let HtmlView = require('@ldf/core').views.HtmlView, path = require('path'); // Creates a new SummaryHtmlViewExtension diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js index 63a0fa10..17d8e72a 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js @@ -1,9 +1,9 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* A SummaryRdfViewExtension extends the Quad Pattern Fragments RDF view with a summary link. */ -var RdfView = require('@ldf/core').views.RdfView; +let RdfView = require('@ldf/core').views.RdfView; -var ds = 'http://semweb.mmlab.be/ns/datasummaries#'; +let ds = 'http://semweb.mmlab.be/ns/datasummaries#'; // Creates a new SummaryRdfViewExtension class SummaryRdfViewExtension extends RdfView { diff --git a/packages/feature-summary/lib/views/summary/SummaryRdfView.js b/packages/feature-summary/lib/views/summary/SummaryRdfView.js index c69a5df2..ed9bd6e9 100644 --- a/packages/feature-summary/lib/views/summary/SummaryRdfView.js +++ b/packages/feature-summary/lib/views/summary/SummaryRdfView.js @@ -1,7 +1,7 @@ /*! @license MIT ©2015-2016 Miel Vander Sande, Ghent University - imec */ /* A SummaryRdfView represents a data summary in RDF. */ -var RdfView = require('@ldf/core').views.RdfView; +let RdfView = require('@ldf/core').views.RdfView; // Creates a new SummaryRdfView class SummaryRdfView extends RdfView { diff --git a/packages/feature-summary/test/controllers/SummaryController-test.js b/packages/feature-summary/test/controllers/SummaryController-test.js index 7524c489..a2f1106f 100644 --- a/packages/feature-summary/test/controllers/SummaryController-test.js +++ b/packages/feature-summary/test/controllers/SummaryController-test.js @@ -1,12 +1,12 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var SummaryController = require('../../lib/controllers/SummaryController'); +let SummaryController = require('../../lib/controllers/SummaryController'); -var request = require('supertest'), +let request = require('supertest'), DummyServer = require('../../../../test/DummyServer'), fs = require('fs'), path = require('path'); -var SummaryRdfView = require('../../lib/views/summary/SummaryRdfView.js'); +let SummaryRdfView = require('../../lib/views/summary/SummaryRdfView.js'); describe('SummaryController', function () { describe('The SummaryController module', function () { @@ -24,7 +24,7 @@ describe('SummaryController', function () { }); describe('An SummaryController instance', function () { - var controller, client; + let controller, client; before(function () { controller = new SummaryController({ views: [new SummaryRdfView()], @@ -39,7 +39,7 @@ describe('SummaryController', function () { it('should correctly serve summary in Turtle', function (done) { client.get('/summaries/summary').set('Accept', 'text/turtle').expect(function (response) { - var summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.ttl'), 'utf8'); + let summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.ttl'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'text/turtle;charset=utf-8'); @@ -50,7 +50,7 @@ describe('SummaryController', function () { it('should correctly serve summary in Trig', function (done) { client.get('/summaries/summary').expect(function (response) { - var summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.ttl'), 'utf8'); + let summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.ttl'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'application/trig;charset=utf-8'); @@ -61,7 +61,7 @@ describe('SummaryController', function () { it('should correctly serve summary in ntriples', function (done) { client.get('/summaries/summary').set('Accept', 'application/n-triples').expect(function (response) { - var summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.nt'), 'utf8'); + let summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.nt'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); response.headers.should.have.property('content-type', 'application/n-triples;charset=utf-8'); diff --git a/packages/feature-webid/lib/controllers/WebIDControllerExtension.js b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js index 360d7cd7..d4fe62d5 100644 --- a/packages/feature-webid/lib/controllers/WebIDControllerExtension.js +++ b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js @@ -1,7 +1,7 @@ /*! @license MIT ©2016 Miel Vander Sande, Ghent University - imec */ /* A WebIDControllerExtension extends Triple Pattern Fragments responses with WebID authentication. */ -var http = require('http'), +let http = require('http'), lru = require('lru-cache'), parseCacheControl = require('parse-cache-control'), N3 = require('n3'), @@ -9,7 +9,7 @@ var http = require('http'), Util = require('@ldf/core').Util, Controller = require('@ldf/core').controllers.Controller; -var CERT_NS = 'http://www.w3.org/ns/auth/cert#'; +let CERT_NS = 'http://www.w3.org/ns/auth/cert#'; // Creates a new WebIDControllerExtensionsl class WebIDControllerExtension extends Controller { @@ -25,7 +25,7 @@ class WebIDControllerExtension extends Controller { if (this._protocol !== 'https') // This WebID implementation requires HTTPS return next(); - var self = this, + let self = this, certificate = request.connection.getPeerCertificate(); if (!(certificate.subject && certificate.subject.subjectAltName)) { @@ -34,7 +34,7 @@ class WebIDControllerExtension extends Controller { }); } - var webID = certificate.subject.subjectAltName.replace('uniformResourceIdentifier:', ''); + let webID = certificate.subject.subjectAltName.replace('uniformResourceIdentifier:', ''); this._verifyWebID(webID, certificate.modulus, parseInt(certificate.exponent, 16), function (error, verified, reason) { if (!verified) { @@ -50,7 +50,7 @@ class WebIDControllerExtension extends Controller { // Verify webID _verifyWebID(webID, modulus, exponent, callback) { // request & parse - var parser = n3parser(), + let parser = n3parser(), id = {}; // parse webID @@ -61,7 +61,7 @@ class WebIDControllerExtension extends Controller { switch (triple.predicate) { case CERT_NS + 'modulus': // Add modulus - var literalValue = triple.object.value; + const literalValue = triple.object.value; // Apply parsing method by nodejs id.modulus = literalValue.slice(literalValue.indexOf('00:') === 0 ? 3 : 0).replace(/:/g, '').toUpperCase(); break; @@ -81,19 +81,19 @@ class WebIDControllerExtension extends Controller { } // Try to get WebID from cache - var cachedId = this._cache.get(webID), + let cachedId = this._cache.get(webID), self = this; if (cachedId) verify(cachedId.modulus, cachedId.exponent); else { - var req = http.request(webID, function (res) { + let req = http.request(webID, function (res) { res.setEncoding('utf8'); parser.parse(res, parseTriple); res.on('end', function () { - var cacheControl = parseCacheControl(res.headers['Cache-Control'] || ''); + let cacheControl = parseCacheControl(res.headers['Cache-Control'] || ''); self._cache.set(webID, id, cacheControl['max-age'] || 0); verify(id.modulus, id.exponent); }); @@ -109,7 +109,7 @@ class WebIDControllerExtension extends Controller { _handleForbidden(request, response, options) { // Render the 404 message using the appropriate view - var view = this._negotiateView('Forbidden', request, response), + let view = this._negotiateView('Forbidden', request, response), metadata = { url: request.url, prefixes: this._prefixes, diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x index aeb74dd9..27626eed 100755 --- a/packages/server/bin/ldf-server-migrate-config-3x +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -3,7 +3,7 @@ const fs = require('fs'); const path = require('path'); -var args = process.argv.slice(2); +let args = process.argv.slice(2); if (!(args.length === 1 || (args.length === 2 && args[1] === '--apply'))) { process.stdout.write('usage: ldf-server-migrate-config-3x config.json [--apply]\n'); process.stdout.write(' Migrates an LDF server config file to the new 3.x.x format.\n'); diff --git a/test/DummyServer.js b/test/DummyServer.js index 9fe50562..9f80de1d 100644 --- a/test/DummyServer.js +++ b/test/DummyServer.js @@ -1,10 +1,10 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ -var http = require('http'); +const http = require('http'); /* Dummy server that emulates LinkedDataFragmentsServer */ function DummyServer(controller) { - var server = http.createServer(); + const server = http.createServer(); server.on('request', function (request, response) { // End the response if the controller did not handle the request controller.next = sinon.spy(function (error) { diff --git a/test/test-setup.js b/test/test-setup.js index b5ea724f..4880bce0 100644 --- a/test/test-setup.js +++ b/test/test-setup.js @@ -1,6 +1,6 @@ /*! @license MIT ©2013-2016 Ruben Verborgh, Ghent University - imec */ -var URL = require('url'), +const URL = require('url'), Readable = require('stream').Readable, Writable = require('stream').Writable; @@ -8,7 +8,7 @@ var URL = require('url'), global.sinon = require('sinon'); // Set up the Chai assertion library -var chai = require('chai'); +const chai = require('chai'); global.test = {}; global.expect = chai.expect; global.should = chai.should(); @@ -16,9 +16,9 @@ chai.use(require('sinon-chai')); // Test helper for the extractQueryParams function of routers test.extractQueryParams = function (description, url, intent, query, expectedQuery) { - var router = this; + const router = this; it(description + ' ' + intent, function () { - var result = router.extractQueryParams({ url: URL.parse(url, true) }, query); + const result = router.extractQueryParams({ url: URL.parse(url, true) }, query); expect(result).to.equal(undefined, 'should not return anything'); expect(query).to.deep.equal(expectedQuery, 'should match the expected query'); }); @@ -26,7 +26,7 @@ test.extractQueryParams = function (description, url, intent, query, expectedQue // Creates a dummy HTTP response test.createHttpResponse = function (contents, contentType) { - var response = new Readable(); + const response = new Readable(); response._read = function () {}; response.statusCode = 200; response.headers = { 'content-type': contentType }; @@ -37,7 +37,7 @@ test.createHttpResponse = function (contents, contentType) { // Creates an in-memory stream test.createStreamCapture = function () { - var stream = new Writable({ objectMode: true }); + const stream = new Writable({ objectMode: true }); stream.buffer = ''; stream._write = function (chunk, encoding, callback) { this.buffer += chunk; @@ -49,7 +49,7 @@ test.createStreamCapture = function () { chai.use(function (chai, utils) { // Checks whether the stream contains the given number of elements chai.Assertion.addMethod('streamWithLength', function (expectedLength, callback) { - var stream = utils.flag(this, 'object'), length = 0, self = this; + let stream = utils.flag(this, 'object'), length = 0, self = this; stream.on('data', function () { length++; }); stream.on('end', function () { self.assert(length === expectedLength, From 58a3946d412c91e44b0d5406a315f0f22a071bf1 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 7 Apr 2020 11:44:57 +0200 Subject: [PATCH 096/165] Use arrow callbacks, #104 --- .eslintrc | 1 + packages/core/lib/CliRunner.js | 26 +-- .../core/lib/LinkedDataFragmentsServer.js | 10 +- .../lib/LinkedDataFragmentsServerWorker.js | 16 +- packages/core/lib/controllers/Controller.js | 4 +- packages/core/lib/datasources/Datasource.js | 42 ++--- .../core/lib/datasources/MemoryDatasource.js | 2 +- packages/core/lib/views/HtmlView.js | 6 +- packages/core/lib/views/RdfView.js | 2 +- packages/core/lib/views/View.js | 6 +- packages/core/lib/views/ViewCollection.js | 2 +- .../test/LinkedDataFragmentsServer-test.js | 72 ++++---- .../test/controllers/AssetsController-test.js | 32 ++-- .../core/test/controllers/Controller-test.js | 64 +++---- .../controllers/DereferenceController-test.js | 34 ++-- .../controllers/NotFoundController-test.js | 132 +++++++-------- .../core/test/datasources/Datasource-test.js | 148 ++++++++--------- .../test/routers/DatasourceRouter-test.js | 24 +-- packages/core/test/routers/PageRouter-test.js | 32 ++-- packages/core/test/views/View-test.js | 50 +++--- .../core/test/views/ViewCollection-test.js | 56 +++---- .../lib/datasources/CompositeDatasource.js | 25 ++- .../datasources/CompositeDatasource-test.js | 36 ++-- .../lib/datasources/ExternalHdtDatasource.js | 6 +- .../lib/datasources/HdtDatasource.js | 6 +- .../test/datasources/HdtDatasource-test.js | 42 ++--- .../test/datasources/JsonLdDatasource-test.js | 26 +-- .../lib/datasources/N3Datasource.js | 2 +- .../test/datasources/N3Datasource-test.js | 26 +-- .../lib/datasources/SparqlDatasource.js | 21 ++- .../test/datasources/SparqlDatasource-test.js | 74 ++++----- .../lib/controllers/TimegateController.js | 10 +- .../QuadPatternFragmentsController.js | 4 +- .../QuadPatternFragmentsHtmlView.js | 6 +- .../QuadPatternFragmentsRdfView.js | 8 +- .../QuadPatternFragmentsController-test.js | 156 +++++++++--------- .../test/routers/QuadPatternRouter-test.js | 24 +-- .../QuadPatternFragmentsRdfView-test.js | 64 +++---- packages/feature-summary/bin/generate-summary | 14 +- .../lib/controllers/SummaryController.js | 2 +- .../controllers/SummaryController-test.js | 34 ++-- .../controllers/WebIDControllerExtension.js | 13 +- 42 files changed, 679 insertions(+), 681 deletions(-) diff --git a/.eslintrc b/.eslintrc index 8928fe3a..8451b63f 100644 --- a/.eslintrc +++ b/.eslintrc @@ -98,6 +98,7 @@ wrap-iife: [2, "inside"], yoda: 2, no-var: "error", + prefer-arrow-callback: "error", // Strict Mode strict: [2, "never"], diff --git a/packages/core/lib/CliRunner.js b/packages/core/lib/CliRunner.js index 9c9972fb..2d02f170 100644 --- a/packages/core/lib/CliRunner.js +++ b/packages/core/lib/CliRunner.js @@ -23,16 +23,16 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) let loader = new ComponentsLoader(properties); loader.registerAvailableModuleResources() - .then(function () { + .then(() => { // Start up a cluster master if (cluster.isMaster) { return loader.getConfigConstructorFromUrl(configUri, args[0]) - .then(function (constructor) { - return constructor.makeArguments(true).then(function (args) { + .then((constructor) => { + return constructor.makeArguments(true).then((args) => { startClusterMaster(args[0]); }); }) - .catch(function (e) { + .catch((e) => { stderr.write('Config error:\n'); stderr.write(e + '\n'); process.exit(1); @@ -40,17 +40,17 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) } else { return loader.instantiateFromUrl(configUri, args[0]) - .then(function (worker) { + .then((worker) => { worker.run(cliPort); }) - .catch(function (e) { + .catch((e) => { stderr.write('Instantiation error:\n'); stderr.write(e + '\n'); process.exit(1); }); } }) - .catch(function (e) { + .catch((e) => { stderr.write('Component definition error:\n'); stderr.write(e + '\n'); process.exit(1); @@ -65,8 +65,8 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) cluster.fork(); // Respawn crashed workers - cluster.on('listening', function (worker) { - worker.once('exit', function (code, signal) { + cluster.on('listening', (worker) => { + worker.once('exit', (code, signal) => { if (!worker.exitedAfterDisconnect) { stdout.write('Worker ' + worker.process.pid + 'died with ' + (code || signal) + '. Starting new worker.\n'); cluster.fork(); @@ -75,7 +75,7 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) }); // Disconnect from cluster on SIGINT, so that the process can cleanly terminate - process.once('SIGINT', function () { + process.once('SIGINT', () => { cluster.disconnect(); }); @@ -86,17 +86,17 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) process.removeListener('SIGHUP', respawn); // Retrieve a list of old workers that will be replaced by new ones - let workers = Object.keys(cluster.workers).map(function (id) { return cluster.workers[id]; }); + let workers = Object.keys(cluster.workers).map((id) => { return cluster.workers[id]; }); (function respawnNext() { // If there are still old workers, respawn a new one if (workers.length) { // Wait until the new worker starts listening to kill the old one let newWorker = cluster.fork(); - newWorker.once('listening', function () { + newWorker.once('listening', () => { let worker = workers.pop(); if (!worker) return newWorker.kill(), respawnNext(); // Dead workers are replaced automatically - worker.once('exit', function () { + worker.once('exit', () => { stdout.write('Worker ' + newWorker.process.pid + ' replaces killed worker ' + worker.process.pid + '.\n'); respawnNext(); }); diff --git a/packages/core/lib/LinkedDataFragmentsServer.js b/packages/core/lib/LinkedDataFragmentsServer.js index 073cd785..97100027 100644 --- a/packages/core/lib/LinkedDataFragmentsServer.js +++ b/packages/core/lib/LinkedDataFragmentsServer.js @@ -41,16 +41,16 @@ class LinkedDataFragmentsServer { server._defaultHeaders = options.response && options.response.headers || {}; // Attach event listeners - server.on('error', function (error) { server._reportError(error); }); - server.on('request', function (request, response) { + server.on('error', (error) => { server._reportError(error); }); + server.on('request', (request, response) => { server._accesslogger(request, response); try { server._processRequest(request, response); } catch (error) { server._reportError(request, response, error); } }); - server.on('connection', function (socket) { + server.on('connection', (socket) => { let socketId = sockets++; server._sockets[socketId] = socket; - socket.on('close', function () { delete server._sockets[socketId]; }); + socket.on('close', () => { delete server._sockets[socketId]; }); }); return server; } @@ -96,7 +96,7 @@ LinkedDataFragmentsServer.prototype._processRequest = function (request, respons catch (error) { next(error); } } } - response.on('error', function (error) { self._reportError(request, response, error); }); + response.on('error', (error) => { self._reportError(request, response, error); }); nextController(); }; diff --git a/packages/core/lib/LinkedDataFragmentsServerWorker.js b/packages/core/lib/LinkedDataFragmentsServerWorker.js index c7fc3610..5f66f9a4 100644 --- a/packages/core/lib/LinkedDataFragmentsServerWorker.js +++ b/packages/core/lib/LinkedDataFragmentsServerWorker.js @@ -16,7 +16,7 @@ class LinkedDataFragmentsServerWorker { throw new Error('At least one router must be defined.'); // Create all data sources - Object.keys(config.datasources).forEach(function (datasourceId) { + Object.keys(config.datasources).forEach((datasourceId) => { let datasource = config.datasources[datasourceId]; datasource.on('error', datasourceError); function datasourceError(error) { @@ -32,8 +32,8 @@ class LinkedDataFragmentsServerWorker { if (loggingSettings.enabled) { let accesslog = require('access-log'); config.accesslogger = function (request, response) { - accesslog(request, response, null, function (logEntry) { - fs.appendFile(loggingSettings.file, logEntry + '\n', function (error) { + accesslog(request, response, null, (logEntry) => { + fs.appendFile(loggingSettings.file, logEntry + '\n', (error) => { error && process.stderr.write('Error when writing to access log file: ' + error); }); }); @@ -41,10 +41,10 @@ class LinkedDataFragmentsServerWorker { } // Make sure the 'last' controllers are last in the array and the 'first' are first. - let lastControllers = _.remove(config.controllers, function (controller) { + let lastControllers = _.remove(config.controllers, (controller) => { return controller._last; }); - let firstControllers = _.remove(config.controllers, function (controller) { + let firstControllers = _.remove(config.controllers, (controller) => { return controller._first; }); config.controllers = firstControllers.concat(config.controllers.concat(lastControllers)); @@ -61,7 +61,7 @@ class LinkedDataFragmentsServerWorker { // Start the server when all data sources are ready let pending = _.size(config.datasources); - _.each(config.datasources, function (datasource) { + _.each(config.datasources, (datasource) => { // Add datasource ready-listener let ready = _.once(startWhenReady); datasource.once('initialized', ready); @@ -80,11 +80,11 @@ class LinkedDataFragmentsServerWorker { } // Terminate gracefully if possible - process.once('SIGINT', function () { + process.once('SIGINT', () => { // eslint-disable-next-line no-console console.log('Stopping worker', process.pid); server.stop(); - process.on('SIGINT', function () { process.exit(1); }); + process.on('SIGINT', () => { process.exit(1); }); }); } } diff --git a/packages/core/lib/controllers/Controller.js b/packages/core/lib/controllers/Controller.js index 6b9659cf..307905ce 100644 --- a/packages/core/lib/controllers/Controller.js +++ b/packages/core/lib/controllers/Controller.js @@ -13,7 +13,7 @@ class Controller { constructor(options) { options = options || {}; this._prefixes = options.prefixes || {}; - this._datasources = _.reduce(options.datasources || {}, function (datasources, value, key) { + this._datasources = _.reduce(options.datasources || {}, (datasources, value, key) => { // If the path does not start with a slash, add one. datasources[key.replace(/^(?!\/)/, '/')] = value; return datasources; @@ -22,7 +22,7 @@ class Controller { options.views : new ViewCollection(options.views); // Set up base URL (if we're behind a proxy, this allows reconstructing the actual request URL) - this._baseUrl = _.mapValues(url.parse((options.urlData || new UrlData()).baseURL), function (value, key) { + this._baseUrl = _.mapValues(url.parse((options.urlData || new UrlData()).baseURL), (value, key) => { return value && !/^(?:href|path|search|hash)$/.test(key) ? value : undefined; }); } diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index ca316056..67295232 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -62,18 +62,18 @@ class Datasource extends EventEmitter { // Initialize the datasource asynchronously initialize() { - setImmediate(function (self) { - let done = _.once(function (error) { + setImmediate(() => { + let done = _.once((error) => { if (error) - self.emit('error', error); + this.emit('error', error); else { - self.initialized = true; - self.emit('initialized'); + this.initialized = true; + this.emit('initialized'); } }); - try { self._initialize(done); } + try { this._initialize(done); } catch (error) { done(error); } - }, this); + }); } // Prepares the datasource for querying @@ -128,16 +128,16 @@ class Datasource extends EventEmitter { query.graph = stringToTerm(this._queryGraphReplacements[query.graph.value], this.dataFactory); // Transform the received quads - let destination = new BufferedIterator(), outputQuads, graph = this._graph, self = this; - outputQuads = destination.map(function (quad) { + let destination = new BufferedIterator(), outputQuads, graph = this._graph; + outputQuads = destination.map((quad) => { // Translate blank nodes in the result to blank node IRIs. - if (quad.subject && quad.subject.termType === 'BlankNode' && !self._skolemizeBlacklist[quad.subject.value]) - quad.subject = self.dataFactory.namedNode(blankNodePrefix + quad.subject.value); - if (quad.object && quad.object.termType === 'BlankNode' && !self._skolemizeBlacklist[quad.object.value]) - quad.object = self.dataFactory.namedNode(blankNodePrefix + quad.object.value); + if (quad.subject && quad.subject.termType === 'BlankNode' && !this._skolemizeBlacklist[quad.subject.value]) + quad.subject = this.dataFactory.namedNode(blankNodePrefix + quad.subject.value); + if (quad.object && quad.object.termType === 'BlankNode' && !this._skolemizeBlacklist[quad.object.value]) + quad.object = this.dataFactory.namedNode(blankNodePrefix + quad.object.value); if (quad.graph && quad.graph.termType !== 'DefaultGraph') { - if (quad.graph.termType === 'BlankNode' && !self._skolemizeBlacklist[quad.graph.value]) - quad.graph = self.dataFactory.namedNode(blankNodePrefix + quad.graph.value); + if (quad.graph.termType === 'BlankNode' && !this._skolemizeBlacklist[quad.graph.value]) + quad.graph = this.dataFactory.namedNode(blankNodePrefix + quad.graph.value); } // If a custom default graph was set, move default graph triples there. quad.graph = quad.graph && quad.graph.termType !== 'DefaultGraph' ? quad.graph : (graph || quad.graph); @@ -159,16 +159,16 @@ class Datasource extends EventEmitter { // Retrieves a stream through HTTP or the local file system _fetch(options) { - let self = this, stream, + let stream, url = options.url, protocolMatch = /^(?:([a-z]+):)?/.exec(url); switch (protocolMatch[1] || 'file') { // Fetch a representation through HTTP(S) case 'http': case 'https': stream = this._request(options); - stream.on('response', function (response) { + stream.on('response', (response) => { if (response.statusCode >= 300) { - setImmediate(function () { + setImmediate(() => { stream.emit('error', new Error(url + ' returned ' + response.statusCode)); }); } @@ -180,16 +180,16 @@ class Datasource extends EventEmitter { break; default: stream = new EventEmitter(); - setImmediate(function () { + setImmediate(() => { stream.emit('error', new Error('Unknown protocol: ' + protocolMatch[1])); }); } // If the stream has no other error handlers attached (besides this one), // emit the stream error as a datasource error - stream.on('error', function (error) { + stream.on('error', (error) => { if (stream.listenerCount('error') === 1) - self.emit('error', error); + this.emit('error', error); }); return stream; } diff --git a/packages/core/lib/datasources/MemoryDatasource.js b/packages/core/lib/datasources/MemoryDatasource.js index dc777316..352790e0 100644 --- a/packages/core/lib/datasources/MemoryDatasource.js +++ b/packages/core/lib/datasources/MemoryDatasource.js @@ -14,7 +14,7 @@ class MemoryDatasource extends Datasource { // Prepares the datasource for querying _initialize(done) { let quadStore = this._quadStore = new N3Store(); - this._getAllQuads(function (quad) { quadStore.addQuad(quad); }, done); + this._getAllQuads((quad) => { quadStore.addQuad(quad); }, done); } // Retrieves all quads in the datasource diff --git a/packages/core/lib/views/HtmlView.js b/packages/core/lib/views/HtmlView.js index e9347c8e..b4e78b59 100644 --- a/packages/core/lib/views/HtmlView.js +++ b/packages/core/lib/views/HtmlView.js @@ -36,8 +36,8 @@ class HtmlView extends View { // Render the template with its options let fileName = (templateName[0] === '/' ? templateName : path.join(__dirname, templateName)) + '.html'; qejs.renderFile(fileName, options) - .then(function (html) { response.write(html); done(); }) - .fail(function (error) { done(error); }); + .then((html) => { response.write(html); done(); }) + .fail((error) => { done(error); }); function newExtensionViewConstructor(extension, options, request, response) { return function (data) { @@ -53,7 +53,7 @@ class HtmlView extends View { _renderViewExtensionContents(name, options, request, response) { let buffer = '', writer = { write: function (data) { buffer += data; }, end: _.noop }; return q.ninvoke(this, '_renderViewExtensions', name, options, request, writer) - .then(function () { return buffer; }); + .then(() => { return buffer; }); } } diff --git a/packages/core/lib/views/RdfView.js b/packages/core/lib/views/RdfView.js index 57ed609e..e61ed408 100644 --- a/packages/core/lib/views/RdfView.js +++ b/packages/core/lib/views/RdfView.js @@ -91,7 +91,7 @@ class RdfView extends View { }, // Ends the output and flushes the stream end: function () { - writer.end(function (error, output) { + writer.end((error, output) => { response.write(error ? '' : output); done(); }); diff --git a/packages/core/lib/views/View.js b/packages/core/lib/views/View.js index 30e02974..02b75712 100644 --- a/packages/core/lib/views/View.js +++ b/packages/core/lib/views/View.js @@ -23,7 +23,7 @@ class View { _parseContentTypes(contentTypes) { let matcher = this._supportedContentTypeMatcher = Object.create(null); if (typeof contentTypes === 'string') { - contentTypes = contentTypes.split(',').map(function (typeString) { + contentTypes = contentTypes.split(',').map((typeString) => { let contentType = typeString.match(/[^;,]*/)[0], responseType = contentType + ';charset=utf-8', quality = typeString.match(/;q=([0-9.]+)/); @@ -54,7 +54,7 @@ class View { settings.viewPathBase = join(__dirname, 'base.html'); // Render the view and end the response when done - this._render(settings, request, response, function (error) { + this._render(settings, request, response, (error) => { if (error) response.emit('error', error); response.end(); @@ -66,7 +66,7 @@ class View { _getViewExtensions(name, contentType) { let extensions = this._defaults.views ? this._defaults.views.getViews(this.name + ':' + name) : []; if (extensions.length) { - extensions = extensions.filter(function (extension) { + extensions = extensions.filter((extension) => { return extension.supportsContentType(contentType); }); } diff --git a/packages/core/lib/views/ViewCollection.js b/packages/core/lib/views/ViewCollection.js index fff290e9..0e7d5155 100644 --- a/packages/core/lib/views/ViewCollection.js +++ b/packages/core/lib/views/ViewCollection.js @@ -27,7 +27,7 @@ class ViewCollection { (this._views[view.name] || (this._views[view.name] = [])).push(view); // Add a match entry for each content type supported by the view let matchers = this._viewMatchers[view.name] || (this._viewMatchers[view.name] = []); - view.supportedContentTypes.forEach(function (contentType) { + view.supportedContentTypes.forEach((contentType) => { matchers.push(_.extend({ view: view }, contentType)); }); } diff --git a/packages/core/test/LinkedDataFragmentsServer-test.js b/packages/core/test/LinkedDataFragmentsServer-test.js index 0ee0e4f5..69c46246 100644 --- a/packages/core/test/LinkedDataFragmentsServer-test.js +++ b/packages/core/test/LinkedDataFragmentsServer-test.js @@ -3,12 +3,12 @@ let LinkedDataFragmentsServer = require('../lib/LinkedDataFragmentsServer'); let request = require('supertest'); -describe('LinkedDataFragmentsServer', function () { - describe('A LinkedDataFragmentsServer instance with one controller', function () { +describe('LinkedDataFragmentsServer', () => { + describe('A LinkedDataFragmentsServer instance with one controller', () => { let server, controller, client; - before(function () { + before(() => { controller = { - handleRequest: sinon.spy(function (request, response, next) { + handleRequest: sinon.spy((request, response, next) => { switch (request.url) { case '/handle': response.end('body contents'); @@ -33,19 +33,19 @@ describe('LinkedDataFragmentsServer', function () { }); client = request.agent(server); }); - beforeEach(function () { + beforeEach(() => { controller.handleRequest.reset(); }); - it('should send the configured headers', function (done) { - client.head('/').expect(function (response) { + it('should send the configured headers', (done) => { + client.head('/').expect((response) => { response.headers.should.have.property('access-control-allow-origin', '*'); response.headers.should.have.property('my-header', 'value'); }).end(done); }); - it('should not allow POST requests', function (done) { - client.post('/').expect(function (response) { + it('should not allow POST requests', (done) => { + client.post('/').expect((response) => { controller.handleRequest.should.not.have.been.called; response.should.have.property('statusCode', 405); response.headers.should.have.property('content-type', 'text/plain;charset=utf-8'); @@ -53,32 +53,32 @@ describe('LinkedDataFragmentsServer', function () { }).end(done); }); - it('should send a body with GET requests', function (done) { - client.get('/handle').expect(function (response) { + it('should send a body with GET requests', (done) => { + client.get('/handle').expect((response) => { controller.handleRequest.should.have.been.calledOnce; response.should.have.property('statusCode', 200); response.should.have.property('text', 'body contents'); }).end(done); }); - it('should not send a body with HEAD requests', function (done) { - client.head('/handle').expect(function (response) { + it('should not send a body with HEAD requests', (done) => { + client.head('/handle').expect((response) => { controller.handleRequest.should.have.been.calledOnce; response.should.have.property('statusCode', 200); response.body.should.not.have.property('length'); }).end(done); }); - it('should not send a body with OPTIONS requests', function (done) { - client.options('/handle').expect(function (response) { + it('should not send a body with OPTIONS requests', (done) => { + client.options('/handle').expect((response) => { controller.handleRequest.should.have.been.calledOnce; response.should.have.property('statusCode', 200); response.should.have.property('text', ''); }).end(done); }); - it('should error when the controller cannot handle the request', function (done) { - client.get('/unsupported').expect(function (response) { + it('should error when the controller cannot handle the request', (done) => { + client.get('/unsupported').expect((response) => { controller.handleRequest.should.have.been.calledOnce; response.should.have.property('statusCode', 500); response.headers.should.have.property('content-type', 'text/plain;charset=utf-8'); @@ -86,8 +86,8 @@ describe('LinkedDataFragmentsServer', function () { }).end(done); }); - it('should error when the controller errors', function (done) { - client.get('/error').expect(function (response) { + it('should error when the controller errors', (done) => { + client.get('/error').expect((response) => { controller.handleRequest.should.have.been.calledOnce; response.should.have.property('statusCode', 500); response.headers.should.have.property('content-type', 'text/plain;charset=utf-8'); @@ -96,11 +96,11 @@ describe('LinkedDataFragmentsServer', function () { }); }); - describe('A LinkedDataFragmentsServer instance with two controllers', function () { + describe('A LinkedDataFragmentsServer instance with two controllers', () => { let server, controllerA, controllerB, client; - before(function () { + before(() => { controllerA = { - handleRequest: sinon.spy(function (request, response, next) { + handleRequest: sinon.spy((request, response, next) => { switch (request.url) { case '/handleA': response.end('body contents A'); @@ -113,7 +113,7 @@ describe('LinkedDataFragmentsServer', function () { }), }; controllerB = { - handleRequest: sinon.spy(function (request, response, next) { + handleRequest: sinon.spy((request, response, next) => { switch (request.url) { case '/handleB': response.end('body contents B'); @@ -133,13 +133,13 @@ describe('LinkedDataFragmentsServer', function () { }); client = request.agent(server); }); - beforeEach(function () { + beforeEach(() => { controllerA.handleRequest.reset(); controllerB.handleRequest.reset(); }); - it('should not allow POST requests', function (done) { - client.post('/').expect(function (response) { + it('should not allow POST requests', (done) => { + client.post('/').expect((response) => { controllerA.handleRequest.should.not.have.been.called; controllerB.handleRequest.should.not.have.been.called; response.should.have.property('statusCode', 405); @@ -148,8 +148,8 @@ describe('LinkedDataFragmentsServer', function () { }).end(done); }); - it('should use the first controller when it can handle the request', function (done) { - client.get('/handleA').expect(function (response) { + it('should use the first controller when it can handle the request', (done) => { + client.get('/handleA').expect((response) => { controllerA.handleRequest.should.have.been.calledOnce; controllerB.handleRequest.should.not.have.been.called; response.should.have.property('statusCode', 200); @@ -157,8 +157,8 @@ describe('LinkedDataFragmentsServer', function () { }).end(done); }); - it('should use the second controller when the first cannot handle the request', function (done) { - client.get('/handleB').expect(function (response) { + it('should use the second controller when the first cannot handle the request', (done) => { + client.get('/handleB').expect((response) => { controllerA.handleRequest.should.have.been.calledOnce; controllerB.handleRequest.should.have.been.calledOnce; response.should.have.property('statusCode', 200); @@ -166,8 +166,8 @@ describe('LinkedDataFragmentsServer', function () { }).end(done); }); - it('should error when neither controller can handle the request', function (done) { - client.get('/unsupported').expect(function (response) { + it('should error when neither controller can handle the request', (done) => { + client.get('/unsupported').expect((response) => { controllerA.handleRequest.should.have.been.calledOnce; controllerB.handleRequest.should.have.been.calledOnce; response.should.have.property('statusCode', 500); @@ -176,8 +176,8 @@ describe('LinkedDataFragmentsServer', function () { }).end(done); }); - it('should error when the first controller errors', function (done) { - client.get('/errorA').expect(function (response) { + it('should error when the first controller errors', (done) => { + client.get('/errorA').expect((response) => { controllerA.handleRequest.should.have.been.calledOnce; controllerB.handleRequest.should.not.have.been.called; response.should.have.property('statusCode', 500); @@ -186,8 +186,8 @@ describe('LinkedDataFragmentsServer', function () { }).end(done); }); - it('should error when the second controller errors', function (done) { - client.get('/errorB').expect(function (response) { + it('should error when the second controller errors', (done) => { + client.get('/errorB').expect((response) => { controllerA.handleRequest.should.have.been.calledOnce; controllerB.handleRequest.should.have.been.calledOnce; response.should.have.property('statusCode', 500); diff --git a/packages/core/test/controllers/AssetsController-test.js b/packages/core/test/controllers/AssetsController-test.js index 600a1da3..192875fe 100644 --- a/packages/core/test/controllers/AssetsController-test.js +++ b/packages/core/test/controllers/AssetsController-test.js @@ -6,26 +6,26 @@ let request = require('supertest'), fs = require('fs'), path = require('path'); -describe('AssetsController', function () { - describe('The AssetsController module', function () { - it('should be a function', function () { +describe('AssetsController', () => { + describe('The AssetsController module', () => { + it('should be a function', () => { AssetsController.should.be.a('function'); }); - it('should be an AssetsController constructor', function () { + it('should be an AssetsController constructor', () => { new AssetsController().should.be.an.instanceof(AssetsController); }); }); - describe('An AssetsController instance', function () { + describe('An AssetsController instance', () => { let controller, client; - before(function () { + before(() => { controller = new AssetsController(); client = request.agent(new DummyServer(controller)); }); - it('should correctly serve SVG assets', function (done) { - client.get('/assets/images/logo').expect(function (response) { + it('should correctly serve SVG assets', (done) => { + client.get('/assets/images/logo').expect((response) => { let asset = fs.readFileSync(path.join(__dirname, '/../../assets/images/logo.svg'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); @@ -35,8 +35,8 @@ describe('AssetsController', function () { }).end(done); }); - it('should correctly serve CSS assets', function (done) { - client.get('/assets/styles/ldf-server').expect(function (response) { + it('should correctly serve CSS assets', (done) => { + client.get('/assets/styles/ldf-server').expect((response) => { let asset = fs.readFileSync(path.join(__dirname, '/../../assets/styles/ldf-server.css'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); @@ -46,8 +46,8 @@ describe('AssetsController', function () { }).end(done); }); - it('should correctly serve ICO assets', function (done) { - client.get('/favicon.ico').expect(function (response) { + it('should correctly serve ICO assets', (done) => { + client.get('/favicon.ico').expect((response) => { let asset = fs.readFileSync(path.join(__dirname, '/../../assets/favicon.ico'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); @@ -57,14 +57,14 @@ describe('AssetsController', function () { }).end(done); }); - it('should hand over to the next controller if no asset with that name is found', function (done) { - client.get('/assets/unknown').expect(function (response) { + it('should hand over to the next controller if no asset with that name is found', (done) => { + client.get('/assets/unknown').expect((response) => { controller.next.should.have.been.calledOnce; }).end(done); }); - it('should hand over to the next controller for non-asset paths', function (done) { - client.get('/other').expect(function (response) { + it('should hand over to the next controller for non-asset paths', (done) => { + client.get('/other').expect((response) => { controller.next.should.have.been.calledOnce; }).end(done); }); diff --git a/packages/core/test/controllers/Controller-test.js b/packages/core/test/controllers/Controller-test.js index 6e5cf226..291f2aea 100644 --- a/packages/core/test/controllers/Controller-test.js +++ b/packages/core/test/controllers/Controller-test.js @@ -6,31 +6,31 @@ let http = require('http'), request = require('supertest'), DummyServer = require('../../../../test/DummyServer'); -describe('Controller', function () { - describe('The Controller module', function () { - it('should be a function', function () { +describe('Controller', () => { + describe('The Controller module', () => { + it('should be a function', () => { Controller.should.be.a('function'); }); - it('should be a Controller constructor', function () { + it('should be a Controller constructor', () => { new Controller().should.be.an.instanceof(Controller); }); }); - describe('A Controller instance without baseURL', function () { + describe('A Controller instance without baseURL', () => { let controller, client; - before(function () { + before(() => { controller = new Controller(); sinon.spy(controller, '_handleRequest'); client = request.agent(new DummyServer(controller)); }); - describe('receiving a request', function () { - before(function (done) { + describe('receiving a request', () => { + before((done) => { client.get('/path?a=b').end(done); }); - it('should call _handleRequest with request, response and next', function () { + it('should call _handleRequest with request, response and next', () => { controller._handleRequest.should.have.been.calledOnce; let args = controller._handleRequest.getCall(0).args; args[0].should.have.property('url'); @@ -38,7 +38,7 @@ describe('Controller', function () { args[2].should.be.an.instanceof(Function); }); - it('should extend _handleRequest with the original URL as parsedUrl property', function () { + it('should extend _handleRequest with the original URL as parsedUrl property', () => { controller._handleRequest.should.have.been.calledOnce; let request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); @@ -49,22 +49,22 @@ describe('Controller', function () { }); }); - it('should hand over to the next controller', function () { + it('should hand over to the next controller', () => { controller.next.should.have.been.calledOnce; }); }); }); - describe('A Controller instance without baseURL using Forwarded header', function () { + describe('A Controller instance without baseURL using Forwarded header', () => { let controller, client; - before(function () { + before(() => { controller = new Controller({ urlData: new UrlData({ baseURL: 'http://example.org:1234/base?c=d#f' }) }); sinon.spy(controller, '_handleRequest'); client = request.agent(new DummyServer(controller)); }); - describe('receiving a request', function () { - before(function (done) { + describe('receiving a request', () => { + before((done) => { client .get('/path?a=b') .set('X-Forwarded-Host', 'foo:5000') @@ -73,7 +73,7 @@ describe('Controller', function () { .end(done); }); - it('should call _handleRequest with request, response and next', function () { + it('should call _handleRequest with request, response and next', () => { controller._handleRequest.should.have.been.calledOnce; let args = controller._handleRequest.getCall(0).args; args[0].should.have.property('url'); @@ -81,7 +81,7 @@ describe('Controller', function () { args[2].should.be.an.instanceof(Function); }); - it('should extend _handleRequest with the original URL as parsedUrl property', function () { + it('should extend _handleRequest with the original URL as parsedUrl property', () => { controller._handleRequest.should.have.been.calledOnce; let request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); @@ -92,22 +92,22 @@ describe('Controller', function () { }); }); - it('should hand over to the next controller', function () { + it('should hand over to the next controller', () => { controller.next.should.have.been.calledOnce; }); }); }); - describe('A Controller instance without baseURL using X-Forwarded-* headers', function () { + describe('A Controller instance without baseURL using X-Forwarded-* headers', () => { let controller, client; - before(function () { + before(() => { controller = new Controller(); sinon.spy(controller, '_handleRequest'); client = request.agent(new DummyServer(controller)); }); - describe('receiving a request', function () { - before(function (done) { + describe('receiving a request', () => { + before((done) => { client .get('/path?a=b') .set('X-Forwarded-Host', 'foo:5000') @@ -115,7 +115,7 @@ describe('Controller', function () { .end(done); }); - it('should call _handleRequest with request, response and next', function () { + it('should call _handleRequest with request, response and next', () => { controller._handleRequest.should.have.been.calledOnce; let args = controller._handleRequest.getCall(0).args; args[0].should.have.property('url'); @@ -123,7 +123,7 @@ describe('Controller', function () { args[2].should.be.an.instanceof(Function); }); - it('should extend _handleRequest with the original URL as parsedUrl property', function () { + it('should extend _handleRequest with the original URL as parsedUrl property', () => { controller._handleRequest.should.have.been.calledOnce; let request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); @@ -134,26 +134,26 @@ describe('Controller', function () { }); }); - it('should hand over to the next controller', function () { + it('should hand over to the next controller', () => { controller.next.should.have.been.calledOnce; }); }); }); - describe('A Controller instance with baseURL', function () { + describe('A Controller instance with baseURL', () => { let controller, client; - before(function () { + before(() => { controller = new Controller({ urlData: new UrlData({ baseURL: 'http://example.org:1234/base?c=d#f' }) }); sinon.spy(controller, '_handleRequest'); client = request.agent(new DummyServer(controller)); }); - describe('receiving a request', function () { - before(function (done) { + describe('receiving a request', () => { + before((done) => { client.get('/path?a=b').end(done); }); - it('should call _handleRequest with request, response and next', function () { + it('should call _handleRequest with request, response and next', () => { controller._handleRequest.should.have.been.calledOnce; let args = controller._handleRequest.getCall(0).args; args[0].should.have.property('url'); @@ -161,7 +161,7 @@ describe('Controller', function () { args[2].should.be.an.instanceof(Function); }); - it('should extend _handleRequest with the rebased URL as parsedUrl property', function () { + it('should extend _handleRequest with the rebased URL as parsedUrl property', () => { controller._handleRequest.should.have.been.calledOnce; let request = controller._handleRequest.getCall(0).args[0]; request.should.have.property('parsedUrl'); @@ -172,7 +172,7 @@ describe('Controller', function () { }); }); - it('should hand over to the next controller', function () { + it('should hand over to the next controller', () => { controller.next.should.have.been.calledOnce; }); }); diff --git a/packages/core/test/controllers/DereferenceController-test.js b/packages/core/test/controllers/DereferenceController-test.js index e9616a11..f418ae79 100644 --- a/packages/core/test/controllers/DereferenceController-test.js +++ b/packages/core/test/controllers/DereferenceController-test.js @@ -4,44 +4,44 @@ let DereferenceController = require('../../lib/controllers/DereferenceController let request = require('supertest'), DummyServer = require('../../../../test/DummyServer'); -describe('DereferenceController', function () { - describe('The DereferenceController module', function () { - it('should be a function', function () { +describe('DereferenceController', () => { + describe('The DereferenceController module', () => { + it('should be a function', () => { DereferenceController.should.be.a('function'); }); - it('should be a DereferenceController constructor', function () { + it('should be a DereferenceController constructor', () => { new DereferenceController().should.be.an.instanceof(DereferenceController); }); }); - describe('A DereferenceController instance', function () { + describe('A DereferenceController instance', () => { let controller, client; - before(function () { + before(() => { controller = new DereferenceController({ dereference: { '/resource/': { path: 'dbpedia/2014' } } }); client = request.agent(new DummyServer(controller)); }); - describe('receiving a request for a dereferenced URL', function () { + describe('receiving a request for a dereferenced URL', () => { let response; - before(function (done) { + before((done) => { client.get('/resource/Mickey_Mouse') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should not hand over to the next controller', function () { + it('should not hand over to the next controller', () => { controller.next.should.not.have.been.called; }); - it('should set the status code to 303', function () { + it('should set the status code to 303', () => { response.should.have.property('statusCode', 303); }); - it('should set the text/plain content type', function () { + it('should set the text/plain content type', () => { response.headers.should.have.property('content-type', 'text/plain;charset=utf-8'); }); - it('should set the Location header correctly', function () { + it('should set the Location header correctly', () => { let hostname = response.req.getHeader('Host'), entityUrl = encodeURIComponent('http://' + hostname + '/resource/Mickey_Mouse'), expectedLocation = 'http://' + hostname + '/dbpedia/2014?subject=' + entityUrl; @@ -49,7 +49,7 @@ describe('DereferenceController', function () { response.headers.should.have.property('location', expectedLocation); }); - it('should mention the desired location in the body', function () { + it('should mention the desired location in the body', () => { let hostname = response.req.getHeader('Host'), entityUrl = encodeURIComponent('http://' + hostname + '/resource/Mickey_Mouse'), expectedLocation = 'http://' + hostname + '/dbpedia/2014?subject=' + entityUrl; @@ -58,12 +58,12 @@ describe('DereferenceController', function () { }); }); - describe('receiving a request for a non-defererenced URL', function () { - before(function (done) { + describe('receiving a request for a non-defererenced URL', () => { + before((done) => { client.get('/otherresource/Mickey_Mouse').end(done); }); - it('should hand over to the next controller', function () { + it('should hand over to the next controller', () => { controller.next.should.have.been.calledOnce; }); }); diff --git a/packages/core/test/controllers/NotFoundController-test.js b/packages/core/test/controllers/NotFoundController-test.js index f73b2fdf..b4b3244b 100644 --- a/packages/core/test/controllers/NotFoundController-test.js +++ b/packages/core/test/controllers/NotFoundController-test.js @@ -8,56 +8,56 @@ let request = require('supertest'), let NotFoundHtmlView = require('../../lib/views/notfound/NotFoundHtmlView.js'), NotFoundRdfView = require('../../lib/views/notfound/NotFoundRdfView.js'); -describe('NotFoundController', function () { - describe('The NotFoundController module', function () { - it('should be a function', function () { +describe('NotFoundController', () => { + describe('The NotFoundController module', () => { + it('should be a function', () => { NotFoundController.should.be.a('function'); }); - it('should be a NotFoundController constructor', function () { + it('should be a NotFoundController constructor', () => { new NotFoundController().should.be.an.instanceof(NotFoundController); }); }); - describe('A NotFoundController instance without views', function () { + describe('A NotFoundController instance without views', () => { let controller, client; - before(function () { + before(() => { controller = new NotFoundController(); client = request.agent(new DummyServer(controller)); }); - describe('receiving a request', function () { + describe('receiving a request', () => { let response; - before(function (done) { + before((done) => { client.get('/notfound') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should not hand over to the next controller', function () { + it('should not hand over to the next controller', () => { controller.next.should.not.have.been.called; }); - it('should have a 404 status', function () { + it('should have a 404 status', () => { response.should.have.property('statusCode', 404); }); - it('should set the text/plain content type', function () { + it('should set the text/plain content type', () => { response.headers.should.have.property('content-type', 'text/plain;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); - it('should send a textual error body', function () { + it('should send a textual error body', () => { response.should.have.property('text', '/notfound not found\n'); }); }); }); - describe('A NotFoundController instance with HTML and RDF views', function () { + describe('A NotFoundController instance with HTML and RDF views', () => { let controller, htmlView, rdfView, datasources, client; - before(function () { + before(() => { htmlView = new NotFoundHtmlView({ dataFactory }); rdfView = new NotFoundRdfView({ dataFactory }); sinon.spy(htmlView, 'render'); @@ -71,188 +71,188 @@ describe('NotFoundController', function () { rdfView.render.reset(); } - describe('receiving a request without Accept header', function () { + describe('receiving a request without Accept header', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/notfound') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should not hand over to the next controller', function () { + it('should not hand over to the next controller', () => { controller.next.should.not.have.been.called; }); - it('should call the HTML view', function () { + it('should call the HTML view', () => { htmlView.render.should.have.been.calledOnce; }); - it('should not call the RDF view', function () { + it('should not call the RDF view', () => { rdfView.render.should.not.have.been.called; }); - it('should have a 404 status', function () { + it('should have a 404 status', () => { response.should.have.property('statusCode', 404); }); - it('should set the text/html content type', function () { + it('should set the text/html content type', () => { response.headers.should.have.property('content-type', 'text/html;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); - it('should send an HTML error body', function () { + it('should send an HTML error body', () => { response.text.should.contain('No resource with URL /notfound was found.'); }); }); - describe('receiving a request with an Accept header of */*', function () { + describe('receiving a request with an Accept header of */*', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/notfound').set('Accept', '*/*') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should not hand over to the next controller', function () { + it('should not hand over to the next controller', () => { controller.next.should.not.have.been.called; }); - it('should call the HTML view', function () { + it('should call the HTML view', () => { htmlView.render.should.have.been.calledOnce; }); - it('should not call the RDF view', function () { + it('should not call the RDF view', () => { rdfView.render.should.not.have.been.called; }); - it('should have a 404 status', function () { + it('should have a 404 status', () => { response.should.have.property('statusCode', 404); }); - it('should set the text/html content type', function () { + it('should set the text/html content type', () => { response.headers.should.have.property('content-type', 'text/html;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); - it('should send an HTML error body', function () { + it('should send an HTML error body', () => { response.text.should.contain('No resource with URL /notfound was found.'); }); }); - describe('receiving a request with an Accept header of text/html', function () { + describe('receiving a request with an Accept header of text/html', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/notfound').set('Accept', 'text/html') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should not hand over to the next controller', function () { + it('should not hand over to the next controller', () => { controller.next.should.not.have.been.called; }); - it('should call the HTML view', function () { + it('should call the HTML view', () => { htmlView.render.should.have.been.calledOnce; }); - it('should not call the RDF view', function () { + it('should not call the RDF view', () => { rdfView.render.should.not.have.been.called; }); - it('should have a 404 status', function () { + it('should have a 404 status', () => { response.should.have.property('statusCode', 404); }); - it('should set the text/html content type', function () { + it('should set the text/html content type', () => { response.headers.should.have.property('content-type', 'text/html;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); - it('should send an HTML error body', function () { + it('should send an HTML error body', () => { response.text.should.contain('No resource with URL /notfound was found.'); }); }); - describe('receiving a request with an Accept header of text/turtle', function () { + describe('receiving a request with an Accept header of text/turtle', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/notfound').set('Accept', 'text/turtle') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should not hand over to the next controller', function () { + it('should not hand over to the next controller', () => { controller.next.should.not.have.been.called; }); - it('should call the RDF view', function () { + it('should call the RDF view', () => { rdfView.render.should.have.been.calledOnce; }); - it('should not call the HTML view', function () { + it('should not call the HTML view', () => { htmlView.render.should.not.have.been.called; }); - it('should have a 404 status', function () { + it('should have a 404 status', () => { response.should.have.property('statusCode', 404); }); - it('should set the text/turtle content type', function () { + it('should set the text/turtle content type', () => { response.headers.should.have.property('content-type', 'text/turtle;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); - it('should send a Turtle error body', function () { + it('should send a Turtle error body', () => { response.text.should.contain(' a '); response.text.should.not.contain('<#metadata> <>.'); }); }); - describe('receiving a request with an Accept header of application/trig', function () { + describe('receiving a request with an Accept header of application/trig', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/notfound').set('Accept', 'application/trig') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should not hand over to the next controller', function () { + it('should not hand over to the next controller', () => { controller.next.should.not.have.been.called; }); - it('should call the RDF view', function () { + it('should call the RDF view', () => { rdfView.render.should.have.been.calledOnce; }); - it('should not call the HTML view', function () { + it('should not call the HTML view', () => { htmlView.render.should.not.have.been.called; }); - it('should have a 404 status', function () { + it('should have a 404 status', () => { response.should.have.property('statusCode', 404); }); - it('should set the text/html content type', function () { + it('should set the text/html content type', () => { response.headers.should.have.property('content-type', 'application/trig;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); - it('should send a TriG error body', function () { + it('should send a TriG error body', () => { response.text.should.contain(' a '); response.text.should.contain('<#metadata> <>.'); }); diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index 85ed8a68..27f39f71 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -9,116 +9,116 @@ const EventEmitter = require('events'), const exampleFile = path.join(__dirname, '../../../../test/assets/test.ttl'); const dataFactory = N3.DataFactory; -describe('Datasource', function () { - describe('The Datasource module', function () { - it('should be a function', function () { +describe('Datasource', () => { + describe('The Datasource module', () => { + it('should be a function', () => { Datasource.should.be.a('function'); }); - it('should be a Datasource constructor', function () { + it('should be a Datasource constructor', () => { new Datasource({ dataFactory }).should.be.an.instanceof(Datasource); }); - it('should be an EventEmitter constructor', function () { + it('should be an EventEmitter constructor', () => { new Datasource({ dataFactory }).should.be.an.instanceof(EventEmitter); }); }); - describe('A Datasource instance', function () { + describe('A Datasource instance', () => { let datasource = new Datasource({ dataFactory }); datasource.initialize(); - it('should not indicate support for any features', function () { + it('should not indicate support for any features', () => { datasource.supportedFeatures.should.deep.equal({}); }); - it('should not support the empty query', function () { + it('should not support the empty query', () => { datasource.supportsQuery({}).should.be.false; }); - it('should not support a query with features', function () { + it('should not support a query with features', () => { datasource.supportsQuery({ features: { a: true, b: true } }).should.be.false; }); - it('should throw an error when trying to execute an unsupported query', function (done) { - datasource.select({ features: { a: true, b: true } }, function (error) { + it('should throw an error when trying to execute an unsupported query', (done) => { + datasource.select({ features: { a: true, b: true } }, (error) => { error.should.be.an.instanceOf(Error); error.should.have.property('message', 'The datasource does not support the given query'); done(); }); }); - it('should throw an error when trying to execute a supported query', function () { + it('should throw an error when trying to execute a supported query', () => { (function () { datasource.select({ features: {} }); }) .should.throw('_executeQuery has not been implemented'); }); - describe('fetching a resource', function () { - it('fetches an existing resource', function (done) { + describe('fetching a resource', () => { + it('fetches an existing resource', (done) => { let result = datasource._fetch({ url: 'file://' + exampleFile }), buffer = ''; - result.on('data', function (d) { buffer += d; }); - result.on('end', function () { + result.on('data', (d) => { buffer += d; }); + result.on('end', () => { buffer.should.equal(fs.readFileSync(exampleFile, 'utf8')); done(); }); result.on('error', done); }); - it('assumes file:// as the default protocol', function (done) { + it('assumes file:// as the default protocol', (done) => { let result = datasource._fetch({ url: exampleFile }), buffer = ''; - result.on('data', function (d) { buffer += d; }); - result.on('end', function () { + result.on('data', (d) => { buffer += d; }); + result.on('end', () => { buffer.should.equal(fs.readFileSync(exampleFile, 'utf8')); done(); }); result.on('error', done); }); - it('emits an error when the protocol is unknown', function (done) { + it('emits an error when the protocol is unknown', (done) => { let result = datasource._fetch({ url: 'myprotocol:abc' }); - result.on('error', function (error) { + result.on('error', (error) => { error.message.should.contain('Unknown protocol: myprotocol'); done(); }); }); - it('emits an error on the datasource when no error listener is attached to the result', function (done) { + it('emits an error on the datasource when no error listener is attached to the result', (done) => { let result = datasource._fetch({ url: exampleFile + 'notfound' }); result.on('data', done); - datasource.on('error', function (error) { + datasource.on('error', (error) => { error.message.should.contain('ENOENT: no such file or directory'); done(); }); }); - it('does not emit an error on the datasource when an error listener is attached to the result', function (done) { + it('does not emit an error on the datasource when an error listener is attached to the result', (done) => { let result = datasource._fetch({ url: exampleFile + 'notfound' }); - result.on('error', function (error) { + result.on('error', (error) => { error.message.should.contain('ENOENT: no such file or directory'); done(); }); - datasource.on('error', function (error) { + datasource.on('error', (error) => { done(error); }); }); }); - describe('when closed without a callback', function () { - it('should do nothing', function () { + describe('when closed without a callback', () => { + it('should do nothing', () => { datasource.close(); }); }); - describe('when closed with a callback', function () { - it('should invoke the callback', function (done) { + describe('when closed with a callback', () => { + it('should invoke the callback', (done) => { datasource.close(done); }); }); }); - describe('A Datasource instance with an initializer', function () { + describe('A Datasource instance with an initializer', () => { let datasource, initializedListener, errorListener; - before(function () { + before(() => { datasource = new Datasource({ dataFactory }); datasource._initialize = sinon.stub(); Object.defineProperty(datasource, 'supportedFeatures', { @@ -129,50 +129,50 @@ describe('Datasource', function () { datasource.initialize(); }); - describe('after construction', function () { - it('should have called the initializer', function () { + describe('after construction', () => { + it('should have called the initializer', () => { datasource._initialize.should.have.been.calledOnce; }); - it('should not be initialized', function () { + it('should not be initialized', () => { datasource.initialized.should.be.false; }); - it('should not support any query', function () { + it('should not support any query', () => { datasource.supportsQuery({}).should.be.false; }); - it('should error when trying to query', function (done) { - datasource.select({}, function (error) { + it('should error when trying to query', (done) => { + datasource.select({}, (error) => { error.should.have.property('message', 'The datasource is not initialized yet'); done(); }); }); }); - describe('after the initializer calls the callback', function () { - before(function () { + describe('after the initializer calls the callback', () => { + before(() => { datasource._initialize.getCall(0).args[0](); }); - it('should be initialized', function () { + it('should be initialized', () => { datasource.initialized.should.be.true; }); - it('should have called "initialized" listeners', function () { + it('should have called "initialized" listeners', () => { initializedListener.should.have.been.calledOnce; }); - it('should not have called "error" listeners', function () { + it('should not have called "error" listeners', () => { errorListener.should.not.have.been.called; }); - it('should support queries', function () { + it('should support queries', () => { datasource.supportsQuery({}).should.be.true; }); - it('should allow querying', function (done) { - datasource.select({}, function (error) { + it('should allow querying', (done) => { + datasource.select({}, (error) => { error.should.have.property('message', '_executeQuery has not been implemented'); done(); }); @@ -180,9 +180,9 @@ describe('Datasource', function () { }); }); - describe('A Datasource instance with an initializer that errors synchronously', function () { + describe('A Datasource instance with an initializer that errors synchronously', () => { let datasource, initializedListener, errorListener, error; - before(function () { + before(() => { datasource = new Datasource({ dataFactory }); error = new Error('initializer error'); datasource._initialize = sinon.stub().throws(error); @@ -191,29 +191,29 @@ describe('Datasource', function () { datasource.initialize(); }); - describe('after the initializer calls the callback', function () { - it('should have called the initializer', function () { + describe('after the initializer calls the callback', () => { + it('should have called the initializer', () => { datasource._initialize.should.have.been.calledOnce; }); - it('should not be initialized', function () { + it('should not be initialized', () => { datasource.initialized.should.be.false; }); - it('should not have called "initialized" listeners', function () { + it('should not have called "initialized" listeners', () => { initializedListener.should.not.have.been.called; }); - it('should not have called "error" listeners', function () { + it('should not have called "error" listeners', () => { errorListener.should.have.been.calledOnce; errorListener.should.have.been.calledWith(error); }); }); }); - describe('A Datasource instance with an initializer that errors asynchronously', function () { + describe('A Datasource instance with an initializer that errors asynchronously', () => { let datasource, initializedListener, errorListener, error; - before(function () { + before(() => { datasource = new Datasource({ dataFactory }); error = new Error('initializer error'); datasource._initialize = sinon.stub().callsArgWith(0, error); @@ -222,27 +222,27 @@ describe('Datasource', function () { datasource.initialize(); }); - describe('after the initializer calls the callback', function () { - it('should have called the initializer', function () { + describe('after the initializer calls the callback', () => { + it('should have called the initializer', () => { datasource._initialize.should.have.been.calledOnce; }); - it('should not be initialized', function () { + it('should not be initialized', () => { datasource.initialized.should.be.false; }); - it('should not have called "initialized" listeners', function () { + it('should not have called "initialized" listeners', () => { initializedListener.should.not.have.been.called; }); - it('should not have called "error" listeners', function () { + it('should not have called "error" listeners', () => { errorListener.should.have.been.calledOnce; errorListener.should.have.been.calledWith(error); }); }); }); - describe('A derived Datasource instance', function () { + describe('A derived Datasource instance', () => { let datasource = new Datasource({ dataFactory }); Object.defineProperty(datasource, 'supportedFeatures', { enumerable: true, @@ -251,11 +251,11 @@ describe('Datasource', function () { datasource._executeQuery = sinon.stub(); datasource.initialize(); - it('should support the empty query', function () { + it('should support the empty query', () => { datasource.supportsQuery({}).should.be.true; }); - it('should support queries with supported features', function () { + it('should support queries with supported features', () => { datasource.supportsQuery({ features: {} }).should.be.true; datasource.supportsQuery({ features: { a: true } }).should.be.true; datasource.supportsQuery({ features: { a: true, b: true } }).should.be.true; @@ -265,19 +265,19 @@ describe('Datasource', function () { datasource.supportsQuery({ features: { a: true, b: true, c: false } }).should.be.true; }); - it('should not support queries with unsupported features', function () { + it('should not support queries with unsupported features', () => { datasource.supportsQuery({ features: { c: true } }).should.be.false; datasource.supportsQuery({ features: { a: true, c: true } }).should.be.false; datasource.supportsQuery({ features: { b: true, c: true } }).should.be.false; datasource.supportsQuery({ features: { a: true, b: true, c: true } }).should.be.false; }); - it('should not attach an error listener on select if none was passed', function () { + it('should not attach an error listener on select if none was passed', () => { let result = datasource.select({ features: {} }); (function () { result.emit('error', new Error()); }).should.throw(); }); - it('should attach an error listener on select if one was passed', function () { + it('should attach an error listener on select if one was passed', () => { let onError = sinon.stub(), error = new Error(); let result = datasource.select({ features: {} }, onError); result.emit('error', error); @@ -286,7 +286,7 @@ describe('Datasource', function () { }); }); - describe('A Datasource instance with a graph property', function () { + describe('A Datasource instance with a graph property', () => { let datasource = new Datasource({ dataFactory, graph: 'http://example.org/#mygraph', @@ -296,21 +296,21 @@ describe('Datasource', function () { value: { custom: true }, }); datasource.initialize(); - datasource._executeQuery = sinon.spy(function (query, destination) { + datasource._executeQuery = sinon.spy((query, destination) => { destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o1') }); destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o2'), graph: dataFactory.defaultGraph() }); destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o3'), graph: dataFactory.namedNode('g') }); destination.close(); }); - beforeEach(function () { + beforeEach(() => { datasource._executeQuery.reset(); }); - it('should move triples in the default graph to the given graph', function (done) { + it('should move triples in the default graph to the given graph', (done) => { let result = datasource.select({ features: { custom: true } }, done), quads = []; - result.on('data', function (q) { quads.push(q); }); - result.on('end', function () { + result.on('data', (q) => { quads.push(q); }); + result.on('end', () => { let matchingquads = [{ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o1'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o2'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o3'), graph: dataFactory.namedNode('g') }]; @@ -321,7 +321,7 @@ describe('Datasource', function () { }); }); - it('should query the given graph as the default graph', function () { + it('should query the given graph as the default graph', () => { datasource.select({ graph: dataFactory.namedNode('http://example.org/#mygraph'), features: { custom: true }, @@ -330,7 +330,7 @@ describe('Datasource', function () { datasource._executeQuery.args[0][0].graph.equals(dataFactory.defaultGraph()); }); - it('should query the default graph as the empty graph', function () { + it('should query the default graph as the empty graph', () => { datasource.select({ graph: dataFactory.defaultGraph(), features: { custom: true }, diff --git a/packages/core/test/routers/DatasourceRouter-test.js b/packages/core/test/routers/DatasourceRouter-test.js index 60072f87..621fab4b 100644 --- a/packages/core/test/routers/DatasourceRouter-test.js +++ b/packages/core/test/routers/DatasourceRouter-test.js @@ -1,22 +1,22 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ let DatasourceRouter = require('../../lib/routers/DatasourceRouter'); -describe('DatasourceRouter', function () { - describe('The DatasourceRouter module', function () { - it('should be a function', function () { +describe('DatasourceRouter', () => { + describe('The DatasourceRouter module', () => { + it('should be a function', () => { DatasourceRouter.should.be.a('function'); }); - it('should be a DatasourceRouter constructor', function () { + it('should be a DatasourceRouter constructor', () => { new DatasourceRouter().should.be.an.instanceof(DatasourceRouter); }); }); - describe('A DatasourceRouter instance', function () { + describe('A DatasourceRouter instance', () => { let router = new DatasourceRouter(); - describe('extractUrlParams', function () { - describe('with an existing query', function () { + describe('extractUrlParams', () => { + describe('with an existing query', () => { [ [ 'a root URL without trailing slash or query parameters', @@ -68,18 +68,18 @@ describe('DatasourceRouter', function () { { a: 1, features: { datasource: true }, datasource: '/my/data-source' }, ], ] - .forEach(function (args) { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); - describe('A DatasourceRouter instance with a base URL', function () { + describe('A DatasourceRouter instance with a base URL', () => { let router = new DatasourceRouter({ urlData: { baseURLPath: '/my/base/' }, }); - describe('extractUrlParams', function () { - describe('with an existing query', function () { + describe('extractUrlParams', () => { + describe('with an existing query', () => { [ [ 'a root URL', @@ -96,7 +96,7 @@ describe('DatasourceRouter', function () { { a: 1, features: { datasource: true }, datasource: '/other/path' }, ], ] - .forEach(function (args) { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); diff --git a/packages/core/test/routers/PageRouter-test.js b/packages/core/test/routers/PageRouter-test.js index fdc37cb8..61885b2c 100644 --- a/packages/core/test/routers/PageRouter-test.js +++ b/packages/core/test/routers/PageRouter-test.js @@ -1,22 +1,22 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ let PageRouter = require('../../lib/routers/PageRouter'); -describe('PageRouter', function () { - describe('The PageRouter module', function () { - it('should be a function', function () { +describe('PageRouter', () => { + describe('The PageRouter module', () => { + it('should be a function', () => { PageRouter.should.be.a('function'); }); - it('should be a PageRouter constructor', function () { + it('should be a PageRouter constructor', () => { new PageRouter().should.be.an.instanceof(PageRouter); }); }); - describe('A PageRouter instance', function () { + describe('A PageRouter instance', () => { let router = new PageRouter(); - describe('extractUrlParams', function () { - describe('with an existing query', function () { + describe('extractUrlParams', () => { + describe('with an existing query', () => { [ [ 'a URL without query parameters', @@ -75,16 +75,16 @@ describe('PageRouter', function () { { a: 1, features: { a: true, b: true, limit: true, offset: true }, limit: 100, offset: 200 }, ], ] - .forEach(function (args) { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); - describe('A PageRouter instance with a given page size', function () { + describe('A PageRouter instance with a given page size', () => { let router = new PageRouter({ pageSize: 250 }); - describe('extractUrlParams', function () { - describe('with an existing query', function () { + describe('extractUrlParams', () => { + describe('with an existing query', () => { [ [ 'a URL without query parameters', @@ -143,16 +143,16 @@ describe('PageRouter', function () { { a: 1, features: { a: true, b: true, limit: true, offset: true }, limit: 250, offset: 500 }, ], ] - .forEach(function (args) { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); - describe('A PageRouter instance with an invalid page size', function () { + describe('A PageRouter instance with an invalid page size', () => { let router = new PageRouter({ pageSize: -1 }); - describe('extractUrlParams', function () { - describe('with an existing query', function () { + describe('extractUrlParams', () => { + describe('with an existing query', () => { [ [ 'a URL without query parameters', @@ -162,7 +162,7 @@ describe('PageRouter', function () { { a: 1, features: { limit: true }, limit: 100 }, ], ] - .forEach(function (args) { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); diff --git a/packages/core/test/views/View-test.js b/packages/core/test/views/View-test.js index 69906856..26cdf7e4 100644 --- a/packages/core/test/views/View-test.js +++ b/packages/core/test/views/View-test.js @@ -2,52 +2,52 @@ let View = require('../../lib/views/View'), resolve = require('path').resolve; -describe('View', function () { - describe('The View module', function () { - it('should be a function', function () { +describe('View', () => { + describe('The View module', () => { + it('should be a function', () => { View.should.be.a('function'); }); - it('should be a View constructor', function () { + it('should be a View constructor', () => { new View().should.be.an.instanceof(View); }); }); - describe('A View instance', function () { - describe('created without a name', function () { - it('should have the empty string as name', function () { + describe('A View instance', () => { + describe('created without a name', () => { + it('should have the empty string as name', () => { new View().should.have.property('name', ''); }); }); - describe('created with a name', function () { - it('should set the name', function () { + describe('created with a name', () => { + it('should set the name', () => { new View('MyView').should.have.property('name', 'MyView'); }); }); - describe('created without a name', function () { - it('should have the empty string as name', function () { + describe('created without a name', () => { + it('should have the empty string as name', () => { new View().should.have.property('name', ''); }); }); - describe('created without content types', function () { - it('should have an empty array as supported content types', function () { + describe('created without content types', () => { + it('should have an empty array as supported content types', () => { new View().supportedContentTypes.should.deep.equal([]); }); }); - describe('created with one content type', function () { - it('should have an array with the supported content types', function () { + describe('created with one content type', () => { + it('should have an array with the supported content types', () => { new View('', 'text/html').supportedContentTypes.should.deep.equal([ { type: 'text/html', responseType: 'text/html;charset=utf-8', quality: 1 }, ]); }); }); - describe('created with two content types', function () { - it('should have an array with the supported content types', function () { + describe('created with two content types', () => { + it('should have an array with the supported content types', () => { new View('', 'text/html,text/plain').supportedContentTypes.should.deep.equal([ { type: 'text/html', responseType: 'text/html;charset=utf-8', quality: 1 }, { type: 'text/plain', responseType: 'text/plain;charset=utf-8', quality: 1 }, @@ -55,8 +55,8 @@ describe('View', function () { }); }); - describe('created with two content types with a quality parameter', function () { - it('should have an array with the supported content types', function () { + describe('created with two content types with a quality parameter', () => { + it('should have an array with the supported content types', () => { new View('', 'text/html,text/plain;q=0.4').supportedContentTypes.should.deep.equal([ { type: 'text/html', responseType: 'text/html;charset=utf-8', quality: 1 }, { type: 'text/plain', responseType: 'text/plain;charset=utf-8', quality: 0.4 }, @@ -64,16 +64,16 @@ describe('View', function () { }); }); - describe('without _render method', function () { - it('should throw an error on calling render', function () { + describe('without _render method', () => { + it('should throw an error on calling render', () => { let response = { getHeader: sinon.stub() }; (function () { new View().render(null, null, response); }) .should.throw('The _render method is not yet implemented.'); }); }); - describe('created without defaults', function () { - it('should call _render with the given options', function () { + describe('created without defaults', () => { + it('should call _render with the given options', () => { let view = new View(), request = {}, response = { getHeader: sinon.stub().returns('text/html') }, options = { a: 'b' }; @@ -94,8 +94,8 @@ describe('View', function () { }); }); - describe('created with defaults', function () { - it('should call _render with the combined defaults and options', function () { + describe('created with defaults', () => { + it('should call _render with the combined defaults and options', () => { let view = new View(null, null, { c: 'd' }), request = {}, response = { getHeader: sinon.stub().returns('text/html') }, options = { a: 'b' }; diff --git a/packages/core/test/views/ViewCollection-test.js b/packages/core/test/views/ViewCollection-test.js index 84709b9a..7e53649b 100644 --- a/packages/core/test/views/ViewCollection-test.js +++ b/packages/core/test/views/ViewCollection-test.js @@ -3,65 +3,65 @@ let ViewCollection = require('../../lib/views/ViewCollection'); let View = require('../../lib/views/View'); -describe('ViewCollection', function () { - describe('The ViewCollection module', function () { - it('should be a function', function () { +describe('ViewCollection', () => { + describe('The ViewCollection module', () => { + it('should be a function', () => { ViewCollection.should.be.a('function'); }); - it('should be a ViewCollection constructor', function () { + it('should be a ViewCollection constructor', () => { new ViewCollection().should.be.an.instanceof(ViewCollection); }); }); - describe('A ViewCollection instance without views', function () { + describe('A ViewCollection instance without views', () => { let viewCollection; - before(function () { + before(() => { viewCollection = new ViewCollection(); }); - it('should throw an error when matching a view', function () { + it('should throw an error when matching a view', () => { (function () { viewCollection.matchView('Foo'); }) .should.throw('No view named Foo found.'); }); }); - describe('A ViewCollection instance with one view', function () { + describe('A ViewCollection instance with one view', () => { let viewCollection, viewA; - before(function () { + before(() => { viewA = new View('MyView1', 'text/html,application/trig;q=0.7'); viewCollection = new ViewCollection([viewA]); }); - it('should throw an error when matching a view with a non-existing type', function () { + it('should throw an error when matching a view with a non-existing type', () => { (function () { viewCollection.matchView('Bar'); }) .should.throw('No view named Bar found.'); }); - describe('when a client requests HTML', function () { + describe('when a client requests HTML', () => { let viewDetails, request, response; - before(function () { + before(() => { request = { headers: { accept: 'text/html' } }; response = {}; viewDetails = viewCollection.matchView('MyView1', request, response); }); - it('should return a match for the view', function () { + it('should return a match for the view', () => { viewDetails.should.have.property('view', viewA); viewDetails.should.have.property('type', 'text/html'); viewDetails.should.have.property('responseType', 'text/html;charset=utf-8'); }); }); - describe('when a client requests TriG', function () { + describe('when a client requests TriG', () => { let viewDetails, request, response; - before(function () { + before(() => { request = { headers: { accept: 'application/trig' } }; response = {}; viewDetails = viewCollection.matchView('MyView1', request, response); }); - it('should return a match for the view', function () { + it('should return a match for the view', () => { viewDetails.should.have.property('view', viewA); viewDetails.should.have.property('type', 'application/trig'); viewDetails.should.have.property('responseType', 'application/trig;charset=utf-8'); @@ -69,59 +69,59 @@ describe('ViewCollection', function () { }); }); - describe('A ViewCollection instance with three views of two types', function () { + describe('A ViewCollection instance with three views of two types', () => { let viewCollection, viewA, viewB, viewC; - before(function () { + before(() => { viewA = new View('MyView1', 'text/html,application/trig;q=0.5'); viewB = new View('MyView1', 'text/html;q=1.0,application/trig'); viewC = new View('MyView2', 'text/html'); viewCollection = new ViewCollection([viewA, viewB, viewC]); }); - it('should throw an error when matching a view with a non-existing type', function () { + it('should throw an error when matching a view with a non-existing type', () => { (function () { viewCollection.matchView('Bar'); }) .should.throw('No view named Bar found.'); }); - describe('when matching a request of one view type as HTML', function () { + describe('when matching a request of one view type as HTML', () => { let viewDetails, request, response; - before(function () { + before(() => { request = { headers: { accept: 'text/html' } }; response = {}; viewDetails = viewCollection.matchView('MyView1', request, response); }); - it('should return a description of the best fitting view', function () { + it('should return a description of the best fitting view', () => { viewDetails.should.have.property('view', viewA); viewDetails.should.have.property('type', 'text/html'); viewDetails.should.have.property('responseType', 'text/html;charset=utf-8'); }); }); - describe('when matching a request of one view type as TriG', function () { + describe('when matching a request of one view type as TriG', () => { let viewDetails, request, response; - before(function () { + before(() => { request = { headers: { accept: 'application/trig' } }; response = {}; viewDetails = viewCollection.matchView('MyView1', request, response); }); - it('should return a description of the best fitting view', function () { + it('should return a description of the best fitting view', () => { viewDetails.should.have.property('view', viewB); viewDetails.should.have.property('type', 'application/trig'); viewDetails.should.have.property('responseType', 'application/trig;charset=utf-8'); }); }); - describe('when matching a request of another view type as HTML', function () { + describe('when matching a request of another view type as HTML', () => { let viewDetails, request, response; - before(function () { + before(() => { request = { headers: { accept: 'text/html' } }; response = {}; viewDetails = viewCollection.matchView('MyView2', request, response); }); - it('should return a description of the other view', function () { + it('should return a description of the other view', () => { viewDetails.should.have.property('view', viewC); viewDetails.should.have.property('type', 'text/html'); viewDetails.should.have.property('responseType', 'text/html;charset=utf-8'); diff --git a/packages/datasource-composite/lib/datasources/CompositeDatasource.js b/packages/datasource-composite/lib/datasources/CompositeDatasource.js index 97be5530..c75c4357 100644 --- a/packages/datasource-composite/lib/datasources/CompositeDatasource.js +++ b/packages/datasource-composite/lib/datasources/CompositeDatasource.js @@ -62,10 +62,10 @@ class CompositeDatasource extends Datasource { let emptyQuery = { offset: 0, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; let exactCount = 0; let outputQuads = datasource.select(emptyQuery); - outputQuads.on('data', function () { + outputQuads.on('data', () => { exactCount++; }); - outputQuads.on('end', function () { + outputQuads.on('end', () => { if (exactCount > 1000) cache.set(cacheKey, exactCount); callback(exactCount); @@ -97,11 +97,11 @@ class CompositeDatasource extends Datasource { return findRecursive(datasourceIndex + 1, offset, chosenDatasource, chosenOffset, totalCount, hasExactCount); let outputQuads = datasource.select(emptyQuery); - outputQuads.getProperty('metadata', function (metadata) { + outputQuads.getProperty('metadata', (metadata) => { // If we are still looking for an appropriate datasource, we need exact counts let count = metadata.totalCount, exact = metadata.hasExactCount; if (offset > 0 && !exact) { - self._getExactCount(datasource, query, function (exactCount) { + self._getExactCount(datasource, query, (exactCount) => { count = exactCount; exact = true; continueRecursion(); @@ -113,14 +113,14 @@ class CompositeDatasource extends Datasource { function continueRecursion() { if (chosenDatasource < 0 && offset < count) { // We can start querying from this datasource - setImmediate(function () { + setImmediate(() => { findRecursive(datasourceIndex + 1, offset - count, datasourceIndex, offset, totalCount + count, hasExactCount && exact); }); } else { // We forward our accumulated information and go check the next datasource - setImmediate(function () { + setImmediate(() => { findRecursive(datasourceIndex + 1, offset - count, chosenDatasource, chosenOffset, totalCount + count, hasExactCount && exact); }); @@ -134,8 +134,7 @@ class CompositeDatasource extends Datasource { // Writes the results of the query to the given quad stream _executeQuery(query, destination) { let offset = query.offset || 0, limit = query.limit || Infinity; - let self = this; - this._getDatasourceInfo(query, offset, function (datasourceIndex, relativeOffset, totalCount, hasExactCount) { + this._getDatasourceInfo(query, offset, (datasourceIndex, relativeOffset, totalCount, hasExactCount) => { if (datasourceIndex < 0) { // No valid datasource has been found destination.setProperty('metadata', { totalCount: totalCount, hasExactCount: hasExactCount }); @@ -148,20 +147,20 @@ class CompositeDatasource extends Datasource { // Modify our quad stream so that if all results from one datasource have arrived, // check if we haven't reached the limit and if so, trigger a new query for the next datasource. let emitted = 0; - countItems(destination, function (localEmittedCount) { + countItems(destination, (localEmittedCount) => { // This is called after the last element has been pushed // If we haven't reached our limit, try to fill it with other datasource query results. emitted = localEmittedCount; datasourceIndex++; - if (emitted < limit && datasourceIndex < self._datasourceNames.length) { + if (emitted < limit && datasourceIndex < this._datasourceNames.length) { let localLimit = limit - emitted; let subQuery = { offset: 0, limit: localLimit, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; - let datasource = self._getDatasourceById(datasourceIndex); + let datasource = this._getDatasourceById(datasourceIndex); // If we are have a graph in our query, and this is a triple datasource, make sure it is in the requested graph, // otherwise we skip this datasource - if (self._hasDatasourceMatchingGraph(datasource, datasourceIndex, subQuery)) { + if (this._hasDatasourceMatchingGraph(datasource, datasourceIndex, subQuery)) { let outputQuads = datasource.select(subQuery); outputQuads.on('data', pushToDestination); outputQuads.on('end', closeDestination); @@ -177,7 +176,7 @@ class CompositeDatasource extends Datasource { // Initiate query to the first datasource. let subQuery = { offset: relativeOffset, limit: limit, subject: query.subject, predicate: query.predicate, object: query.object, graph: query.graph }; - let outputQuads = self._getDatasourceById(datasourceIndex).select(subQuery); + let outputQuads = this._getDatasourceById(datasourceIndex).select(subQuery); outputQuads.on('data', pushToDestination); outputQuads.on('end', closeDestination); } diff --git a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js index 35cb9a31..8a841de8 100644 --- a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js +++ b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js @@ -12,14 +12,14 @@ let exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/tes let exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); let exampleTrigUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.trig'); -describe('CompositeDatasource', function () { +describe('CompositeDatasource', () => { let references = { data0: { dataFactory, settings: { dataFactory, file: exampleHdtFile }, datasourceType: HdtDatasource, size: 132 }, data1: { dataFactory, settings: { dataFactory, file: exampleHdtFileWithBlanks, graph: 'http://example.org/graph0' }, datasourceType: HdtDatasource, size: 6 }, data2: { dataFactory, settings: { dataFactory, url: exampleTurtleUrl }, datasourceType: N3Datasource, size: 129 }, data3: { dataFactory, settings: { dataFactory, url: exampleTrigUrl }, datasourceType: N3Datasource, size: 7 }, }; - Object.keys(references).forEach(function (datasourceId) { + Object.keys(references).forEach((datasourceId) => { let datasource = references[datasourceId]; let DatasourceType = datasource.datasourceType; let size = references[datasourceId].size; @@ -27,43 +27,43 @@ describe('CompositeDatasource', function () { references[datasourceId].size = size; references[datasourceId].initialize(); }); - let totalSize = Object.keys(references).reduce(function (acc, key) { + let totalSize = Object.keys(references).reduce((acc, key) => { return acc + references[key].size; }, 0); - describe('The CompositeDatasource module', function () { - it('should be a function', function () { + describe('The CompositeDatasource module', () => { + it('should be a function', () => { CompositeDatasource.should.be.a('function'); }); - it('should be an CompositeDatasource constructor', function (done) { + it('should be an CompositeDatasource constructor', (done) => { let instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(CompositeDatasource); instance.close(done); }); - it('should create CompositeDatasource objects', function (done) { + it('should create CompositeDatasource objects', (done) => { let instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(CompositeDatasource); instance.close(done); }); - it('should create Datasource objects', function (done) { + it('should create Datasource objects', (done) => { let instance = new CompositeDatasource({ references: references }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); }); - describe('A CompositeDatasource instance for 4 Datasources', function () { + describe('A CompositeDatasource instance for 4 Datasources', () => { let datasource; function getDatasource() { return datasource; } - before(function (done) { + before((done) => { datasource = new CompositeDatasource({ references: references }); datasource.initialize(); datasource.on('initialized', done); }); - after(function (done) { + after((done) => { datasource.close(done); }); @@ -156,25 +156,25 @@ describe('CompositeDatasource', function () { function itShouldExecute(getDatasource, name, query, expectedResultsCount, expectedTotalCount, expectedTriples) { - describe('executing ' + name, function () { + describe('executing ' + name, () => { let resultsCount = 0, totalCount, triples = []; - before(function (done) { + before((done) => { let result = getDatasource().select(query); - result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); - result.on('data', function (triple) { resultsCount++; expectedTriples && triples.push(triple); }); + result.getProperty('metadata', (metadata) => { totalCount = metadata.totalCount; }); + result.on('data', (triple) => { resultsCount++; expectedTriples && triples.push(triple); }); result.on('end', done); }); - it('should return the expected number of triples', function () { + it('should return the expected number of triples', () => { expect(resultsCount).to.equal(expectedResultsCount); }); - it('should emit the expected total number of triples', function () { + it('should emit the expected total number of triples', () => { expect(totalCount).to.equal(expectedTotalCount); }); if (expectedTriples) { - it('should emit the expected triples', function () { + it('should emit the expected triples', () => { expect(triples.length).to.equal(expectedTriples.length); for (let i = 0; i < expectedTriples.length; i++) triples[i].should.deep.equal(expectedTriples[i]); diff --git a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js index be6c58e5..427b8022 100644 --- a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js @@ -53,7 +53,7 @@ class ExternalHdtDatasource extends Datasource { // Parse the result triples hdt.stdout.setEncoding('utf8'); let parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true, dataFactory = this.dataFactory; - parser.parse(hdt.stdout, function (error, triple) { + parser.parse(hdt.stdout, (error, triple) => { if (error) destination.emit('error', new Error('Invalid query result: ' + error.message)); else if (triple) @@ -69,13 +69,13 @@ class ExternalHdtDatasource extends Datasource { parser._prefixes._ = '_:'; // Ensure blank nodes are named consistently // Extract the estimated number of total matches from the first (comment) line - hdt.stdout.once('data', function (header) { + hdt.stdout.once('data', (header) => { estimatedTotalCount = parseInt(header.match(/\d+/), 10) || 0; hasExactCount = header.indexOf('estimated') < 0; }); // Report query errors - hdt.on('exit', function (exitCode) { + hdt.on('exit', (exitCode) => { exitCode && destination.emit('error', new Error('Could not query ' + hdtFile)); }); } diff --git a/packages/datasource-hdt/lib/datasources/HdtDatasource.js b/packages/datasource-hdt/lib/datasources/HdtDatasource.js index 4a676beb..2b36002a 100644 --- a/packages/datasource-hdt/lib/datasources/HdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/HdtDatasource.js @@ -22,7 +22,7 @@ class HdtDatasource extends Datasource { // Loads the HDT datasource _initialize(done) { let datasource = this; - hdt.fromFile(this._hdtFile).then(function (hdtDocument) { + hdt.fromFile(this._hdtFile).then((hdtDocument) => { datasource._hdtDocument = hdtDocument; }).then(done, done); } @@ -40,7 +40,7 @@ class HdtDatasource extends Datasource { query.predicate ? RdfString.termToString(query.predicate) : null, query.object ? RdfString.termToString(query.object) : null, { limit: query.limit, offset: query.offset }) - .then(function (result) { + .then((result) => { let triples = result.triples, estimatedTotalCount = result.totalCount, hasExactCount = result.hasExactCount; @@ -54,7 +54,7 @@ class HdtDatasource extends Datasource { destination._push(RdfString.stringQuadToQuad(triples[i], dataFactory)); destination.close(); }, - function (error) { destination.emit('error', error); }); + (error) => { destination.emit('error', error); }); } // Closes the data source diff --git a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js index 1f1697e5..4da65b15 100644 --- a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js +++ b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js @@ -9,20 +9,20 @@ let Datasource = require('@ldf/core').datasources.Datasource, let exampleHdtFile = path.join(__dirname, '../../../../test/assets/test.hdt'); let exampleHdtFileWithBlanks = path.join(__dirname, '../../../../test/assets/test-blank.hdt'); -describe('HdtDatasource', function () { - describe('The HdtDatasource module', function () { - it('should be a function', function () { +describe('HdtDatasource', () => { + describe('The HdtDatasource module', () => { + it('should be a function', () => { HdtDatasource.should.be.a('function'); }); - it('should be an HdtDatasource constructor', function (done) { + it('should be an HdtDatasource constructor', (done) => { let instance = new HdtDatasource({ dataFactory, file: exampleHdtFile }); instance.initialize(); instance.should.be.an.instanceof(HdtDatasource); instance.close(done); }); - it('should create Datasource objects', function (done) { + it('should create Datasource objects', (done) => { let instance = new HdtDatasource({ dataFactory, file: exampleHdtFile }); instance.initialize(); instance.should.be.an.instanceof(Datasource); @@ -30,15 +30,15 @@ describe('HdtDatasource', function () { }); }); - describe('A HdtDatasource instance for an example HDT file', function () { + describe('A HdtDatasource instance for an example HDT file', () => { let datasource; function getDatasource() { return datasource; } - before(function (done) { + before((done) => { datasource = new HdtDatasource({ dataFactory, file: exampleHdtFile }); datasource.initialize(); datasource.on('initialized', done); }); - after(function (done) { + after((done) => { datasource.close(done); }); @@ -93,15 +93,15 @@ describe('HdtDatasource', function () { 0, 0); }); - describe('A HdtDatasource instance with blank nodes', function () { + describe('A HdtDatasource instance with blank nodes', () => { let datasource; function getDatasource() { return datasource; } - before(function (done) { + before((done) => { datasource = new HdtDatasource({ dataFactory, file: exampleHdtFileWithBlanks }); datasource.initialize(); datasource.on('initialized', done); }); - after(function (done) { + after((done) => { datasource.close(done); }); @@ -142,10 +142,10 @@ describe('HdtDatasource', function () { ]); }); - describe('A HdtDatasource instance with blank nodes and a blank node prefix', function () { + describe('A HdtDatasource instance with blank nodes and a blank node prefix', () => { let datasource; function getDatasource() { return datasource; } - before(function (done) { + before((done) => { datasource = new HdtDatasource({ dataFactory, file: exampleHdtFileWithBlanks, @@ -154,7 +154,7 @@ describe('HdtDatasource', function () { datasource.initialize(); datasource.on('initialized', done); }); - after(function (done) { + after((done) => { datasource.close(done); }); @@ -198,25 +198,25 @@ describe('HdtDatasource', function () { function itShouldExecute(getDatasource, name, query, expectedResultsCount, expectedTotalCount, expectedTriples) { - describe('executing ' + name, function () { + describe('executing ' + name, () => { let resultsCount = 0, totalCount, triples = []; - before(function (done) { + before((done) => { let result = getDatasource().select(query); - result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); - result.on('data', function (triple) { resultsCount++; expectedTriples && triples.push(triple); }); + result.getProperty('metadata', (metadata) => { totalCount = metadata.totalCount; }); + result.on('data', (triple) => { resultsCount++; expectedTriples && triples.push(triple); }); result.on('end', done); }); - it('should return the expected number of triples', function () { + it('should return the expected number of triples', () => { expect(resultsCount).to.equal(expectedResultsCount); }); - it('should emit the expected total number of triples', function () { + it('should emit the expected total number of triples', () => { expect(totalCount).to.equal(expectedTotalCount); }); if (expectedTriples) { - it('should emit the expected triples', function () { + it('should emit the expected triples', () => { expect(triples.length).to.equal(expectedTriples.length); for (let i = 0; i < expectedTriples.length; i++) triples[i].should.deep.equal(RdfString.stringQuadToQuad(expectedTriples[i], dataFactory)); diff --git a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js index 3af541b1..05d48f14 100644 --- a/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js +++ b/packages/datasource-jsonld/test/datasources/JsonLdDatasource-test.js @@ -7,29 +7,29 @@ let Datasource = require('@ldf/core').datasources.Datasource, let exampleJsonLdUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.jsonld'); -describe('JsonLdDatasource', function () { - describe('The JsonLdDatasource module', function () { - it('should be a function', function () { +describe('JsonLdDatasource', () => { + describe('The JsonLdDatasource module', () => { + it('should be a function', () => { JsonLdDatasource.should.be.a('function'); }); - it('should be a JsonLdDatasource constructor', function (done) { + it('should be a JsonLdDatasource constructor', (done) => { let instance = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); instance.should.be.an.instanceof(JsonLdDatasource); instance.close(done); }); - it('should create Datasource objects', function (done) { + it('should create Datasource objects', (done) => { let instance = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); }); - describe('A JsonLdDatasource instance for an example JsonLd file', function () { + describe('A JsonLdDatasource instance for an example JsonLd file', () => { let datasource = new JsonLdDatasource({ dataFactory, url: exampleJsonLdUrl }); datasource.initialize(); - after(function (done) { datasource.close(done); }); + after((done) => { datasource.close(done); }); itShouldExecute(datasource, 'the empty query', @@ -89,20 +89,20 @@ describe('JsonLdDatasource', function () { }); function itShouldExecute(datasource, name, query, expectedResultsCount, expectedTotalCount) { - describe('executing ' + name, function () { + describe('executing ' + name, () => { let resultsCount = 0, totalCount; - before(function (done) { + before((done) => { let result = datasource.select(query); - result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); - result.on('data', function (triple) { resultsCount++; }); + result.getProperty('metadata', (metadata) => { totalCount = metadata.totalCount; }); + result.on('data', (triple) => { resultsCount++; }); result.on('end', done); }); - it('should return the expected number of triples', function () { + it('should return the expected number of triples', () => { expect(resultsCount).to.equal(expectedResultsCount); }); - it('should emit the expected total number of triples', function () { + it('should emit the expected total number of triples', () => { expect(totalCount).to.equal(expectedTotalCount); }); }); diff --git a/packages/datasource-n3/lib/datasources/N3Datasource.js b/packages/datasource-n3/lib/datasources/N3Datasource.js index 83d4540d..4ce453d9 100644 --- a/packages/datasource-n3/lib/datasources/N3Datasource.js +++ b/packages/datasource-n3/lib/datasources/N3Datasource.js @@ -17,7 +17,7 @@ class N3Datasource extends MemoryDatasource { _getAllQuads(addQuad, done) { let document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }, done); N3Parser._resetBlankNodeIds(); - new N3Parser({ factory: this.dataFactory }).parse(document, function (error, quad) { + new N3Parser({ factory: this.dataFactory }).parse(document, (error, quad) => { quad ? addQuad(quad) : done(error); }); } diff --git a/packages/datasource-n3/test/datasources/N3Datasource-test.js b/packages/datasource-n3/test/datasources/N3Datasource-test.js index 93bdead7..be97d8fe 100644 --- a/packages/datasource-n3/test/datasources/N3Datasource-test.js +++ b/packages/datasource-n3/test/datasources/N3Datasource-test.js @@ -7,29 +7,29 @@ let Datasource = require('@ldf/core').datasources.Datasource, let exampleTurtleUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.ttl'); -describe('N3Datasource', function () { - describe('The N3Datasource module', function () { - it('should be a function', function () { +describe('N3Datasource', () => { + describe('The N3Datasource module', () => { + it('should be a function', () => { N3Datasource.should.be.a('function'); }); - it('should be a N3Datasource constructor', function (done) { + it('should be a N3Datasource constructor', (done) => { let instance = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); instance.should.be.an.instanceof(N3Datasource); instance.close(done); }); - it('should create Datasource objects', function (done) { + it('should create Datasource objects', (done) => { let instance = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); }); - describe('A N3Datasource instance for an example Turtle file', function () { + describe('A N3Datasource instance for an example Turtle file', () => { let datasource = new N3Datasource({ dataFactory, url: exampleTurtleUrl }); datasource.initialize(); - after(function (done) { datasource.close(done); }); + after((done) => { datasource.close(done); }); itShouldExecute(datasource, 'the empty query', @@ -79,20 +79,20 @@ describe('N3Datasource', function () { }); function itShouldExecute(datasource, name, query, expectedResultsCount, expectedTotalCount) { - describe('executing ' + name, function () { + describe('executing ' + name, () => { let resultsCount = 0, totalCount; - before(function (done) { + before((done) => { let result = datasource.select(query); - result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); - result.on('data', function (triple) { resultsCount++; }); + result.getProperty('metadata', (metadata) => { totalCount = metadata.totalCount; }); + result.on('data', (triple) => { resultsCount++; }); result.on('end', done); }); - it('should return the expected number of triples', function () { + it('should return the expected number of triples', () => { expect(resultsCount).to.equal(expectedResultsCount); }); - it('should emit the expected total number of triples', function () { + it('should emit the expected total number of triples', () => { expect(totalCount).to.equal(expectedTotalCount); }); }); diff --git a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js index 13906178..1b100c94 100644 --- a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -40,15 +40,15 @@ class SparqlDatasource extends Datasource { // Fetch and parse matching triples using JSON responses let json = ''; this._request(request, emitError) - .on('data', function (data) { json += data; }) + .on('data', (data) => { json += data; }) .on('error', emitError) - .on('end', function () { + .on('end', () => { let response; try { response = JSON.parse(json); } catch (e) { return emitError({ message: INVALID_JSON_RESPONSE }); } - response.results.bindings.forEach(function (binding) { - binding = self._sparqlJsonParser.parseJsonBindings(binding); + response.results.bindings.forEach((binding) => { + binding = this._sparqlJsonParser.parseJsonBindings(binding); let triple = { subject: binding.s || query.subject, predicate: binding.p || query.predicate, @@ -61,7 +61,7 @@ class SparqlDatasource extends Datasource { }); // Determine the total number of matching triples - this._getPatternCount(sparqlPattern).then(function (count) { + this._getPatternCount(sparqlPattern).then((count) => { destination.setProperty('metadata', count); }, emitError); @@ -94,13 +94,12 @@ class SparqlDatasource extends Datasource { }); // Parse SPARQL response in CSV format (2 lines: variable name / count value) - let self = this; - return new Promise(function (resolve, reject) { + return new Promise((resolve, reject) => { let csv = ''; - self._resolvingCountQueries[sparqlPattern] = true; - countResponse.on('data', function (data) { csv += data; }); - countResponse.on('end', function () { - delete self._resolvingCountQueries[sparqlPattern]; + this._resolvingCountQueries[sparqlPattern] = true; + countResponse.on('data', (data) => { csv += data; }); + countResponse.on('end', () => { + delete this._resolvingCountQueries[sparqlPattern]; let countMatch = csv.match(/\d+/); if (!countMatch) reject(new Error('COUNT query failed.')); diff --git a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js index f682af51..3dc3cf75 100644 --- a/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js +++ b/packages/datasource-sparql/test/datasources/SparqlDatasource-test.js @@ -10,27 +10,27 @@ let Datasource = require('@ldf/core').datasources.Datasource, let jsonResult = fs.readFileSync(path.join(__dirname, '../../../../test/assets/sparql-quads-response.json')); let countResult = '"c"\n12345678\n'; -describe('SparqlDatasource', function () { - describe('The SparqlDatasource module', function () { - it('should be a function', function () { +describe('SparqlDatasource', () => { + describe('The SparqlDatasource module', () => { + it('should be a function', () => { SparqlDatasource.should.be.a('function'); }); - it('should be a SparqlDatasource constructor', function () { + it('should be a SparqlDatasource constructor', () => { new SparqlDatasource({ dataFactory }).should.be.an.instanceof(SparqlDatasource); }); - it('should create Datasource objects', function () { + it('should create Datasource objects', () => { new SparqlDatasource({ dataFactory }).should.be.an.instanceof(Datasource); }); }); - describe('A SparqlDatasource instance', function () { + describe('A SparqlDatasource instance', () => { let request = sinon.stub(); let datasource = new SparqlDatasource({ dataFactory, endpoint: 'http://ex.org/sparql', request: request }); datasource.initialize(); - it('should indicate support for its features', function () { + it('should indicate support for its features', () => { datasource.supportedFeatures.should.deep.equal({ triplePattern: true, quadPattern: true, @@ -40,20 +40,20 @@ describe('SparqlDatasource', function () { }); }); - it('should support the empty query', function () { + it('should support the empty query', () => { datasource.supportsQuery({}).should.be.true; }); - it('should support a query with supported features', function () { + it('should support a query with supported features', () => { datasource.supportsQuery({ features: { limit: true, offset: true, b: false } }).should.be.true; }); - it('should not support a query with unsupported features', function () { + it('should not support a query with unsupported features', () => { datasource.supportsQuery({ features: { limit: true, b: true } }).should.be.false; }); - it('should throw an error when trying to execute an unsupported query', function (done) { - datasource.select({ features: { a: true, b: true } }, function (error) { + it('should throw an error when trying to execute an unsupported query', (done) => { + datasource.select({ features: { a: true, b: true } }, (error) => { error.should.be.an.instanceOf(Error); error.should.have.property('message', 'The datasource does not support the given query'); done(); @@ -193,70 +193,70 @@ describe('SparqlDatasource', function () { 'LIMIT 50 OFFSET 150', null /* count should be cached, since this pattern already occurred above */); - describe('when invalid JSON is returned in response to the data query', function () { + describe('when invalid JSON is returned in response to the data query', () => { let result, error; - before(function (done) { + before((done) => { request.reset(); request.onFirstCall().returns(test.createHttpResponse('invalid', 'application/sparql-results+json')); request.onSecondCall().returns(test.createHttpResponse(countResult, 'text/csv')); let query = { subject: dataFactory.namedNode('abcd'), features: { quadPattern: true } }; result = datasource.select(query); - result.on('error', function (e) { error = e; done(); }); + result.on('error', (e) => { error = e; done(); }); }); - it('should emit an error', function () { + it('should emit an error', () => { error.should.have.property('message', 'Error accessing SPARQL endpoint http://ex.org/sparql: The endpoint returned an invalid SPARQL results JSON response.'); }); }); - describe('when invalid JSON is returned in response to the count query', function () { + describe('when invalid JSON is returned in response to the count query', () => { let result, error; - before(function (done) { + before((done) => { request.reset(); request.onFirstCall().returns(test.createHttpResponse(jsonResult, 'application/sparql-results+json')); request.onSecondCall().returns(test.createHttpResponse('invalid', 'application/trig')); let query = { subject: dataFactory.namedNode('abcde'), features: { quadPattern: true } }; result = datasource.select(query); - result.on('error', function (e) { error = e; done(); }); + result.on('error', (e) => { error = e; done(); }); }); - it('should emit an error', function () { + it('should emit an error', () => { error.should.have.property('message', 'Error accessing SPARQL endpoint http://ex.org/sparql: COUNT query failed.'); }); }); - describe('when the data query request errors', function () { + describe('when the data query request errors', () => { let result, error; - before(function (done) { + before((done) => { request.reset(); let query = { subject: dataFactory.namedNode('abcde'), features: { quadPattern: true } }; result = datasource.select(query); - result.on('error', function (e) { error = e; done(); }); + result.on('error', (e) => { error = e; done(); }); request.getCall(0).callArgWith(1, Error('query response error')); }); - it('should emit an error', function () { + it('should emit an error', () => { error.should.have.property('message', 'Error accessing SPARQL endpoint http://ex.org/sparql: query response error'); }); }); - describe('when the count query request errors', function () { + describe('when the count query request errors', () => { let result, totalCount; - before(function () { + before(() => { request.reset(); let query = { subject: dataFactory.namedNode('abcdef'), features: { quadPattern: true } }; result = datasource.select(query); request.returnValues[1].emit('error', new Error()); - result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); + result.getProperty('metadata', (metadata) => { totalCount = metadata.totalCount; }); }); - it('should emit a high count estimate', function () { + it('should emit a high count estimate', () => { expect(totalCount).to.equal(1e9); }); }); }); - describe('A SparqlDatasource instance with forceTypedLiterals true', function () { + describe('A SparqlDatasource instance with forceTypedLiterals true', () => { let request = sinon.stub(); let datasource = new SparqlDatasource({ dataFactory, endpoint: 'http://ex.org/sparql', request: request, forceTypedLiterals: true }); datasource.initialize(); @@ -294,17 +294,17 @@ describe('SparqlDatasource', function () { }); function itShouldExecute(datasource, request, name, query, constructQuery, countQuery) { - describe('executing ' + name, function () { + describe('executing ' + name, () => { let result, totalCount; - before(function () { + before(() => { request.reset(); request.onFirstCall().returns(test.createHttpResponse(jsonResult, 'application/sparql-results+json')); request.onSecondCall().returns(test.createHttpResponse(countResult, 'text/csv')); result = datasource.select(query); - result.getProperty('metadata', function (metadata) { totalCount = metadata.totalCount; }); + result.getProperty('metadata', (metadata) => { totalCount = metadata.totalCount; }); }); - it('should request a matching CONSTRUCT query', function () { + it('should request a matching CONSTRUCT query', () => { request.should.have.been.called; let url = URL.parse(request.firstCall.args[0].url, true); (url.protocol + '//' + url.host + url.pathname).should.equal('http://ex.org/sparql'); @@ -312,7 +312,7 @@ function itShouldExecute(datasource, request, name, query, constructQuery, count }); if (countQuery) { - it('should request a matching COUNT query', function () { + it('should request a matching COUNT query', () => { request.should.have.been.calledTwice; let url = URL.parse(request.secondCall.args[0].url, true); (url.protocol + '//' + url.host + url.pathname).should.equal('http://ex.org/sparql'); @@ -320,16 +320,16 @@ function itShouldExecute(datasource, request, name, query, constructQuery, count }); } else { - it('should use the cached COUNT result', function () { + it('should use the cached COUNT result', () => { request.should.have.been.calledOnce; }); } - it('should emit all triples in the SPARQL response', function (done) { + it('should emit all triples in the SPARQL response', (done) => { result.should.be.a.streamWithLength(55, done); }); - it('should emit the extracted count', function () { + it('should emit the extracted count', () => { expect(totalCount).to.equal(12345678); }); }); diff --git a/packages/feature-memento/lib/controllers/TimegateController.js b/packages/feature-memento/lib/controllers/TimegateController.js index 6992ddf1..8ec11cef 100644 --- a/packages/feature-memento/lib/controllers/TimegateController.js +++ b/packages/feature-memento/lib/controllers/TimegateController.js @@ -23,8 +23,8 @@ class TimegateController extends Controller { } static parseTimegateMap(mementos) { - return _.mapValues(mementos, function (mementos) { - return sortTimemap(mementos.map(function (memento) { + return _.mapValues(mementos, (mementos) => { + return sortTimemap(mementos.map((memento) => { return { datasource: memento.datasource, datasourceId: memento.datasource.id, @@ -38,8 +38,8 @@ class TimegateController extends Controller { static parseInvertedTimegateMap(mementos, urlData) { let timemaps = TimegateController.parseTimegateMap(mementos); let invertedTimegateMap = {}; - _.forIn(timemaps, function (versions, timeGateId) { - versions.forEach(function (version) { + _.forIn(timemaps, (versions, timeGateId) => { + versions.forEach((version) => { invertedTimegateMap[version.datasourceId] = { memento: timeGateId, original: version.original || (urlData.baseURL || '/') + timeGateId, @@ -148,7 +148,7 @@ class TimegateController extends Controller { // Sort the timemap by interval start date function sortTimemap(timemap) { - return timemap.sort(function (a, b) { + return timemap.sort((a, b) => { return a.interval[0].getTime() - b.interval[0].getTime(); }); } diff --git a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js index a6de4818..fd6b4e9e 100644 --- a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js +++ b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js @@ -27,7 +27,7 @@ class QuadPatternFragmentsController extends Controller { _handleRequest(request, response, next) { // Create the query from the request by calling the fragment routers let requestParams = { url: request.parsedUrl, headers: request.headers }, - query = this._routers.reduce(function (query, router) { + query = this._routers.reduce((query, router) => { try { router.extractQueryParams(requestParams, query); } catch (e) { /* ignore routing errors */ } return query; @@ -44,7 +44,7 @@ class QuadPatternFragmentsController extends Controller { let view = this._negotiateView(this.viewName, request, response), settings = this._createFragmentMetadata(request, query, datasource); settings.results = datasource.select(query, - function (error) { error && next(error); }); + (error) => { error && next(error); }); // Execute the extensions and render the query result let extensions = this._extensions, extensionId = 0; diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js index 7d65fe46..ae085f45 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsHtmlView.js @@ -16,9 +16,9 @@ class QuadPatternFragmentsHtmlView extends HtmlView { _render(settings, request, response, done) { // Read the data and metadata let self = this, quads = settings.quads = [], results = settings.results; - results.on('data', function (triple) { quads.push(triple); }); - results.on('end', function () { settings.metadata && renderHtml(); }); - results.getProperty('metadata', function (metadata) { + results.on('data', (triple) => { quads.push(triple); }); + results.on('end', () => { settings.metadata && renderHtml(); }); + results.getProperty('metadata', (metadata) => { settings.metadata = metadata; results.ended && renderHtml(); }); diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js index d8dba226..4463f1a3 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -20,7 +20,7 @@ class QuadPatternFragmentsRdfView extends RdfView { // Generates quads by sending them to the data and/or metadata callbacks _generateRdf(settings, data, metadata, done) { let datasource = settings.datasource, fragment = settings.fragment, query = settings.query, - results = settings.results, self = this, metadataDone = false; + results = settings.results, metadataDone = false; // Add data source metadata this._generateMetadata(metadata, fragment, query, datasource); @@ -29,8 +29,8 @@ class QuadPatternFragmentsRdfView extends RdfView { this._generateControls(metadata, fragment, query, datasource); // Add fragment metadata - results.getProperty('metadata', function (meta) { - self.sendFragmentMetadata(metadata, fragment, query, datasource, meta); + results.getProperty('metadata', (meta) => { + this.sendFragmentMetadata(metadata, fragment, query, datasource, meta); // End if the data was also written metadataDone = true; @@ -39,7 +39,7 @@ class QuadPatternFragmentsRdfView extends RdfView { // Add data quads results.on('data', data); - results.on('end', function () { metadataDone && done(); }); + results.on('end', () => { metadataDone && done(); }); } // Generate the datasource metadata diff --git a/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js index 8ac6bd21..2f8defa4 100644 --- a/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js +++ b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js @@ -9,24 +9,24 @@ let QuadPatternFragmentsHtmlView = require('../../').views.quadpatternfragments. QuadPatternFragmentsRdfView = require('../../').views.quadpatternfragments.QuadPatternFragmentsRdfView, UrlData = require('@ldf/core').UrlData; -describe('QuadPatternFragmentsController', function () { - describe('The QuadPatternFragmentsController module', function () { - it('should be a function', function () { +describe('QuadPatternFragmentsController', () => { + describe('The QuadPatternFragmentsController module', () => { + it('should be a function', () => { QuadPatternFragmentsController.should.be.a('function'); }); - it('should be a QuadPatternFragmentsController constructor', function () { + it('should be a QuadPatternFragmentsController constructor', () => { new QuadPatternFragmentsController().should.be.an.instanceof(QuadPatternFragmentsController); }); }); - describe('A QuadPatternFragmentsController instance with 3 routers', function () { + describe('A QuadPatternFragmentsController instance with 3 routers', () => { let controller, client, routerA, routerB, routerC, datasource, datasources, view, prefixes; - before(function () { + before(() => { routerA = { extractQueryParams: sinon.stub() }; routerB = { extractQueryParams: sinon.stub().throws(new Error('second router error')) }; routerC = { - extractQueryParams: sinon.spy(function (request, query) { + extractQueryParams: sinon.spy((request, query) => { query.features.datasource = true; query.features.other = true; query.datasource = '/my-datasource'; @@ -60,13 +60,13 @@ describe('QuadPatternFragmentsController', function () { datasource.select.reset(); } - describe('receiving a request for a fragment', function () { - before(function (done) { + describe('receiving a request for a fragment', () => { + before((done) => { resetAll(); client.get('/my-datasource?a=b&c=d').end(done); }); - it('should call the first router with the request and an empty query', function () { + it('should call the first router with the request and an empty query', () => { routerA.extractQueryParams.should.have.been.calledOnce; let args = routerA.extractQueryParams.firstCall.args; @@ -81,7 +81,7 @@ describe('QuadPatternFragmentsController', function () { expect(args[1].features).to.be.an('array'); }); - it('should call the second router with the same request and query', function () { + it('should call the second router with the same request and query', () => { routerB.extractQueryParams.should.have.been.calledOnce; routerB.extractQueryParams.firstCall.args[0].should.equal( @@ -90,7 +90,7 @@ describe('QuadPatternFragmentsController', function () { routerA.extractQueryParams.firstCall.args[1]); }); - it('should call the third router with the same request and query', function () { + it('should call the third router with the same request and query', () => { routerC.extractQueryParams.should.have.been.calledOnce; routerC.extractQueryParams.firstCall.args[0].should.equal( @@ -99,19 +99,19 @@ describe('QuadPatternFragmentsController', function () { routerA.extractQueryParams.firstCall.args[1]); }); - it('should verify whether the data source supports the query', function () { + it('should verify whether the data source supports the query', () => { let query = routerC.extractQueryParams.firstCall.args[1]; datasource.supportsQuery.should.have.been.calledOnce; datasource.supportsQuery.should.have.been.calledWith(query); }); - it('should send the query to the right data source', function () { + it('should send the query to the right data source', () => { let query = routerC.extractQueryParams.firstCall.args[1]; datasource.select.should.have.been.calledOnce; datasource.select.should.have.been.calledWith(query); }); - it('should pass the query result to the output view', function () { + it('should pass the query result to the output view', () => { view.render.should.have.been.calledOnce; let args = view.render.firstCall.args; @@ -120,7 +120,7 @@ describe('QuadPatternFragmentsController', function () { args[2].should.be.an.instanceof(http.ServerResponse); }); - it('should pass the correct settings to the view', function () { + it('should pass the correct settings to the view', () => { view.render.should.have.been.calledOnce; let query = routerC.extractQueryParams.firstCall.args[1]; let settings = view.render.firstCall.args[0]; @@ -147,28 +147,28 @@ describe('QuadPatternFragmentsController', function () { }); }); - describe('receiving a request for an unsupported fragment', function () { - before(function (done) { + describe('receiving a request for an unsupported fragment', () => { + before((done) => { resetAll(); datasource.supportsQuery = sinon.stub().returns(false); client.get('/my-datasource?a=b&c=d').end(done); }); - it('should verify whether the data source supports the query', function () { + it('should verify whether the data source supports the query', () => { let query = routerC.extractQueryParams.firstCall.args[1]; datasource.supportsQuery.should.have.been.calledOnce; datasource.supportsQuery.should.have.been.calledWith(query); }); - it('should not send the query to the data source', function () { + it('should not send the query to the data source', () => { datasource.select.should.not.have.been.called; }); }); }); - describe('A QuadPatternFragmentsController instance with 2 views', function () { + describe('A QuadPatternFragmentsController instance with 2 views', () => { let controller, client, htmlView, rdfView; - before(function () { + before(() => { let datasource = { supportsQuery: sinon.stub().returns(true), select: sinon.stub().returns({ @@ -201,115 +201,115 @@ describe('QuadPatternFragmentsController', function () { rdfView.render.reset(); } - describe('receiving a request without Accept header', function () { + describe('receiving a request without Accept header', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/my-datasource') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should call the default view', function () { + it('should call the default view', () => { htmlView.render.should.have.been.calledOnce; }); - it('should set the text/html content type', function () { + it('should set the text/html content type', () => { response.headers.should.have.property('content-type', 'text/html;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); }); - describe('receiving a request with an Accept header of */*', function () { + describe('receiving a request with an Accept header of */*', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/my-datasource').set('Accept', '*/*') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should call the HTML view', function () { + it('should call the HTML view', () => { htmlView.render.should.have.been.calledOnce; }); - it('should set the text/html content type', function () { + it('should set the text/html content type', () => { response.headers.should.have.property('content-type', 'text/html;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); }); - describe('receiving a request with an Accept header of text/html', function () { + describe('receiving a request with an Accept header of text/html', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/my-datasource').set('Accept', 'text/html') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should call the HTML view', function () { + it('should call the HTML view', () => { htmlView.render.should.have.been.calledOnce; }); - it('should set the text/html content type', function () { + it('should set the text/html content type', () => { response.headers.should.have.property('content-type', 'text/html;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); }); - describe('receiving a request with an Accept header of text/turtle', function () { + describe('receiving a request with an Accept header of text/turtle', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/my-datasource').set('Accept', 'text/turtle') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should call the Turtle view', function () { + it('should call the Turtle view', () => { rdfView.render.should.have.been.calledOnce; }); - it('should set the text/turtle content type', function () { + it('should set the text/turtle content type', () => { response.headers.should.have.property('content-type', 'text/turtle;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); }); - describe('receiving a request with an Accept header of text/n3', function () { + describe('receiving a request with an Accept header of text/n3', () => { let response; - before(function (done) { + before((done) => { resetAll(); client.get('/my-datasource').set('Accept', 'text/n3') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should call the Turtle view', function () { + it('should call the Turtle view', () => { rdfView.render.should.have.been.calledOnce; }); - it('should set the text/n3 content type', function () { + it('should set the text/n3 content type', () => { response.headers.should.have.property('content-type', 'text/n3;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); }); }); - describe('A QuadPatternFragmentsController instance without matching view', function () { + describe('A QuadPatternFragmentsController instance without matching view', () => { let controller, client; - before(function () { + before(() => { let datasource = { supportsQuery: sinon.stub().returns(true), select: sinon.stub(), @@ -328,52 +328,52 @@ describe('QuadPatternFragmentsController', function () { client = request.agent(new DummyServer(controller)); }); - describe('receiving a request without Accept header', function () { + describe('receiving a request without Accept header', () => { let response; - before(function (done) { + before((done) => { client.get('/my-datasource') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should return status code 406', function () { + it('should return status code 406', () => { response.should.have.property('statusCode', 406); }); - it('should set the text/plain content type', function () { + it('should set the text/plain content type', () => { response.headers.should.have.property('content-type', 'text/plain;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); }); - describe('receiving a request with an Accept header of text/html', function () { + describe('receiving a request with an Accept header of text/html', () => { let response; - before(function (done) { + before((done) => { client.get('/my-datasource').set('Accept', 'text/html') - .end(function (error, res) { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); - it('should return status code 406', function () { + it('should return status code 406', () => { response.should.have.property('statusCode', 406); }); - it('should set the text/plain content type', function () { + it('should set the text/plain content type', () => { response.headers.should.have.property('content-type', 'text/plain;charset=utf-8'); }); - it('should indicate Accept in the Vary header', function () { + it('should indicate Accept in the Vary header', () => { response.headers.should.have.property('vary', 'Accept'); }); }); }); - describe('A QuadPatternFragmentsController instance with a datasource that synchronously errors', function () { + describe('A QuadPatternFragmentsController instance with a datasource that synchronously errors', () => { let controller, client, router, datasource, error, view; - before(function () { + before(() => { router = { - extractQueryParams: sinon.spy(function (request, query) { + extractQueryParams: sinon.spy((request, query) => { query.features.datasource = true; query.datasource = '/my-datasource'; }), @@ -396,23 +396,23 @@ describe('QuadPatternFragmentsController', function () { router.extractQueryParams.reset(); } - describe('receiving a request for a fragment', function () { - before(function (done) { + describe('receiving a request for a fragment', () => { + before((done) => { resetAll(); client.get('/my-datasource?a=b&c=d').end(done); }); - it('should emit the error', function () { + it('should emit the error', () => { expect(controller.error).to.equal(error); }); }); }); - describe('A QuadPatternFragmentsController instance with a datasource that asynchronously errors', function () { + describe('A QuadPatternFragmentsController instance with a datasource that asynchronously errors', () => { let controller, client, router, datasource, error, view; - before(function () { + before(() => { router = { - extractQueryParams: sinon.spy(function (request, query) { + extractQueryParams: sinon.spy((request, query) => { query.features.datasource = true; query.datasource = '/my-datasource'; }), @@ -436,13 +436,13 @@ describe('QuadPatternFragmentsController', function () { router.extractQueryParams.reset(); } - describe('receiving a request for a fragment', function () { - before(function (done) { + describe('receiving a request for a fragment', () => { + before((done) => { resetAll(); client.get('/my-datasource?a=b&c=d').end(done); }); - it('should emit the error', function () { + it('should emit the error', () => { expect(controller.error).to.equal(error); }); }); diff --git a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js index 347eecfa..8aa33874 100644 --- a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js +++ b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js @@ -2,22 +2,22 @@ let QuadPatternRouter = require('../../').routers.QuadPatternRouter; const dataFactory = require('n3').DataFactory; -describe('QuadPatternRouter', function () { - describe('The QuadPatternRouter module', function () { - it('should be a function', function () { +describe('QuadPatternRouter', () => { + describe('The QuadPatternRouter module', () => { + it('should be a function', () => { QuadPatternRouter.should.be.a('function'); }); - it('should be a QuadPatternRouter constructor', function () { + it('should be a QuadPatternRouter constructor', () => { new QuadPatternRouter({}).should.be.an.instanceof(QuadPatternRouter); }); }); - describe('A QuadPatternRouter instance', function () { + describe('A QuadPatternRouter instance', () => { let router = new QuadPatternRouter({ dataFactory }); - describe('extractUrlParams', function () { - describe('with an existing query', function () { + describe('extractUrlParams', () => { + describe('with an existing query', () => { [ [ 'a URL without query parameters', @@ -223,12 +223,12 @@ describe('QuadPatternRouter', function () { { a: 1, features: { quadPattern: true }, graph: dataFactory.defaultGraph() }, ], ] - .forEach(function (args) { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); - describe('A QuadPatternRouter instance with prefixes', function () { + describe('A QuadPatternRouter instance with prefixes', () => { let router = new QuadPatternRouter({ prefixes: { foo: 'http://example.org/foo#', @@ -237,8 +237,8 @@ describe('QuadPatternRouter', function () { dataFactory, }); - describe('extractUrlParams', function () { - describe('with an existing query', function () { + describe('extractUrlParams', () => { + describe('with an existing query', () => { [ [ 'a URL without query parameters', @@ -465,7 +465,7 @@ describe('QuadPatternRouter', function () { { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('foo:bar') }, ], ] - .forEach(function (args) { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); diff --git a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js index acb957dd..6316f8c0 100644 --- a/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js +++ b/packages/feature-qpf/test/views/quadpatternfragments/QuadPatternFragmentsRdfView-test.js @@ -9,18 +9,18 @@ let _ = require('lodash'), const dataFactory = N3.DataFactory; -describe('QuadPatternFragmentsRdfView', function () { - describe('The QuadPatternFragmentsRdfView module', function () { - it('should be a function', function () { +describe('QuadPatternFragmentsRdfView', () => { + describe('The QuadPatternFragmentsRdfView module', () => { + it('should be a function', () => { QuadPatternFragmentsRdfView.should.be.a('function'); }); - it('should be a QuadPatternFragmentsRdfView constructor', function () { + it('should be a QuadPatternFragmentsRdfView constructor', () => { new QuadPatternFragmentsRdfView({ dataFactory }).should.be.an.instanceof(QuadPatternFragmentsRdfView); }); }); - describe('A QuadPatternFragmentsRdfView instance', function () { + describe('A QuadPatternFragmentsRdfView instance', () => { let view = new QuadPatternFragmentsRdfView({ dataFactory }); let settings = { datasource: { @@ -58,36 +58,36 @@ describe('QuadPatternFragmentsRdfView', function () { 'application/n-quads': 'nq', 'application/ld+json': 'jsonld', }, - function (extension, format) { - describe('when render is called for ' + format, function () { + (extension, format) => { + describe('when render is called for ' + format, () => { function readAsset(name) { let file = path.join(__dirname, '../../../../../test/assets/', name + '.' + extension); return fs.readFileSync(file, 'utf8'); } - describe('with an empty triple stream', function () { + describe('with an empty triple stream', () => { let results = AsyncIterator.empty(); let response = test.createStreamCapture(); - before(function (done) { + before((done) => { settings.results = results; response.getHeader = sinon.stub().returns(format); view.render(settings, {}, response, done); results.setProperty('metadata', { totalCount: 1234 }); }); - it('should only write data source metadata', function () { + it('should only write data source metadata', () => { response.buffer.should.equal(readAsset('empty-fragment')); }); }); - describe('with a non-empty triple stream that writes metadata first', function () { + describe('with a non-empty triple stream that writes metadata first', () => { let results = AsyncIterator.fromArray([ dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('b'), dataFactory.namedNode('c'), dataFactory.defaultGraph()), dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('d'), dataFactory.namedNode('e'), dataFactory.defaultGraph()), dataFactory.quad(dataFactory.namedNode('f'), dataFactory.namedNode('g'), dataFactory.namedNode('h'), dataFactory.defaultGraph()), ]); let response = test.createStreamCapture(); - before(function (done) { + before((done) => { settings.results = new AsyncIterator.TransformIterator(); response.getHeader = sinon.stub().returns(format); view.render(settings, {}, response, done); @@ -95,33 +95,33 @@ describe('QuadPatternFragmentsRdfView', function () { settings.results.source = results; }); - it('should write data and metadata', function () { + it('should write data and metadata', () => { response.buffer.should.equal(readAsset('basic-fragment')); }); }); - describe('with a non-empty triple stream that writes metadata afterwards', function () { + describe('with a non-empty triple stream that writes metadata afterwards', () => { let results = AsyncIterator.fromArray([ dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('b'), dataFactory.namedNode('c'), dataFactory.defaultGraph()), dataFactory.quad(dataFactory.namedNode('a'), dataFactory.namedNode('d'), dataFactory.namedNode('e'), dataFactory.defaultGraph()), dataFactory.quad(dataFactory.namedNode('f'), dataFactory.namedNode('g'), dataFactory.namedNode('h'), dataFactory.defaultGraph()), ]); let response = test.createStreamCapture(); - before(function (done) { + before((done) => { settings.results = results; response.getHeader = sinon.stub().returns(format); view.render(settings, {}, response, done); - setImmediate(function () { + setImmediate(() => { results.setProperty('metadata', { totalCount: 1234 }); }); }); - it('should write data and metadata', function () { + it('should write data and metadata', () => { response.buffer.should.equal(readAsset('basic-fragment-metadata-last')); }); }); - describe('with a query with a limit but no offset', function () { + describe('with a query with a limit but no offset', () => { let results = AsyncIterator.empty(); let settings = { datasource: { }, @@ -134,27 +134,27 @@ describe('QuadPatternFragmentsRdfView', function () { query: { limit: 100 }, }; let response = test.createStreamCapture(); - before(function (done) { + before((done) => { settings.results = results; response.getHeader = sinon.stub().returns(format); view.render(settings, {}, response, done); results.setProperty('metadata', { totalCount: 1234 }); }); - it('should write a first page link', function () { + it('should write a first page link', () => { response.buffer.should.contain('myfirst'); }); - it('should write a next page link', function () { + it('should write a next page link', () => { response.buffer.should.contain('mynext'); }); - it('should not write a previous page link', function () { + it('should not write a previous page link', () => { response.buffer.should.not.contain('myprevious'); }); }); - describe('with a query with a limit and offset before the end', function () { + describe('with a query with a limit and offset before the end', () => { let results = AsyncIterator.empty(); let settings = { datasource: { }, @@ -167,27 +167,27 @@ describe('QuadPatternFragmentsRdfView', function () { query: { limit: 100, offset: 1133 }, }; let response = test.createStreamCapture(); - before(function (done) { + before((done) => { settings.results = results; response.getHeader = sinon.stub().returns(format); view.render(settings, {}, response, done); results.setProperty('metadata', { totalCount: 1234 }); }); - it('should write a first page link', function () { + it('should write a first page link', () => { response.buffer.should.contain('myfirst'); }); - it('should write a next page link', function () { + it('should write a next page link', () => { response.buffer.should.contain('mynext'); }); - it('should write a previous page link', function () { + it('should write a previous page link', () => { response.buffer.should.contain('myprevious'); }); }); - describe('with a query with a limit and offset past the end', function () { + describe('with a query with a limit and offset past the end', () => { let results = AsyncIterator.empty(); let settings = { datasource: { }, @@ -200,22 +200,22 @@ describe('QuadPatternFragmentsRdfView', function () { query: { limit: 100, offset: 1135 }, }; let response = test.createStreamCapture(); - before(function (done) { + before((done) => { settings.results = results; response.getHeader = sinon.stub().returns(format); view.render(settings, {}, response, done); results.setProperty('metadata', { totalCount: 1234 }); }); - it('should write a first page link', function () { + it('should write a first page link', () => { response.buffer.should.contain('myfirst'); }); - it('should not write a next page link', function () { + it('should not write a next page link', () => { response.buffer.should.not.contain('mynext'); }); - it('should write a previous page link', function () { + it('should write a previous page link', () => { response.buffer.should.contain('myprevious'); }); }); diff --git a/packages/feature-summary/bin/generate-summary b/packages/feature-summary/bin/generate-summary index eae0c899..4eaa510c 100755 --- a/packages/feature-summary/bin/generate-summary +++ b/packages/feature-summary/bin/generate-summary @@ -51,10 +51,10 @@ function generate(datasourceName) { let writer = new N3.Writer({ prefixes: { ds: DS_NS, rdf: RDF_NS } }); - fromDataSource(url, datasource, function (triple) { + fromDataSource(url, datasource, (triple) => { writer.addQuad(triple); - }, function () { - writer.end(function (error, result) { + }, () => { + writer.end((error, result) => { fs.appendFileSync(datasourceName + '.ttl', result); (datasourceNames.length > 0) && generate(datasourceNames.pop()); }); @@ -85,24 +85,24 @@ function fromDataSource(uri, datasource, callback, end, chunksize) { let count = 0; const stream = datasource.select({ limit: limit, offset: offset }, console.error) - .getProperty('metadata', function (metadata) { + .getProperty('metadata', (metadata) => { let progress = Math.round((offset / metadata.totalCount) * 100); console.log(progress); - stream.on('data', function (triple) { + stream.on('data', (triple) => { count++; extractSummary(triple); triple = null; }); - stream.on('end', function () { + stream.on('end', () => { stream.removeAllListeners(); stream = null; if (count < limit) endSummary(); else - setImmediate(function () { processSet(limit, offset + limit); }); + setImmediate(() => { processSet(limit, offset + limit); }); }); }); } diff --git a/packages/feature-summary/lib/controllers/SummaryController.js b/packages/feature-summary/lib/controllers/SummaryController.js index 549b1327..0611c03e 100644 --- a/packages/feature-summary/lib/controllers/SummaryController.js +++ b/packages/feature-summary/lib/controllers/SummaryController.js @@ -34,7 +34,7 @@ class SummaryController extends Controller { inputStream = fs.createReadStream(summaryFile); // If the summary cannot be read, invoke the next controller without error - inputStream.on('error', function (error) { next(); }); + inputStream.on('error', (error) => { next(); }); inputStream.pipe(streamParser); // Set caching diff --git a/packages/feature-summary/test/controllers/SummaryController-test.js b/packages/feature-summary/test/controllers/SummaryController-test.js index a2f1106f..b33e1c2a 100644 --- a/packages/feature-summary/test/controllers/SummaryController-test.js +++ b/packages/feature-summary/test/controllers/SummaryController-test.js @@ -8,24 +8,24 @@ let request = require('supertest'), let SummaryRdfView = require('../../lib/views/summary/SummaryRdfView.js'); -describe('SummaryController', function () { - describe('The SummaryController module', function () { - it('should be a function', function () { +describe('SummaryController', () => { + describe('The SummaryController module', () => { + it('should be a function', () => { SummaryController.should.be.a('function'); }); - it('should be an SummaryController constructor', function () { + it('should be an SummaryController constructor', () => { new SummaryController().should.be.an.instanceof(SummaryController); }); - it('should create new SummaryController objects', function () { + it('should create new SummaryController objects', () => { new SummaryController().should.be.an.instanceof(SummaryController); }); }); - describe('An SummaryController instance', function () { + describe('An SummaryController instance', () => { let controller, client; - before(function () { + before(() => { controller = new SummaryController({ views: [new SummaryRdfView()], summaries: { dir: path.join(__dirname, '/../../../../test/assets') }, @@ -37,8 +37,8 @@ describe('SummaryController', function () { client = request.agent(new DummyServer(controller)); }); - it('should correctly serve summary in Turtle', function (done) { - client.get('/summaries/summary').set('Accept', 'text/turtle').expect(function (response) { + it('should correctly serve summary in Turtle', (done) => { + client.get('/summaries/summary').set('Accept', 'text/turtle').expect((response) => { let summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.ttl'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); @@ -48,8 +48,8 @@ describe('SummaryController', function () { }).end(done); }); - it('should correctly serve summary in Trig', function (done) { - client.get('/summaries/summary').expect(function (response) { + it('should correctly serve summary in Trig', (done) => { + client.get('/summaries/summary').expect((response) => { let summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.ttl'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); @@ -59,8 +59,8 @@ describe('SummaryController', function () { }).end(done); }); - it('should correctly serve summary in ntriples', function (done) { - client.get('/summaries/summary').set('Accept', 'application/n-triples').expect(function (response) { + it('should correctly serve summary in ntriples', (done) => { + client.get('/summaries/summary').set('Accept', 'application/n-triples').expect((response) => { let summary = fs.readFileSync(path.join(__dirname, '/../../../../test/assets/summary.nt'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); @@ -70,14 +70,14 @@ describe('SummaryController', function () { }).end(done); }); - it('should hand over to the next controller if no summary with that name is found', function (done) { - client.get('/summaries/unknown').expect(function (response) { + it('should hand over to the next controller if no summary with that name is found', (done) => { + client.get('/summaries/unknown').expect((response) => { controller.next.should.have.been.calledOnce; }).end(done); }); - it('should hand over to the next controller for non-summary paths', function (done) { - client.get('/other').expect(function (response) { + it('should hand over to the next controller for non-summary paths', (done) => { + client.get('/other').expect((response) => { controller.next.should.have.been.calledOnce; }).end(done); }); diff --git a/packages/feature-webid/lib/controllers/WebIDControllerExtension.js b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js index d4fe62d5..b3cf14e4 100644 --- a/packages/feature-webid/lib/controllers/WebIDControllerExtension.js +++ b/packages/feature-webid/lib/controllers/WebIDControllerExtension.js @@ -36,7 +36,7 @@ class WebIDControllerExtension extends Controller { let webID = certificate.subject.subjectAltName.replace('uniformResourceIdentifier:', ''); this._verifyWebID(webID, certificate.modulus, parseInt(certificate.exponent, 16), - function (error, verified, reason) { + (error, verified, reason) => { if (!verified) { return self._handleForbidden(request, response, { webID: webID, @@ -81,25 +81,24 @@ class WebIDControllerExtension extends Controller { } // Try to get WebID from cache - let cachedId = this._cache.get(webID), - self = this; + let cachedId = this._cache.get(webID); if (cachedId) verify(cachedId.modulus, cachedId.exponent); else { - let req = http.request(webID, function (res) { + let req = http.request(webID, (res) => { res.setEncoding('utf8'); parser.parse(res, parseTriple); - res.on('end', function () { + res.on('end', () => { let cacheControl = parseCacheControl(res.headers['Cache-Control'] || ''); - self._cache.set(webID, id, cacheControl['max-age'] || 0); + this._cache.set(webID, id, cacheControl['max-age'] || 0); verify(id.modulus, id.exponent); }); }); - req.on('error', function (e) { + req.on('error', (e) => { callback(null, false, 'Unabled to download ' + webID + ' (' + e.message + ').'); }); From b7b78ea9236c4715e90c81ac50bdd8b03637b0dc Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 7 Apr 2020 12:14:51 +0200 Subject: [PATCH 097/165] Port callbacks to promise where possible, #104 --- packages/core/lib/datasources/Datasource.js | 23 +++++++++---------- .../core/lib/datasources/MemoryDatasource.js | 10 ++++++-- .../core/test/datasources/Datasource-test.js | 15 +++++++----- .../lib/datasources/ExternalHdtDatasource.js | 7 +++--- .../lib/datasources/HdtDatasource.js | 7 ++---- 5 files changed, 33 insertions(+), 29 deletions(-) diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index 67295232..af0fb856 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -62,23 +62,22 @@ class Datasource extends EventEmitter { // Initialize the datasource asynchronously initialize() { - setImmediate(() => { - let done = _.once((error) => { - if (error) - this.emit('error', error); - else { + try { + this._initialize() + .then(() => { this.initialized = true; this.emit('initialized'); - } - }); - try { this._initialize(done); } - catch (error) { done(error); } - }); + }) + .catch((error) => this.emit('error', error)); + } + catch (error) { + this.emit('error', error); + } } // Prepares the datasource for querying - _initialize(done) { - done(); + async _initialize() { + } // Checks whether the data source can evaluate the given query diff --git a/packages/core/lib/datasources/MemoryDatasource.js b/packages/core/lib/datasources/MemoryDatasource.js index 352790e0..3dfe708a 100644 --- a/packages/core/lib/datasources/MemoryDatasource.js +++ b/packages/core/lib/datasources/MemoryDatasource.js @@ -13,8 +13,14 @@ class MemoryDatasource extends Datasource { // Prepares the datasource for querying _initialize(done) { - let quadStore = this._quadStore = new N3Store(); - this._getAllQuads((quad) => { quadStore.addQuad(quad); }, done); + return new Promise((resolve, reject) => { + let quadStore = this._quadStore = new N3Store(); + this._getAllQuads((quad) => { quadStore.addQuad(quad); }, (error) => { + if (error) + return reject(error); + return resolve(); + }); + }); } // Retrieves all quads in the datasource diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index 27f39f71..cc340736 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -117,10 +117,11 @@ describe('Datasource', () => { }); describe('A Datasource instance with an initializer', () => { - let datasource, initializedListener, errorListener; + let datasource, initializedListener, errorListener, initResolver, initSpy; before(() => { datasource = new Datasource({ dataFactory }); - datasource._initialize = sinon.stub(); + datasource._initialize = () => new Promise((resolve) => initResolver = resolve); + initSpy = sinon.spy(datasource, '_initialize'); Object.defineProperty(datasource, 'supportedFeatures', { value: { all: true }, }); @@ -131,7 +132,7 @@ describe('Datasource', () => { describe('after construction', () => { it('should have called the initializer', () => { - datasource._initialize.should.have.been.calledOnce; + initSpy.should.have.been.calledOnce; }); it('should not be initialized', () => { @@ -152,7 +153,7 @@ describe('Datasource', () => { describe('after the initializer calls the callback', () => { before(() => { - datasource._initialize.getCall(0).args[0](); + initResolver(); }); it('should be initialized', () => { @@ -185,7 +186,8 @@ describe('Datasource', () => { before(() => { datasource = new Datasource({ dataFactory }); error = new Error('initializer error'); - datasource._initialize = sinon.stub().throws(error); + datasource._initialize = () => { throw error; }; + sinon.spy(datasource, '_initialize'); datasource.on('initialized', initializedListener = sinon.stub()); datasource.on('error', errorListener = sinon.stub()); datasource.initialize(); @@ -216,7 +218,8 @@ describe('Datasource', () => { before(() => { datasource = new Datasource({ dataFactory }); error = new Error('initializer error'); - datasource._initialize = sinon.stub().callsArgWith(0, error); + datasource._initialize = () => Promise.reject(error); + sinon.spy(datasource, '_initialize'); datasource.on('initialized', initializedListener = sinon.stub()); datasource.on('error', errorListener = sinon.stub()); datasource.initialize(); diff --git a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js index 427b8022..e3194070 100644 --- a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js @@ -23,14 +23,13 @@ class ExternalHdtDatasource extends Datasource { } // Prepares the datasource for querying - _initialize(done) { + async _initialize() { if (this._options.checkFile !== false) { if (!fs.existsSync(this._hdtFile)) - return done(new Error('Not an HDT file: ' + this._hdtFile)); + throw new Error('Not an HDT file: ' + this._hdtFile); if (!fs.existsSync(hdtUtility)) - return done(new Error('hdt not found: ' + hdtUtility)); + throw new Error('hdt not found: ' + hdtUtility); } - done(); } // Writes the results of the query to the given quad stream diff --git a/packages/datasource-hdt/lib/datasources/HdtDatasource.js b/packages/datasource-hdt/lib/datasources/HdtDatasource.js index 2b36002a..ae237484 100644 --- a/packages/datasource-hdt/lib/datasources/HdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/HdtDatasource.js @@ -20,11 +20,8 @@ class HdtDatasource extends Datasource { } // Loads the HDT datasource - _initialize(done) { - let datasource = this; - hdt.fromFile(this._hdtFile).then((hdtDocument) => { - datasource._hdtDocument = hdtDocument; - }).then(done, done); + async _initialize() { + this._hdtDocument = await hdt.fromFile(this._hdtFile); } // Writes the results of the query to the given quad stream From 8441a0b6457a0d35334aa893c57da6c7aad0ea7f Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 8 Apr 2020 11:34:07 +0200 Subject: [PATCH 098/165] Remove lodash usages where possible, #104 --- packages/core/lib/LinkedDataFragmentsServer.js | 6 +++--- packages/core/lib/LinkedDataFragmentsServerWorker.js | 7 ++++--- packages/core/lib/datasources/Datasource.js | 3 +-- packages/core/lib/views/HtmlView.js | 4 ++-- packages/core/lib/views/View.js | 5 ++--- packages/core/lib/views/ViewCollection.js | 5 ++--- .../lib/controllers/MementoControllerExtension.js | 7 +++---- .../feature-memento/lib/controllers/TimegateController.js | 2 +- .../lib/controllers/QuadPatternFragmentsController.js | 2 +- packages/feature-summary/bin/generate-summary | 7 +++---- 10 files changed, 22 insertions(+), 26 deletions(-) diff --git a/packages/core/lib/LinkedDataFragmentsServer.js b/packages/core/lib/LinkedDataFragmentsServer.js index 97100027..d67ff3cb 100644 --- a/packages/core/lib/LinkedDataFragmentsServer.js +++ b/packages/core/lib/LinkedDataFragmentsServer.js @@ -22,7 +22,7 @@ class LinkedDataFragmentsServer { // WebID authentication requires a client certificate if (authentication.webid) ssl.requestCert = ssl.rejectUnauthorized = true; - server = require('https').createServer(_.assign(ssl, _.mapValues(ssl.keys, readHttpsOption))); + server = require('https').createServer({ ...ssl, ..._.mapValues(ssl.keys, readHttpsOption) }); break; default: throw new Error('The configured protocol ' + urlData.protocol + ' is invalid.'); @@ -140,10 +140,10 @@ LinkedDataFragmentsServer.prototype.stop = function () { // Reads the value of an option for the https module function readHttpsOption(value) { // Read each value of an array - if (_.isArray(value)) + if (Array.isArray(value)) return value.map(readHttpsOption); // Certificates and keys can be strings or files - else if (_.isString(value) && fs.existsSync(value)) + else if (typeof value === 'string' && fs.existsSync(value)) return fs.readFileSync(value); // Other strings and regular objects are also allowed else diff --git a/packages/core/lib/LinkedDataFragmentsServerWorker.js b/packages/core/lib/LinkedDataFragmentsServerWorker.js index 5f66f9a4..3d5d8ea3 100644 --- a/packages/core/lib/LinkedDataFragmentsServerWorker.js +++ b/packages/core/lib/LinkedDataFragmentsServerWorker.js @@ -60,8 +60,9 @@ class LinkedDataFragmentsServerWorker { let server = new LinkedDataFragmentsServer(config); // Start the server when all data sources are ready - let pending = _.size(config.datasources); - _.each(config.datasources, (datasource) => { + let pending = Object.keys(config.datasources).length; + for (const datasourceId in config.datasources) { + const datasource = config.datasources[datasourceId]; // Add datasource ready-listener let ready = _.once(startWhenReady); datasource.once('initialized', ready); @@ -69,7 +70,7 @@ class LinkedDataFragmentsServerWorker { // Init datasource asynchronously datasource.initialize(); - }); + } function startWhenReady() { if (!--pending) { server.listen(config.port); diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index af0fb856..84d149fc 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -2,7 +2,6 @@ /* A Datasource provides base functionality for queryable access to a source of quads. */ let fs = require('fs'), - _ = require('lodash'), UrlData = require('../UrlData'), BufferedIterator = require('asynciterator').BufferedIterator, EventEmitter = require('events'), @@ -111,7 +110,7 @@ class Datasource extends EventEmitter { return onError && onError(new Error('The datasource is not initialized yet')); if (!this.supportsQuery(query)) return onError && onError(new Error('The datasource does not support the given query')); - query = _.clone(query); + query = { ...query }; // Translate blank nodes IRIs in the query to blank nodes let blankNodePrefix = this._blankNodePrefix, blankNodePrefixLength = this._blankNodePrefixLength; diff --git a/packages/core/lib/views/HtmlView.js b/packages/core/lib/views/HtmlView.js index b4e78b59..87ebdd04 100644 --- a/packages/core/lib/views/HtmlView.js +++ b/packages/core/lib/views/HtmlView.js @@ -19,7 +19,7 @@ class HtmlView extends View { assetsPath: settings.urlData.assetsPath || '/', baseURL: settings.urlData.baseURL || '/', title: '', header: settings && settings.title, }; - super(viewName, 'text/html', _.defaults({}, settings, defaults)); + super(viewName, 'text/html', { ...settings, ...defaults }); } // Renders the template with the given name to the response @@ -41,7 +41,7 @@ class HtmlView extends View { function newExtensionViewConstructor(extension, options, request, response) { return function (data) { - let subOptions = _.clone(options); + let subOptions = { ...options }; for (let key in data) subOptions[key] = data[key]; return self._renderViewExtensionContents(extension, subOptions, request, response); diff --git a/packages/core/lib/views/View.js b/packages/core/lib/views/View.js index 02b75712..97faf3bb 100644 --- a/packages/core/lib/views/View.js +++ b/packages/core/lib/views/View.js @@ -1,8 +1,7 @@ /*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ /* View is a base class for objects that generate server responses. */ -let _ = require('lodash'), - join = require('path').join, +let join = require('path').join, ViewCollection = require('./ViewCollection'); // Creates a view with the given name @@ -46,7 +45,7 @@ class View { // Renders the view with the given options to the response render(options, request, response, done) { // Initialize view-specific settings - let settings = _.defaults({}, options, this._defaults); + let settings = { ...options, ...this._defaults }; if (!settings.contentType) settings.contentType = response.getHeader('Content-Type'); diff --git a/packages/core/lib/views/ViewCollection.js b/packages/core/lib/views/ViewCollection.js index 0e7d5155..fb5d3d5b 100644 --- a/packages/core/lib/views/ViewCollection.js +++ b/packages/core/lib/views/ViewCollection.js @@ -7,8 +7,7 @@ `getViews` returns all views with a given name. */ -let _ = require('lodash'), - negotiate = require('negotiate'), +let negotiate = require('negotiate'), Util = require('../Util'); let ViewCollectionError = Util.createErrorType('ViewCollectionError'); @@ -28,7 +27,7 @@ class ViewCollection { // Add a match entry for each content type supported by the view let matchers = this._viewMatchers[view.name] || (this._viewMatchers[view.name] = []); view.supportedContentTypes.forEach((contentType) => { - matchers.push(_.extend({ view: view }, contentType)); + matchers.push({ ...contentType, view: view }); }); } diff --git a/packages/feature-memento/lib/controllers/MementoControllerExtension.js b/packages/feature-memento/lib/controllers/MementoControllerExtension.js index 407ae058..2e265bd8 100644 --- a/packages/feature-memento/lib/controllers/MementoControllerExtension.js +++ b/packages/feature-memento/lib/controllers/MementoControllerExtension.js @@ -3,8 +3,7 @@ let Controller = require('@ldf/core').controllers.Controller, TimegateController = require('./TimegateController'), - url = require('url'), - _ = require('lodash'); + url = require('url'); // Creates a new MementoControllerExtension class MementoControllerExtension extends Controller { @@ -24,7 +23,7 @@ class MementoControllerExtension extends Controller { // Add link to original if it is a memento if (memento && memento.interval && memento.interval.length === 2) { let timegatePath = this._timegateBaseUrl + memento.memento, - timegateUrl = url.format(_.defaults({ pathname: timegatePath }, request.parsedUrl)), + timegateUrl = url.format({ ...request.parsedUrl, pathname: timegatePath }), originalUrl = memento.original + requestQuery, datetime = new Date(memento.interval[0]).toUTCString(); @@ -39,7 +38,7 @@ class MementoControllerExtension extends Controller { timegate = timegateSettings + requestQuery; // If the timegate configuration is true, use local timegate else if (timegateSettings === true) - timegate = url.format(_.defaults({ pathname: this._timegateBaseUrl + datasource }, request.parsedUrl)); + timegate = url.format({ ...request.parsedUrl, pathname: this._timegateBaseUrl + datasource }); if (timegate) response.setHeader('Link', '<' + timegate + '>;rel=timegate'); } diff --git a/packages/feature-memento/lib/controllers/TimegateController.js b/packages/feature-memento/lib/controllers/TimegateController.js index 8ec11cef..048535ea 100644 --- a/packages/feature-memento/lib/controllers/TimegateController.js +++ b/packages/feature-memento/lib/controllers/TimegateController.js @@ -74,7 +74,7 @@ class TimegateController extends Controller { // Determine the URL of the original resource let originalBaseURL = timemapDetails.original, originalUrl; if (!originalBaseURL) - originalUrl = _.defaults({ pathname: datasource }, request.parsedUrl); + originalUrl = { ...request.parsedUrl, pathname: datasource }; else originalUrl = _.assign(url.parse(originalBaseURL), { query: request.parsedUrl.query }); originalUrl = url.format(originalUrl); diff --git a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js index fd6b4e9e..f81f9c2d 100644 --- a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js +++ b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js @@ -100,7 +100,7 @@ class QuadPatternFragmentsController extends Controller { paramsNoPage = _.omit(requestUrl.query, 'page'), currentPage = parseInt(requestUrl.query.page, 10) || 1, datasourceUrl = url.format(_.omit(requestUrl, 'query')), - fragmentUrl = url.format(_.defaults({ query: paramsNoPage }, requestUrl)), + fragmentUrl = url.format({ ...requestUrl, query: paramsNoPage }), fragmentPageUrlBase = fragmentUrl + (/\?/.test(fragmentUrl) ? '&' : '?') + 'page=', indexUrl = url.format(_.omit(requestUrl, 'search', 'query', 'pathname')) + '/'; diff --git a/packages/feature-summary/bin/generate-summary b/packages/feature-summary/bin/generate-summary index 4eaa510c..548a6f78 100755 --- a/packages/feature-summary/bin/generate-summary +++ b/packages/feature-summary/bin/generate-summary @@ -4,8 +4,7 @@ let N3 = require('n3'), fs = require('fs'), - path = require('path'), - _ = require('lodash'); + path = require('path'); let regex = /^(http[s]?:\/?\/?[^:\/\s]+\/).*/; @@ -23,7 +22,7 @@ if (args.length < 1 || args.length > 2) { let configFile = args[0], config = JSON.parse(fs.readFileSync(configFile)), datasources = config.datasources || {}, - datasourceNames = args[1] ? [args[1]] : (datasources && _.keys(datasources)); + datasourceNames = args[1] ? [args[1]] : (datasources && Object.keys(datasources)); // Configure preset URLs let baseURL = config.baseURL ? config.baseURL.replace(/\/?$/, '/') : '/', @@ -43,7 +42,7 @@ function generate(datasourceName) { // Retrieve the data source class and settings let Datasource = require(path.join('../lib/datasources/', datasourceConfig.type)), - settings = _.defaults(datasourceConfig.settings || {}, config); + settings = { ...config, ...(datasourceConfig.settings || {}) }; // Create the data source let datasource = new Datasource(settings), From 4dd1728b978e27370f91fa065d7fc06d46ed78a1 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 8 Apr 2020 11:37:29 +0200 Subject: [PATCH 099/165] Set minimum Node version to 10 --- packages/core/package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/core/package.json b/packages/core/package.json index b44ba41c..bebf4603 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -31,6 +31,9 @@ "test": "nyc mocha", "lint": "eslint bin/* lib test" }, + "engines": { + "node": ">=10.0" + }, "dependencies": { "asynciterator": "^2.0.1", "componentsjs": "^3.4.0", From 2f365156d24b55277e941ca3a0f78e9796757056 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 8 Apr 2020 11:40:39 +0200 Subject: [PATCH 100/165] Bump JSON-LD dependencies to add support for JSON-LD 1.1 --- packages/core/package.json | 2 +- packages/datasource-jsonld/package.json | 2 +- yarn.lock | 74 +++++++++++++++++++------ 3 files changed, 58 insertions(+), 20 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index bebf4603..70c2f9b0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -38,7 +38,7 @@ "asynciterator": "^2.0.1", "componentsjs": "^3.4.0", "forwarded-parse": "^2.1.0", - "jsonld-streaming-serializer": "^1.0.1", + "jsonld-streaming-serializer": "^1.1.0", "lodash": "^2.4.2", "mime": "^1.3.4", "n3": "^1.3.5", diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 14ebc51b..5509e5a6 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -29,7 +29,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "jsonld-streaming-parser": "^1.1.2", + "jsonld-streaming-parser": "^2.0.0", "rdf-string": "^1.3.1" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index 1159b4fe..136c6076 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1004,7 +1004,7 @@ dependencies: "@types/node" ">= 8" -"@rdfjs/data-model@^1.1.1": +"@rdfjs/data-model@^1.1.1", "@rdfjs/data-model@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@rdfjs/data-model/-/data-model-1.1.2.tgz#e2f48a422c7e837b8a7d96d240732be3287df713" integrity sha512-pk/G/JLYGaXesoBLvEmoC/ic0H3B79fTyS0Ujjh5YQB2DZW+mn05ZowFFv88rjB9jf7c1XE5XSmf8jzn6U0HHA== @@ -1030,6 +1030,16 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/http-link-header@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.1.tgz#411493fe06da4b9472fa4eeecc990ea92be8cc2a" + integrity sha512-5h+Pqs4EHoMkY/fLva7XsYmh9IVQghQ6uWWil1FGCNI0WqjhI4g20doYsbT4kJ/G3GkAlQca4AIc9OexdUnzkg== + +"@types/isomorphic-fetch@^0.0.35": + version "0.0.35" + resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz#c1c0d402daac324582b6186b91f8905340ea3361" + integrity sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -1045,6 +1055,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.17.tgz#7a183163a9e6ff720d86502db23ba4aade5999b8" integrity sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q== +"@types/node@^13.1.0": + version "13.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" + integrity sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ== + "@types/rdf-js@^2.0.1", "@types/rdf-js@^2.0.2": version "2.0.11" resolved "https://registry.yarnpkg.com/@types/rdf-js/-/rdf-js-2.0.11.tgz#b9e398504ceb9f00eaa3b3036b643dc3490cf362" @@ -1052,6 +1067,13 @@ dependencies: "@types/node" "*" +"@types/rdf-js@^2.0.11": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@types/rdf-js/-/rdf-js-2.0.12.tgz#d305a0b6fd105e33f58d5c1b3de33ff8edcb3210" + integrity sha512-NBzHFHp2vHOJkPlSqzsOrkEsD9grKn+PdFjZieIw59pc0FlRG6WEQAjQZvHzFxJlYzC6ZDCFyTA1wBvUnnzUQw== + dependencies: + "@types/node" "*" + "@zkochan/cmd-shim@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" @@ -1573,6 +1595,11 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +canonicalize@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.1.tgz#657b4f3fa38a6ecb97a9e5b7b26d7a19cc6e0da9" + integrity sha512-N3cmB3QLhS5TJ5smKFf1w42rJXWe6C1qP01z4dxJiI5v269buii4fLHWETDyf7yEd0azGLNC63VxNMiPd2u0Cg== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -3214,6 +3241,11 @@ http-cache-semantics@^3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-link-header@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.2.tgz#bea50f02e1c7996021f1013b428c63f77e0f4e11" + integrity sha512-z6YOZ8ZEnejkcCWlGZzYXNa6i+ZaTfiTg3WhlV/YvnNya3W/RbX1bMVUMTuCrg/DrtTCQxaFCkXCz4FtLpcebg== + http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -3832,31 +3864,37 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -jsonld-context-parser@^1.2.0, jsonld-context-parser@^1.3.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-1.3.4.tgz#289f0b05bd3ec3753535ffdf48de36dba7776521" - integrity sha512-mR2uoEWqFLE1PrF1pbUuppKajHSGwodXtI9hlcpKflvolDEFAh4hd7z9874pWaK+TtQfHC3Xqfk0U8SEnt2htw== +jsonld-context-parser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.0.0.tgz#2c4ea08d1b137cde7ba2376e26f56d3fcb519779" + integrity sha512-dfoLe73CCrqHTM2O6zb5oVoZF2TwDfjZnn6XAlbarvhIR+bQ+6Vkkw+yAXKBmZ7n4Jqdyr14qJHtuc9IP1sTFg== dependencies: + "@types/isomorphic-fetch" "^0.0.35" + "@types/node" "^13.1.0" + canonicalize "^1.0.1" isomorphic-fetch "^2.2.1" relative-to-absolute-iri "^1.0.5" -jsonld-streaming-parser@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-1.1.2.tgz#6ddb6be9fb92def8dfe06ff8b014eb5ab922ad0e" - integrity sha512-nKCvqHz2JDHJjt2Iv3kW7yoFpIcKX8bWGqe9r5xaadBg9yp7pg3iuwt7Tl8ADOj5z7jYWKGmO8s31Ho+XN1slQ== - dependencies: - "@rdfjs/data-model" "^1.1.1" - "@types/rdf-js" "^2.0.1" - jsonld-context-parser "^1.3.3" +jsonld-streaming-parser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-2.0.0.tgz#d943202d17cd630b4ef2b23726a474575beda8c2" + integrity sha512-iaG4mpwOSe1F0YXso38SWy0F1r1+CxTFXJBHA+MobowC6HFXtVzwPzb7uoILZgYv31OrqE/ft9XoSP1mTegebw== + dependencies: + "@rdfjs/data-model" "^1.1.2" + "@types/http-link-header" "^1.0.1" + "@types/rdf-js" "^2.0.11" + canonicalize "^1.0.1" + http-link-header "^1.0.2" + jsonld-context-parser "^2.0.0" jsonparse "^1.3.1" -jsonld-streaming-serializer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.0.1.tgz#5ca577eaac5131180597a9fb02b501be8e848806" - integrity sha512-ChO5uzePe63VkMW8chWFARGpcroePKDxJd0WMUvH5FHmMXq9ATrmqo3/7gu6TeRQklBB38x6QB0EVLfsXPrdZg== +jsonld-streaming-serializer@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.1.0.tgz#1639d2811241bc23a78fe3b5d9d6eb9b3fe887ce" + integrity sha512-C+cs913C3XDScZIqUL8fg5crHQtPTQSZstzvFmhA9/r0QBCRw88BR4TYHvLNhJhzB45GOpoF5/Fx4I4xfKGpOQ== dependencies: "@types/rdf-js" "^2.0.1" - jsonld-context-parser "^1.2.0" + jsonld-context-parser "^2.0.0" jsonld@^0.4.11: version "0.4.12" From 20e2caf74a70bdeb014a881ea583ff7f1f5994be Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 8 Apr 2020 11:46:30 +0200 Subject: [PATCH 101/165] Migrate from Greenkeeper to Renovate --- .travis.yml | 1 - .travis/mkgreenkeeper.sh | 2 -- .travis/validate_greenkeeper.sh | 7 ------- package.json | 11 ----------- renovate.json | 5 +++++ 5 files changed, 5 insertions(+), 21 deletions(-) delete mode 100755 .travis/mkgreenkeeper.sh delete mode 100755 .travis/validate_greenkeeper.sh create mode 100644 renovate.json diff --git a/.travis.yml b/.travis.yml index 6df335bd..5010f8e1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,6 @@ matrix: env: DOCUMENTATION_BUILD=true DOCKER_BUILD=true install: yarn install --pure-lockfile script: - - .travis/validate_greenkeeper.sh - yarn run lint - yarn test - if [ "$DOCKER_BUILD" = "true" ]; then ( sh -c "`curl -fsSl https://raw.githubusercontent.com/rubensworks/lerna-docker/master/install.sh`" && ~/.lerna-docker/bin/lerna-docker linkeddatafragments build ) fi diff --git a/.travis/mkgreenkeeper.sh b/.travis/mkgreenkeeper.sh deleted file mode 100755 index 5d350755..00000000 --- a/.travis/mkgreenkeeper.sh +++ /dev/null @@ -1,2 +0,0 @@ -# Create entries for the greenkeeper.json file -find . -name package.json -maxdepth 3 | grep "^./packages" | sed "s/\.\///g" | gsed "s/^\(.*\)$/\"\1\",/g" diff --git a/.travis/validate_greenkeeper.sh b/.travis/validate_greenkeeper.sh deleted file mode 100755 index 9298c2f3..00000000 --- a/.travis/validate_greenkeeper.sh +++ /dev/null @@ -1,7 +0,0 @@ -find . -name package.json -maxdepth 3 | grep "^./packages" | sed "s/\.\///g" | while read p; do - if ! grep -q "$p" greenkeeper.json; then - echo "Could not find an entry for '$p' in greenkeeper.json." - echo "You can use .travis/mkgreenkeeper.sh to help you auto-generate the entries." - exit 1 - fi -done diff --git a/package.json b/package.json index 12f7aec0..794d8e1f 100644 --- a/package.json +++ b/package.json @@ -36,16 +36,5 @@ "publish-bare": "lerna exec -- npm publish --silent", "postinstall": "lerna run prepare", "version": "manual-git-changelog onversion" - }, - "greenkeeper": { - "commitMessages": { - "initialBadge": "Add Greenkeeper badge", - "initialDependencies": "Update dependencies", - "initialBranches": "Whitelist greenkeeper branches", - "dependencyUpdate": "Update ${dependency} to version ${version}", - "devDependencyUpdate": "Update dev ${dependency} to version ${version}", - "dependencyPin": "Pin ${dependency} to ${oldVersion}", - "devDependencyPin": "Pin ${dependency} to ${oldVersion}" - } } } diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..d282bab0 --- /dev/null +++ b/renovate.json @@ -0,0 +1,5 @@ +{ + "extends": [ + "github>rubensworks/renovate-presets:js" + ] +} From 05225c72bc7d90cd06858460c598a28c97c5b1d0 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 8 Apr 2020 11:53:48 +0200 Subject: [PATCH 102/165] Link to migration guide from relevant READMEs --- README.md | 2 ++ packages/server/README.md | 1 + 2 files changed, 3 insertions(+) diff --git a/README.md b/README.md index 57be0be6..7781ea1a 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ This repository contains modules for [Linked Data Fragments (LDF)](https://linkeddatafragments.org/) servers. +_Find more information about migrating from `ldf-server` 2.x.x [on our wiki](https://github.com/LinkedDataFragments/Server.js/wiki/Release-3.0.0)._ + ## Motivation On today's Web, Linked Data is published in different ways, diff --git a/packages/server/README.md b/packages/server/README.md index c097a1bc..1234e9c7 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -7,6 +7,7 @@ A Linked Data Fragments server with Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support. _This package has been renamed from `ldf-server` to `@ldf/server`._ +_Find more information about migrating from `ldf-server` 2.x.x [on our wiki](https://github.com/LinkedDataFragments/Server.js/wiki/Release-3.0.0)._ _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ From dc09e67ea2917dcec3b815cc0a7f0c9a904f0f88 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 8 Apr 2020 12:13:57 +0200 Subject: [PATCH 103/165] Remove special release/3 branch entry in Travis file --- .travis.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5010f8e1..c75de4ee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,11 +44,3 @@ deploy: all_branches: true node_js: "node" os: "linux" - - provider: script - skip-cleanup: true - script: ~/.lerna-docker/bin/lerna-docker linkeddatafragments push - on: - tags: false - branch: release/3 - node_js: "node" - os: "linux" From 4c79f84521cfbc1d6d389a0adfa2843e58e081a7 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 8 Apr 2020 12:24:37 +0200 Subject: [PATCH 104/165] Bump to release version v3.0.0 --- CHANGELOG.md | 17 +++++++++++++++++ lerna.json | 2 +- packages/core/package.json | 2 +- packages/datasource-composite/package.json | 4 ++-- packages/datasource-hdt/package.json | 4 ++-- packages/datasource-jsonld/package.json | 4 ++-- packages/datasource-n3/package.json | 4 ++-- packages/datasource-sparql/package.json | 8 ++++---- packages/feature-memento/package.json | 4 ++-- packages/feature-qpf/package.json | 4 ++-- packages/feature-summary/package.json | 4 ++-- packages/feature-webid/package.json | 4 ++-- packages/preset-qpf/package.json | 2 +- packages/server/package.json | 22 +++++++++++----------- 14 files changed, 51 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 507dcc1a..060df774 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,23 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.0](https://github.com/LinkedDataFragments/Server.js/compare/v2.2.5...v3.0.0) - 2020-04-08 + +### Added +* [Implement Quad Pattern Fragments](https://github.com/LinkedDataFragments/Server.js/commit/f2547b18aaac74b1b3aa01ebfe46ea519d9d098f) +* [Bump JSON-LD dependencies to add support for JSON-LD 1.1](https://github.com/LinkedDataFragments/Server.js/commit/2f365156d24b55277e941ca3a0f78e9796757056) +* [Add config migration tool](https://github.com/LinkedDataFragments/Server.js/commit/be6a7ec54417b9cae21e5c5093a90ab5a4f4d255) +* [Add SparqlDatasource option to force typed literals](https://github.com/LinkedDataFragments/Server.js/commit/b38026fd32bc4034c4aca36dac1c7f024d175b29) + +### Changed +* [Modularize all packages through dependency injection](https://github.com/LinkedDataFragments/Server.js/commit/8671d98fa29672921a654cda1c1d4f19e076b883) +* [Refactor codebase to use RDFJS terms instead of strings](https://github.com/LinkedDataFragments/Server.js/commit/b014f67c55550260dc3f0032594c759bf570e983) +* [Set minimum Node version to 10](https://github.com/LinkedDataFragments/Server.js/commit/4dd1728b978e27370f91fa065d7fc06d46ed78a1) + +### Fixed +* [Fix literals from Virtuoso endpoints being seen as URIs, Closes #94](https://github.com/LinkedDataFragments/Server.js/commit/cba41cdce43deea9e4106b5976608769db879cfb) + ## [v2.2.5] - 2010-01-015 diff --git a/lerna.json b/lerna.json index 0f0d8b6a..092e41de 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "2.2.5", + "version": "3.0.0", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/core/package.json b/packages/core/package.json index 70c2f9b0..7cf52aff 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/core", "description": "Linked Data Fragments Server - Core", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", "lsd:components": "components/components.jsonld", "lsd:contexts": { diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 327f94e6..78f7d2d3 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-composite", "description": "Linked Data Fragments Server - Composite Datasource", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" } } diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index c36ee8b9..ad0d10cf 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,7 +35,7 @@ "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "optionalDependencies": { "hdt": "^2.2.2" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 5509e5a6..5fc99024 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-jsonld", "description": "Linked Data Fragments Server - JSON-LD Datasource", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" } } diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 96c3551d..5800f02a 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" } } diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 59ee1304..3819b2bb 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-sparql", "description": "Linked Data Fragments Server - SPARQL Datasource", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -29,15 +29,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "sparqljson-parse": "^1.5.1", "lru-cache": "^5.1.1", "n3": "^1.3.5", - "rdf-string": "^1.3.1" + "rdf-string": "^1.3.1", + "sparqljson-parse": "^1.5.1" }, "peerDependencies": { "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" } } diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index c157a256..8ff2dd1d 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-memento", "description": "Linked Data Fragments Server - Memento", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" } } diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index db985bff..5bccea26 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-qpf", "description": "Linked Data Fragments Server - Quad Pattern Fragments", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" } } diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index 871b847c..e4bbce6b 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-summary", "description": "Linked Data Fragments Server - Memento", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -40,6 +40,6 @@ "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" } } diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index f887f1b3..c784f713 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-webid", "description": "Linked Data Fragments Server - WebID", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "2.2.5" }, "devDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" } } diff --git a/packages/preset-qpf/package.json b/packages/preset-qpf/package.json index 66d5128a..01216eb5 100644 --- a/packages/preset-qpf/package.json +++ b/packages/preset-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/preset-qpf", "description": "Linked Data Fragments Server - Preset Quad Pattern Fragments", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld": "components/context.jsonld" diff --git a/packages/server/package.json b/packages/server/package.json index 3cf4ceb4..3b60009d 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "2.2.5", + "version": "3.0.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" @@ -34,15 +34,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "@ldf/core": "2.2.5", - "@ldf/datasource-composite": "2.2.5", - "@ldf/datasource-hdt": "2.2.5", - "@ldf/datasource-jsonld": "2.2.5", - "@ldf/datasource-n3": "2.2.5", - "@ldf/datasource-sparql": "2.2.5", - "@ldf/feature-memento": "2.2.5", - "@ldf/feature-qpf": "2.2.5", - "@ldf/feature-summary": "2.2.5", - "@ldf/preset-qpf": "2.2.5" + "@ldf/core": "^3.0.0", + "@ldf/datasource-composite": "^3.0.0", + "@ldf/datasource-hdt": "^3.0.0", + "@ldf/datasource-jsonld": "^3.0.0", + "@ldf/datasource-n3": "^3.0.0", + "@ldf/datasource-sparql": "^3.0.0", + "@ldf/feature-memento": "^3.0.0", + "@ldf/feature-qpf": "^3.0.0", + "@ldf/feature-summary": "^3.0.0", + "@ldf/preset-qpf": "^3.0.0" } } From 438db9385d268403b053e386dd0fc3be2689565a Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 8 Apr 2020 12:42:02 +0200 Subject: [PATCH 105/165] Fix incorrect cd command in root README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7781ea1a..0fa89ada 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ This project can be setup by cloning and installing it as follows: ```bash $ git clone https://github.com/LinkedDataFragments/Server.js.git -$ cd comunica +$ cd Server.js $ yarn install ``` From 9742f1cc85ba43f2bf9abec1c29b79aa6d319c5d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 8 Apr 2020 22:58:12 +0000 Subject: [PATCH 106/165] Update dependency chai to v4 --- package.json | 2 +- yarn.lock | 57 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 794d8e1f..681e71df 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "node": ">=10.0" }, "devDependencies": { - "chai": "^3.5.0", + "chai": "^4.0.0", "coveralls": "^3.0.9", "eslint": "^3.4.0", "lerna": "^3.4.0", diff --git a/yarn.lock b/yarn.lock index 136c6076..ac25b5d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1338,7 +1338,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assertion-error@^1.0.1: +assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== @@ -1605,14 +1605,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chai@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" - integrity sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc= +chai@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== dependencies: - assertion-error "^1.0.1" - deep-eql "^0.1.3" - type-detect "^1.0.0" + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" @@ -1639,6 +1642,11 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -2117,12 +2125,12 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-eql@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" - integrity sha1-71WKyrjeJSBs1xOQbXTlaTDrafI= +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== dependencies: - type-detect "0.1.1" + type-detect "^4.0.0" deep-extend@^0.6.0: version "0.6.0" @@ -2900,6 +2908,11 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + get-pkg-repo@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" @@ -5090,6 +5103,11 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +pathval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -6388,15 +6406,10 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" - integrity sha1-C6XsKohWQORw6k6FBZcZANrFiCI= - -type-detect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" - integrity sha1-diIXzAbbJY7EiQihKY6LlRIejqI= +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.3.0: version "0.3.1" From dbbe3b79527c0cd713d893a5c6ea33724cbcacb7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Apr 2020 06:37:28 +0000 Subject: [PATCH 107/165] Update dependency access-log to ^0.4.0 --- packages/core/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 7cf52aff..bfe1c111 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -49,6 +49,6 @@ "uritemplate": "^0.3.4" }, "optionalDependencies": { - "access-log": "^0.3.9" + "access-log": "^0.4.0" } } diff --git a/yarn.lock b/yarn.lock index ac25b5d9..f9cd6540 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1096,10 +1096,10 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -access-log@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/access-log/-/access-log-0.3.9.tgz#01c2695ba7e7d32db5288ef3f14e64d6719f3ad1" - integrity sha1-AcJpW6fn0y21KI7z8U5k1nGfOtE= +access-log@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/access-log/-/access-log-0.4.1.tgz#e884a2b5d22a954727d2593e51687a0d089b61b8" + integrity sha1-6ISitdIqlUcn0lk+UWh6DQibYbg= dependencies: strftime "~0.6.2" From 47010c798872f54cd774c5e9b3d2bb96400dac8f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Apr 2020 07:01:42 +0000 Subject: [PATCH 108/165] Update dependency lodash to v4 --- packages/core/package.json | 2 +- packages/feature-memento/package.json | 2 +- packages/feature-qpf/package.json | 2 +- yarn.lock | 5 ----- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index bfe1c111..5eb9182c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -39,7 +39,7 @@ "componentsjs": "^3.4.0", "forwarded-parse": "^2.1.0", "jsonld-streaming-serializer": "^1.1.0", - "lodash": "^2.4.2", + "lodash": "^4.0.0", "mime": "^1.3.4", "n3": "^1.3.5", "negotiate": "^1.0.1", diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 8ff2dd1d..09793baf 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -30,7 +30,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "lodash": "^2.4.2" + "lodash": "^4.0.0" }, "peerDependencies": { "@ldf/core": "2.2.5" diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index 5bccea26..968eb5c9 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -30,7 +30,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "lodash": "^2.4.2", + "lodash": "^4.0.0", "n3": "^1.3.5", "rdf-string": "^1.3.1" }, diff --git a/yarn.lock b/yarn.lock index f9cd6540..617a2e82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4110,11 +4110,6 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" - integrity sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4= - lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" From 892afb7c38e6906842007e058bc0375e81b31b58 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Apr 2020 07:06:39 +0000 Subject: [PATCH 109/165] Update dependency mocha to v7 --- package.json | 2 +- yarn.lock | 276 ++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 229 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 681e71df..f4203e63 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "eslint": "^3.4.0", "lerna": "^3.4.0", "manual-git-changelog": "^1.0.1", - "mocha": "^5.2.0", + "mocha": "^7.0.0", "nyc": "^15.0.0", "pre-commit": "^1.1.3", "sinon": "^1.17.4", diff --git a/yarn.lock b/yarn.lock index 617a2e82..caf20097 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1172,6 +1172,11 @@ ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -1227,6 +1232,14 @@ any-promise@^1.0.0: resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + append-transform@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" @@ -1422,6 +1435,11 @@ before-after-hook@^2.0.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -1451,6 +1469,13 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -1647,6 +1672,21 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= +chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -1785,11 +1825,6 @@ combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== - commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2076,6 +2111,13 @@ debug@3.1.0: dependencies: ms "2.0.0" +debug@3.2.6, debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + debug@^2.1.1, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -2083,13 +2125,6 @@ debug@^2.1.1, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -2699,6 +2734,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + find-cache-dir@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.0.tgz#4d74ed1fe9ef1731467ca24378e8f8f5c8b6ed11" @@ -2708,6 +2750,13 @@ find-cache-dir@^3.2.0: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -2723,13 +2772,6 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -2748,6 +2790,13 @@ flat-cache@^1.2.1: rimraf "~2.6.2" write "^0.2.1" +flat@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" + integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== + dependencies: + is-buffer "~2.0.3" + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -2860,6 +2909,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -3038,15 +3092,22 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== +glob@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3227,10 +3288,10 @@ hdt@^2.2.2: n3 "^0.11.2" nan "^2.14.0" -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== homedir-polyfill@^1.0.1: version "1.0.3" @@ -3467,11 +3528,23 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" @@ -3577,7 +3650,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -3607,6 +3680,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -3813,7 +3891,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1, js-yaml@^3.5.1: +js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.5.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -4120,6 +4198,13 @@ log-driver@^1.2.7: resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + lolex@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" @@ -4347,6 +4432,11 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -4403,29 +4493,49 @@ mkdirp@*: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== -mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" + integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== + dependencies: + minimist "^1.2.5" + +mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" -mocha@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" - integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== +mocha@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.1.1.tgz#89fbb30d09429845b1bb893a830bf5771049a441" + integrity sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA== dependencies: + ansi-colors "3.2.3" browser-stdout "1.3.1" - commander "2.15.1" - debug "3.1.0" + chokidar "3.3.0" + debug "3.2.6" diff "3.5.0" escape-string-regexp "1.0.5" - glob "7.1.2" + find-up "3.0.0" + glob "7.1.3" growl "1.10.5" - he "1.1.1" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" minimatch "3.0.4" - mkdirp "0.5.1" - supports-color "5.4.0" + mkdirp "0.5.3" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" modify-values@^1.0.0: version "1.0.1" @@ -4449,6 +4559,11 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -4555,6 +4670,14 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" @@ -4619,6 +4742,11 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + normalize-url@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" @@ -4770,7 +4898,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: +object.assign@4.1.0, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -5108,6 +5236,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -5422,6 +5555,13 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + readline2@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" @@ -6151,7 +6291,7 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@~2.0.1: +strip-json-comments@2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -6189,10 +6329,10 @@ supertest@^2.0.0: methods "1.x" superagent "^2.0.0" -supports-color@5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== dependencies: has-flag "^3.0.0" @@ -6337,6 +6477,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -6630,7 +6777,7 @@ which@1.2.x: dependencies: isexe "^2.0.0" -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -6644,7 +6791,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: +wide-align@1.1.3, wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== @@ -6774,6 +6921,14 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yargs-parser@13.1.2, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" @@ -6797,6 +6952,31 @@ yargs-parser@^16.1.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + +yargs@13.3.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yargs@^14.2.2: version "14.2.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" From 5418ad4e38a326c89a86fd1e6722107d80f35413 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Apr 2020 07:23:17 +0000 Subject: [PATCH 110/165] Update dependency supertest to v4 --- package.json | 2 +- yarn.lock | 75 ++++++++++++++++++++++++---------------------------- 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index f4203e63..9848a806 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "pre-commit": "^1.1.3", "sinon": "^1.17.4", "sinon-chai": "^2.8.0", - "supertest": "^2.0.0" + "supertest": "^4.0.0" }, "pre-commit": [ "lint", diff --git a/yarn.lock b/yarn.lock index caf20097..32d4552c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1361,11 +1361,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - asynciterator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-2.0.1.tgz#94d6a059fee4bc63e862ad1edb685c5f5fa26be6" @@ -1818,7 +1813,7 @@ columnify@^1.5.4: strip-ansi "^3.0.0" wcwidth "^1.0.0" -combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1988,7 +1983,7 @@ convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -cookiejar@^2.0.6: +cookiejar@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== @@ -2823,14 +2818,14 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@1.0.0-rc4: - version "1.0.0-rc4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc4.tgz#05ac6bc22227b43e4461f488161554699d4f8b5e" - integrity sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14= +form-data@^2.3.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== dependencies: - async "^1.5.2" - combined-stream "^1.0.5" - mime-types "^2.1.10" + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" form-data@~2.3.2: version "2.3.3" @@ -2848,7 +2843,7 @@ formatio@1.1.1: dependencies: samsam "~1.1" -formidable@^1.0.17: +formidable@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== @@ -4361,7 +4356,7 @@ merge2@^1.2.3: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== -methods@1.x, methods@^1.1.1: +methods@^1.1.1, methods@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -4390,14 +4385,14 @@ mime-db@1.43.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== -mime-types@^2.1.10, mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.26" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: mime-db "1.43.0" -mime@^1.3.4: +mime@^1.3.4, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -5422,10 +5417,10 @@ qejs@^3.0.5: dependencies: q "0.8.x" -qs@^6.1.0: - version "6.9.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" - integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== +qs@^6.5.1: + version "6.9.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" + integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== qs@~6.5.2: version "6.5.2" @@ -5523,7 +5518,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6305,29 +6300,29 @@ strong-log-transformer@^2.0.0: minimist "^1.2.0" through "^2.3.4" -superagent@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-2.3.0.tgz#703529a0714e57e123959ddefbce193b2e50d115" - integrity sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU= +superagent@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== dependencies: component-emitter "^1.2.0" - cookiejar "^2.0.6" - debug "^2.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" extend "^3.0.0" - form-data "1.0.0-rc4" - formidable "^1.0.17" + form-data "^2.3.1" + formidable "^1.2.0" methods "^1.1.1" - mime "^1.3.4" - qs "^6.1.0" - readable-stream "^2.0.5" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" -supertest@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-2.0.1.tgz#a058081d788f1515d4700d7502881e6b759e44cd" - integrity sha1-oFgIHXiPFRXUcA11Aogea3WeRM0= +supertest@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-4.0.2.tgz#c2234dbdd6dc79b6f15b99c8d6577b90e4ce3f36" + integrity sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ== dependencies: - methods "1.x" - superagent "^2.0.0" + methods "^1.1.2" + superagent "^3.8.3" supports-color@6.0.0: version "6.0.0" From 29a4a1d38b2c87e5c09ba03809f4c6d86d1f2328 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Apr 2020 07:27:10 +0000 Subject: [PATCH 111/165] Update dependency sinon-chai to v3 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9848a806..a8492b91 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "nyc": "^15.0.0", "pre-commit": "^1.1.3", "sinon": "^1.17.4", - "sinon-chai": "^2.8.0", + "sinon-chai": "^3.0.0", "supertest": "^4.0.0" }, "pre-commit": [ diff --git a/yarn.lock b/yarn.lock index 32d4552c..0086b6fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5915,10 +5915,10 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -sinon-chai@^2.8.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.14.0.tgz#da7dd4cc83cd6a260b67cca0f7a9fdae26a1205d" - integrity sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ== +sinon-chai@^3.0.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.5.0.tgz#c9a78304b0e15befe57ef68e8a85a00553f5c60e" + integrity sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg== sinon@^1.17.4: version "1.17.7" From 9dd3bb45e3651401f4cb7310c49b1acdb50e9964 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 9 Apr 2020 09:36:20 +0200 Subject: [PATCH 112/165] Fix invalid peerDependency entries --- packages/datasource-composite/package.json | 2 +- packages/datasource-hdt/package.json | 2 +- packages/datasource-jsonld/package.json | 2 +- packages/datasource-n3/package.json | 2 +- packages/datasource-sparql/package.json | 2 +- packages/feature-memento/package.json | 2 +- packages/feature-qpf/package.json | 2 +- packages/feature-summary/package.json | 2 +- packages/feature-webid/package.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 78f7d2d3..8f89816a 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -32,7 +32,7 @@ "lru-cache": "^5.1.1" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index ad0d10cf..f6938a5e 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -32,7 +32,7 @@ "n3": "^1.3.5" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 5fc99024..74c9271c 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -33,7 +33,7 @@ "rdf-string": "^1.3.1" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 5800f02a..367fed21 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -32,7 +32,7 @@ "n3": "^1.3.5" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 3819b2bb..b10a04d0 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -35,7 +35,7 @@ "sparqljson-parse": "^1.5.1" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 09793baf..a7a6a0b5 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -33,7 +33,7 @@ "lodash": "^4.0.0" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index 968eb5c9..f1348b7b 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -35,7 +35,7 @@ "rdf-string": "^1.3.1" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index e4bbce6b..c404ef23 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -37,7 +37,7 @@ "n3": "^1.3.5" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index c784f713..0288fb01 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -35,7 +35,7 @@ "parse-cache-control": "^1.0.1" }, "peerDependencies": { - "@ldf/core": "2.2.5" + "@ldf/core": "^3.0.0" }, "devDependencies": { "@ldf/core": "^3.0.0" From 0bfbec7a3383f96ce56977d1b55eba97f871561f Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 9 Apr 2020 09:38:30 +0200 Subject: [PATCH 113/165] Bump to mime 2.4.4, Closes #118 --- packages/core/lib/controllers/AssetsController.js | 2 +- packages/core/package.json | 2 +- packages/core/test/controllers/AssetsController-test.js | 2 +- yarn.lock | 7 ++++++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/core/lib/controllers/AssetsController.js b/packages/core/lib/controllers/AssetsController.js index 33b165ba..2d0cd70c 100644 --- a/packages/core/lib/controllers/AssetsController.js +++ b/packages/core/lib/controllers/AssetsController.js @@ -33,7 +33,7 @@ class AssetsController extends Controller { let filename = path.join(assetsFolder, name), stats = fs.statSync(filename); // Read an asset file into memory if (stats.isFile()) { - let assetType = mime.lookup(filename); + let assetType = mime.getType(filename); this._assets[assetsPath + name.replace(/[.][^.]+$/, '')] = { type: assetType.indexOf('text/') ? assetType : assetType + ';charset=utf-8', contents: fs.readFileSync(filename), diff --git a/packages/core/package.json b/packages/core/package.json index 5eb9182c..cc9c498e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -40,7 +40,7 @@ "forwarded-parse": "^2.1.0", "jsonld-streaming-serializer": "^1.1.0", "lodash": "^4.0.0", - "mime": "^1.3.4", + "mime": "^2.4.4", "n3": "^1.3.5", "negotiate": "^1.0.1", "q": "^1.4.1", diff --git a/packages/core/test/controllers/AssetsController-test.js b/packages/core/test/controllers/AssetsController-test.js index 192875fe..cc067927 100644 --- a/packages/core/test/controllers/AssetsController-test.js +++ b/packages/core/test/controllers/AssetsController-test.js @@ -51,7 +51,7 @@ describe('AssetsController', () => { let asset = fs.readFileSync(path.join(__dirname, '/../../assets/favicon.ico'), 'utf8'); controller.next.should.not.have.been.called; response.should.have.property('statusCode', 200); - response.headers.should.have.property('content-type', 'image/x-icon'); + response.headers.should.have.property('content-type', 'image/vnd.microsoft.icon'); response.headers.should.have.property('cache-control', 'public,max-age=1209600'); response.body.toString().should.equal(asset); }).end(done); diff --git a/yarn.lock b/yarn.lock index 0086b6fb..3725290e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4392,11 +4392,16 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.43.0" -mime@^1.3.4, mime@^1.4.1: +mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" From 808dff141f3a1ebd41f8faccad50ea6763a3fe5c Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 9 Apr 2020 09:41:44 +0200 Subject: [PATCH 114/165] Bump eslint to v6 and fix linting errors, Closes #116 --- package.json | 2 +- .../core/lib/controllers/AssetsController.js | 6 +- packages/core/lib/controllers/Controller.js | 10 +- .../lib/controllers/DereferenceController.js | 2 +- .../core/lib/datasources/IndexDatasource.js | 2 +- packages/core/lib/views/HtmlView.js | 6 +- packages/core/lib/views/RdfView.js | 2 +- packages/core/lib/views/ViewCollection.js | 2 +- .../controllers/DereferenceController-test.js | 2 +- .../controllers/NotFoundController-test.js | 12 +- .../core/test/datasources/Datasource-test.js | 6 +- .../test/routers/DatasourceRouter-test.js | 2 +- packages/core/test/routers/PageRouter-test.js | 6 +- packages/core/test/views/View-test.js | 2 +- .../core/test/views/ViewCollection-test.js | 6 +- .../datasources/CompositeDatasource-test.js | 2 +- .../lib/datasources/HdtDatasource.js | 6 +- .../test/datasources/HdtDatasource-test.js | 2 +- .../lib/datasources/SparqlDatasource.js | 2 +- .../QuadPatternFragmentsController.js | 5 +- .../QuadPatternFragmentsRdfView.js | 1 - .../QuadPatternFragmentsController-test.js | 14 +- .../test/routers/QuadPatternRouter-test.js | 4 +- packages/feature-summary/bin/generate-summary | 44 +- .../QuadPatternFragmentsRdfView-Summary.js | 2 +- yarn.lock | 809 +++++++----------- 26 files changed, 367 insertions(+), 592 deletions(-) diff --git a/package.json b/package.json index a8492b91..93a8d403 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "devDependencies": { "chai": "^4.0.0", "coveralls": "^3.0.9", - "eslint": "^3.4.0", + "eslint": "^6.8.0", "lerna": "^3.4.0", "manual-git-changelog": "^1.0.1", "mocha": "^7.0.0", diff --git a/packages/core/lib/controllers/AssetsController.js b/packages/core/lib/controllers/AssetsController.js index 2d0cd70c..c40629d6 100644 --- a/packages/core/lib/controllers/AssetsController.js +++ b/packages/core/lib/controllers/AssetsController.js @@ -31,7 +31,7 @@ class AssetsController extends Controller { assetsFolder = assetsFolder.replace('file:///', ''); fs.readdirSync(assetsFolder).forEach(function (name) { let filename = path.join(assetsFolder, name), stats = fs.statSync(filename); - // Read an asset file into memory + // Read an asset file into memory if (stats.isFile()) { let assetType = mime.getType(filename); this._assets[assetsPath + name.replace(/[.][^.]+$/, '')] = { @@ -39,7 +39,7 @@ class AssetsController extends Controller { contents: fs.readFileSync(filename), }; } - // Read all asset files in a folder + // Read all asset files in a folder else if (stats.isDirectory()) this._readAssetsFolder(filename, assetsPath + name + '/'); }, this); @@ -56,7 +56,7 @@ class AssetsController extends Controller { response.end(asset.contents); } else - next(); + next(); } } diff --git a/packages/core/lib/controllers/Controller.js b/packages/core/lib/controllers/Controller.js index 307905ce..6d43c24f 100644 --- a/packages/core/lib/controllers/Controller.js +++ b/packages/core/lib/controllers/Controller.js @@ -19,7 +19,7 @@ class Controller { return datasources; }, {}); this._views = options.views && options.views.matchView ? - options.views : new ViewCollection(options.views); + options.views : new ViewCollection(options.views); // Set up base URL (if we're behind a proxy, this allows reconstructing the actual request URL) this._baseUrl = _.mapValues(url.parse((options.urlData || new UrlData()).baseURL), (value, key) => { @@ -34,10 +34,10 @@ class Controller { if (!request.parsedUrl) { // Keep the request's path and query, but take over all other defined baseURL properties request.parsedUrl = _.defaults(_.pick(url.parse(request.url, true), 'path', 'pathname', 'query'), - this._getForwarded(request), - this._getXForwardHeaders(request), - this._baseUrl, - { protocol: 'http:', host: request.headers.host }); + this._getForwarded(request), + this._getXForwardHeaders(request), + this._baseUrl, + { protocol: 'http:', host: request.headers.host }); } // Try to handle the request diff --git a/packages/core/lib/controllers/DereferenceController.js b/packages/core/lib/controllers/DereferenceController.js index f6945c6b..086935f1 100644 --- a/packages/core/lib/controllers/DereferenceController.js +++ b/packages/core/lib/controllers/DereferenceController.js @@ -29,7 +29,7 @@ class DeferenceController extends Controller { response.end(entity); } else - next(); + next(); } } diff --git a/packages/core/lib/datasources/IndexDatasource.js b/packages/core/lib/datasources/IndexDatasource.js index 46277a12..4a8cef55 100644 --- a/packages/core/lib/datasources/IndexDatasource.js +++ b/packages/core/lib/datasources/IndexDatasource.js @@ -16,7 +16,7 @@ class IndexDatasource extends MemoryDatasource { this.role = 'index'; } - // Creates quads for each data source + // Creates quads for each data source _getAllQuads(addQuad, done) { const quad = this.dataFactory.quad, namedNode = this.dataFactory.namedNode, literal = this.dataFactory.literal; for (let name in this._datasources) { diff --git a/packages/core/lib/views/HtmlView.js b/packages/core/lib/views/HtmlView.js index 87ebdd04..ab2b6f53 100644 --- a/packages/core/lib/views/HtmlView.js +++ b/packages/core/lib/views/HtmlView.js @@ -36,8 +36,8 @@ class HtmlView extends View { // Render the template with its options let fileName = (templateName[0] === '/' ? templateName : path.join(__dirname, templateName)) + '.html'; qejs.renderFile(fileName, options) - .then((html) => { response.write(html); done(); }) - .fail((error) => { done(error); }); + .then((html) => { response.write(html); done(); }) + .fail((error) => { done(error); }); function newExtensionViewConstructor(extension, options, request, response) { return function (data) { @@ -53,7 +53,7 @@ class HtmlView extends View { _renderViewExtensionContents(name, options, request, response) { let buffer = '', writer = { write: function (data) { buffer += data; }, end: _.noop }; return q.ninvoke(this, '_renderViewExtensions', name, options, request, writer) - .then(() => { return buffer; }); + .then(() => { return buffer; }); } } diff --git a/packages/core/lib/views/RdfView.js b/packages/core/lib/views/RdfView.js index e61ed408..a1430d37 100644 --- a/packages/core/lib/views/RdfView.js +++ b/packages/core/lib/views/RdfView.js @@ -33,7 +33,7 @@ class RdfView extends View { // Write the triples with a content-type-specific writer let self = this, writer = /json/.test(settings.contentType) ? this._createJsonLdWriter(settings, response, done) - : this._createN3Writer(settings, response, done); + : this._createN3Writer(settings, response, done); settings.writer = writer; function main() { self._generateRdf(settings, writer.data, writer.meta, after); } function after() { self._renderViewExtensions('After', settings, request, response, writer.end); } diff --git a/packages/core/lib/views/ViewCollection.js b/packages/core/lib/views/ViewCollection.js index fb5d3d5b..3d8a71db 100644 --- a/packages/core/lib/views/ViewCollection.js +++ b/packages/core/lib/views/ViewCollection.js @@ -42,7 +42,7 @@ class ViewCollection { return this._views[name] || []; } -// Gets the best match for views with the given name that accommodate the request + // Gets the best match for views with the given name that accommodate the request matchView(name, request) { // Retrieve the views with the given name let viewList = this._viewMatchers[name]; diff --git a/packages/core/test/controllers/DereferenceController-test.js b/packages/core/test/controllers/DereferenceController-test.js index f418ae79..95b0680a 100644 --- a/packages/core/test/controllers/DereferenceController-test.js +++ b/packages/core/test/controllers/DereferenceController-test.js @@ -26,7 +26,7 @@ describe('DereferenceController', () => { let response; before((done) => { client.get('/resource/Mickey_Mouse') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should not hand over to the next controller', () => { diff --git a/packages/core/test/controllers/NotFoundController-test.js b/packages/core/test/controllers/NotFoundController-test.js index b4b3244b..e0be830e 100644 --- a/packages/core/test/controllers/NotFoundController-test.js +++ b/packages/core/test/controllers/NotFoundController-test.js @@ -30,7 +30,7 @@ describe('NotFoundController', () => { let response; before((done) => { client.get('/notfound') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should not hand over to the next controller', () => { @@ -76,7 +76,7 @@ describe('NotFoundController', () => { before((done) => { resetAll(); client.get('/notfound') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should not hand over to the next controller', () => { @@ -113,7 +113,7 @@ describe('NotFoundController', () => { before((done) => { resetAll(); client.get('/notfound').set('Accept', '*/*') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should not hand over to the next controller', () => { @@ -150,7 +150,7 @@ describe('NotFoundController', () => { before((done) => { resetAll(); client.get('/notfound').set('Accept', 'text/html') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should not hand over to the next controller', () => { @@ -187,7 +187,7 @@ describe('NotFoundController', () => { before((done) => { resetAll(); client.get('/notfound').set('Accept', 'text/turtle') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should not hand over to the next controller', () => { @@ -225,7 +225,7 @@ describe('NotFoundController', () => { before((done) => { resetAll(); client.get('/notfound').set('Accept', 'application/trig') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should not hand over to the next controller', () => { diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index cc340736..ff4d56e2 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -50,7 +50,7 @@ describe('Datasource', () => { it('should throw an error when trying to execute a supported query', () => { (function () { datasource.select({ features: {} }); }) - .should.throw('_executeQuery has not been implemented'); + .should.throw('_executeQuery has not been implemented'); }); describe('fetching a resource', () => { @@ -315,8 +315,8 @@ describe('Datasource', () => { result.on('data', (q) => { quads.push(q); }); result.on('end', () => { let matchingquads = [{ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o1'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, - { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o2'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, - { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o3'), graph: dataFactory.namedNode('g') }]; + { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o2'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, + { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o3'), graph: dataFactory.namedNode('g') }]; matchingquads.length.should.be.equal(quads.length); for (let i = 0; i < quads.length; i++) matchingquads[i].should.deep.equal(quads[i]); diff --git a/packages/core/test/routers/DatasourceRouter-test.js b/packages/core/test/routers/DatasourceRouter-test.js index 621fab4b..43798b9a 100644 --- a/packages/core/test/routers/DatasourceRouter-test.js +++ b/packages/core/test/routers/DatasourceRouter-test.js @@ -68,7 +68,7 @@ describe('DatasourceRouter', () => { { a: 1, features: { datasource: true }, datasource: '/my/data-source' }, ], ] - .forEach((args) => { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); diff --git a/packages/core/test/routers/PageRouter-test.js b/packages/core/test/routers/PageRouter-test.js index 61885b2c..903e8d39 100644 --- a/packages/core/test/routers/PageRouter-test.js +++ b/packages/core/test/routers/PageRouter-test.js @@ -75,7 +75,7 @@ describe('PageRouter', () => { { a: 1, features: { a: true, b: true, limit: true, offset: true }, limit: 100, offset: 200 }, ], ] - .forEach((args) => { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); @@ -143,7 +143,7 @@ describe('PageRouter', () => { { a: 1, features: { a: true, b: true, limit: true, offset: true }, limit: 250, offset: 500 }, ], ] - .forEach((args) => { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); @@ -162,7 +162,7 @@ describe('PageRouter', () => { { a: 1, features: { limit: true }, limit: 100 }, ], ] - .forEach((args) => { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); diff --git a/packages/core/test/views/View-test.js b/packages/core/test/views/View-test.js index 26cdf7e4..7954b5c2 100644 --- a/packages/core/test/views/View-test.js +++ b/packages/core/test/views/View-test.js @@ -68,7 +68,7 @@ describe('View', () => { it('should throw an error on calling render', () => { let response = { getHeader: sinon.stub() }; (function () { new View().render(null, null, response); }) - .should.throw('The _render method is not yet implemented.'); + .should.throw('The _render method is not yet implemented.'); }); }); diff --git a/packages/core/test/views/ViewCollection-test.js b/packages/core/test/views/ViewCollection-test.js index 7e53649b..649a6a39 100644 --- a/packages/core/test/views/ViewCollection-test.js +++ b/packages/core/test/views/ViewCollection-test.js @@ -22,7 +22,7 @@ describe('ViewCollection', () => { it('should throw an error when matching a view', () => { (function () { viewCollection.matchView('Foo'); }) - .should.throw('No view named Foo found.'); + .should.throw('No view named Foo found.'); }); }); @@ -35,7 +35,7 @@ describe('ViewCollection', () => { it('should throw an error when matching a view with a non-existing type', () => { (function () { viewCollection.matchView('Bar'); }) - .should.throw('No view named Bar found.'); + .should.throw('No view named Bar found.'); }); describe('when a client requests HTML', () => { @@ -80,7 +80,7 @@ describe('ViewCollection', () => { it('should throw an error when matching a view with a non-existing type', () => { (function () { viewCollection.matchView('Bar'); }) - .should.throw('No view named Bar found.'); + .should.throw('No view named Bar found.'); }); describe('when matching a request of one view type as HTML', () => { diff --git a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js index 8a841de8..38c72fc8 100644 --- a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js +++ b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js @@ -155,7 +155,7 @@ describe('CompositeDatasource', () => { }); function itShouldExecute(getDatasource, name, query, - expectedResultsCount, expectedTotalCount, expectedTriples) { + expectedResultsCount, expectedTotalCount, expectedTriples) { describe('executing ' + name, () => { let resultsCount = 0, totalCount, triples = []; before((done) => { diff --git a/packages/datasource-hdt/lib/datasources/HdtDatasource.js b/packages/datasource-hdt/lib/datasources/HdtDatasource.js index ae237484..0276919b 100644 --- a/packages/datasource-hdt/lib/datasources/HdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/HdtDatasource.js @@ -34,9 +34,9 @@ class HdtDatasource extends Datasource { } let dataFactory = this.dataFactory; this._hdtDocument.searchTriples(query.subject ? RdfString.termToString(query.subject) : null, - query.predicate ? RdfString.termToString(query.predicate) : null, - query.object ? RdfString.termToString(query.object) : null, - { limit: query.limit, offset: query.offset }) + query.predicate ? RdfString.termToString(query.predicate) : null, + query.object ? RdfString.termToString(query.object) : null, + { limit: query.limit, offset: query.offset }) .then((result) => { let triples = result.triples, estimatedTotalCount = result.totalCount, diff --git a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js index 4da65b15..a824520e 100644 --- a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js +++ b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js @@ -197,7 +197,7 @@ describe('HdtDatasource', () => { }); function itShouldExecute(getDatasource, name, query, - expectedResultsCount, expectedTotalCount, expectedTriples) { + expectedResultsCount, expectedTotalCount, expectedTriples) { describe('executing ' + name, () => { let resultsCount = 0, totalCount, triples = []; before((done) => { diff --git a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js index 1b100c94..c6f13c14 100644 --- a/packages/datasource-sparql/lib/datasources/SparqlDatasource.js +++ b/packages/datasource-sparql/lib/datasources/SparqlDatasource.js @@ -186,7 +186,7 @@ class SparqlDatasource extends Datasource { else { return ((!/["\\]/.test(term.value)) ? '"' + term.value + '"' : '"""' + term.value.replace(/(["\\])/g, '\\$1') + '"""') + (term.language ? '@' + term.language : - (term.datatype && term.datatype.value !== xsd + 'string' ? '^^' + this._encodeObject(term.datatype) : this._forceTypedLiterals ? '^^' : '')); + (term.datatype && term.datatype.value !== xsd + 'string' ? '^^' + this._encodeObject(term.datatype) : this._forceTypedLiterals ? '^^' : '')); } } } diff --git a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js index f81f9c2d..cc0e2ae0 100644 --- a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js +++ b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js @@ -7,7 +7,6 @@ let Controller = require('@ldf/core').controllers.Controller, // Creates a new QuadPatternFragmentsController class QuadPatternFragmentsController extends Controller { - constructor(options) { options = options || {}; super(options); @@ -44,7 +43,7 @@ class QuadPatternFragmentsController extends Controller { let view = this._negotiateView(this.viewName, request, response), settings = this._createFragmentMetadata(request, query, datasource); settings.results = datasource.select(query, - (error) => { error && next(error); }); + (error) => { error && next(error); }); // Execute the extensions and render the query result let extensions = this._extensions, extensionId = 0; @@ -64,7 +63,7 @@ class QuadPatternFragmentsController extends Controller { // Create the template URL for requesting quad patterns _createTemplateUrl(datasourceUrl, supportsQuads) { return datasourceUrl + (!supportsQuads ? '{?subject,predicate,object}' : - '{?subject,predicate,object,graph}'); + '{?subject,predicate,object,graph}'); } // Create parameterized pattern string for quad patterns diff --git a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js index 4463f1a3..087cffc3 100644 --- a/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js +++ b/packages/feature-qpf/lib/views/quadpatternfragments/QuadPatternFragmentsRdfView.js @@ -107,7 +107,6 @@ class QuadPatternFragmentsRdfView extends RdfView { quad(quadObject) { return stringQuadToQuad(quadObject, this.dataFactory); } - } module.exports = QuadPatternFragmentsRdfView; diff --git a/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js index 2f8defa4..633fce85 100644 --- a/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js +++ b/packages/feature-qpf/test/controllers/QuadPatternFragmentsController-test.js @@ -206,7 +206,7 @@ describe('QuadPatternFragmentsController', () => { before((done) => { resetAll(); client.get('/my-datasource') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should call the default view', () => { @@ -227,7 +227,7 @@ describe('QuadPatternFragmentsController', () => { before((done) => { resetAll(); client.get('/my-datasource').set('Accept', '*/*') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should call the HTML view', () => { @@ -248,7 +248,7 @@ describe('QuadPatternFragmentsController', () => { before((done) => { resetAll(); client.get('/my-datasource').set('Accept', 'text/html') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should call the HTML view', () => { @@ -269,7 +269,7 @@ describe('QuadPatternFragmentsController', () => { before((done) => { resetAll(); client.get('/my-datasource').set('Accept', 'text/turtle') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should call the Turtle view', () => { @@ -290,7 +290,7 @@ describe('QuadPatternFragmentsController', () => { before((done) => { resetAll(); client.get('/my-datasource').set('Accept', 'text/n3') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should call the Turtle view', () => { @@ -332,7 +332,7 @@ describe('QuadPatternFragmentsController', () => { let response; before((done) => { client.get('/my-datasource') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should return status code 406', () => { @@ -352,7 +352,7 @@ describe('QuadPatternFragmentsController', () => { let response; before((done) => { client.get('/my-datasource').set('Accept', 'text/html') - .end((error, res) => { response = res; done(error); }); + .end((error, res) => { response = res; done(error); }); }); it('should return status code 406', () => { diff --git a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js index 8aa33874..05c9f37e 100644 --- a/packages/feature-qpf/test/routers/QuadPatternRouter-test.js +++ b/packages/feature-qpf/test/routers/QuadPatternRouter-test.js @@ -223,7 +223,7 @@ describe('QuadPatternRouter', () => { { a: 1, features: { quadPattern: true }, graph: dataFactory.defaultGraph() }, ], ] - .forEach((args) => { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); @@ -465,7 +465,7 @@ describe('QuadPatternRouter', () => { { a: 1, features: { quadPattern: true }, graph: dataFactory.namedNode('foo:bar') }, ], ] - .forEach((args) => { test.extractQueryParams.apply(router, args); }); + .forEach((args) => { test.extractQueryParams.apply(router, args); }); }); }); }); diff --git a/packages/feature-summary/bin/generate-summary b/packages/feature-summary/bin/generate-summary index 548a6f78..728848cf 100755 --- a/packages/feature-summary/bin/generate-summary +++ b/packages/feature-summary/bin/generate-summary @@ -74,8 +74,8 @@ function fromDataSource(uri, datasource, callback, end, chunksize) { // Otherwise, process dataset at once else { datasource.select({}, console.log) - .on('data', extractSummary) - .on('end', endSummary); + .on('data', extractSummary) + .on('end', endSummary); } // Processes DataSource in chunks @@ -83,27 +83,27 @@ function fromDataSource(uri, datasource, callback, end, chunksize) { offset = offset || 0; let count = 0; - const stream = datasource.select({ limit: limit, offset: offset }, console.error) - .getProperty('metadata', (metadata) => { - let progress = Math.round((offset / metadata.totalCount) * 100); - console.log(progress); - - stream.on('data', (triple) => { - count++; - extractSummary(triple); - triple = null; - }); - - stream.on('end', () => { - stream.removeAllListeners(); - stream = null; - - if (count < limit) - endSummary(); - else - setImmediate(() => { processSet(limit, offset + limit); }); - }); + let stream = datasource.select({ limit: limit, offset: offset }, console.error) + .getProperty('metadata', (metadata) => { + let progress = Math.round((offset / metadata.totalCount) * 100); + console.log(progress); + + stream.on('data', (triple) => { + count++; + extractSummary(triple); + triple = null; }); + + stream.on('end', () => { + stream.removeAllListeners(); + stream = null; + + if (count < limit) + endSummary(); + else + setImmediate(() => { processSet(limit, offset + limit); }); + }); + }); } function extractSummary(triple) { diff --git a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js index 17d8e72a..a0e3100b 100644 --- a/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js +++ b/packages/feature-summary/lib/views/summary/QuadPatternFragmentsRdfView-Summary.js @@ -19,7 +19,7 @@ class SummaryRdfViewExtension extends RdfView { // TODO: summary URL should be generated by router if (settings.datasource.url && settings.baseURL && settings.query.datasource) { metadata(this.dataFactory.quad(this.dataFactory.namedNode(settings.datasource.url), this.dataFactory.namedNode(ds + 'hasDatasetSummary'), - this.dataFactory.namedNode(settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource)))); + this.dataFactory.namedNode(settings.baseURL + 'summaries/' + encodeURIComponent(settings.query.datasource)))); } } done(); diff --git a/yarn.lock b/yarn.lock index 3725290e..50df7910 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== @@ -1103,22 +1103,15 @@ access-log@^0.4.0: dependencies: strftime "~0.6.2" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== -acorn@^5.5.0: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== +acorn@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -1149,20 +1142,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" - integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw= - -ajv@^4.7.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ajv@^6.5.5: +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== @@ -1177,16 +1157,18 @@ ansi-colors@3.2.3: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= - ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1207,11 +1189,6 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1219,7 +1196,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== @@ -1361,6 +1338,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + asynciterator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-2.0.1.tgz#94d6a059fee4bc63e862ad1edb685c5f5fa26be6" @@ -1391,15 +1373,6 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== -babel-code-frame@^6.16.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1559,13 +1532,6 @@ caller-callsite@^2.0.0: dependencies: callsites "^2.0.0" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" @@ -1573,16 +1539,16 @@ caller-path@^2.0.0: dependencies: caller-callsite "^2.0.0" -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1637,18 +1603,7 @@ chai@^4.0.0: pathval "^1.1.0" type-detect "^4.0.5" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1657,6 +1612,14 @@ chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1692,11 +1655,6 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1712,13 +1670,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= - dependencies: - restore-cursor "^1.0.1" - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -1726,6 +1677,13 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -1763,11 +1721,6 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -1860,7 +1813,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2: +concat-stream@^1.4.7, concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -2040,7 +1993,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -2072,14 +2025,6 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" @@ -2113,14 +2058,14 @@ debug@3.2.6, debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^2.1.1, debug@^2.2.0, debug@^2.3.3: +debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^4.1.0, debug@^4.1.1: +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -2255,10 +2200,10 @@ dir-glob@^2.2.2: dependencies: path-type "^3.0.0" -doctrine@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" @@ -2371,41 +2316,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - es6-error@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - es6-promise@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc" @@ -2423,118 +2338,94 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -es6-weak-map@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" esrecurse "^4.1.0" estraverse "^4.1.1" -eslint@^3.4.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" - integrity sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw= - dependencies: - babel-code-frame "^6.16.0" - chalk "^1.1.3" - concat-stream "^1.5.2" - debug "^2.1.1" - doctrine "^2.0.0" - escope "^3.6.0" - espree "^3.4.0" - esquery "^1.0.0" - estraverse "^4.2.0" +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" esutils "^2.0.2" - file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.7.5" - strip-bom "^3.0.0" - strip-json-comments "~2.0.1" - table "^3.7.8" - text-table "~0.2.0" - user-home "^2.0.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" -espree@^3.4.0: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" - integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== +esquery@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" + integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== dependencies: - estraverse "^4.0.0" + estraverse "^5.0.0" esrecurse@^4.1.0: version "4.2.1" @@ -2543,24 +2434,21 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" + integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= - dependencies: - d "1" - es5-ext "~0.10.14" - eventemitter3@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -2579,11 +2467,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -2604,13 +2487,6 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== - dependencies: - type "^2.0.0" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -2696,14 +2572,6 @@ figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -2711,13 +2579,19 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" fill-range@^4.0.0: version "4.0.0" @@ -2775,15 +2649,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" flat@^4.1.0: version "4.1.0" @@ -2792,6 +2665,11 @@ flat@^4.1.0: dependencies: is-buffer "~2.0.3" +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -2914,6 +2792,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -2928,20 +2811,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" - integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== - dependencies: - is-property "^1.0.2" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA= - dependencies: - is-property "^1.0.0" - genfun@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" @@ -3111,7 +2980,7 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3148,10 +3017,12 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^9.14.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" globby@^9.2.0: version "9.2.0" @@ -3201,13 +3072,6 @@ har-validator@~5.1.3: ajv "^6.5.5" har-schema "^2.0.0" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3366,12 +3230,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.2.0: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.3: +ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== @@ -3384,6 +3243,14 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -3451,25 +3318,6 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - integrity sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34= - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - inquirer@^6.2.0: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" @@ -3489,10 +3337,24 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" -interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +inquirer@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" ip@1.1.5: version "1.1.5" @@ -3652,22 +3514,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== - -is-my-json-valid@^2.10.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a" - integrity sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA== - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3709,11 +3555,6 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-property@^1.0.0, is-property@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= - is-regex@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" @@ -3721,11 +3562,6 @@ is-regex@^1.0.5: dependencies: has "^1.0.3" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - is-ssh@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" @@ -3876,17 +3712,12 @@ istanbul-reports@^3.0.0: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.5.1: +js-yaml@3.13.1, js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -3919,12 +3750,10 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: +json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" @@ -3945,11 +3774,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - jsonld-context-parser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.0.0.tgz#2c4ea08d1b137cde7ba2376e26f56d3fcb519779" @@ -3997,11 +3821,6 @@ jsonparse@^1.2.0, jsonparse@^1.3.1: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4183,7 +4002,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -4407,6 +4226,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -4579,17 +4403,12 @@ multimatch@^3.0.0: arrify "^1.0.1" minimatch "^3.0.4" -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA= - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -mute-stream@~0.0.4: +mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== @@ -4660,11 +4479,6 @@ nested-error-stacks@~2.0.1: resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -4935,11 +4749,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -4947,6 +4756,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -4955,7 +4771,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.2: +optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -5110,6 +4926,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-cache-control@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" @@ -5190,11 +5013,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -5287,11 +5105,6 @@ pkginfo@~0.4.0: resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" - integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU= - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -5323,10 +5136,10 @@ process-on-spawn@^1.0.0: dependencies: fromentries "^1.2.0" -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== promise-inflight@^1.0.1: version "1.0.1" @@ -5562,22 +5375,6 @@ readdirp@~3.2.0: dependencies: picomatch "^2.0.4" -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - integrity sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -5602,6 +5399,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + relative-to-absolute-iri@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.5.tgz#9ddc91cad85898d10724864a62aacfb35caf5766" @@ -5667,14 +5469,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -require-uncached@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - requireg@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/requireg/-/requireg-0.1.8.tgz#75c1d495294fa5ddfd51e4fcca4965c44f1ed8b1" @@ -5699,11 +5493,6 @@ resolve-dir@^1.0.0: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -5724,7 +5513,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: +resolve@^1.10.0, resolve@^1.3.2: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -5738,14 +5527,6 @@ resolve@~1.7.1: dependencies: path-parse "^1.0.5" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -5754,6 +5535,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -5764,6 +5553,13 @@ retry@^0.10.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -5778,20 +5574,6 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - integrity sha1-yK1KXhEGYeQCp9IbUw4AnyX444k= - dependencies: - once "^1.3.0" - run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -5799,6 +5581,13 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" +run-async@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== + dependencies: + is-promise "^2.1.0" + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -5806,11 +5595,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI= - rxjs@^6.4.0: version "6.5.4" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" @@ -5818,6 +5602,13 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" +rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" @@ -5855,7 +5646,7 @@ samsam@~1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -5906,15 +5697,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.7.5: - version "0.7.8" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" - integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM= - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -5940,10 +5722,14 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" slide@^1.1.6: version "1.1.6" @@ -6173,7 +5959,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0: +"string-width@^1.0.2 || 2", string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -6296,6 +6082,11 @@ strip-json-comments@2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== + strong-log-transformer@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -6336,11 +6127,6 @@ supports-color@6.0.0: dependencies: has-flag "^3.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6355,17 +6141,15 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" - integrity sha1-K7xULw/amGGnVdOUf+/Ys/UThV8= +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: version "4.4.13" @@ -6411,7 +6195,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -6553,26 +6337,21 @@ type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + type-fest@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== -type-fest@^0.8.0: +type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" - integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -6681,13 +6460,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8= - dependencies: - os-homedir "^1.0.0" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -6715,6 +6487,11 @@ uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -6889,10 +6666,10 @@ write-pkg@^3.1.0: sort-keys "^2.0.0" write-json-file "^2.2.0" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: mkdirp "^0.5.1" @@ -6901,7 +6678,7 @@ xmldom@0.1.19: resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" integrity sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw= -xtend@^4.0.0, xtend@~4.0.1: +xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== From 516f009c191f845eb7afa057fcfb6b20362f9e65 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 10:31:10 +0200 Subject: [PATCH 115/165] Fix incorrect visualization of pattern string in HTML --- .../controllers/QuadPatternFragmentsController.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js index cc0e2ae0..e39e578a 100644 --- a/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js +++ b/packages/feature-qpf/lib/controllers/QuadPatternFragmentsController.js @@ -71,18 +71,18 @@ class QuadPatternFragmentsController extends Controller { let subject = query.subject, predicate = query.predicate, object = query.object, graph = ''; // Serialize subject and predicate IRIs or variables - subject = subject ? '<' + query.subject + '> ' : '?s '; - predicate = predicate ? '<' + query.predicate + '> ' : '?p '; + subject = subject ? '<' + query.subject.value + '> ' : '?s '; + predicate = predicate ? '<' + query.predicate.value + '> ' : '?p '; // Serialize object IRI, literal, or variable if (query.object && query.object.termType === 'NamedNode') - object = '<' + query.object + '> '; + object = '<' + query.object.value + '> '; else - object = query.object ? query.object : '?o'; + object = query.object ? query.object.value : '?o'; // Serialize graph IRI default graph, or variable if (supportsQuads) { graph = query.graph; - if (graph === '') graph = ' @default'; - else if (graph) graph = ' <' + graph + '>'; + if (graph && graph.termType === 'DefaultGraph') graph = ' @default'; + else if (graph) graph = ' <' + graph.value + '>'; else graph = ' ?g'; } // Join them in a pattern From 45fd2ca63283ec51c8cf93147a755de254c1f579 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 10:43:50 +0200 Subject: [PATCH 116/165] Fix sources querying for all graphs even if QPF is disabled --- packages/core/lib/datasources/Datasource.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index 84d149fc..eceaea6f 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -121,6 +121,10 @@ class Datasource extends EventEmitter { if (query.graph && query.graph.value.indexOf(blankNodePrefix) === 0) query.graph = this.dataFactory.blankNode(query.graph.value.substr(blankNodePrefixLength)); + // Force the default graph if QPF support is disable + if (!this._supportsQuads) + query.graph = this.dataFactory.defaultGraph(); + // If a custom default graph was set, query it as the default graph if (this._graph && query.graph && query.graph.value in this._queryGraphReplacements) query.graph = stringToTerm(this._queryGraphReplacements[query.graph.value], this.dataFactory); From 747b6adf1e049b25889f1e4c5b40c239cd528fdc Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 10:44:12 +0200 Subject: [PATCH 117/165] Disable QPF support for datasources in migration tool --- packages/server/bin/ldf-server-migrate-config-3x | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x index 27626eed..95fec242 100755 --- a/packages/server/bin/ldf-server-migrate-config-3x +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -73,6 +73,7 @@ function migrateConfig(configFile, updateFile) { datasourcesNew.push({ '@id': datasourcePathToId(datasourcePath), '@type': datasourceOld.type, + 'quads': false, // QPF did not exist before 3.x, so ensure the existing datasources keep their current semantics 'datasourcePath': datasourcePath, 'datasourceTitle': datasourceOld.title, ... datasourceOld.description ? { datasourceDescription: datasourceOld.description } : {}, From 1d96803727877562aff52479f22a66285a0f385b Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 10:45:37 +0200 Subject: [PATCH 118/165] Bump to release version v3.0.1 --- CHANGELOG.md | 10 ++++++++++ lerna.json | 2 +- packages/core/package.json | 2 +- packages/datasource-composite/package.json | 4 ++-- packages/datasource-hdt/package.json | 4 ++-- packages/datasource-jsonld/package.json | 4 ++-- packages/datasource-n3/package.json | 4 ++-- packages/datasource-sparql/package.json | 4 ++-- packages/feature-memento/package.json | 4 ++-- packages/feature-qpf/package.json | 4 ++-- packages/feature-summary/package.json | 4 ++-- packages/feature-webid/package.json | 4 ++-- packages/server/package.json | 20 ++++++++++---------- 13 files changed, 40 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 060df774..95f05401 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.1](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.0...v3.0.1) - 2020-04-10 + +### Changed +* [Disable QPF support for datasources in migration tool](https://github.com/LinkedDataFragments/Server.js/commit/747b6adf1e049b25889f1e4c5b40c239cd528fdc) + +### Fixed +* [Fix sources querying for all graphs even if QPF is disabled](https://github.com/LinkedDataFragments/Server.js/commit/45fd2ca63283ec51c8cf93147a755de254c1f579) +* [Fix incorrect visualization of pattern string in HTML](https://github.com/LinkedDataFragments/Server.js/commit/516f009c191f845eb7afa057fcfb6b20362f9e65) + ## [v3.0.0](https://github.com/LinkedDataFragments/Server.js/compare/v2.2.5...v3.0.0) - 2020-04-08 diff --git a/lerna.json b/lerna.json index 092e41de..663b63ee 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.0", + "version": "3.0.1", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/core/package.json b/packages/core/package.json index cc9c498e..6b4469f1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/core", "description": "Linked Data Fragments Server - Core", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", "lsd:components": "components/components.jsonld", "lsd:contexts": { diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 8f89816a..0d4a464a 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-composite", "description": "Linked Data Fragments Server - Composite Datasource", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" } } diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index f6938a5e..a7473641 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,7 +35,7 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" }, "optionalDependencies": { "hdt": "^2.2.2" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 74c9271c..8a867e32 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-jsonld", "description": "Linked Data Fragments Server - JSON-LD Datasource", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" } } diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 367fed21..e5a1fc94 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" } } diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index b10a04d0..287bdfec 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-sparql", "description": "Linked Data Fragments Server - SPARQL Datasource", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" } } diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index a7a6a0b5..00bc480e 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-memento", "description": "Linked Data Fragments Server - Memento", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" } } diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index f1348b7b..df958a8a 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-qpf", "description": "Linked Data Fragments Server - Quad Pattern Fragments", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" } } diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index c404ef23..dc7218c7 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-summary", "description": "Linked Data Fragments Server - Memento", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -40,6 +40,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" } } diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index 0288fb01..7853133c 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-webid", "description": "Linked Data Fragments Server - WebID", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.0" + "@ldf/core": "^3.0.1" } } diff --git a/packages/server/package.json b/packages/server/package.json index 3b60009d..9e5ee36c 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.0", + "version": "3.0.1", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" @@ -34,15 +34,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "@ldf/core": "^3.0.0", - "@ldf/datasource-composite": "^3.0.0", - "@ldf/datasource-hdt": "^3.0.0", - "@ldf/datasource-jsonld": "^3.0.0", - "@ldf/datasource-n3": "^3.0.0", - "@ldf/datasource-sparql": "^3.0.0", - "@ldf/feature-memento": "^3.0.0", - "@ldf/feature-qpf": "^3.0.0", - "@ldf/feature-summary": "^3.0.0", + "@ldf/core": "^3.0.1", + "@ldf/datasource-composite": "^3.0.1", + "@ldf/datasource-hdt": "^3.0.1", + "@ldf/datasource-jsonld": "^3.0.1", + "@ldf/datasource-n3": "^3.0.1", + "@ldf/datasource-sparql": "^3.0.1", + "@ldf/feature-memento": "^3.0.1", + "@ldf/feature-qpf": "^3.0.1", + "@ldf/feature-summary": "^3.0.1", "@ldf/preset-qpf": "^3.0.0" } } From 34c0215d294f4cd8d3a8de1658decbe915ce63aa Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:01:36 +0200 Subject: [PATCH 119/165] Fix migration tool handling relative paths incorrectly --- packages/server/bin/ldf-server-migrate-config-3x | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x index 95fec242..05ffca38 100755 --- a/packages/server/bin/ldf-server-migrate-config-3x +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -1,7 +1,6 @@ #!/usr/bin/env node /* Migrates an LDF server config file to the new 3.x.x format. */ const fs = require('fs'); -const path = require('path'); let args = process.argv.slice(2); if (!(args.length === 1 || (args.length === 2 && args[1] === '--apply'))) { @@ -19,7 +18,7 @@ function migrateConfig(configFile, updateFile) { 'import': 'preset-qpf:config-defaults.json', }; - const configOld = JSON.parse(fs.readFileSync(path.join(__dirname, configFile))); + const configOld = JSON.parse(fs.readFileSync(configFile)); let config = configOld; if ('@context' in configOld) { From 68af9e7e0bd3a44316bf5e62bfeb99c4f3393f13 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:02:27 +0200 Subject: [PATCH 120/165] Bump to release version v3.0.2 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/server/package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95f05401..800f5e0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.2](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.1...v3.0.2) - 2020-04-10 + +### Fixed +* [Fix migration tool handling relative paths incorrectly](https://github.com/LinkedDataFragments/Server.js/commit/34c0215d294f4cd8d3a8de1658decbe915ce63aa) + ## [v3.0.1](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.0...v3.0.1) - 2020-04-10 diff --git a/lerna.json b/lerna.json index 663b63ee..1545d036 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.1", + "version": "3.0.2", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/server/package.json b/packages/server/package.json index 9e5ee36c..74356210 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.1", + "version": "3.0.2", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" From 9ba4c2f077f8800c1a5f2b06935641c3b1ada513 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:20:09 +0200 Subject: [PATCH 121/165] Fix migration tool failing to include datasource metadata --- packages/server/bin/ldf-server-migrate-config-3x | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x index 05ffca38..35a9e89a 100755 --- a/packages/server/bin/ldf-server-migrate-config-3x +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -78,10 +78,10 @@ function migrateConfig(configFile, updateFile) { ... datasourceOld.description ? { datasourceDescription: datasourceOld.description } : {}, ... datasourceOld.license ? { license: datasourceOld.license } : {}, ... datasourceOld.licenseUrl ? { licenseUrl: datasourceOld.licenseUrl } : {}, - ... datasourceOld.copyright ? { licenseUrl: datasourceOld.copyright } : {}, - ... datasourceOld.homepage ? { licenseUrl: datasourceOld.homepage } : {}, - ... datasourceOld.hide ? { licenseUrl: datasourceOld.hide } : {}, - ... datasourceOld.enabled ? { licenseUrl: datasourceOld.enabled } : {}, + ... datasourceOld.copyright ? { copyright: datasourceOld.copyright } : {}, + ... datasourceOld.homepage ? { homepage: datasourceOld.homepage } : {}, + ... datasourceOld.hide ? { hide: datasourceOld.hide } : {}, + ... datasourceOld.enabled ? { enabled: datasourceOld.enabled } : {}, ... settings, }); } From 29e699fb83dca04b6eca5d10625db61d211a8e7c Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:20:42 +0200 Subject: [PATCH 122/165] Bump to release version v3.0.3 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/server/package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 800f5e0e..ace1d411 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.3](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.2...v3.0.3) - 2020-04-10 + +### Fixed +* [Fix migration tool failing to include datasource metadata](https://github.com/LinkedDataFragments/Server.js/commit/9ba4c2f077f8800c1a5f2b06935641c3b1ada513) + ## [v3.0.2](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.1...v3.0.2) - 2020-04-10 diff --git a/lerna.json b/lerna.json index 1545d036..74587a7c 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.2", + "version": "3.0.3", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/server/package.json b/packages/server/package.json index 74356210..7ea0eea2 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.2", + "version": "3.0.3", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" From b298789619fac911db89f1f00b736652c1bdc0cb Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:28:29 +0200 Subject: [PATCH 123/165] Fix hide and enabled config entries not being migrated properly --- packages/server/bin/ldf-server-migrate-config-3x | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x index 35a9e89a..40e6d1bc 100755 --- a/packages/server/bin/ldf-server-migrate-config-3x +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -80,8 +80,8 @@ function migrateConfig(configFile, updateFile) { ... datasourceOld.licenseUrl ? { licenseUrl: datasourceOld.licenseUrl } : {}, ... datasourceOld.copyright ? { copyright: datasourceOld.copyright } : {}, ... datasourceOld.homepage ? { homepage: datasourceOld.homepage } : {}, - ... datasourceOld.hide ? { hide: datasourceOld.hide } : {}, - ... datasourceOld.enabled ? { enabled: datasourceOld.enabled } : {}, + ... ('hide' in datasourceOld) ? { hide: datasourceOld.hide } : {}, + ... ('enabled' in datasourceOld) ? { enabled: datasourceOld.enabled } : {}, ... settings, }); } From 2e260c560e0c3a75fedf1817690dd7a7dd2d6cca Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:32:58 +0200 Subject: [PATCH 124/165] Remove need for softlinks in N3 datasources This caused problems with packaging. --- packages/datasource-n3/components/Datasource/NQuads.jsonld | 2 +- packages/datasource-n3/components/Datasource/NTriples.jsonld | 2 +- packages/datasource-n3/components/Datasource/Trig.jsonld | 2 +- packages/datasource-n3/components/Datasource/Turtle.jsonld | 2 +- packages/datasource-n3/index.js | 4 ---- packages/datasource-n3/lib/datasources/NQuadsDatasource.js | 1 - packages/datasource-n3/lib/datasources/NTriplesDatasource.js | 1 - packages/datasource-n3/lib/datasources/TrigDatasource.js | 1 - packages/datasource-n3/lib/datasources/TurtleDatasource.js | 1 - 9 files changed, 4 insertions(+), 12 deletions(-) delete mode 120000 packages/datasource-n3/lib/datasources/NQuadsDatasource.js delete mode 120000 packages/datasource-n3/lib/datasources/NTriplesDatasource.js delete mode 120000 packages/datasource-n3/lib/datasources/TrigDatasource.js delete mode 120000 packages/datasource-n3/lib/datasources/TurtleDatasource.js diff --git a/packages/datasource-n3/components/Datasource/NQuads.jsonld b/packages/datasource-n3/components/Datasource/NQuads.jsonld index 0a3a0319..2cae03d1 100644 --- a/packages/datasource-n3/components/Datasource/NQuads.jsonld +++ b/packages/datasource-n3/components/Datasource/NQuads.jsonld @@ -9,7 +9,7 @@ "@id": "ldfdn:Datasource/NQuads", "@type": "Class", "extends": "ldfc:Datasource/Memory", - "requireElement": "datasources.NQuadsDatasource", + "requireElement": "datasources.N3Datasource", "comment": "An NQuadsDatasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" diff --git a/packages/datasource-n3/components/Datasource/NTriples.jsonld b/packages/datasource-n3/components/Datasource/NTriples.jsonld index 2f33444e..5fa9f6ee 100644 --- a/packages/datasource-n3/components/Datasource/NTriples.jsonld +++ b/packages/datasource-n3/components/Datasource/NTriples.jsonld @@ -9,7 +9,7 @@ "@id": "ldfdn:Datasource/NTriples", "@type": "Class", "extends": "ldfc:Datasource/Memory", - "requireElement": "datasources.NTriplesDatasource", + "requireElement": "datasources.N3Datasource", "comment": "An NTriplesDatasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" diff --git a/packages/datasource-n3/components/Datasource/Trig.jsonld b/packages/datasource-n3/components/Datasource/Trig.jsonld index 700124c1..ccb96283 100644 --- a/packages/datasource-n3/components/Datasource/Trig.jsonld +++ b/packages/datasource-n3/components/Datasource/Trig.jsonld @@ -9,7 +9,7 @@ "@id": "ldfdn:Datasource/Trig", "@type": "Class", "extends": "ldfc:Datasource/Memory", - "requireElement": "datasources.TrigDatasource", + "requireElement": "datasources.N3Datasource", "comment": "An TrigDatasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" diff --git a/packages/datasource-n3/components/Datasource/Turtle.jsonld b/packages/datasource-n3/components/Datasource/Turtle.jsonld index 15b8214f..29fa9d16 100644 --- a/packages/datasource-n3/components/Datasource/Turtle.jsonld +++ b/packages/datasource-n3/components/Datasource/Turtle.jsonld @@ -9,7 +9,7 @@ "@id": "ldfdn:Datasource/Turtle", "@type": "Class", "extends": "ldfc:Datasource/Memory", - "requireElement": "datasources.TurtleDatasource", + "requireElement": "datasources.N3Datasource", "comment": "An TurtleDatasource fetches data from Turtle/TriG/N-Triples/N-Quads/N3 documents", "constructorArguments": { "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" diff --git a/packages/datasource-n3/index.js b/packages/datasource-n3/index.js index 90526dbf..bd016f33 100644 --- a/packages/datasource-n3/index.js +++ b/packages/datasource-n3/index.js @@ -4,9 +4,5 @@ module.exports = { datasources: { N3Datasource: require('./lib/datasources/N3Datasource'), - NQuadsDatasource: require('./lib/datasources/NQuadsDatasource'), - NTriplesDatasource: require('./lib/datasources/NTriplesDatasource'), - TrigDatasource: require('./lib/datasources/TrigDatasource'), - TurtleDatasource: require('./lib/datasources/TurtleDatasource'), }, }; diff --git a/packages/datasource-n3/lib/datasources/NQuadsDatasource.js b/packages/datasource-n3/lib/datasources/NQuadsDatasource.js deleted file mode 120000 index 6b45312c..00000000 --- a/packages/datasource-n3/lib/datasources/NQuadsDatasource.js +++ /dev/null @@ -1 +0,0 @@ -N3Datasource.js \ No newline at end of file diff --git a/packages/datasource-n3/lib/datasources/NTriplesDatasource.js b/packages/datasource-n3/lib/datasources/NTriplesDatasource.js deleted file mode 120000 index 6b45312c..00000000 --- a/packages/datasource-n3/lib/datasources/NTriplesDatasource.js +++ /dev/null @@ -1 +0,0 @@ -N3Datasource.js \ No newline at end of file diff --git a/packages/datasource-n3/lib/datasources/TrigDatasource.js b/packages/datasource-n3/lib/datasources/TrigDatasource.js deleted file mode 120000 index 6b45312c..00000000 --- a/packages/datasource-n3/lib/datasources/TrigDatasource.js +++ /dev/null @@ -1 +0,0 @@ -N3Datasource.js \ No newline at end of file diff --git a/packages/datasource-n3/lib/datasources/TurtleDatasource.js b/packages/datasource-n3/lib/datasources/TurtleDatasource.js deleted file mode 120000 index 6b45312c..00000000 --- a/packages/datasource-n3/lib/datasources/TurtleDatasource.js +++ /dev/null @@ -1 +0,0 @@ -N3Datasource.js \ No newline at end of file From b3926e1ca08fe2f05df9e53d4b26f39e98878e64 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:33:57 +0200 Subject: [PATCH 125/165] Bump to release version v3.0.4 --- CHANGELOG.md | 7 +++++++ lerna.json | 2 +- packages/datasource-n3/package.json | 2 +- packages/server/package.json | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ace1d411..3ef1bd1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.4](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.3...v3.0.4) - 2020-04-10 + +### Fixed +* [Remove need for softlinks in N3 datasources](https://github.com/LinkedDataFragments/Server.js/commit/2e260c560e0c3a75fedf1817690dd7a7dd2d6cca) +* [Fix hide and enabled config entries not being migrated properly](https://github.com/LinkedDataFragments/Server.js/commit/b298789619fac911db89f1f00b736652c1bdc0cb) + ## [v3.0.3](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.2...v3.0.3) - 2020-04-10 diff --git a/lerna.json b/lerna.json index 74587a7c..a556b52c 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.3", + "version": "3.0.4", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index e5a1fc94..9bb33e4a 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "3.0.1", + "version": "3.0.4", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", "lsd:components": "components/components.jsonld", "lsd:contexts": { diff --git a/packages/server/package.json b/packages/server/package.json index 7ea0eea2..50ba52a5 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.3", + "version": "3.0.4", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" @@ -38,7 +38,7 @@ "@ldf/datasource-composite": "^3.0.1", "@ldf/datasource-hdt": "^3.0.1", "@ldf/datasource-jsonld": "^3.0.1", - "@ldf/datasource-n3": "^3.0.1", + "@ldf/datasource-n3": "^3.0.4", "@ldf/datasource-sparql": "^3.0.1", "@ldf/feature-memento": "^3.0.1", "@ldf/feature-qpf": "^3.0.1", From bd52749d513732ee74be44af8012cebb6beff02e Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:44:15 +0200 Subject: [PATCH 126/165] Fix HDT source configs not being migrated correctly --- packages/server/bin/ldf-server-migrate-config-3x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x index 40e6d1bc..00dd51e1 100755 --- a/packages/server/bin/ldf-server-migrate-config-3x +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -65,7 +65,7 @@ function migrateConfig(configFile, updateFile) { if (settingsOld) { if ('endpoint' in settingsOld) settings.sparqlEndpoint = settingsOld.endpoint; if ('file' in settingsOld && datasourceOld.type !== 'HdtDatasource') settings.file = settingsOld.file; - if ('file' in settingsOld && datasourceOld.type === 'HdtDatasource') settings.hdtFile = settingsOld.hdtFile; + if ('file' in settingsOld && datasourceOld.type === 'HdtDatasource') settings.hdtFile = settingsOld.file; if ('references' in settingsOld) settings.compose = settingsOld.references.map(datasourcePathToId); } From bf09c363e7c3094e7668b3dc18051bc0489f3ca2 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:53:53 +0200 Subject: [PATCH 127/165] Fix enabled option on datasources being ignored --- packages/core/lib/datasources/Datasource.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index eceaea6f..11abccf9 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -22,6 +22,9 @@ class Datasource extends EventEmitter { this.title = options.title; this.id = options.id; this.hide = options.hide; + this.enabled = options.enabled !== false; + if (this.enabled === false) + this.hide = true; this.description = options.description; this.path = this._datasourcePath; this.url = urlData.baseURLRoot + this._datasourcePath + '#dataset'; @@ -61,6 +64,11 @@ class Datasource extends EventEmitter { // Initialize the datasource asynchronously initialize() { + if (!this.enabled) { + this.initialized = true; + return this.emit('initialized'); + } + try { this._initialize() .then(() => { From af15bf15d6a94f030809c82856c27bd1f5949a68 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 11:54:31 +0200 Subject: [PATCH 128/165] Bump to release version v3.0.5 --- CHANGELOG.md | 7 +++++++ lerna.json | 2 +- packages/core/package.json | 2 +- packages/datasource-composite/package.json | 4 ++-- packages/datasource-hdt/package.json | 4 ++-- packages/datasource-jsonld/package.json | 4 ++-- packages/datasource-n3/package.json | 4 ++-- packages/datasource-sparql/package.json | 4 ++-- packages/feature-memento/package.json | 4 ++-- packages/feature-qpf/package.json | 4 ++-- packages/feature-summary/package.json | 4 ++-- packages/feature-webid/package.json | 4 ++-- packages/server/package.json | 20 ++++++++++---------- 13 files changed, 37 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ef1bd1a..557b13cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.5](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.4...v3.0.5) - 2020-04-10 + +### Fixed +* [Fix enabled option on datasources being ignored](https://github.com/LinkedDataFragments/Server.js/commit/bf09c363e7c3094e7668b3dc18051bc0489f3ca2) +* [Fix HDT source configs not being migrated correctly](https://github.com/LinkedDataFragments/Server.js/commit/bd52749d513732ee74be44af8012cebb6beff02e) + ## [v3.0.4](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.3...v3.0.4) - 2020-04-10 diff --git a/lerna.json b/lerna.json index a556b52c..b6352cef 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.4", + "version": "3.0.5", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/core/package.json b/packages/core/package.json index 6b4469f1..924aebd5 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/core", "description": "Linked Data Fragments Server - Core", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", "lsd:components": "components/components.jsonld", "lsd:contexts": { diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 0d4a464a..fa561c21 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-composite", "description": "Linked Data Fragments Server - Composite Datasource", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" } } diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index a7473641..6869618d 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,7 +35,7 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" }, "optionalDependencies": { "hdt": "^2.2.2" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 8a867e32..7a2f87eb 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-jsonld", "description": "Linked Data Fragments Server - JSON-LD Datasource", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" } } diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 9bb33e4a..eba5719c 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "3.0.4", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" } } diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 287bdfec..15a53d6d 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-sparql", "description": "Linked Data Fragments Server - SPARQL Datasource", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" } } diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 00bc480e..c832c1e3 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-memento", "description": "Linked Data Fragments Server - Memento", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" } } diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index df958a8a..d69cfc3c 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-qpf", "description": "Linked Data Fragments Server - Quad Pattern Fragments", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" } } diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index dc7218c7..250ec49e 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-summary", "description": "Linked Data Fragments Server - Memento", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -40,6 +40,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" } } diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index 7853133c..1a2373d5 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-webid", "description": "Linked Data Fragments Server - WebID", - "version": "3.0.1", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.1" + "@ldf/core": "^3.0.5" } } diff --git a/packages/server/package.json b/packages/server/package.json index 50ba52a5..464f2093 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.4", + "version": "3.0.5", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" @@ -34,15 +34,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "@ldf/core": "^3.0.1", - "@ldf/datasource-composite": "^3.0.1", - "@ldf/datasource-hdt": "^3.0.1", - "@ldf/datasource-jsonld": "^3.0.1", - "@ldf/datasource-n3": "^3.0.4", - "@ldf/datasource-sparql": "^3.0.1", - "@ldf/feature-memento": "^3.0.1", - "@ldf/feature-qpf": "^3.0.1", - "@ldf/feature-summary": "^3.0.1", + "@ldf/core": "^3.0.5", + "@ldf/datasource-composite": "^3.0.5", + "@ldf/datasource-hdt": "^3.0.5", + "@ldf/datasource-jsonld": "^3.0.5", + "@ldf/datasource-n3": "^3.0.5", + "@ldf/datasource-sparql": "^3.0.5", + "@ldf/feature-memento": "^3.0.5", + "@ldf/feature-qpf": "^3.0.5", + "@ldf/feature-summary": "^3.0.5", "@ldf/preset-qpf": "^3.0.0" } } From 8a54d95c5b67ad09ab626a678388995df366db02 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 12:06:41 +0200 Subject: [PATCH 129/165] Fix datasource descriptions being migrated incorrectly --- packages/server/bin/ldf-server-migrate-config-3x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x index 00dd51e1..f1fe0b1d 100755 --- a/packages/server/bin/ldf-server-migrate-config-3x +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -75,7 +75,7 @@ function migrateConfig(configFile, updateFile) { 'quads': false, // QPF did not exist before 3.x, so ensure the existing datasources keep their current semantics 'datasourcePath': datasourcePath, 'datasourceTitle': datasourceOld.title, - ... datasourceOld.description ? { datasourceDescription: datasourceOld.description } : {}, + ... datasourceOld.description ? { description: datasourceOld.description } : {}, ... datasourceOld.license ? { license: datasourceOld.license } : {}, ... datasourceOld.licenseUrl ? { licenseUrl: datasourceOld.licenseUrl } : {}, ... datasourceOld.copyright ? { copyright: datasourceOld.copyright } : {}, From fcc5e2ea693b40cfd0038d57c9f881093854b254 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 12:07:28 +0200 Subject: [PATCH 130/165] Bump to release version v3.0.6 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/server/package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 557b13cb..d25c656b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.6](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.5...v3.0.6) - 2020-04-10 + +### Fixed +* [Fix datasource descriptions being migrated incorrectly](https://github.com/LinkedDataFragments/Server.js/commit/8a54d95c5b67ad09ab626a678388995df366db02) + ## [v3.0.5](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.4...v3.0.5) - 2020-04-10 diff --git a/lerna.json b/lerna.json index b6352cef..3e1c6b22 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.5", + "version": "3.0.6", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/server/package.json b/packages/server/package.json index 464f2093..77c85bfa 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.5", + "version": "3.0.6", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" From 6c53fe24b64ab18ae5de4fd9850d1749dd997f8a Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 10 Apr 2020 12:17:51 +0200 Subject: [PATCH 131/165] Update links to TPF/QPF specs --- README.md | 5 +++-- packages/feature-qpf/README.md | 4 +++- packages/preset-qpf/README.md | 2 +- packages/server/README.md | 8 +++++--- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0fa89ada..52d185c5 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ is that they are either so powerful that their servers suffer from low availabil ([as is the case with SPARQL](http://sw.deri.org/~aidanh/docs/epmonitorISWC.pdf)), or either don't allow efficient querying. -Instead, this server offers Quad Pattern Fragments (a.k.a. **[Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)**). +Instead, this server offers [Quad Pattern Fragments](https://linkeddatafragments.org/specification/quad-pattern-fragments/) +(a.k.a. **[Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/)**). Each Quad Pattern Fragment offers: - **data** that corresponds to a _quad/triple pattern_ @@ -107,7 +108,7 @@ The following modules are available: * [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Shared functionality for LDF servers. * [`@ldf/server`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/server): An LDF server with Quad/Triple Pattern Fragments support. * [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/preset-qpf): Configuration presets for Quad/Triple Pattern Fragments servers. -* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). +* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables [Quad Pattern Fragments](https://linkeddatafragments.org/specification/quad-pattern-fragments/) (a.k.a. [Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/)). * [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. * [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). * [`@ldf/feature-webid`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-webid): Feature that enables authenticated requests from clients with WebID. diff --git a/packages/feature-qpf/README.md b/packages/feature-qpf/README.md index 0d151279..8f46998e 100644 --- a/packages/feature-qpf/README.md +++ b/packages/feature-qpf/README.md @@ -3,7 +3,9 @@ [![npm version](https://badge.fury.io/js/%40ldf%2Ffeature-qpf.svg)](https://www.npmjs.com/package/@ldf/feature-qpf) -This module adds Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +This module adds [Quad Pattern Fragments](https://linkeddatafragments.org/specification/quad-pattern-fragments/) +(a.k.a. [Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/)) +support to the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). _This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ diff --git a/packages/preset-qpf/README.md b/packages/preset-qpf/README.md index 84b24cb4..10baedf7 100644 --- a/packages/preset-qpf/README.md +++ b/packages/preset-qpf/README.md @@ -12,7 +12,7 @@ If you just want to run a QPF server, you can make use of [`@ldf/server`](https: Concretely, it configures the following packages: * [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Core package of LDF servers. -* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). +* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables [Quad Pattern Fragments](https://linkeddatafragments.org/specification/quad-pattern-fragments/) (a.k.a. [Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/)). * [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. * [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). * [`@ldf/datasource-hdt`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt): Datasource that allows HDT files to be loaded. diff --git a/packages/server/README.md b/packages/server/README.md index 1234e9c7..d7329550 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -4,7 +4,8 @@ [![npm version](https://badge.fury.io/js/%40ldf%2Fserver.svg)](https://www.npmjs.com/package/@ldf/server) [![Docker Pulls](https://img.shields.io/docker/pulls/linkeddatafragments/server.svg)](https://hub.docker.com/r/linkeddatafragments/server/) -A Linked Data Fragments server with Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)) support. +A Linked Data Fragments server with [Quad Pattern Fragments](https://linkeddatafragments.org/specification/quad-pattern-fragments/) +(a.k.a. [Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/)) support. _This package has been renamed from `ldf-server` to `@ldf/server`._ _Find more information about migrating from `ldf-server` 2.x.x [on our wiki](https://github.com/LinkedDataFragments/Server.js/wiki/Release-3.0.0)._ @@ -24,7 +25,8 @@ is that they are either so powerful that their servers suffer from low availabil ([as is the case with SPARQL](http://sw.deri.org/~aidanh/docs/epmonitorISWC.pdf)), or either don't allow efficient querying. -Instead, this server offers Quad Pattern Fragments (a.k.a. **[Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)**). +Instead, this server offers [Quad Pattern Fragments](https://linkeddatafragments.org/specification/quad-pattern-fragments/) +(a.k.a. [Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/)). Each Quad Pattern Fragment offers: - **data** that corresponds to a _quad/triple pattern_ @@ -222,7 +224,7 @@ you can make use of [`@ldf/preset-qpf`](https://github.com/LinkedDataFragments/S Concretely, it configures the following packages: * [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Shared functionality for LDF servers. -* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables Quad Pattern Fragments (a.k.a. [Triple Pattern Fragments](http://www.hydra-cg.com/spec/latest/triple-pattern-fragments/)). +* [`@ldf/feature-qpf`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-qpf): Feature that enables [Quad Pattern Fragments](https://linkeddatafragments.org/specification/quad-pattern-fragments/) (a.k.a. [Triple Pattern Fragments](https://linkeddatafragments.org/specification/triple-pattern-fragments/)). * [`@ldf/feature-summary`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-summary): Feature that adds summaries to datasources. * [`@ldf/feature-memento`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-memento): Feature that enables datetime negotiation using the [Memento Protocol](http://mementoweb.org/about/). * [`@ldf/datasource-hdt`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt): Datasource that allows HDT files to be loaded. From cf8ee9e9586a0643fde5619b93098a11035b7c78 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 14 Apr 2020 15:26:21 +0200 Subject: [PATCH 132/165] Fix blank node prefixes in datasources not being relative to base --- packages/core/lib/UrlData.js | 1 + packages/core/lib/datasources/Datasource.js | 17 +++++++---------- .../test/datasources/HdtDatasource-test.js | 3 ++- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/core/lib/UrlData.js b/packages/core/lib/UrlData.js index 26ffc700..07ced698 100644 --- a/packages/core/lib/UrlData.js +++ b/packages/core/lib/UrlData.js @@ -11,6 +11,7 @@ class UrlData { this.baseURLPath = this.baseURL.substr(this.baseURLRoot.length); this.blankNodePath = this.baseURLRoot ? '/.well-known/genid/' : ''; this.blankNodePrefix = this.blankNodePath ? this.baseURLRoot + this.blankNodePath : 'genid:'; + this.blankNodePrefixLength = this.blankNodePrefix.length; this.assetsPath = this.baseURLPath + 'assets/' || options.assetsPath; this.protocol = options.protocol; if (!this.protocol) { diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index 11abccf9..61838799 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -14,10 +14,9 @@ class Datasource extends EventEmitter { // Set the options options = options || {}; - let urlData = options.urlData || new UrlData(); + this.urlData = options.urlData || new UrlData(); let path = (options.path || '').replace(/^\//, ''); - this._datasourcePath = urlData.baseURLPath + encodeURI(path); - this._blankNodePrefix = urlData.blankNodePath || 'genid:'; + this._datasourcePath = this.urlData.baseURLPath + encodeURI(path); this._skolemizeBlacklist = options.skolemizeBlacklist || {}; this.title = options.title; this.id = options.id; @@ -27,14 +26,12 @@ class Datasource extends EventEmitter { this.hide = true; this.description = options.description; this.path = this._datasourcePath; - this.url = urlData.baseURLRoot + this._datasourcePath + '#dataset'; + this.url = this.urlData.baseURLRoot + this._datasourcePath + '#dataset'; this.license = options.license; this.licenseUrl = options.licenseUrl; this.copyright = options.copyright; this.homepage = options.homepage; this._request = options.request || require('request'); - this._blankNodePrefix = options.blankNodePrefix || this._blankNodePrefix; - this._blankNodePrefixLength = this._blankNodePrefix.length; this.dataFactory = options.dataFactory; if (options.graph) { this._graph = this.dataFactory.namedNode(options.graph); @@ -121,12 +118,12 @@ class Datasource extends EventEmitter { query = { ...query }; // Translate blank nodes IRIs in the query to blank nodes - let blankNodePrefix = this._blankNodePrefix, blankNodePrefixLength = this._blankNodePrefixLength; - if (query.subject && query.subject.value.indexOf(blankNodePrefix) === 0) + let blankNodePrefix = this.urlData.blankNodePrefix, blankNodePrefixLength = this.urlData.blankNodePrefixLength; + if (query.subject && query.subject.termType === 'NamedNode' && query.subject.value.indexOf(blankNodePrefix) === 0) query.subject = this.dataFactory.blankNode(query.subject.value.substr(blankNodePrefixLength)); - if (query.object && query.object.value.indexOf(blankNodePrefix) === 0) + if (query.object && query.object.termType === 'NamedNode' && query.object.value.indexOf(blankNodePrefix) === 0) query.object = this.dataFactory.blankNode(query.object.value.substr(blankNodePrefixLength)); - if (query.graph && query.graph.value.indexOf(blankNodePrefix) === 0) + if (query.graph && query.graph.termType === 'NamedNode' && query.graph.value.indexOf(blankNodePrefix) === 0) query.graph = this.dataFactory.blankNode(query.graph.value.substr(blankNodePrefixLength)); // Force the default graph if QPF support is disable diff --git a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js index a824520e..eee9169f 100644 --- a/packages/datasource-hdt/test/datasources/HdtDatasource-test.js +++ b/packages/datasource-hdt/test/datasources/HdtDatasource-test.js @@ -2,6 +2,7 @@ let HdtDatasource = require('../../').datasources.HdtDatasource; let Datasource = require('@ldf/core').datasources.Datasource, + UrlData = require('@ldf/core').UrlData, path = require('path'), dataFactory = require('n3').DataFactory, RdfString = require('rdf-string'); @@ -149,7 +150,7 @@ describe('HdtDatasource', () => { datasource = new HdtDatasource({ dataFactory, file: exampleHdtFileWithBlanks, - blankNodePrefix: 'http://example.org/.well-known/genid/', + urlData: new UrlData({ baseURL: 'http://example.org/' }), }); datasource.initialize(); datasource.on('initialized', done); From 6cd5b59c6ba8a7dc1e7ecc7072d90bdfab492849 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 14 Apr 2020 15:28:57 +0200 Subject: [PATCH 133/165] Bump to release version v3.0.7 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/core/package.json | 2 +- packages/datasource-composite/package.json | 4 ++-- packages/datasource-hdt/package.json | 4 ++-- packages/datasource-jsonld/package.json | 4 ++-- packages/datasource-n3/package.json | 4 ++-- packages/datasource-sparql/package.json | 4 ++-- packages/feature-memento/package.json | 4 ++-- packages/feature-qpf/package.json | 4 ++-- packages/feature-summary/package.json | 4 ++-- packages/feature-webid/package.json | 4 ++-- packages/server/package.json | 20 ++++++++++---------- 13 files changed, 36 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d25c656b..111fe74f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.7](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.6...v3.0.7) - 2020-04-14 + +### Fixed +* [Fix blank node prefixes in datasources not being relative to base](https://github.com/LinkedDataFragments/Server.js/commit/cf8ee9e9586a0643fde5619b93098a11035b7c78) + ## [v3.0.6](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.5...v3.0.6) - 2020-04-10 diff --git a/lerna.json b/lerna.json index 3e1c6b22..4da93746 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.6", + "version": "3.0.7", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/core/package.json b/packages/core/package.json index 924aebd5..2fa4a373 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/core", "description": "Linked Data Fragments Server - Core", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", "lsd:components": "components/components.jsonld", "lsd:contexts": { diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index fa561c21..33a81684 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-composite", "description": "Linked Data Fragments Server - Composite Datasource", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" } } diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index 6869618d..51f4d322 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,7 +35,7 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" }, "optionalDependencies": { "hdt": "^2.2.2" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 7a2f87eb..696ee232 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-jsonld", "description": "Linked Data Fragments Server - JSON-LD Datasource", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" } } diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index eba5719c..f6c542b8 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" } } diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 15a53d6d..266a3148 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-sparql", "description": "Linked Data Fragments Server - SPARQL Datasource", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" } } diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index c832c1e3..f8e23a36 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-memento", "description": "Linked Data Fragments Server - Memento", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" } } diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index d69cfc3c..b0b483da 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-qpf", "description": "Linked Data Fragments Server - Quad Pattern Fragments", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" } } diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index 250ec49e..1486aa76 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-summary", "description": "Linked Data Fragments Server - Memento", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -40,6 +40,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" } } diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index 1a2373d5..8fc1d14c 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-webid", "description": "Linked Data Fragments Server - WebID", - "version": "3.0.5", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.5" + "@ldf/core": "^3.0.7" } } diff --git a/packages/server/package.json b/packages/server/package.json index 77c85bfa..9f142902 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.6", + "version": "3.0.7", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" @@ -34,15 +34,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "@ldf/core": "^3.0.5", - "@ldf/datasource-composite": "^3.0.5", - "@ldf/datasource-hdt": "^3.0.5", - "@ldf/datasource-jsonld": "^3.0.5", - "@ldf/datasource-n3": "^3.0.5", - "@ldf/datasource-sparql": "^3.0.5", - "@ldf/feature-memento": "^3.0.5", - "@ldf/feature-qpf": "^3.0.5", - "@ldf/feature-summary": "^3.0.5", + "@ldf/core": "^3.0.7", + "@ldf/datasource-composite": "^3.0.7", + "@ldf/datasource-hdt": "^3.0.7", + "@ldf/datasource-jsonld": "^3.0.7", + "@ldf/datasource-n3": "^3.0.7", + "@ldf/datasource-sparql": "^3.0.7", + "@ldf/feature-memento": "^3.0.7", + "@ldf/feature-qpf": "^3.0.7", + "@ldf/feature-summary": "^3.0.7", "@ldf/preset-qpf": "^3.0.0" } } From 58d62a524e0255dc981ec5cff0868b2f41082623 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Tue, 28 Apr 2020 15:53:18 +0200 Subject: [PATCH 134/165] Add more Node versions to Travis --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index c75de4ee..43174fb4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,8 @@ matrix: include: - node_js: '10' - node_js: '12' + - node_js: '14' + - node_js: 'lts/*' - node_js: 'node' env: DOCUMENTATION_BUILD=true DOCKER_BUILD=true install: yarn install --pure-lockfile From c00788552d720c75dfbab039a40c742a5cf9e9aa Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Wed, 29 Apr 2020 14:42:19 +0200 Subject: [PATCH 135/165] Use Travis preset --- .travis.yml | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 43174fb4..f0751e35 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,20 +1,12 @@ sudo: required services: - docker -language: node_js -matrix: - include: - - node_js: '10' - - node_js: '12' - - node_js: '14' - - node_js: 'lts/*' - - node_js: 'node' - env: DOCUMENTATION_BUILD=true DOCKER_BUILD=true +import: rubensworks/travis-presets:node-base.yml@master install: yarn install --pure-lockfile script: - yarn run lint - yarn test - - if [ "$DOCKER_BUILD" = "true" ]; then ( sh -c "`curl -fsSl https://raw.githubusercontent.com/rubensworks/lerna-docker/master/install.sh`" && ~/.lerna-docker/bin/lerna-docker linkeddatafragments build ) fi + - if [ "$NODE_MAIN" = "true" ]; then ( sh -c "`curl -fsSl https://raw.githubusercontent.com/rubensworks/lerna-docker/master/install.sh`" && ~/.lerna-docker/bin/lerna-docker linkeddatafragments build ) fi after_success: - yarn run coveralls env: @@ -36,7 +28,7 @@ deploy: on: tags: false branch: master - node_js: "node" + condition: $NODE_MAIN = true os: "linux" - provider: script skip-cleanup: true @@ -44,5 +36,5 @@ deploy: on: tags: true all_branches: true - node_js: "node" + condition: $NODE_MAIN = true os: "linux" From ea3e7632cfd47e0ae9015f4715a15d40c61e87c8 Mon Sep 17 00:00:00 2001 From: dreeki Date: Mon, 11 May 2020 08:05:15 +0200 Subject: [PATCH 136/165] Fix crash due to changed function name in N3.js Co-authored-by: Andreas --- packages/datasource-n3/lib/datasources/N3Datasource.js | 2 +- packages/datasource-n3/package.json | 2 +- yarn.lock | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/datasource-n3/lib/datasources/N3Datasource.js b/packages/datasource-n3/lib/datasources/N3Datasource.js index 4ce453d9..1f719ff1 100644 --- a/packages/datasource-n3/lib/datasources/N3Datasource.js +++ b/packages/datasource-n3/lib/datasources/N3Datasource.js @@ -16,7 +16,7 @@ class N3Datasource extends MemoryDatasource { // Retrieves all quads from the document _getAllQuads(addQuad, done) { let document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }, done); - N3Parser._resetBlankNodeIds(); + N3Parser._resetBlankNodePrefix(); new N3Parser({ factory: this.dataFactory }).parse(document, (error, quad) => { quad ? addQuad(quad) : done(error); }); diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index f6c542b8..2794dbf5 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -29,7 +29,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "n3": "^1.3.5" + "n3": "^1.3.6" }, "peerDependencies": { "@ldf/core": "^3.0.0" diff --git a/yarn.lock b/yarn.lock index 50df7910..29ada5d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4437,6 +4437,11 @@ n3@^1.3.5: resolved "https://registry.yarnpkg.com/n3/-/n3-1.3.5.tgz#ea00062b64fef71dc3a92befc00413a733ef1029" integrity sha512-McWb1tCWGGAmHeGEakqZj/UqxQR9cpEYZ/JivBj59YfiOAuaIWZxu0B+jnhbCwCZ2AsxdgQ5Dq8fehIJpYQaMQ== +n3@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/n3/-/n3-1.3.6.tgz#02766d11dd4afe4b3546555a00a095027d6e0256" + integrity sha512-EPaniuSPI+f66F8MP3GPXI3CA4cgSaA688PGUEs1Q5qyeAf/yIhe/8WbDV5+Hnmn8/ewcP7qYY6vfVnjbL5jcg== + nan@^2.14.0: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" From 655103f5491df79e18a3209c360bd7b8aea90d2b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 May 2020 08:14:23 +0200 Subject: [PATCH 137/165] Update dependency eslint to v7 (#125) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 159 +++++++++++++++++++++++++++++---------------------- 2 files changed, 91 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index 93a8d403..921a8177 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "devDependencies": { "chai": "^4.0.0", "coveralls": "^3.0.9", - "eslint": "^6.8.0", + "eslint": "^7.0.0", "lerna": "^3.4.0", "manual-git-changelog": "^1.0.1", "mocha": "^7.0.0", diff --git a/yarn.lock b/yarn.lock index 29ada5d7..2cd58476 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1603,7 +1603,7 @@ chai@^4.0.0: pathval "^1.1.0" type-detect "^4.0.5" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1620,6 +1620,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1993,7 +2001,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -2013,6 +2021,15 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" + integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -2112,7 +2129,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -2351,10 +2368,10 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== dependencies: eslint-visitor-keys "^1.1.0" @@ -2363,22 +2380,22 @@ eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.0.0.tgz#c35dfd04a4372110bd78c69a8d79864273919a08" + integrity sha512-qY1cwdOxMONHJfGqw52UOpZDeqXy8xmD0u8CT6jIstil72jkhURC704W8CFyTPDPllz4z4lu0Ql1+07PG/XdIg== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" + chalk "^4.0.0" + cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" - eslint-utils "^1.4.3" + eslint-utils "^2.0.0" eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + espree "^7.0.0" + esquery "^1.2.0" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" @@ -2391,25 +2408,24 @@ eslint@^6.8.0: is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" + levn "^0.4.1" lodash "^4.17.14" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.3" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" table "^5.2.3" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.0.0.tgz#8a7a60f218e69f120a842dc24c5a88aa7748a74e" + integrity sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw== dependencies: acorn "^7.1.1" acorn-jsx "^5.2.0" @@ -2420,12 +2436,12 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" - integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^5.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -2439,10 +2455,10 @@ estraverse@^4.1.0, estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== esutils@^2.0.2: version "2.0.3" @@ -2562,7 +2578,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -3884,13 +3900,13 @@ lerna@^3.4.0: import-local "^2.0.0" npmlog "^4.1.2" -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" + prelude-ls "^1.2.1" + type-check "~0.4.0" load-json-file@^1.0.0: version "1.1.0" @@ -4776,17 +4792,17 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" os-homedir@^1.0.0: version "1.0.2" @@ -5124,10 +5140,10 @@ pre-commit@^1.1.3: spawn-sync "^1.0.15" which "1.2.x" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== process-nextick-args@~2.0.0: version "2.0.1" @@ -5404,10 +5420,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== relative-to-absolute-iri@^1.0.5: version "1.0.5" @@ -5651,11 +5667,16 @@ samsam@~1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -6087,7 +6108,7 @@ strip-json-comments@2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@^3.0.1: +strip-json-comments@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== @@ -6330,12 +6351,12 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - prelude-ls "~1.1.2" + prelude-ls "^1.2.1" type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" @@ -6587,7 +6608,7 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== From 88c3ba3bbf2ef59f7693b3843d9d74a608b4313a Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 11 May 2020 08:16:47 +0200 Subject: [PATCH 138/165] Bump to release version v3.0.8 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/datasource-n3/package.json | 2 +- packages/server/package.json | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 111fe74f..a88184a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.8](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.7...v3.0.8) - 2020-05-11 + +### Fixed +* [Fix crash due to changed function name in N3.js](https://github.com/LinkedDataFragments/Server.js/commit/ea3e7632cfd47e0ae9015f4715a15d40c61e87c8) + ## [v3.0.7](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.6...v3.0.7) - 2020-04-14 diff --git a/lerna.json b/lerna.json index 4da93746..854e1ec1 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.7", + "version": "3.0.8", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 2794dbf5..04a10ac0 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "3.0.7", + "version": "3.0.8", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", "lsd:components": "components/components.jsonld", "lsd:contexts": { diff --git a/packages/server/package.json b/packages/server/package.json index 9f142902..be7c215b 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.7", + "version": "3.0.8", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" @@ -38,7 +38,7 @@ "@ldf/datasource-composite": "^3.0.7", "@ldf/datasource-hdt": "^3.0.7", "@ldf/datasource-jsonld": "^3.0.7", - "@ldf/datasource-n3": "^3.0.7", + "@ldf/datasource-n3": "^3.0.8", "@ldf/datasource-sparql": "^3.0.7", "@ldf/feature-memento": "^3.0.7", "@ldf/feature-qpf": "^3.0.7", From ab80f13a1f9484139af380f838f0dec04dfd20dd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 11 Jun 2020 22:26:38 +0000 Subject: [PATCH 139/165] Update dependency mocha to v8 --- package.json | 2 +- yarn.lock | 287 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 175 insertions(+), 114 deletions(-) diff --git a/package.json b/package.json index 921a8177..0071433c 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "eslint": "^7.0.0", "lerna": "^3.4.0", "manual-git-changelog": "^1.0.1", - "mocha": "^7.0.0", + "mocha": "^8.0.0", "nyc": "^15.0.0", "pre-commit": "^1.1.3", "sinon": "^1.17.4", diff --git a/yarn.lock b/yarn.lock index 2cd58476..c65e5703 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1152,10 +1152,10 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^3.2.0: version "3.2.0" @@ -1301,6 +1301,16 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.map@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec" + integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.4" + arrayify-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/arrayify-stream/-/arrayify-stream-1.0.0.tgz#9e8e113d43325c3a44e965c59b5b89d962b9a37f" @@ -1638,10 +1648,10 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== +chokidar@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -1649,9 +1659,9 @@ chokidar@3.3.0: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.2.0" + readdirp "~3.3.0" optionalDependencies: - fsevents "~2.1.1" + fsevents "~2.1.2" chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" @@ -2205,10 +2215,10 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^2.2.2: version "2.2.2" @@ -2324,6 +2334,41 @@ es-abstract@^1.17.0-next.1: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" +es-abstract@^1.17.4: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-get-iterator@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" + integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== + dependencies: + es-abstract "^1.17.4" + has-symbols "^1.0.1" + is-arguments "^1.0.4" + is-map "^2.0.1" + is-set "^2.0.1" + is-string "^1.0.5" + isarray "^2.0.5" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -2635,12 +2680,13 @@ find-cache-dir@^3.2.0: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - locate-path "^3.0.0" + locate-path "^5.0.0" + path-exists "^4.0.0" find-up@^1.0.0: version "1.1.2" @@ -2657,13 +2703,12 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" + locate-path "^3.0.0" flat-cache@^2.0.1: version "2.0.1" @@ -2798,10 +2843,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== function-bind@^1.1.1: version "1.1.1" @@ -2984,19 +3029,7 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@7.1.6, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3530,6 +3563,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" + integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3578,6 +3616,11 @@ is-regex@^1.0.5: dependencies: has "^1.0.3" +is-set@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" + integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== + is-ssh@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" @@ -3595,6 +3638,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-string@^1.0.4, is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -3629,6 +3677,11 @@ isarray@1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -3728,6 +3781,19 @@ istanbul-reports@^3.0.0: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterate-iterator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" + integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== + +iterate-value@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" + integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== + dependencies: + es-get-iterator "^1.0.2" + iterate-iterator "^1.0.1" + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4272,11 +4338,6 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -4333,13 +4394,6 @@ mkdirp@*: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== -mkdirp@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" - integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== - dependencies: - minimist "^1.2.5" - mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -4347,32 +4401,33 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" -mocha@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.1.1.tgz#89fbb30d09429845b1bb893a830bf5771049a441" - integrity sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA== +mocha@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.0.1.tgz#fe01f0530362df271aa8f99510447bc38b88d8ed" + integrity sha512-vefaXfdYI8+Yo8nPZQQi0QO2o+5q9UIMX1jZ1XMmK3+4+CQjc7+B0hPdUeglXiTlr8IHMVRo63IhO9Mzt6fxOg== dependencies: - ansi-colors "3.2.3" + ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.3.0" + chokidar "3.3.1" debug "3.2.6" - diff "3.5.0" + diff "4.0.2" escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" + find-up "4.1.0" + glob "7.1.6" growl "1.10.5" he "1.2.0" js-yaml "3.13.1" log-symbols "3.0.0" minimatch "3.0.4" - mkdirp "0.5.3" - ms "2.1.1" - node-environment-flags "1.0.6" + ms "2.1.2" object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" + promise.allsettled "1.0.2" + serialize-javascript "3.0.0" + strip-json-comments "3.0.1" + supports-color "7.1.0" + which "2.0.2" wide-align "1.1.3" + workerpool "6.0.0" yargs "13.3.2" yargs-parser "13.1.2" yargs-unparser "1.6.0" @@ -4399,12 +4454,7 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.0.0, ms@^2.1.1: +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -4505,14 +4555,6 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" @@ -5075,7 +5117,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4: +picomatch@^2.0.4, picomatch@^2.0.7: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -5175,6 +5217,17 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise.allsettled@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" + integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== + dependencies: + array.prototype.map "^1.0.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + iterate-value "^1.0.0" + promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" @@ -5389,12 +5442,12 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== dependencies: - picomatch "^2.0.4" + picomatch "^2.0.7" redent@^1.0.0: version "1.0.0" @@ -5677,6 +5730,11 @@ semver@^7.2.1: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +serialize-javascript@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.0.0.tgz#492e489a2d77b7b804ad391a5f5d97870952548e" + integrity sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw== + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -6103,16 +6161,21 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== strip-json-comments@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + strong-log-transformer@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -6146,12 +6209,12 @@ supertest@^4.0.0: methods "^1.1.2" superagent "^3.8.3" -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== +supports-color@7.1.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== dependencies: - has-flag "^3.0.0" + has-flag "^4.0.0" supports-color@^5.3.0: version "5.5.0" @@ -6160,13 +6223,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -6580,20 +6636,20 @@ which@1.2.x: dependencies: isexe "^2.0.0" -which@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: +which@2.0.2, which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + wide-align@1.1.3, wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -6618,6 +6674,11 @@ wordwrap@~0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +workerpool@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.0.tgz#85aad67fa1a2c8ef9386a1b43539900f61d03d58" + integrity sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA== + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" From 7ae079452f510f13631770282345688828dcc085 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 18 Jun 2020 15:39:31 +0200 Subject: [PATCH 140/165] Update to HDT-Node 3.x.x --- .../lib/datasources/ExternalHdtDatasource.js | 5 ++--- .../lib/datasources/HdtDatasource.js | 12 ++++-------- packages/datasource-hdt/package.json | 2 +- yarn.lock | 16 ++++++---------- 4 files changed, 13 insertions(+), 22 deletions(-) diff --git a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js index e3194070..0ace5f12 100644 --- a/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/ExternalHdtDatasource.js @@ -5,7 +5,6 @@ let Datasource = require('@ldf/core').datasources.Datasource, fs = require('fs'), path = require('path'), N3Parser = require('n3').Parser, - RdfString = require('rdf-string'), spawn = require('child_process').spawn; let hdtUtility = path.join(__dirname, '../../node_modules/.bin/hdt'); @@ -51,12 +50,12 @@ class ExternalHdtDatasource extends Datasource { ], { stdio: ['ignore', 'pipe', 'ignore'] }); // Parse the result triples hdt.stdout.setEncoding('utf8'); - let parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true, dataFactory = this.dataFactory; + let parser = new N3Parser(), tripleCount = 0, estimatedTotalCount = 0, hasExactCount = true; parser.parse(hdt.stdout, (error, triple) => { if (error) destination.emit('error', new Error('Invalid query result: ' + error.message)); else if (triple) - tripleCount++, destination._push(RdfString.stringQuadToQuad(triple, dataFactory)); + tripleCount++, destination._push(triple); else { // Ensure the estimated total count is as least as large as the number of triples if (tripleCount && estimatedTotalCount < offset + tripleCount) diff --git a/packages/datasource-hdt/lib/datasources/HdtDatasource.js b/packages/datasource-hdt/lib/datasources/HdtDatasource.js index 0276919b..90fe873c 100644 --- a/packages/datasource-hdt/lib/datasources/HdtDatasource.js +++ b/packages/datasource-hdt/lib/datasources/HdtDatasource.js @@ -3,8 +3,7 @@ let Datasource = require('@ldf/core').datasources.Datasource, hdt = require('hdt'), - ExternalHdtDatasource = require('./ExternalHdtDatasource'), - RdfString = require('rdf-string'); + ExternalHdtDatasource = require('./ExternalHdtDatasource'); // Creates a new HdtDatasource class HdtDatasource extends Datasource { @@ -21,7 +20,7 @@ class HdtDatasource extends Datasource { // Loads the HDT datasource async _initialize() { - this._hdtDocument = await hdt.fromFile(this._hdtFile); + this._hdtDocument = await hdt.fromFile(this._hdtFile, { dataFactory: this.dataFactory }); } // Writes the results of the query to the given quad stream @@ -32,10 +31,7 @@ class HdtDatasource extends Datasource { destination.close(); return; } - let dataFactory = this.dataFactory; - this._hdtDocument.searchTriples(query.subject ? RdfString.termToString(query.subject) : null, - query.predicate ? RdfString.termToString(query.predicate) : null, - query.object ? RdfString.termToString(query.object) : null, + this._hdtDocument.searchTriples(query.subject, query.predicate, query.object, { limit: query.limit, offset: query.offset }) .then((result) => { let triples = result.triples, @@ -48,7 +44,7 @@ class HdtDatasource extends Datasource { destination.setProperty('metadata', { totalCount: estimatedTotalCount, hasExactCount: hasExactCount }); // Add the triples to the output for (let i = 0; i < tripleCount; i++) - destination._push(RdfString.stringQuadToQuad(triples[i], dataFactory)); + destination._push(triples[i]); destination.close(); }, (error) => { destination.emit('error', error); }); diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index 51f4d322..4bb0c3a4 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.7" }, "optionalDependencies": { - "hdt": "^2.2.2" + "hdt": "^3.0.1" } } diff --git a/yarn.lock b/yarn.lock index c65e5703..ce3a8619 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3187,14 +3187,15 @@ hasha@^5.0.0: is-stream "^2.0.0" type-fest "^0.8.0" -hdt@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/hdt/-/hdt-2.2.2.tgz#4e570250a42043050a345dc7b84d2838c40fa7ca" - integrity sha512-CaGQ6z/ncMgL9BXBAbBcjAxEZhozfQKXFi/1Ov2gz7WwYH3muv1PGsml7r8FdhtErRf45owKkITEfpJ2h8+64w== +hdt@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/hdt/-/hdt-3.0.1.tgz#2180e7d1942133da083bc1d55ee8aca8e9f6a2c1" + integrity sha512-SMHwNMEVwET8r2cPvIJR3TBUByA73kzD15XANjnfZdxnqSZlvj8FIlHftNBuNMDegM/ClrBNZTcY1BRnc0SE3w== dependencies: minimist "^1.1.0" - n3 "^0.11.2" + n3 "^1.3.5" nan "^2.14.0" + rdf-string "^1.3.1" he@1.2.0: version "1.2.0" @@ -4488,11 +4489,6 @@ mz@^2.5.0: object-assign "^4.0.1" thenify-all "^1.0.0" -n3@^0.11.2: - version "0.11.3" - resolved "https://registry.yarnpkg.com/n3/-/n3-0.11.3.tgz#8e587495240dd21408c2c3aae385ec1651a837f8" - integrity sha512-Hk5GSXBeAZrYoqi+NeS/U0H47Hx0Lzj7K6nLWCZpC9E04iUwEwBcrlMb/5foAli7QF4newPNQQQGgM6IAxTxGg== - n3@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/n3/-/n3-0.9.1.tgz#430b547d58dc7381408c45784dd8058171903932" From 5cb241c838a2a8d812c61b76eaeeb97c07de2b85 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Thu, 18 Jun 2020 15:40:38 +0200 Subject: [PATCH 141/165] Bump to release version v3.0.9 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/datasource-hdt/package.json | 2 +- packages/server/package.json | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a88184a4..cb27b6e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.0.9](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.8...v3.0.9) - 2020-06-18 + +### Changed +* [Update to HDT-Node 3.x.x](https://github.com/LinkedDataFragments/Server.js/commit/7ae079452f510f13631770282345688828dcc085) + ## [v3.0.8](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.7...v3.0.8) - 2020-05-11 diff --git a/lerna.json b/lerna.json index 854e1ec1..ee132ae3 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.8", + "version": "3.0.9", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index 4bb0c3a4..c81f99f2 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", - "version": "3.0.7", + "version": "3.0.9", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt", "lsd:components": "components/components.jsonld", "lsd:contexts": { diff --git a/packages/server/package.json b/packages/server/package.json index be7c215b..2433213a 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.8", + "version": "3.0.9", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" @@ -36,7 +36,7 @@ "dependencies": { "@ldf/core": "^3.0.7", "@ldf/datasource-composite": "^3.0.7", - "@ldf/datasource-hdt": "^3.0.7", + "@ldf/datasource-hdt": "^3.0.9", "@ldf/datasource-jsonld": "^3.0.7", "@ldf/datasource-n3": "^3.0.8", "@ldf/datasource-sparql": "^3.0.7", From b6e3512ec21bba5cfcac79aee52033034d49583b Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 13 Jul 2020 09:20:51 +0200 Subject: [PATCH 142/165] Update to asynciterator v3, Closes #129 --- packages/core/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 2fa4a373..03802ad2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -35,7 +35,7 @@ "node": ">=10.0" }, "dependencies": { - "asynciterator": "^2.0.1", + "asynciterator": "^3.0.0", "componentsjs": "^3.4.0", "forwarded-parse": "^2.1.0", "jsonld-streaming-serializer": "^1.1.0", diff --git a/yarn.lock b/yarn.lock index ce3a8619..e7c21f8d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1353,10 +1353,10 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -asynciterator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-2.0.1.tgz#94d6a059fee4bc63e862ad1edb685c5f5fa26be6" - integrity sha512-aVLheZsDNU5qpOv6jZEHnFv79GfEi+N0w/OLmMmXZfGD8XFFmPsRhkSqleNl9jS6mqy/DNoV7tXGcI0S3cUvHQ== +asynciterator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-3.0.0.tgz#0dd253bb8cc314469a5644eea1f88596fc16ffda" + integrity sha512-8aq8lNFDG47H/LlEFHLze17T+zjsHP7yscvEdyWh8MYBEI9CkpBbKuFx6FT4dmMVsBZ0D1LUq8aIh8+vHd/74Q== asynckit@^0.4.0: version "0.4.0" From 4e1067b558f04893cf4a1792334d9053f24aae11 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 10 Aug 2020 10:29:15 +0200 Subject: [PATCH 143/165] Enable no-extraneous-dependencies linter rule, #131 --- .eslintrc | 21 +++++- package.json | 1 + yarn.lock | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 213 insertions(+), 5 deletions(-) diff --git a/.eslintrc b/.eslintrc index 8451b63f..7e49a81d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,16 +1,20 @@ { env: { node: true, - es6: true, + es6: true }, + plugins: [ + 'eslint-plugin-import' + ], + parserOptions: { ecmaVersion: 9, sourceType: "module" }, globals: { - Promise: true, + Promise: true }, rules: { @@ -181,5 +185,18 @@ space-unary-ops: 2, spaced-comment: [2, "always", { block: { markers: ["!"] } }], wrap-regex: 0, + + // Imports + "import/no-extraneous-dependencies": "error" }, + + overrides: [ + { + // Specific rules for test files + files: [ "packages/**/test/**/*-test.js" ], + rules: { + "import/no-extraneous-dependencies": "off" + } + } + ] } diff --git a/package.json b/package.json index 0071433c..984720e9 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "chai": "^4.0.0", "coveralls": "^3.0.9", "eslint": "^7.0.0", + "eslint-plugin-import": "^2.22.0", "lerna": "^3.4.0", "manual-git-changelog": "^1.0.1", "mocha": "^8.0.0", diff --git a/yarn.lock b/yarn.lock index e7c21f8d..ba752371 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1040,6 +1040,11 @@ resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz#c1c0d402daac324582b6186b91f8905340ea3361" integrity sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -1284,6 +1289,15 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= +array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -1301,6 +1315,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + array.prototype.map@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec" @@ -1864,6 +1886,11 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + conventional-changelog-angular@^5.0.3: version "5.0.6" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" @@ -2085,7 +2112,7 @@ debug@3.2.6, debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^2.2.0, debug@^2.3.3: +debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2227,6 +2254,14 @@ dir-glob@^2.2.2: dependencies: path-type "^3.0.0" +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -2317,6 +2352,23 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.17.0, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + es-abstract@^1.17.0-next.1: version "1.17.4" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" @@ -2405,6 +2457,41 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +eslint-import-resolver-node@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.22.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" + integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.3" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + eslint-scope@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" @@ -2696,7 +2783,7 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -3457,6 +3544,11 @@ is-callable@^1.1.4, is-callable@^1.1.5: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -3617,6 +3709,13 @@ is-regex@^1.0.5: dependencies: has "^1.0.3" +is-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + is-set@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" @@ -3673,7 +3772,7 @@ is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3843,6 +3942,13 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + json5@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" @@ -3986,6 +4092,16 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -4796,6 +4912,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + octokit-pagination-methods@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" @@ -5096,6 +5222,13 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -5145,6 +5278,13 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -5373,6 +5513,14 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -5390,6 +5538,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -5590,6 +5747,13 @@ resolve@^1.10.0, resolve@^1.3.2: dependencies: path-parse "^1.0.6" +resolve@^1.13.1, resolve@^1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + resolve@~1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" @@ -6065,6 +6229,14 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimleft@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" @@ -6081,6 +6253,14 @@ string.prototype.trimright@^2.1.1: define-properties "^1.1.3" function-bind "^1.1.1" +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -6386,6 +6566,16 @@ trim-off-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" From 70021d26a4112a02278801ffff604ee803114369 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 10 Aug 2020 10:33:22 +0200 Subject: [PATCH 144/165] Fix missing rdf-string dependency in core, Closes #131 --- packages/core/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/package.json b/packages/core/package.json index 03802ad2..01c47cc4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -43,6 +43,7 @@ "mime": "^2.4.4", "n3": "^1.3.5", "negotiate": "^1.0.1", + "rdf-string": "^1.3.1", "q": "^1.4.1", "qejs": "^3.0.5", "request": "^2.88.2", From 288bf721273a261908dca8c79bd3d8d46b8724a1 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 10 Aug 2020 10:35:13 +0200 Subject: [PATCH 145/165] Bump to release version v3.1.0 --- CHANGELOG.md | 9 +++++++++ lerna.json | 2 +- packages/core/package.json | 4 ++-- packages/datasource-composite/package.json | 4 ++-- packages/datasource-hdt/package.json | 4 ++-- packages/datasource-jsonld/package.json | 4 ++-- packages/datasource-n3/package.json | 4 ++-- packages/datasource-sparql/package.json | 4 ++-- packages/feature-memento/package.json | 4 ++-- packages/feature-qpf/package.json | 4 ++-- packages/feature-summary/package.json | 4 ++-- packages/feature-webid/package.json | 4 ++-- packages/server/package.json | 20 ++++++++++---------- 13 files changed, 40 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb27b6e5..bbe41688 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.1.0](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.9...v3.1.0) - 2020-08-10 + +### Changed +* [Update to asynciterator v3, Closes #129](https://github.com/LinkedDataFragments/Server.js/commit/b6e3512ec21bba5cfcac79aee52033034d49583b) + +### Fixed +* [Fix missing rdf-string dependency in core, Closes #131](https://github.com/LinkedDataFragments/Server.js/commit/70021d26a4112a02278801ffff604ee803114369) + ## [v3.0.9](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.8...v3.0.9) - 2020-06-18 diff --git a/lerna.json b/lerna.json index ee132ae3..e8b47c57 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.0.9", + "version": "3.1.0", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/core/package.json b/packages/core/package.json index 01c47cc4..030b759c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/core", "description": "Linked Data Fragments Server - Core", - "version": "3.0.7", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -43,9 +43,9 @@ "mime": "^2.4.4", "n3": "^1.3.5", "negotiate": "^1.0.1", - "rdf-string": "^1.3.1", "q": "^1.4.1", "qejs": "^3.0.5", + "rdf-string": "^1.3.1", "request": "^2.88.2", "uritemplate": "^0.3.4" }, diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index 33a81684..ba92b373 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-composite", "description": "Linked Data Fragments Server - Composite Datasource", - "version": "3.0.7", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" } } diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index c81f99f2..680377d9 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", - "version": "3.0.9", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,7 +35,7 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" }, "optionalDependencies": { "hdt": "^3.0.1" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 696ee232..59d23489 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-jsonld", "description": "Linked Data Fragments Server - JSON-LD Datasource", - "version": "3.0.7", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" } } diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 04a10ac0..2f65102f 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "3.0.8", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -35,6 +35,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" } } diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 266a3148..00ec2c87 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-sparql", "description": "Linked Data Fragments Server - SPARQL Datasource", - "version": "3.0.7", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" } } diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index f8e23a36..54f16811 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-memento", "description": "Linked Data Fragments Server - Memento", - "version": "3.0.7", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -36,6 +36,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" } } diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index b0b483da..11377df3 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-qpf", "description": "Linked Data Fragments Server - Quad Pattern Fragments", - "version": "3.0.7", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" } } diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index 1486aa76..276003c0 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-summary", "description": "Linked Data Fragments Server - Memento", - "version": "3.0.7", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -40,6 +40,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" } } diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index 8fc1d14c..f19074ae 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-webid", "description": "Linked Data Fragments Server - WebID", - "version": "3.0.7", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid", "lsd:components": "components/components.jsonld", "lsd:contexts": { @@ -38,6 +38,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.0.7" + "@ldf/core": "^3.1.0" } } diff --git a/packages/server/package.json b/packages/server/package.json index 2433213a..5126e03c 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.0.9", + "version": "3.1.0", "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", "lsd:contexts": { "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" @@ -34,15 +34,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "@ldf/core": "^3.0.7", - "@ldf/datasource-composite": "^3.0.7", - "@ldf/datasource-hdt": "^3.0.9", - "@ldf/datasource-jsonld": "^3.0.7", - "@ldf/datasource-n3": "^3.0.8", - "@ldf/datasource-sparql": "^3.0.7", - "@ldf/feature-memento": "^3.0.7", - "@ldf/feature-qpf": "^3.0.7", - "@ldf/feature-summary": "^3.0.7", + "@ldf/core": "^3.1.0", + "@ldf/datasource-composite": "^3.1.0", + "@ldf/datasource-hdt": "^3.1.0", + "@ldf/datasource-jsonld": "^3.1.0", + "@ldf/datasource-n3": "^3.1.0", + "@ldf/datasource-sparql": "^3.1.0", + "@ldf/feature-memento": "^3.1.0", + "@ldf/feature-qpf": "^3.1.0", + "@ldf/feature-summary": "^3.1.0", "@ldf/preset-qpf": "^3.0.0" } } From 55edf20c45d376636527a86ae7b7d698809dc94e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 27 Sep 2020 22:21:10 +0000 Subject: [PATCH 146/165] Update dependency supertest to v5 --- package.json | 2 +- yarn.lock | 94 ++++++++++++++++++++++++++++------------------------ 2 files changed, 51 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 984720e9..0a954e58 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "pre-commit": "^1.1.3", "sinon": "^1.17.4", "sinon-chai": "^3.0.0", - "supertest": "^4.0.0" + "supertest": "^5.0.0" }, "pre-commit": [ "lint", diff --git a/yarn.lock b/yarn.lock index ba752371..4609d6bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1806,7 +1806,7 @@ columnify@^1.5.4: strip-ansi "^3.0.0" wcwidth "^1.0.0" -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1831,7 +1831,7 @@ compare-func@^1.3.1: array-ify "^1.0.0" dot-prop "^3.0.0" -component-emitter@^1.2.0, component-emitter@^1.2.1: +component-emitter@^1.2.1, component-emitter@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -1981,7 +1981,7 @@ convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -cookiejar@^2.1.0: +cookiejar@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== @@ -2650,7 +2650,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -2715,6 +2715,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-safe-stringify@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== + figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -2844,13 +2849,13 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@^2.3.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== +form-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" + integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" + combined-stream "^1.0.8" mime-types "^2.1.12" form-data@~2.3.2: @@ -2869,7 +2874,7 @@ formatio@1.1.1: dependencies: samsam "~1.1" -formidable@^1.2.0: +formidable@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== @@ -4374,7 +4379,7 @@ merge2@^1.2.3: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== -methods@^1.1.1, methods@^1.1.2: +methods@1.1.2, methods@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -4410,16 +4415,16 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.43.0" -mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - mime@^2.4.4: version "2.4.4" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== +mime@^2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -5445,10 +5450,10 @@ qejs@^3.0.5: dependencies: q "0.8.x" -qs@^6.5.1: - version "6.9.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" - integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== +qs@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== qs@~6.5.2: version "6.5.2" @@ -5563,7 +5568,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -5576,7 +5581,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.2: +"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -5885,7 +5890,7 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1: +semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== @@ -6361,29 +6366,30 @@ strong-log-transformer@^2.0.0: minimist "^1.2.0" through "^2.3.4" -superagent@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" - integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== - dependencies: - component-emitter "^1.2.0" - cookiejar "^2.1.0" - debug "^3.1.0" - extend "^3.0.0" - form-data "^2.3.1" - formidable "^1.2.0" - methods "^1.1.1" - mime "^1.4.1" - qs "^6.5.1" - readable-stream "^2.3.5" - -supertest@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-4.0.2.tgz#c2234dbdd6dc79b6f15b99c8d6577b90e4ce3f36" - integrity sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ== +superagent@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-6.1.0.tgz#09f08807bc41108ef164cfb4be293cebd480f4a6" + integrity sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg== dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.2" + debug "^4.1.1" + fast-safe-stringify "^2.0.7" + form-data "^3.0.0" + formidable "^1.2.2" methods "^1.1.2" - superagent "^3.8.3" + mime "^2.4.6" + qs "^6.9.4" + readable-stream "^3.6.0" + semver "^7.3.2" + +supertest@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-5.0.0.tgz#771aedfeb0a95466cc5d100d5d11288736fd25da" + integrity sha512-2JAWpPrUOZF4hHH5ZTCN2xjKXvJS3AEwPNXl0HUseHsfcXFvMy9kcsufIHCNAmQ5hlGCvgeAqaR5PBEouN3hlQ== + dependencies: + methods "1.1.2" + superagent "6.1.0" supports-color@7.1.0, supports-color@^7.1.0: version "7.1.0" From 51704dd3b4401728ff108d33345cbfa8caf63c97 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 29 Oct 2020 23:42:34 +0000 Subject: [PATCH 147/165] Update dependency supertest to v6 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0a954e58..05c4dac6 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "pre-commit": "^1.1.3", "sinon": "^1.17.4", "sinon-chai": "^3.0.0", - "supertest": "^5.0.0" + "supertest": "^6.0.0" }, "pre-commit": [ "lint", diff --git a/yarn.lock b/yarn.lock index 4609d6bc..80ad37ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6383,10 +6383,10 @@ superagent@6.1.0: readable-stream "^3.6.0" semver "^7.3.2" -supertest@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-5.0.0.tgz#771aedfeb0a95466cc5d100d5d11288736fd25da" - integrity sha512-2JAWpPrUOZF4hHH5ZTCN2xjKXvJS3AEwPNXl0HUseHsfcXFvMy9kcsufIHCNAmQ5hlGCvgeAqaR5PBEouN3hlQ== +supertest@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-6.0.0.tgz#8371509fadd616217b42ff3d3be7cc0267baea1b" + integrity sha512-7+Skilm7kvUZIaKfALPgjS3i8zYs11zvEudAeYdqJZL3f+SGGFV4qQkkTVkYcs+zbE6de47HP8o0a0hy1BFlMA== dependencies: methods "1.1.2" superagent "6.1.0" From e90db5c3e439259466fa0cf789e2c4b028b584f2 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 15 Jan 2021 14:22:30 +0100 Subject: [PATCH 148/165] Update to Components.js 4 --- packages/core/README.md | 28 +- packages/core/components/context.jsonld | 4 +- packages/core/config/config-example.json | 6 +- packages/core/lib/CliRunner.js | 47 +- .../core/lib/datasources/IndexDatasource.js | 1 + packages/core/package.json | 11 +- packages/datasource-composite/README.md | 8 +- .../components/context.jsonld | 2 +- .../config/config-example.json | 8 +- packages/datasource-composite/package.json | 9 +- packages/datasource-hdt/README.md | 2 +- .../datasource-hdt/components/context.jsonld | 2 +- .../datasource-hdt/config/config-example.json | 2 +- packages/datasource-hdt/package.json | 9 +- packages/datasource-jsonld/README.md | 2 +- .../components/context.jsonld | 2 +- .../config/config-example.json | 2 +- packages/datasource-jsonld/package.json | 9 +- packages/datasource-n3/README.md | 2 +- .../datasource-n3/components/context.jsonld | 2 +- .../datasource-n3/config/config-example.json | 2 +- packages/datasource-n3/package.json | 9 +- packages/datasource-sparql/README.md | 2 +- .../components/context.jsonld | 2 +- .../config/config-example.json | 2 +- packages/datasource-sparql/package.json | 9 +- packages/feature-memento/README.md | 24 +- .../feature-memento/components/context.jsonld | 2 +- .../config/config-example.json | 8 +- packages/feature-memento/package.json | 9 +- packages/feature-qpf/README.md | 8 +- .../Controller/QuadPatternFragments.jsonld | 3 +- .../feature-qpf/components/context.jsonld | 2 +- packages/feature-qpf/package.json | 9 +- packages/feature-summary/README.md | 12 +- .../feature-summary/components/context.jsonld | 2 +- .../config/config-example.json | 2 +- packages/feature-summary/package.json | 9 +- packages/feature-webid/README.md | 4 +- .../feature-webid/components/context.jsonld | 2 +- packages/feature-webid/package.json | 9 +- packages/preset-qpf/components/context.jsonld | 2 +- packages/preset-qpf/package.json | 9 +- packages/server/README.md | 4 +- .../server/bin/ldf-server-migrate-config-3x | 2 +- packages/server/config/config-example.json | 4 +- packages/server/package.json | 9 +- yarn.lock | 738 ++++++++++++++---- 48 files changed, 715 insertions(+), 342 deletions(-) diff --git a/packages/core/README.md b/packages/core/README.md index 103605a5..216bb064 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -111,7 +111,7 @@ Example: "datasources": [ { - "@id": "ex:myDatasourceVersion1", + "@id": "urn:ldf-server:myDatasourceVersion1", "@type": "SparqlDatasource", "datasourceTitle": "My SPARQL source", "description": "My datasource with a SPARQL-endpoint back-end", @@ -125,7 +125,7 @@ Example: "homepage": "http://example.org/alice" }, { - "@id": "ex:myDatasourceVersion2", + "@id": "urn:ldf-server:myDatasourceVersion2", "@type": "TurtleDatasource", "datasourceTitle": "My Turtle file", "description": "My dataset with a Turtle back-end", @@ -157,7 +157,7 @@ Example: "dereference": [ { - "dereferenceDatasource": "ex:myDatasourceVersion2", + "dereferenceDatasource": "urn:ldf-server:myDatasourceVersion2", "dereferencePath": "/resource/" } ], @@ -199,22 +199,22 @@ For example: "controllers": [ { - "@id": "ex:myAssetsController", + "@id": "urn:ldf-server:myAssetsController", "@type": "AssetsController" }, { - "@id": "ex:myDereferenceController", + "@id": "urn:ldf-server:myDereferenceController", "@type": "DereferenceController" }, { - "@id": "ex:myNotFoundController", + "@id": "urn:ldf-server:myNotFoundController", "@type": "NotFoundController" } ], "datasources": [ { - "@id": "ex:myIndexDatasource", + "@id": "urn:ldf-server:myIndexDatasource", "@type": "IndexDatasource", "datasourceTitle": "dataset index", "datasourcePath": "/", @@ -233,34 +233,34 @@ For example: "routers": [ { - "@id": "ex:myDatasourceRouter", + "@id": "urn:ldf-server:myDatasourceRouter", "@type": "DatasourceRouter" }, { - "@id": "ex:myPageRouter", + "@id": "urn:ldf-server:myPageRouter", "@type": "PageRouter" } ], "views": [ { - "@id": "ex:myErrorHtmlView", + "@id": "urn:ldf-server:myErrorHtmlView", "@type": "ErrorHtmlView" }, { - "@id": "ex:myErrorRdfView", + "@id": "urn:ldf-server:myErrorRdfView", "@type": "ErrorRdfView" }, { - "@id": "ex:myForbiddenHtmlView", + "@id": "urn:ldf-server:myForbiddenHtmlView", "@type": "ForbiddenHtmlView" }, { - "@id": "ex:myNotFoundHtmlView", + "@id": "urn:ldf-server:myNotFoundHtmlView", "@type": "NotFoundHtmlView" }, { - "@id": "ex:myNotFoundRdfView", + "@id": "urn:ldf-server:myNotFoundRdfView", "@type": "NotFoundRdfView" } ] diff --git a/packages/core/components/context.jsonld b/packages/core/components/context.jsonld index c23c86b4..efac61b9 100644 --- a/packages/core/components/context.jsonld +++ b/packages/core/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldfc": "npmd:@ldf/core/", @@ -72,7 +72,7 @@ "protocol": "ldfc:Server#protocol", "datasource": "ldfc:Server#datasource", "datasources": "ldfc:Server#datasource", - "prefixes": "ldfc:Server#prefixes", + "prefixes": "ldfc:Server#prefix", "prefix": "rdfa:prefix", "uri": "rdfa:uri", "router": "ldfc:Server#router", diff --git a/packages/core/config/config-example.json b/packages/core/config/config-example.json index 20786c20..81e7c7fa 100644 --- a/packages/core/config/config-example.json +++ b/packages/core/config/config-example.json @@ -11,7 +11,7 @@ "datasources": [ { - "@id": "ex:myDatasourceVersion1", + "@id": "urn:ldf-server:myDatasourceVersion1", "@type": "SparqlDatasource", "datasourceTitle": "My SPARQL source", "description": "My datasource with a SPARQL-endpoint back-end", @@ -25,7 +25,7 @@ "homepage": "http://example.org/alice" }, { - "@id": "ex:myDatasourceVersion2", + "@id": "urn:ldf-server:myDatasourceVersion2", "@type": "TurtleDatasource", "datasourceTitle": "My Turtle file", "description": "My dataset with a Turtle back-end", @@ -57,7 +57,7 @@ "dereference": [ { - "dereferenceDatasource": "ex:myDatasourceVersion2", + "dereferenceDatasource": "urn:ldf-server:myDatasourceVersion2", "dereferencePath": "/resource/" } ], diff --git a/packages/core/lib/CliRunner.js b/packages/core/lib/CliRunner.js index 2d02f170..655f2377 100644 --- a/packages/core/lib/CliRunner.js +++ b/packages/core/lib/CliRunner.js @@ -2,7 +2,7 @@ /* Logic for starting an LDF server with a given config from the command line. */ let cluster = require('cluster'), - ComponentsLoader = require('componentsjs').Loader; + ComponentsManager = require('componentsjs').ComponentsManager; // Run function for starting the server from the command line function runCli(moduleRootPath) { @@ -21,38 +21,27 @@ function runCustom(args, stdin, stdout, stderr, componentConfigUri, properties) cliWorkers = parseInt(args[2], 10), configUri = args[3] || componentConfigUri || 'urn:ldf-server:my'; - let loader = new ComponentsLoader(properties); - loader.registerAvailableModuleResources() - .then(() => { - // Start up a cluster master - if (cluster.isMaster) { - return loader.getConfigConstructorFromUrl(configUri, args[0]) - .then((constructor) => { - return constructor.makeArguments(true).then((args) => { - startClusterMaster(args[0]); - }); - }) - .catch((e) => { - stderr.write('Config error:\n'); - stderr.write(e + '\n'); - process.exit(1); - }); - } - else { - return loader.instantiateFromUrl(configUri, args[0]) - .then((worker) => { + ComponentsManager.build({ + ...properties, + configLoader: (registry) => registry.register(args[0]), + }) + .then((manager) => { + return manager.instantiate(configUri) + .then((worker) => { + if (cluster.isMaster) + startClusterMaster(worker._config); + else worker.run(cliPort); - }) - .catch((e) => { - stderr.write('Instantiation error:\n'); - stderr.write(e + '\n'); - process.exit(1); - }); - } + }) + .catch((e) => { + stderr.write('Instantiation error:\n'); + stderr.write(e.stack + '\n'); + process.exit(1); + }); }) .catch((e) => { stderr.write('Component definition error:\n'); - stderr.write(e + '\n'); + stderr.write(e.stack + '\n'); process.exit(1); }); diff --git a/packages/core/lib/datasources/IndexDatasource.js b/packages/core/lib/datasources/IndexDatasource.js index 4a8cef55..2e58e36c 100644 --- a/packages/core/lib/datasources/IndexDatasource.js +++ b/packages/core/lib/datasources/IndexDatasource.js @@ -14,6 +14,7 @@ class IndexDatasource extends MemoryDatasource { super(options); this._datasources = options ? options.datasources : {}; this.role = 'index'; + delete this._datasources['/']; } // Creates quads for each data source diff --git a/packages/core/package.json b/packages/core/package.json index 030b759c..acc5f39d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,14 +2,7 @@ "name": "@ldf/core", "description": "Linked Data Fragments Server - Core", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { @@ -36,7 +29,7 @@ }, "dependencies": { "asynciterator": "^3.0.0", - "componentsjs": "^3.4.0", + "componentsjs": "^4.0.4", "forwarded-parse": "^2.1.0", "jsonld-streaming-serializer": "^1.1.0", "lodash": "^4.0.0", diff --git a/packages/datasource-composite/README.md b/packages/datasource-composite/README.md index cd133c1c..fd5db151 100644 --- a/packages/datasource-composite/README.md +++ b/packages/datasource-composite/README.md @@ -23,15 +23,15 @@ Example: "datasources": [ { - "@id": "ex:myCompositeDatasource", + "@id": "urn:ldf-server:myCompositeDatasource", "@type": "CompositeDatasource", "datasourceTitle": "Composite", "description": "An example composite datasource", "datasourcePath": "composite", - "compose": [ "ex:myHdtDatasource", "ex:mySparqlDatasource" ] + "compose": [ "urn:ldf-server:myHdtDatasource", "urn:ldf-server:mySparqlDatasource" ] }, { - "@id": "ex:myHdtDatasource", + "@id": "urn:ldf-server:myHdtDatasource", "@type": "HdtDatasource", "datasourceTitle": "DBpedia 2014", "description": "DBpedia 2014 with an HDT back-end", @@ -39,7 +39,7 @@ Example: "hdtFile": "data/dbpedia2014.hdt" }, { - "@id": "ex:mySparqlDatasource", + "@id": "urn:ldf-server:mySparqlDatasource", "@type": "SparqlDatasource", "datasourceTitle": "DBpedia (Virtuoso)", "description": "DBpedia with a Virtuoso back-end", diff --git a/packages/datasource-composite/components/context.jsonld b/packages/datasource-composite/components/context.jsonld index 780fb6c5..103c4c3b 100644 --- a/packages/datasource-composite/components/context.jsonld +++ b/packages/datasource-composite/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldfdc": "npmd:@ldf/datasource-composite/", diff --git a/packages/datasource-composite/config/config-example.json b/packages/datasource-composite/config/config-example.json index 49889771..982961a9 100644 --- a/packages/datasource-composite/config/config-example.json +++ b/packages/datasource-composite/config/config-example.json @@ -5,15 +5,15 @@ "datasources": [ { - "@id": "ex:myCompositeDatasource", + "@id": "urn:ldf-server:myCompositeDatasource", "@type": "CompositeDatasource", "datasourceTitle": "Composite", "description": "An example composite datasource", "datasourcePath": "composite", - "compose": [ "ex:myHdtDatasource", "ex:mySparqlDatasource" ] + "compose": [ "urn:ldf-server:myHdtDatasource", "urn:ldf-server:mySparqlDatasource" ] }, { - "@id": "ex:myHdtDatasource", + "@id": "urn:ldf-server:myHdtDatasource", "@type": "HdtDatasource", "datasourceTitle": "DBpedia 2014", "description": "DBpedia 2014 with an HDT back-end", @@ -21,7 +21,7 @@ "hdtFile": "data/dbpedia2014.hdt" }, { - "@id": "ex:mySparqlDatasource", + "@id": "urn:ldf-server:mySparqlDatasource", "@type": "SparqlDatasource", "datasourceTitle": "DBpedia (Virtuoso)", "description": "DBpedia with a Virtuoso back-end", diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index ba92b373..b9b0b9b9 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -2,14 +2,7 @@ "name": "@ldf/datasource-composite", "description": "Linked Data Fragments Server - Composite Datasource", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-composite/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/datasource-hdt/README.md b/packages/datasource-hdt/README.md index d8123f8c..cd5f575b 100644 --- a/packages/datasource-hdt/README.md +++ b/packages/datasource-hdt/README.md @@ -24,7 +24,7 @@ Example: "datasources": [ { - "@id": "ex:myHdtDatasource", + "@id": "urn:ldf-server:myHdtDatasource", "@type": "HdtDatasource", "datasourceTitle": "My HDT file", "description": "My dataset with an HDT back-end", diff --git a/packages/datasource-hdt/components/context.jsonld b/packages/datasource-hdt/components/context.jsonld index d3feb384..a8541282 100644 --- a/packages/datasource-hdt/components/context.jsonld +++ b/packages/datasource-hdt/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldfdh": "npmd:@ldf/datasource-hdt/", diff --git a/packages/datasource-hdt/config/config-example.json b/packages/datasource-hdt/config/config-example.json index 1a41e558..f97de7c7 100644 --- a/packages/datasource-hdt/config/config-example.json +++ b/packages/datasource-hdt/config/config-example.json @@ -5,7 +5,7 @@ "datasources": [ { - "@id": "ex:myHdtDatasource", + "@id": "urn:ldf-server:myHdtDatasource", "@type": "HdtDatasource", "datasourceTitle": "My HDT file", "description": "My dataset with an HDT back-end", diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index 680377d9..7b4ed39a 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -2,14 +2,7 @@ "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/datasource-jsonld/README.md b/packages/datasource-jsonld/README.md index a974c8e2..d6219785 100644 --- a/packages/datasource-jsonld/README.md +++ b/packages/datasource-jsonld/README.md @@ -22,7 +22,7 @@ Example: "datasources": [ { - "@id": "ex:myJsonLdDatasource", + "@id": "urn:ldf-server:myJsonLdDatasource", "@type": "JsonLdDatasource", "datasourceTitle": "My JSON-LD file", "description": "My dataset with a JSON-LD back-end", diff --git a/packages/datasource-jsonld/components/context.jsonld b/packages/datasource-jsonld/components/context.jsonld index c2e7c43e..66626706 100644 --- a/packages/datasource-jsonld/components/context.jsonld +++ b/packages/datasource-jsonld/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldfdj": "npmd:@ldf/datasource-jsonld/", diff --git a/packages/datasource-jsonld/config/config-example.json b/packages/datasource-jsonld/config/config-example.json index efa71ba8..001b543f 100644 --- a/packages/datasource-jsonld/config/config-example.json +++ b/packages/datasource-jsonld/config/config-example.json @@ -5,7 +5,7 @@ "datasources": [ { - "@id": "ex:myJsonLdDatasource", + "@id": "urn:ldf-server:myJsonLdDatasource", "@type": "JsonLdDatasource", "datasourceTitle": "My JSON-LD file", "description": "My dataset with a JSON-LD back-end", diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 59d23489..cf5bffc5 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -2,14 +2,7 @@ "name": "@ldf/datasource-jsonld", "description": "Linked Data Fragments Server - JSON-LD Datasource", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/datasource-n3/README.md b/packages/datasource-n3/README.md index 5beaf4c3..4814a471 100644 --- a/packages/datasource-n3/README.md +++ b/packages/datasource-n3/README.md @@ -26,7 +26,7 @@ Example: "datasources": [ { - "@id": "ex:myTurtleDatasource", + "@id": "urn:ldf-server:myTurtleDatasource", "@type": "TurtleDatasource", "datasourceTitle": "My Turtle file", "description": "My dataset with a Turtle back-end", diff --git a/packages/datasource-n3/components/context.jsonld b/packages/datasource-n3/components/context.jsonld index 3800f7a2..00526858 100644 --- a/packages/datasource-n3/components/context.jsonld +++ b/packages/datasource-n3/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldfdn": "npmd:@ldf/datasource-n3/", diff --git a/packages/datasource-n3/config/config-example.json b/packages/datasource-n3/config/config-example.json index 736f6b96..7e3821d6 100644 --- a/packages/datasource-n3/config/config-example.json +++ b/packages/datasource-n3/config/config-example.json @@ -5,7 +5,7 @@ "datasources": [ { - "@id": "ex:myTurtleDatasource", + "@id": "urn:ldf-server:myTurtleDatasource", "@type": "TurtleDatasource", "datasourceTitle": "My Turtle file", "description": "My dataset with a Turtle back-end", diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 2f65102f..72e8610d 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -2,14 +2,7 @@ "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index 90e260a6..78660e52 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -23,7 +23,7 @@ Example: "datasources": [ { - "@id": "ex:mySparqlDatasource", + "@id": "urn:ldf-server:mySparqlDatasource", "@type": "SparqlDatasource", "datasourceTitle": "My SPARQL source", "description": "My datasource with a SPARQL-endpoint back-end", diff --git a/packages/datasource-sparql/components/context.jsonld b/packages/datasource-sparql/components/context.jsonld index 3833d296..b3ba9c12 100644 --- a/packages/datasource-sparql/components/context.jsonld +++ b/packages/datasource-sparql/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldfds": "npmd:@ldf/datasource-sparql/", diff --git a/packages/datasource-sparql/config/config-example.json b/packages/datasource-sparql/config/config-example.json index 74bc94b4..1947472c 100644 --- a/packages/datasource-sparql/config/config-example.json +++ b/packages/datasource-sparql/config/config-example.json @@ -5,7 +5,7 @@ "datasources": [ { - "@id": "ex:mySparqlDatasource", + "@id": "urn:ldf-server:mySparqlDatasource", "@type": "SparqlDatasource", "datasourceTitle": "My SPARQL source", "description": "My datasource with a SPARQL-endpoint back-end", diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 00ec2c87..9258e89a 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -2,14 +2,7 @@ "name": "@ldf/datasource-sparql", "description": "Linked Data Fragments Server - SPARQL Datasource", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/feature-memento/README.md b/packages/feature-memento/README.md index 725f314b..bb671c87 100644 --- a/packages/feature-memento/README.md +++ b/packages/feature-memento/README.md @@ -17,7 +17,7 @@ This time gate can contain several version, each pointing to a certain datasourc The version time range is identified using the `versionStart` and `versionEnd` timestamps. Each timestamp must be in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601). -For example, the datasources `ex:myDbpedia2015` and `ex:myDbpedia2014` are mementos of DBpedia valid in 2014 and 2015: +For example, the datasources `urn:ldf-server:myDbpedia2015` and `urn:ldf-server:myDbpedia2014` are mementos of DBpedia valid in 2014 and 2015: ```json { @@ -26,13 +26,13 @@ For example, the datasources `ex:myDbpedia2015` and `ex:myDbpedia2014` are memen "timegatePath": "dbpedia", "versions": [ { - "mementoDatasource": "ex:myDbpedia2015", + "mementoDatasource": "urn:ldf-server:myDbpedia2015", "start": "2014-09-14T11:59:59Z", "end": "2015-04-15T00:00:00Z", "originalBaseURL": "http://fragments.mementodepot.org/dbpedia_201510" }, { - "mementoDatasource": "ex:myDbpedia2014", + "mementoDatasource": "urn:ldf-server:myDbpedia2014", "start": "2013-06-15T11:59:59Z", "end": "2014-09-15T00:00:00Z" } @@ -94,7 +94,7 @@ Example: "datasources": [ { - "@id": "ex:myDatasourceVersion1", + "@id": "urn:ldf-server:myDatasourceVersion1", "@type": "SparqlDatasource", "datasourceTitle": "My SPARQL source", "description": "My datasource with a SPARQL-endpoint back-end", @@ -102,7 +102,7 @@ Example: "sparqlEndpoint": "https://dbpedia.org/sparql" }, { - "@id": "ex:myDatasourceVersion2", + "@id": "urn:ldf-server:myDatasourceVersion2", "@type": "TurtleDatasource", "datasourceTitle": "My Turtle file", "description": "My dataset with a Turtle back-end", @@ -117,12 +117,12 @@ Example: "timegatePath": "mydatasource", "versions": [ { - "mementoDatasource": "ex:myDatasourceVersion1", + "mementoDatasource": "urn:ldf-server:myDatasourceVersion1", "versionStart": "2014-09-14T11:59:59Z", "versionEnd": "2015-04-15T00:00:00Z" }, { - "mementoDatasource": "ex:myDatasourceVersion2", + "mementoDatasource": "urn:ldf-server:myDatasourceVersion2", "versionStart": "2015-06-15T11:59:59Z", "versionEnd": "2016-09-15T00:00:00Z", "mementoBaseURL": "http://fragments.mementodepot.org/dbpedia_201510" @@ -152,14 +152,14 @@ For example: "controllers": [ { - "@id": "ex:myTimegateController", + "@id": "urn:ldf-server:myTimegateController", "@type": "TimegateController" }, { - "@id": "ex:myQuadPatternFragmentsController", // This should refer to your existing QuadPatternFragmentsController + "@id": "urn:ldf-server:myQuadPatternFragmentsController", // This should refer to your existing QuadPatternFragmentsController "@type": "QuadPatternFragmentsController", "qpfControllerExtension": { - "@id": "ex:myMementoControllerExtension", + "@id": "urn:ldf-server:myMementoControllerExtension", "@type": "MementoControllerExtension" } } @@ -167,10 +167,10 @@ For example: "views": [ { - "@id": "ex:myQpfHtmlView", // This should refer to your existing QpfHtmlView + "@id": "urn:ldf-server:myQpfHtmlView", // This should refer to your existing QpfHtmlView "@type": "QpfHtmlView", "viewExtension": { - "@id": "ex:myMementoQpfHtmlView", + "@id": "urn:ldf-server:myMementoQpfHtmlView", "@type": "MementoQpfHtmlView" } } diff --git a/packages/feature-memento/components/context.jsonld b/packages/feature-memento/components/context.jsonld index 1065f6af..5849b732 100644 --- a/packages/feature-memento/components/context.jsonld +++ b/packages/feature-memento/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldffm": "npmd:@ldf/feature-memento/", diff --git a/packages/feature-memento/config/config-example.json b/packages/feature-memento/config/config-example.json index 07646e71..67626d08 100644 --- a/packages/feature-memento/config/config-example.json +++ b/packages/feature-memento/config/config-example.json @@ -5,7 +5,7 @@ "datasources": [ { - "@id": "ex:myDatasourceVersion1", + "@id": "urn:ldf-server:myDatasourceVersion1", "@type": "SparqlDatasource", "datasourceTitle": "My SPARQL source", "description": "My datasource with a SPARQL-endpoint back-end", @@ -13,7 +13,7 @@ "sparqlEndpoint": "https://dbpedia.org/sparql" }, { - "@id": "ex:myDatasourceVersion2", + "@id": "urn:ldf-server:myDatasourceVersion2", "@type": "TurtleDatasource", "datasourceTitle": "My Turtle file", "description": "My dataset with a Turtle back-end", @@ -28,12 +28,12 @@ "timegatePath": "mydatasource", "versions": [ { - "mementoDatasource": "ex:myDatasourceVersion1", + "mementoDatasource": "urn:ldf-server:myDatasourceVersion1", "versionStart": "2014-09-14T11:59:59Z", "versionEnd": "2015-04-15T00:00:00Z" }, { - "mementoDatasource": "ex:myDatasourceVersion2", + "mementoDatasource": "urn:ldf-server:myDatasourceVersion2", "versionStart": "2015-06-15T11:59:59Z", "versionEnd": "2016-09-15T00:00:00Z", "mementoBaseURL": "http://fragments.mementodepot.org/dbpedia_201510" diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 54f16811..49166e3e 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -2,14 +2,7 @@ "name": "@ldf/feature-memento", "description": "Linked Data Fragments Server - Memento", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/feature-qpf/README.md b/packages/feature-qpf/README.md index 8f46998e..93f1de9f 100644 --- a/packages/feature-qpf/README.md +++ b/packages/feature-qpf/README.md @@ -38,25 +38,25 @@ For example: "controllers": [ { - "@id": "ex:myQuadPatternFragmentsController", + "@id": "urn:ldf-server:myQuadPatternFragmentsController", "@type": "QuadPatternFragmentsController" } ], "routers": [ { - "@id": "ex:myQuadPatternRouter", + "@id": "urn:ldf-server:myQuadPatternRouter", "@type": "QuadPatternRouter" } ], "views": [ { - "@id": "ex:myQpfHtmlView", + "@id": "urn:ldf-server:myQpfHtmlView", "@type": "QpfHtmlView" }, { - "@id": "ex:myQpfRdfView", + "@id": "urn:ldf-server:myQpfRdfView", "@type": "QpfRdfView" } ] diff --git a/packages/feature-qpf/components/Controller/QuadPatternFragments.jsonld b/packages/feature-qpf/components/Controller/QuadPatternFragments.jsonld index 777e301e..843c81dc 100644 --- a/packages/feature-qpf/components/Controller/QuadPatternFragments.jsonld +++ b/packages/feature-qpf/components/Controller/QuadPatternFragments.jsonld @@ -24,8 +24,7 @@ "@id": "ldffq:Controller/QuadPatternFragments#controllerExtension", "comment": "An extension for this controller", "range": { - "@id": "ldfc:ControllerExtension", - "extends": "AbstractClass" + "@id": "ldfc:ControllerExtension" } } ], diff --git a/packages/feature-qpf/components/context.jsonld b/packages/feature-qpf/components/context.jsonld index 672538c2..b3f2ff68 100644 --- a/packages/feature-qpf/components/context.jsonld +++ b/packages/feature-qpf/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldffq": "npmd:@ldf/feature-qpf/", diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index 11377df3..a6264aff 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -2,14 +2,7 @@ "name": "@ldf/feature-qpf", "description": "Linked Data Fragments Server - Quad Pattern Fragments", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/feature-summary/README.md b/packages/feature-summary/README.md index d6aea15e..f3c75a8c 100644 --- a/packages/feature-summary/README.md +++ b/packages/feature-summary/README.md @@ -52,28 +52,28 @@ For example: "controllers": [ { - "@id": "ex:mySummaryController", + "@id": "urn:ldf-server:mySummaryController", "@type": "SummaryController" } ], "views": [ { - "@id": "ex:myQpfHtmlView", // This should refer to your existing QpfHtmlView + "@id": "urn:ldf-server:myQpfHtmlView", // This should refer to your existing QpfHtmlView "viewExtension": { - "@id": "ex:mySummaryQpfHtmlView", + "@id": "urn:ldf-server:mySummaryQpfHtmlView", "@type": "SummaryQpfHtmlView" } }, { - "@id": "ex:myQpfRdfView", // This should refer to your existing QpfRdfView + "@id": "urn:ldf-server:myQpfRdfView", // This should refer to your existing QpfRdfView "viewExtension": { - "@id": "ex:mySummaryQpfRdfView", + "@id": "urn:ldf-server:mySummaryQpfRdfView", "@type": "SummaryQpfRdfView" } }, { - "@id": "ex:mySummaryRdfView", + "@id": "urn:ldf-server:mySummaryRdfView", "@type": "SummaryRdfView" } ] diff --git a/packages/feature-summary/components/context.jsonld b/packages/feature-summary/components/context.jsonld index e9745857..a3a0135c 100644 --- a/packages/feature-summary/components/context.jsonld +++ b/packages/feature-summary/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldffs": "npmd:@ldf/feature-summary/", diff --git a/packages/feature-summary/config/config-example.json b/packages/feature-summary/config/config-example.json index 5a73c216..b772fbc2 100644 --- a/packages/feature-summary/config/config-example.json +++ b/packages/feature-summary/config/config-example.json @@ -5,7 +5,7 @@ "datasources": [ { - "@id": "ex:myDatasourceVersion1", + "@id": "urn:ldf-server:myDatasourceVersion1", "@type": "SparqlDatasource", "datasourceTitle": "My SPARQL source", "description": "My datasource with a SPARQL-endpoint back-end", diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index 276003c0..78f235bc 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -2,14 +2,7 @@ "name": "@ldf/feature-summary", "description": "Linked Data Fragments Server - Memento", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-summary/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "bin": { "generate-summary": "./bin/generate-summary" diff --git a/packages/feature-webid/README.md b/packages/feature-webid/README.md index dc2b5d19..76778b6d 100644 --- a/packages/feature-webid/README.md +++ b/packages/feature-webid/README.md @@ -33,10 +33,10 @@ For example: "controllers": [ { - "@id": "ex:myQuadPatternFragmentsController", // This should refer to your existing QuadPatternFragmentsController + "@id": "urn:ldf-server:myQuadPatternFragmentsController", // This should refer to your existing QuadPatternFragmentsController "@type": "QuadPatternFragmentsController", "qpfControllerExtension": { - "@id": "ex:myWebIdControllerExtension", + "@id": "urn:ldf-server:myWebIdControllerExtension", "@type": "WebIdControllerExtension" } } diff --git a/packages/feature-webid/components/context.jsonld b/packages/feature-webid/components/context.jsonld index 3669100a..b85cc1e0 100644 --- a/packages/feature-webid/components/context.jsonld +++ b/packages/feature-webid/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", "ldffw": "npmd:@ldf/feature-webid/", diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index f19074ae..37e6c8e4 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -2,14 +2,7 @@ "name": "@ldf/feature-webid", "description": "Linked Data Fragments Server - WebID", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid", - "lsd:components": "components/components.jsonld", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-webid/^3.0.0/components/": "components/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/preset-qpf/components/context.jsonld b/packages/preset-qpf/components/context.jsonld index 5d3af6e0..84a0263f 100644 --- a/packages/preset-qpf/components/context.jsonld +++ b/packages/preset-qpf/components/context.jsonld @@ -1,6 +1,6 @@ { "@context": [ - "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", { "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", diff --git a/packages/preset-qpf/package.json b/packages/preset-qpf/package.json index 01216eb5..c3c197c9 100644 --- a/packages/preset-qpf/package.json +++ b/packages/preset-qpf/package.json @@ -2,14 +2,7 @@ "name": "@ldf/preset-qpf", "description": "Linked Data Fragments Server - Preset Quad Pattern Fragments", "version": "3.0.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/": "components/", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/config/": "config/" - }, + "lsd:module": true, "license": "MIT", "main": "index.js", "publishConfig": { diff --git a/packages/server/README.md b/packages/server/README.md index d7329550..c3df68a8 100644 --- a/packages/server/README.md +++ b/packages/server/README.md @@ -65,7 +65,7 @@ and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: "datasources": [ { - "@id": "ex:myHdtDatasource", + "@id": "urn:ldf-server:myHdtDatasource", "@type": "HdtDatasource", "datasourceTitle": "DBpedia 2014", "description": "DBpedia 2014 with an HDT back-end", @@ -73,7 +73,7 @@ and a [SPARQL endpoint](http://www.w3.org/TR/sparql11-protocol/) as sources: "hdtFile": "data/dbpedia2014.hdt" }, { - "@id": "ex:mySparqlDatasource", + "@id": "urn:ldf-server:mySparqlDatasource", "@type": "SparqlDatasource", "datasourceTitle": "DBpedia (Virtuoso)", "description": "DBpedia with a Virtuoso back-end", diff --git a/packages/server/bin/ldf-server-migrate-config-3x b/packages/server/bin/ldf-server-migrate-config-3x index f1fe0b1d..db0b9205 100755 --- a/packages/server/bin/ldf-server-migrate-config-3x +++ b/packages/server/bin/ldf-server-migrate-config-3x @@ -156,5 +156,5 @@ function migrateConfig(configFile, updateFile) { } function datasourcePathToId(datasourcePath) { - return 'ex:myDatasource' + datasourcePath; + return 'urn:ldf-server:myDatasource' + datasourcePath; } diff --git a/packages/server/config/config-example.json b/packages/server/config/config-example.json index 8c536cbb..1f925825 100644 --- a/packages/server/config/config-example.json +++ b/packages/server/config/config-example.json @@ -14,7 +14,7 @@ "datasources": [ { - "@id": "ex:myHdtDatasource", + "@id": "urn:ldf-server:myHdtDatasource", "@type": "HdtDatasource", "datasourceTitle": "DBpedia 2014", "description": "DBpedia 2014 with an HDT back-end", @@ -22,7 +22,7 @@ "hdtFile": "data/dbpedia2014.hdt" }, { - "@id": "ex:mySparqlDatasource", + "@id": "urn:ldf-server:mySparqlDatasource", "@type": "SparqlDatasource", "datasourceTitle": "DBpedia (Virtuoso)", "description": "DBpedia with a Virtuoso back-end", diff --git a/packages/server/package.json b/packages/server/package.json index 5126e03c..7fd7d15a 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -2,14 +2,7 @@ "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", "version": "3.1.0", - "lsd:module": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server", - "lsd:contexts": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld": "components/context.jsonld" - }, - "lsd:importPaths": { - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/": "components/", - "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/config/": "config/" - }, + "lsd:module": true, "license": "MIT", "bin": { "ldf-server": "./bin/ldf-server", diff --git a/yarn.lock b/yarn.lock index 80ad37ba..313028be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -119,6 +119,144 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@comunica/actor-abstract-mediatyped@^1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.19.0.tgz#db3eeef7ca4393ce825461421890ace81a605803" + integrity sha512-f8KPM8xsjB70REsS2ALrLNlMRHwPmb21OJy6u5YPARKCr95Usff38L/Fntm3ey6oQTwfwK/XEYuQVtwx5EqJYw== + +"@comunica/actor-http-native@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-http-native/-/actor-http-native-1.19.0.tgz#025690da4836bc7309168de6bf8f26d678f89d93" + integrity sha512-j7HsxDRcVjywPvh3ur1qx5WRS+UbT503jR+8lszR045h3ODTLX5PeCMh96Eq4dPkbVp22vkGqTFXux38dYRBSw== + dependencies: + "@types/parse-link-header" "^1.0.0" + cross-fetch "^3.0.5" + follow-redirects "^1.5.1" + parse-link-header "^1.0.1" + +"@comunica/actor-rdf-parse-html-microdata@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-1.19.0.tgz#08945ca3577fc2b3114e0e556b327d4201e03e18" + integrity sha512-IG0ZWdyQ8RP+cPjcoEnQePDgWmJa3isX3h1pO2WVOgAF9ih7wOimXl20++SGq/KlrtcMFFwM1qNlUE67RuaI6w== + dependencies: + microdata-rdf-streaming-parser "^1.1.0" + +"@comunica/actor-rdf-parse-html-rdfa@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-1.19.0.tgz#43120b60161a6bbb502c6ecea166a7204a5785ef" + integrity sha512-Wzq7VZ1sqR+Dx4omKpuGyf+Ep01uh1cOPQfNNH98Nhnu4hfvN2O3+LMT9oN9xE/IlYA0CsgOJbvIthJCN7kiBw== + dependencies: + rdfa-streaming-parser "^1.4.0" + +"@comunica/actor-rdf-parse-html-script@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-1.19.0.tgz#81c08f056619c7ec6cd0e2b0957392d47d02a7b9" + integrity sha512-rvcYPzng1gFij6GtI7O7QNuL/9EyJ9wXeq4D+lt3tNbptw1KeK+vQZrEa8odCdfZsiGMzj0JpgsmySvux6VtNg== + dependencies: + "@comunica/bus-rdf-parse-html" "^1.19.0" + "@types/rdf-js" "*" + relative-to-absolute-iri "^1.0.5" + +"@comunica/actor-rdf-parse-html@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-1.19.0.tgz#9bef88c9efea2566abae0a5e2a12bf6dae87720f" + integrity sha512-oxaS7cNkk3LZY7mKHnsLlUYZtCrBVt1w+dkgR9Hw/X2o5vet29W2dovYfOMeseSZJW9SOTQWDnQesvdMUgl2Tg== + dependencies: + "@comunica/bus-rdf-parse-html" "^1.19.0" + "@types/rdf-js" "*" + htmlparser2 "^6.0.0" + +"@comunica/actor-rdf-parse-jsonld@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-1.19.0.tgz#bf789dab64625587b8a1c12e1ebb6d3733333fd0" + integrity sha512-0I2wmsJlmurort2sSJh3kPm4NXYQqpmWBIkWzUGRuFJv5pAWd0AqnZpleuoM3GdaFdVtMbO3Pa4oBLBIVHfg2Q== + dependencies: + "@types/rdf-js" "*" + jsonld-context-parser "^2.1.1" + jsonld-streaming-parser "^2.1.1" + stream-to-string "^1.2.0" + +"@comunica/actor-rdf-parse-n3@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-1.19.0.tgz#afe8aa1792cd64760d2af4ce2d6b85b205933da1" + integrity sha512-JkbLLym/dTT0qqBWtIw8wXAJQI6Gxa9aETCgu4slsZRTizUNHpCh/nkQBGMsL+gufTDUPazKEKdwdKDQuwY1VA== + dependencies: + "@types/n3" "^1.4.4" + n3 "^1.6.3" + +"@comunica/actor-rdf-parse-rdfxml@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-1.19.0.tgz#00d3bf74d97e7b989de788427566559195840ac9" + integrity sha512-3ZqtJu7TKD43eaKZltbWwz/g4Zf5yy/qV+bzmUwa1+3TTAnunZqltf0HbcrVvwPI7l/HXSrpE/UbR6sW8Zy8Qg== + dependencies: + rdfxml-streaming-parser "^1.4.0" + +"@comunica/actor-rdf-parse-xml-rdfa@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-1.19.0.tgz#a4f93b1ffec2e945b78cd0ce54b0a6732c8ee0d0" + integrity sha512-pYj71b7Vcoistyalwh5qzvS+jeHkOqaDbRyOmfJMtRjfaWTWg5gHfG0Y4gYjK+14kuo5QGzn5vT7O3jWqef6jA== + dependencies: + rdfa-streaming-parser "^1.3.0" + +"@comunica/bus-http@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-http/-/bus-http-1.19.0.tgz#853de224b08258169da8bacc6dfc87b3da59256f" + integrity sha512-tbhB68Fj4b8WO+/38vVBvxV/E0W3d2yca5cANbCmdfrlO/TZXQ2JVD+1ylxR0uZiHXSHvClwGE7nSExBrE7gtw== + dependencies: + is-stream "^2.0.0" + web-streams-node "^0.4.0" + +"@comunica/bus-init@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-init/-/bus-init-1.19.0.tgz#f93e4513e3cd843269486ccd30d60b9d81a74235" + integrity sha512-QRsKQBa1dNJ55s5BiKcWzjXJPfKHx0HaS/ZQClusxQJkKqYJHcMw2KdQjlxYV5vxEowKAXKISMxdhtqPvpUBvA== + +"@comunica/bus-rdf-parse-html@^1.19.0", "@comunica/bus-rdf-parse-html@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-1.19.0.tgz#a308bd7554cf87d71e450e829c5bc404537170fc" + integrity sha512-UZ5brAVi7LlEw2kdjoVjc4191BoRVby9DIV/fiIADL2L0ALmt2YpoMEaIefHzKAxdgT3rUDkQMvJWFoQBKjw3Q== + dependencies: + "@types/rdf-js" "*" + +"@comunica/bus-rdf-parse@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/bus-rdf-parse/-/bus-rdf-parse-1.19.0.tgz#97999d045401c315b06633a18cbff09ee2204bfd" + integrity sha512-j/1QCVxSmpJPk56rbK2Q3W/jCd2jPIxnBSPFz+2OQ6vXvKojHIx7j5jI18aFhSfQcxEX1LRoSbXAjS7PzKWByQ== + dependencies: + "@comunica/actor-abstract-mediatyped" "^1.19.0" + "@types/rdf-js" "*" + +"@comunica/core@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/core/-/core-1.19.0.tgz#9a1d38e95eff3e3ce656e24e1de1d8e64c68dec1" + integrity sha512-/G9rNRL8KdvSuxnWObUhA0+sbcHCFejTrj0vnHaf/QZtqEO0b238QzoS9swwP1PdzPdR1R6TJ2ikr8AcVZyd9g== + dependencies: + immutable "^3.8.2" + +"@comunica/mediator-combine-union@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-combine-union/-/mediator-combine-union-1.19.0.tgz#5468ebab7e9c5589888bf85b52b2a6a0d8ed6e81" + integrity sha512-oNI9LjgJWu9O/sy3IEI78l16Y+I0yJx/mLhKyArDdh4ZgLeS4/7xtfWNFn9xs+1jMbKFBRtZwZe8M2qV0AAiWg== + +"@comunica/mediator-number@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-number/-/mediator-number-1.19.0.tgz#69bfde044d772f59fc58d4f707e8eb98b78ba9c9" + integrity sha512-WN8MN64j0hOf1hEuiKGnagW6+m3nIcJWESZN3Y99jepIHxcBwy1XKmLoMK3qIIMPgBOOXFiTrZJQi9QZKJYtig== + +"@comunica/mediator-race@~1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@comunica/mediator-race/-/mediator-race-1.19.0.tgz#0588840eca53bc415fa505288c8a4bafc0248793" + integrity sha512-cW/wqjuC5qxeTL2EUcPDmvHr4ve1AE3faNFyQRrB3+BMB0K3ZnPfBvaajRBmgSIIb8jyxBQXRGcIxAv/RtURlg== + +"@dabh/diagnostics@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" + integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -1050,6 +1188,19 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== +"@types/minimist@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== + +"@types/n3@^1.4.4": + version "1.4.4" + resolved "https://registry.yarnpkg.com/@types/n3/-/n3-1.4.4.tgz#ed4f58200766ffc850d281e28c566eacb2b0b592" + integrity sha512-xsWfwyDh0uAH0CXvwqe9vb2UEDafMjRez/pB7yZwbWpd9Olw2wdxaL32FtdHjmmFE6b9i+j249JfRyZnvWkoqg== + dependencies: + "@types/node" "*" + "@types/rdf-js" "*" + "@types/node@*", "@types/node@>= 8": version "13.7.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" @@ -1065,6 +1216,23 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" integrity sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ== +"@types/node@^14.14.7": + version "14.14.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" + integrity sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A== + +"@types/parse-link-header@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.0.tgz#69f059e40a0fa93dc2e095d4142395ae6adc5d7a" + integrity sha512-fCA3btjE7QFeRLfcD0Sjg+6/CnmC66HpMBoRfRzd2raTaWMJV21CCZ0LO8MOqf8onl5n0EPfjq4zDhbyX8SVwA== + +"@types/rdf-js@*", "@types/rdf-js@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/rdf-js/-/rdf-js-4.0.0.tgz#96f7314b09b77ecd16fca7f358db90db8ac86d1b" + integrity sha512-2uaR7ks0380MqzUWGOPOOk9yZIr/6MOaCcaj3ntKgd2PqNocgi8j5kSHIJTDe+5ABtTHqKMSE0v0UqrsT8ibgQ== + dependencies: + "@types/node" "*" + "@types/rdf-js@^2.0.1", "@types/rdf-js@^2.0.2": version "2.0.11" resolved "https://registry.yarnpkg.com/@types/rdf-js/-/rdf-js-2.0.11.tgz#b9e398504ceb9f00eaa3b3036b643dc3490cf362" @@ -1079,6 +1247,11 @@ dependencies: "@types/node" "*" +"@types/semver@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" + integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== + "@zkochan/cmd-shim@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" @@ -1375,6 +1548,11 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +async@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + asynciterator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/asynciterator/-/asynciterator-3.0.0.tgz#0dd253bb8cc314469a5644eea1f88596fc16ffda" @@ -1774,7 +1952,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -1793,11 +1971,40 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.5.2: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" + integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colors@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +colorspace@1.1.x: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" + integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== + dependencies: + color "3.0.x" + text-hex "1.0.x" + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -1836,17 +2043,24 @@ component-emitter@^1.2.1, component-emitter@^1.3.0: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -componentsjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/componentsjs/-/componentsjs-3.4.0.tgz#eae602c51c9e9b024eacbd3cea01e5604eef7a80" - integrity sha512-lxxiYdIoBJHycyiUVt5jMK12OHkbNL7OEJSi/vQKUttT66hoWt3kjg+OY+TMs/sqcvigAjGTladTf7XUYIMJyA== +componentsjs@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/componentsjs/-/componentsjs-4.0.4.tgz#6a9a7106eaac08726c69b4193cbb329104ef1ab3" + integrity sha512-ShaiHDcUPmiBbfRQwiV6b5oiooAkzzW7l//gZaE+rTwhRBWGbMU7Ll3NKsf+T77pn297VDzgvj7xw631Op95HA== dependencies: - global-modules "^1.0.0" - jsonld "^0.4.11" - lodash "^4.17.4" + "@types/minimist" "^1.2.0" + "@types/node" "^14.14.7" + "@types/rdf-js" "*" + "@types/semver" "^7.3.4" + jsonld-context-parser "^2.1.1" minimist "^1.2.0" - n3 "^0.9.1" - requireg "^0.1.7" + rdf-data-factory "^1.0.4" + rdf-object "^1.8.0" + rdf-parse "^1.7.0" + rdf-quad "^1.5.0" + rdf-terms "^1.6.2" + semver "^7.3.2" + winston "^3.3.3" concat-map@0.0.1: version "0.0.1" @@ -2029,6 +2243,13 @@ coveralls@^3.0.9: minimist "^1.2.0" request "^2.88.0" +cross-fetch@^3.0.5, cross-fetch@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" + integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== + dependencies: + node-fetch "2.6.1" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -2161,11 +2382,6 @@ deep-eql@^3.0.1: dependencies: type-detect "^4.0.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -2269,6 +2485,43 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-serializer@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" + integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" + integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== + +domhandler@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" + integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== + dependencies: + domelementtype "^2.1.0" + +domutils@^2.4.2, domutils@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" + integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.0.1" + domhandler "^4.0.0" + dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" @@ -2316,6 +2569,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -2330,6 +2588,11 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" +entities@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + env-paths@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" @@ -2435,11 +2698,6 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -es6-promise@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc" - integrity sha1-lu258v2wGZWCKyY92KratnSBgbw= - es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -2628,13 +2886,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -2715,11 +2966,16 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@^2.0.7: +fast-safe-stringify@^2.0.4, fast-safe-stringify@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fecha@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" + integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== + figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -2831,6 +3087,16 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.5.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" + integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3133,26 +3399,6 @@ glob@7.1.6, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -3294,13 +3540,6 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: version "2.8.6" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.6.tgz#3a6e6d0324c5371fc8c7ba7175e1e5d14578724d" @@ -3311,6 +3550,26 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== +htmlparser2@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" + integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.3.0" + domutils "^2.4.2" + entities "^2.0.0" + +htmlparser2@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.0.tgz#c2da005030390908ca4c91e5629e418e0665ac01" + integrity sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.4.4" + entities "^2.0.0" + http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -3377,6 +3636,11 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +immutable@^3.8.2: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -3441,7 +3705,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -3527,6 +3791,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3772,7 +4041,7 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -3979,6 +4248,18 @@ jsonld-context-parser@^2.0.0: isomorphic-fetch "^2.2.1" relative-to-absolute-iri "^1.0.5" +jsonld-context-parser@^2.0.1, jsonld-context-parser@^2.0.2, jsonld-context-parser@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.1.1.tgz#0de2b459465b199ef6014a94d7af9b2485360374" + integrity sha512-7yKhnwFaiCnDPUZYQuAWyT0zZBfOKZDyjtqFVNbXrYRkboU+m55UsastsfXbo7qNroTGdFiEyxHEHDEfBC0P4Q== + dependencies: + "@types/http-link-header" "^1.0.1" + "@types/node" "^13.1.0" + canonicalize "^1.0.1" + cross-fetch "^3.0.6" + http-link-header "^1.0.2" + relative-to-absolute-iri "^1.0.5" + jsonld-streaming-parser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-2.0.0.tgz#d943202d17cd630b4ef2b23726a474575beda8c2" @@ -3992,6 +4273,19 @@ jsonld-streaming-parser@^2.0.0: jsonld-context-parser "^2.0.0" jsonparse "^1.3.1" +jsonld-streaming-parser@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-2.2.0.tgz#08bb8c53842e584fc82a8e1404be2dbaeb5bc96e" + integrity sha512-uaBP4sSFqYuupkfsQhRj7U/0KEFTqxElaUPn3CtYGEOsjvqCEexTkrVI7fPLoDERMIC2UfbzdHuN6rmESFGzgw== + dependencies: + "@types/http-link-header" "^1.0.1" + "@types/rdf-js" "^4.0.0" + canonicalize "^1.0.1" + http-link-header "^1.0.2" + jsonld-context-parser "^2.0.1" + jsonparse "^1.3.1" + rdf-data-factory "^1.0.2" + jsonld-streaming-serializer@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.1.0.tgz#1639d2811241bc23a78fe3b5d9d6eb9b3fe887ce" @@ -4000,16 +4294,6 @@ jsonld-streaming-serializer@^1.1.0: "@types/rdf-js" "^2.0.1" jsonld-context-parser "^2.0.0" -jsonld@^0.4.11: - version "0.4.12" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-0.4.12.tgz#a02f205d5341414df1b6d8414f1b967a712073e8" - integrity sha1-oC8gXVNBQU3xtthBTxuWenEgc+g= - dependencies: - es6-promise "^2.0.0" - pkginfo "~0.4.0" - request "^2.61.0" - xmldom "0.1.19" - jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -4049,6 +4333,11 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + lcov-parse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" @@ -4206,7 +4495,12 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1: +lodash.uniqwith@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz#7a0cbf65f43b5928625a9d4d0dc54b18cadc7ef3" + integrity sha1-egy/ZfQ7WShiWp1NDcVLGMrcfvM= + +lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -4223,6 +4517,17 @@ log-symbols@3.0.0: dependencies: chalk "^2.4.2" +logform@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2" + integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg== + dependencies: + colors "^1.2.1" + fast-safe-stringify "^2.0.4" + fecha "^4.2.0" + ms "^2.1.1" + triple-beam "^1.3.0" + lolex@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" @@ -4384,6 +4689,16 @@ methods@1.1.2, methods@^1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +microdata-rdf-streaming-parser@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-1.1.0.tgz#1807cfc9b44e739defac7be879f89545cb4dfe59" + integrity sha512-nvPEFzG4vZWzWJP2x8Ax7mJmdrFkSYrfhdTUDHLtXYZJVl8Ip7ScHUPLkUfX+Ci4g7sOdgHsotkxuccnlxtCAg== + dependencies: + "@types/rdf-js" "^4.0.0" + htmlparser2 "^5.0.0" + rdf-data-factory "^1.0.2" + relative-to-absolute-iri "^1.0.2" + micromatch@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -4610,11 +4925,6 @@ mz@^2.5.0: object-assign "^4.0.1" thenify-all "^1.0.0" -n3@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/n3/-/n3-0.9.1.tgz#430b547d58dc7381408c45784dd8058171903932" - integrity sha1-QwtUfVjcc4FAjEV4TdgFgXGQOTI= - n3@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/n3/-/n3-1.3.5.tgz#ea00062b64fef71dc3a92befc00413a733ef1029" @@ -4625,6 +4935,14 @@ n3@^1.3.6: resolved "https://registry.yarnpkg.com/n3/-/n3-1.3.6.tgz#02766d11dd4afe4b3546555a00a095027d6e0256" integrity sha512-EPaniuSPI+f66F8MP3GPXI3CA4cgSaA688PGUEs1Q5qyeAf/yIhe/8WbDV5+Hnmn8/ewcP7qYY6vfVnjbL5jcg== +n3@^1.6.3: + version "1.7.0" + resolved "https://registry.yarnpkg.com/n3/-/n3-1.7.0.tgz#618391e1685d24ff642213777156380653807405" + integrity sha512-8R0Qj545WnVLQxOfxxyFKzOpO13hF3jhSMJfO0FNqvbsPZDiR9ZDmGGjXAlcoZDf/88OsCYd7rHML284vm1h6A== + dependencies: + queue-microtask "^1.1.2" + readable-stream "^3.6.0" + nan@^2.14.0: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -4662,11 +4980,6 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== -nested-error-stacks@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" - integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -4681,6 +4994,11 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -4939,6 +5257,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -5148,10 +5473,12 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse-link-header@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" + integrity sha1-vt/g0hGK64S+deewJUGeyKYRQKc= + dependencies: + xtend "~4.0.1" parse-path@^4.0.0: version "4.0.1" @@ -5213,7 +5540,7 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.5, path-parse@^1.0.6: +path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -5304,11 +5631,6 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" -pkginfo@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" - integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -5350,6 +5672,11 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-polyfill@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-1.1.6.tgz#cd04eff46f5c95c3a7d045591d79b5e3e01f12d7" + integrity sha1-zQTv9G9clcOn0EVZHXm14+AfEtc= + promise-retry@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" @@ -5460,20 +5787,74 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +queue-microtask@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" + integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= -rc@~1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== +rdf-data-factory@^1.0.0, rdf-data-factory@^1.0.1, rdf-data-factory@^1.0.2, rdf-data-factory@^1.0.3, rdf-data-factory@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rdf-data-factory/-/rdf-data-factory-1.0.4.tgz#4e22fc462620fbca650eb2d26c4a13a103edd777" + integrity sha512-ZIIwEkLcV7cTc+atvQFzAETFVRHz1BRe/MhdkZqYse8vxskErj8/bF/Ittc3B5c0GTyw6O3jVF2V7xBRGyRoSQ== dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" + "@types/rdf-js" "^4.0.0" + +rdf-literal@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/rdf-literal/-/rdf-literal-1.2.0.tgz#3159cce5587007144ea4a3a713cea31af4fc0c68" + integrity sha512-N7nyfp/xzoiUuJt0xZ80BvBGkCPwWejgVDkCxWDSuooXKSows4ToW+KouYkMHLcoFzGg1Rlw2lk6btjMJg5aSA== + dependencies: + "@types/rdf-js" "^4.0.0" + rdf-data-factory "^1.0.1" + +rdf-object@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/rdf-object/-/rdf-object-1.8.0.tgz#f7b6c3c997d87d72a5a5651c6bb7ef63d6e0af24" + integrity sha512-/yq5vk8eqspZwIcK1BS3wPcmv4kinooaPX5SRDpCnthCjOcDiyNgPnfXqMt5OpDWhykDkNJeTCvqQifFqZRPyw== + dependencies: + jsonld-context-parser "^2.0.2" + rdf-data-factory "^1.0.3" + rdf-string "^1.5.0" + streamify-array "^1.0.1" + +rdf-parse@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/rdf-parse/-/rdf-parse-1.7.0.tgz#3a57d02d7f3d99a7ecd715691e4f53cbe3e49634" + integrity sha512-P3meLRU9OkZZz9OYq26VeRrxIDrzEBNAScAWcTX1tsf4Z85WTLhiwP5jC+OZBSzRSlybkkb6EYSVA1M4eykiBg== + dependencies: + "@comunica/actor-http-native" "~1.19.0" + "@comunica/actor-rdf-parse-html" "~1.19.0" + "@comunica/actor-rdf-parse-html-microdata" "~1.19.0" + "@comunica/actor-rdf-parse-html-rdfa" "~1.19.0" + "@comunica/actor-rdf-parse-html-script" "~1.19.0" + "@comunica/actor-rdf-parse-jsonld" "~1.19.0" + "@comunica/actor-rdf-parse-n3" "~1.19.0" + "@comunica/actor-rdf-parse-rdfxml" "~1.19.0" + "@comunica/actor-rdf-parse-xml-rdfa" "~1.19.0" + "@comunica/bus-http" "~1.19.0" + "@comunica/bus-init" "~1.19.0" + "@comunica/bus-rdf-parse" "~1.19.0" + "@comunica/bus-rdf-parse-html" "~1.19.0" + "@comunica/core" "~1.19.0" + "@comunica/mediator-combine-union" "~1.19.0" + "@comunica/mediator-number" "~1.19.0" + "@comunica/mediator-race" "~1.19.0" + "@types/rdf-js" "*" + stream-to-string "^1.2.0" + +rdf-quad@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/rdf-quad/-/rdf-quad-1.5.0.tgz#531c4c132cdcbc0ca3295a3df9060cd3b0ce896f" + integrity sha512-LnCYx8XbRVW1wr6UiZPSy2Tv7bXAtEwuyck/68dANhFu8VMnGS+QfUNP3b9YI6p4Bfd/fyDx5E3x81IxGV6BzA== + dependencies: + rdf-data-factory "^1.0.1" + rdf-literal "^1.2.0" + rdf-string "^1.5.0" rdf-string@^1.3.1: version "1.3.1" @@ -5482,6 +5863,41 @@ rdf-string@^1.3.1: dependencies: "@rdfjs/data-model" "^1.1.1" +rdf-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/rdf-string/-/rdf-string-1.5.0.tgz#5d0118f8788fe509f06d8cefc181fd979d712412" + integrity sha512-3TEJuDIKUADgZrfcZG+zAN4GfVA1Ei2sKA7Z7QVHkAE36wWoRGPJbGihPQMldgzvy9lG2nzZU+CXz+6oGSQNsQ== + dependencies: + rdf-data-factory "^1.0.0" + +rdf-terms@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/rdf-terms/-/rdf-terms-1.6.2.tgz#e31ad9023e0ee163dafa3dd847410c61556d0d57" + integrity sha512-dASpdYHYLEwzN9iSymJie1WUj6VHXy1By8Am4g2rJlhTfVvNitsJpDY+A3X2QehlGhCaWjHMzXS4q/JKNPI80A== + dependencies: + lodash.uniqwith "^4.5.0" + rdf-data-factory "^1.0.1" + +rdfa-streaming-parser@^1.3.0, rdfa-streaming-parser@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/rdfa-streaming-parser/-/rdfa-streaming-parser-1.4.0.tgz#051bcfba4d8cfb37198011260befdb3e900f7149" + integrity sha512-tx2rsBpK7MhpuvuMFdpoIfH8t8ij/traX6+hiFe4WV648eWlcYKURLVdWwqqPkF4qwnT1PH8mqBpBY7CNpbjvg== + dependencies: + "@types/rdf-js" "^4.0.0" + htmlparser2 "^5.0.0" + rdf-data-factory "^1.0.2" + relative-to-absolute-iri "^1.0.2" + +rdfxml-streaming-parser@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.4.0.tgz#32cae3cfbc77aef110f6be8e067935fbf156f3b6" + integrity sha512-/FKDCq4tuSWz8PZaaPxqIQpenEvRR3Gsqllqg4VmdPFN6WiWfbaD244cKASfXfQHt9Bw7tLsLHsmtA1isIPBCg== + dependencies: + "@types/rdf-js" "^4.0.0" + rdf-data-factory "^1.0.2" + relative-to-absolute-iri "^1.0.0" + sax "^1.2.4" + read-cmd-shim@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" @@ -5568,7 +5984,12 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream-node-to-web@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz#8b7614faa1465ebfa0da9b9ca6303fa27073b7cf" + integrity sha1-i3YU+qFGXr+g2pucpjA/onBzt88= + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -5581,7 +6002,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -5636,6 +6057,11 @@ regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +relative-to-absolute-iri@^1.0.0, relative-to-absolute-iri@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.6.tgz#7111dac5730587e3fbca3e0f48585fbc88c147a7" + integrity sha512-Xw5/Zx6iWSCMJUXwXVOjySjH8Xli4hVFL9QQFvkl1qEmFBG94J+QUI9emnoctOCD3285f1jNV+QWV9eDYwIdfQ== + relative-to-absolute-iri@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.5.tgz#9ddc91cad85898d10724864a62aacfb35caf5766" @@ -5665,7 +6091,7 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.61.0, request@^2.88.0, request@^2.88.2: +request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -5701,15 +6127,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requireg@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/requireg/-/requireg-0.1.8.tgz#75c1d495294fa5ddfd51e4fcca4965c44f1ed8b1" - integrity sha512-qjbwnviLXg4oZiAFEr1ExbevkUPaEiP1uPGSoFCVgCCcbo4PXv9SmiJpXNYmgTBCZ8fY1Jy+sk7F9/kPNepeDw== - dependencies: - nested-error-stacks "~2.0.1" - rc "~1.2.7" - resolve "~1.7.1" - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -5717,14 +6134,6 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" -resolve-dir@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -5759,13 +6168,6 @@ resolve@^1.13.1, resolve@^1.17.0: dependencies: path-parse "^1.0.6" -resolve@~1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" - integrity sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw== - dependencies: - path-parse "^1.0.5" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -5880,6 +6282,11 @@ samsam@~1.1: resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621" integrity sha1-n1CHQZtNCR8jJXHn+lLpCw9VJiE= +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -5951,6 +6358,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + sinon-chai@^3.0.0: version "3.5.0" resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.5.0.tgz#c9a78304b0e15befe57ef68e8a85a00553f5c60e" @@ -6173,6 +6587,11 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -6194,6 +6613,18 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +stream-to-string@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stream-to-string/-/stream-to-string-1.2.0.tgz#3ca506a097ecbf78b0e0aee0b6fa5c4565412a15" + integrity sha512-8drZlFIKBHSMdX9GCWv8V9AAWnQcTqw0iAI6/GC7UJ0H0SwKeFKjOoZfGY1tOU00GGU7FYZQoJ/ZCUEoXhD7yQ== + dependencies: + promise-polyfill "^1.1.6" + +streamify-array@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/streamify-array/-/streamify-array-1.0.1.tgz#741cd1e7eaf1d451a0da484e5dc986a76dfa479c" + integrity sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA== + strftime@~0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/strftime/-/strftime-0.6.2.tgz#da4c12073cebee3cd60f4821940cc27b19d348a1" @@ -6352,11 +6783,6 @@ strip-json-comments@^3.1.0: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - strong-log-transformer@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -6459,6 +6885,11 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -6572,6 +7003,11 @@ trim-off-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= +triple-beam@^1.2.0, triple-beam@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" + integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== + tsconfig-paths@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" @@ -6797,6 +7233,20 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" +web-streams-node@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/web-streams-node/-/web-streams-node-0.4.0.tgz#641e42d7a7c4df95785a774e2484ba93d36fd672" + integrity sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w== + dependencies: + is-stream "^1.1.0" + readable-stream-node-to-web "^1.0.1" + web-streams-ponyfill "^1.4.1" + +web-streams-ponyfill@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz#0ae863cc5f7493903679f16b08cbf14d432b62f4" + integrity sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA== + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -6835,7 +7285,7 @@ which@2.0.2, which@^2.0.1: dependencies: isexe "^2.0.0" -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -6856,6 +7306,29 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" +winston-transport@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" + integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== + dependencies: + readable-stream "^2.3.7" + triple-beam "^1.2.0" + +winston@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" + integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== + dependencies: + "@dabh/diagnostics" "^2.0.2" + async "^3.1.0" + is-stream "^2.0.0" + logform "^2.2.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.4.0" + word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -6952,11 +7425,6 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -xmldom@0.1.19: - version "0.1.19" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.19.tgz#631fc07776efd84118bf25171b37ed4d075a0abc" - integrity sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw= - xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From d86070d38291452db86132372366a9c0d552f072 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 15 Jan 2021 14:23:17 +0100 Subject: [PATCH 149/165] Bump to release version v3.2.0 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/core/package.json | 2 +- packages/datasource-composite/package.json | 4 ++-- packages/datasource-hdt/package.json | 4 ++-- packages/datasource-jsonld/package.json | 4 ++-- packages/datasource-n3/package.json | 4 ++-- packages/datasource-sparql/package.json | 4 ++-- packages/feature-memento/package.json | 4 ++-- packages/feature-qpf/package.json | 4 ++-- packages/feature-summary/package.json | 4 ++-- packages/feature-webid/package.json | 4 ++-- packages/preset-qpf/package.json | 2 +- packages/server/package.json | 22 +++++++++++----------- 14 files changed, 38 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbe41688..14927a46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.2.0](https://github.com/LinkedDataFragments/Server.js/compare/v3.1.0...v3.2.0) - 2021-01-15 + +### Changed +* [Update to Components.js 4](https://github.com/LinkedDataFragments/Server.js/commit/e90db5c3e439259466fa0cf789e2c4b028b584f2) + ## [v3.1.0](https://github.com/LinkedDataFragments/Server.js/compare/v3.0.9...v3.1.0) - 2020-08-10 diff --git a/lerna.json b/lerna.json index e8b47c57..ceeb3c83 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.1.0", + "version": "3.2.0", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/core/package.json b/packages/core/package.json index acc5f39d..3662a021 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/core", "description": "Linked Data Fragments Server - Core", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index b9b0b9b9..abd9a2e9 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-composite", "description": "Linked Data Fragments Server - Composite Datasource", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -28,6 +28,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" } } diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index 7b4ed39a..447c104b 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -28,7 +28,7 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" }, "optionalDependencies": { "hdt": "^3.0.1" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index cf5bffc5..8aa42ecd 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-jsonld", "description": "Linked Data Fragments Server - JSON-LD Datasource", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -29,6 +29,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" } } diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index 72e8610d..af8d3fa0 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -28,6 +28,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" } } diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 9258e89a..f00801e4 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-sparql", "description": "Linked Data Fragments Server - SPARQL Datasource", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -31,6 +31,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" } } diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 49166e3e..768164b2 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-memento", "description": "Linked Data Fragments Server - Memento", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -29,6 +29,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" } } diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index a6264aff..7ebae409 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-qpf", "description": "Linked Data Fragments Server - Quad Pattern Fragments", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -31,6 +31,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" } } diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index 78f235bc..3cd69075 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-summary", "description": "Linked Data Fragments Server - Memento", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "bin": { @@ -33,6 +33,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" } } diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index 37e6c8e4..35a1ca20 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-webid", "description": "Linked Data Fragments Server - WebID", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -31,6 +31,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.1.0" + "@ldf/core": "^3.2.0" } } diff --git a/packages/preset-qpf/package.json b/packages/preset-qpf/package.json index c3c197c9..5ee75436 100644 --- a/packages/preset-qpf/package.json +++ b/packages/preset-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/preset-qpf", "description": "Linked Data Fragments Server - Preset Quad Pattern Fragments", - "version": "3.0.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "main": "index.js", diff --git a/packages/server/package.json b/packages/server/package.json index 7fd7d15a..a6533080 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.1.0", + "version": "3.2.0", "lsd:module": true, "license": "MIT", "bin": { @@ -27,15 +27,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "@ldf/core": "^3.1.0", - "@ldf/datasource-composite": "^3.1.0", - "@ldf/datasource-hdt": "^3.1.0", - "@ldf/datasource-jsonld": "^3.1.0", - "@ldf/datasource-n3": "^3.1.0", - "@ldf/datasource-sparql": "^3.1.0", - "@ldf/feature-memento": "^3.1.0", - "@ldf/feature-qpf": "^3.1.0", - "@ldf/feature-summary": "^3.1.0", - "@ldf/preset-qpf": "^3.0.0" + "@ldf/core": "^3.2.0", + "@ldf/datasource-composite": "^3.2.0", + "@ldf/datasource-hdt": "^3.2.0", + "@ldf/datasource-jsonld": "^3.2.0", + "@ldf/datasource-n3": "^3.2.0", + "@ldf/datasource-sparql": "^3.2.0", + "@ldf/feature-memento": "^3.2.0", + "@ldf/feature-qpf": "^3.2.0", + "@ldf/feature-summary": "^3.2.0", + "@ldf/preset-qpf": "^3.2.0" } } From 847529ef28893b6bb4519aee234bacd3bc9dc223 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 23 Feb 2021 00:49:30 +0000 Subject: [PATCH 150/165] Pin dependencies --- packages/server/package.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/server/package.json b/packages/server/package.json index a6533080..4f2c79e9 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -27,15 +27,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "@ldf/core": "^3.2.0", - "@ldf/datasource-composite": "^3.2.0", - "@ldf/datasource-hdt": "^3.2.0", - "@ldf/datasource-jsonld": "^3.2.0", - "@ldf/datasource-n3": "^3.2.0", - "@ldf/datasource-sparql": "^3.2.0", - "@ldf/feature-memento": "^3.2.0", - "@ldf/feature-qpf": "^3.2.0", - "@ldf/feature-summary": "^3.2.0", - "@ldf/preset-qpf": "^3.2.0" + "@ldf/core": "3.2.0", + "@ldf/datasource-composite": "3.2.0", + "@ldf/datasource-hdt": "3.2.0", + "@ldf/datasource-jsonld": "3.2.0", + "@ldf/datasource-n3": "3.2.0", + "@ldf/datasource-sparql": "3.2.0", + "@ldf/feature-memento": "3.2.0", + "@ldf/feature-qpf": "3.2.0", + "@ldf/feature-summary": "3.2.0", + "@ldf/preset-qpf": "3.2.0" } } From 2efd2548cc548d23e00397dc72998277a4b7d7e9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 2 Mar 2021 23:46:26 +0000 Subject: [PATCH 151/165] Update dependency lerna to v4 --- package.json | 2 +- yarn.lock | 4302 +++++++++++++++++++++++--------------------------- 2 files changed, 1948 insertions(+), 2356 deletions(-) diff --git a/package.json b/package.json index 05c4dac6..67f82c68 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "coveralls": "^3.0.9", "eslint": "^7.0.0", "eslint-plugin-import": "^2.22.0", - "lerna": "^3.4.0", + "lerna": "^4.0.0", "manual-git-changelog": "^1.0.1", "mocha": "^8.0.0", "nyc": "^15.0.0", diff --git a/yarn.lock b/yarn.lock index 313028be..008b4cf3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -257,80 +257,6 @@ enabled "2.0.x" kuler "^2.0.0" -"@evocateur/libnpmaccess@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" - integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - -"@evocateur/libnpmpublish@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" - integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - semver "^5.5.1" - ssri "^6.0.1" - -"@evocateur/npm-registry-fetch@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" - integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.1.2" - -"@evocateur/pacote@^9.6.3": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" - integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - bluebird "^3.5.3" - cacache "^12.0.3" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.5.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^3.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.3" - safe-buffer "^5.2.0" - semver "^5.7.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - "@hutson/parse-repository-url@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" @@ -351,796 +277,864 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@lerna/add@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309" - integrity sha512-AnH1oRIEEg/VDa3SjYq4x1/UglEAvrZuV0WssHUMN81RTZgQk3we+Mv3qZNddrZ/fBcZu2IAdN/EQ3+ie2JxKQ== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" +"@lerna/add@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-4.0.0.tgz#c36f57d132502a57b9e7058d1548b7a565ef183f" + integrity sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng== + dependencies: + "@lerna/bootstrap" "4.0.0" + "@lerna/command" "4.0.0" + "@lerna/filter-options" "4.0.0" + "@lerna/npm-conf" "4.0.0" + "@lerna/validation-error" "4.0.0" dedent "^0.7.0" - npm-package-arg "^6.1.0" - p-map "^2.1.0" - semver "^6.2.0" - -"@lerna/bootstrap@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.20.0.tgz#635d71046830f208e851ab429a63da1747589e37" - integrity sha512-Wylullx3uthKE7r4izo09qeRGL20Y5yONlQEjPCfnbxCC2Elu+QcPu4RC6kqKQ7b+g7pdC3OOgcHZjngrwr5XQ== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/has-npm-version" "3.16.5" - "@lerna/npm-install" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/symlink-binary" "3.17.0" - "@lerna/symlink-dependencies" "3.17.0" - "@lerna/validation-error" "3.13.0" + npm-package-arg "^8.1.0" + p-map "^4.0.0" + pacote "^11.2.6" + semver "^7.3.4" + +"@lerna/bootstrap@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-4.0.0.tgz#5f5c5e2c6cfc8fcec50cb2fbe569a8c607101891" + integrity sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw== + dependencies: + "@lerna/command" "4.0.0" + "@lerna/filter-options" "4.0.0" + "@lerna/has-npm-version" "4.0.0" + "@lerna/npm-install" "4.0.0" + "@lerna/package-graph" "4.0.0" + "@lerna/pulse-till-done" "4.0.0" + "@lerna/rimraf-dir" "4.0.0" + "@lerna/run-lifecycle" "4.0.0" + "@lerna/run-topologically" "4.0.0" + "@lerna/symlink-binary" "4.0.0" + "@lerna/symlink-dependencies" "4.0.0" + "@lerna/validation-error" "4.0.0" dedent "^0.7.0" - get-port "^4.2.0" - multimatch "^3.0.0" - npm-package-arg "^6.1.0" + get-port "^5.1.1" + multimatch "^5.0.0" + npm-package-arg "^8.1.0" npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - read-package-tree "^5.1.6" - semver "^6.2.0" - -"@lerna/changed@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.20.0.tgz#66b97ebd6c8f8d207152ee524a0791846a9097ae" - integrity sha512-+hzMFSldbRPulZ0vbKk6RD9f36gaH3Osjx34wrrZ62VB4pKmjyuS/rxVYkCA3viPLHoiIw2F8zHM5BdYoDSbjw== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/check-working-tree@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" - integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== - dependencies: - "@lerna/collect-uncommitted" "3.16.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/validation-error" "3.13.0" - -"@lerna/child-process@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" - integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== - dependencies: - chalk "^2.3.1" - execa "^1.0.0" - strong-log-transformer "^2.0.0" - -"@lerna/clean@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.20.0.tgz#ba777e373ddeae63e57860df75d47a9e5264c5b2" - integrity sha512-9ZdYrrjQvR5wNXmHfDsfjWjp0foOkCwKe3hrckTzkAeQA1ibyz5llGwz5e1AeFrV12e2/OLajVqYfe+qdkZUgg== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - -"@lerna/cli@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" - integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== - dependencies: - "@lerna/global-options" "3.13.0" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + read-package-tree "^5.3.1" + semver "^7.3.4" + +"@lerna/changed@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-4.0.0.tgz#b9fc76cea39b9292a6cd263f03eb57af85c9270b" + integrity sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ== + dependencies: + "@lerna/collect-updates" "4.0.0" + "@lerna/command" "4.0.0" + "@lerna/listable" "4.0.0" + "@lerna/output" "4.0.0" + +"@lerna/check-working-tree@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz#257e36a602c00142e76082a19358e3e1ae8dbd58" + integrity sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q== + dependencies: + "@lerna/collect-uncommitted" "4.0.0" + "@lerna/describe-ref" "4.0.0" + "@lerna/validation-error" "4.0.0" + +"@lerna/child-process@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-4.0.0.tgz#341b96a57dffbd9705646d316e231df6fa4df6e1" + integrity sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q== + dependencies: + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/clean@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-4.0.0.tgz#8f778b6f2617aa2a936a6b5e085ae62498e57dc5" + integrity sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA== + dependencies: + "@lerna/command" "4.0.0" + "@lerna/filter-options" "4.0.0" + "@lerna/prompt" "4.0.0" + "@lerna/pulse-till-done" "4.0.0" + "@lerna/rimraf-dir" "4.0.0" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + +"@lerna/cli@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-4.0.0.tgz#8eabd334558836c1664df23f19acb95e98b5bbf3" + integrity sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA== + dependencies: + "@lerna/global-options" "4.0.0" dedent "^0.7.0" npmlog "^4.1.2" - yargs "^14.2.2" + yargs "^16.2.0" -"@lerna/collect-uncommitted@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" - integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== +"@lerna/collect-uncommitted@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz#855cd64612969371cfc2453b90593053ff1ba779" + integrity sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g== dependencies: - "@lerna/child-process" "3.16.5" - chalk "^2.3.1" - figgy-pudding "^3.5.1" + "@lerna/child-process" "4.0.0" + chalk "^4.1.0" npmlog "^4.1.2" -"@lerna/collect-updates@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" - integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== +"@lerna/collect-updates@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-4.0.0.tgz#8e208b1bafd98a372ff1177f7a5e288f6bea8041" + integrity sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw== dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/describe-ref" "3.16.5" + "@lerna/child-process" "4.0.0" + "@lerna/describe-ref" "4.0.0" minimatch "^3.0.4" npmlog "^4.1.2" - slash "^2.0.0" - -"@lerna/command@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.5.tgz#14c6d2454adbfd365f8027201523e6c289cd3cd9" - integrity sha512-36EnqR59yaTU4HrR1C9XDFti2jRx0BgpIUBeWn129LZZB8kAB3ov1/dJNa1KcNRKp91DncoKHLY99FZ6zTNpMQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/project" "3.18.0" - "@lerna/validation-error" "3.13.0" - "@lerna/write-log-file" "3.13.0" + slash "^3.0.0" + +"@lerna/command@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-4.0.0.tgz#991c7971df8f5bf6ae6e42c808869a55361c1b98" + integrity sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A== + dependencies: + "@lerna/child-process" "4.0.0" + "@lerna/package-graph" "4.0.0" + "@lerna/project" "4.0.0" + "@lerna/validation-error" "4.0.0" + "@lerna/write-log-file" "4.0.0" clone-deep "^4.0.1" dedent "^0.7.0" - execa "^1.0.0" + execa "^5.0.0" is-ci "^2.0.0" npmlog "^4.1.2" -"@lerna/conventional-commits@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.18.5.tgz#08efd2e5b45acfaf3f151a53a3ec7ecade58a7bc" - integrity sha512-qcvXIEJ3qSgalxXnQ7Yxp5H9Ta5TVyai6vEor6AAEHc20WiO7UIdbLDCxBtiiHMdGdpH85dTYlsoYUwsCJu3HQ== - dependencies: - "@lerna/validation-error" "3.13.0" - conventional-changelog-angular "^5.0.3" - conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^5.0.0" - fs-extra "^8.1.0" - get-stream "^4.0.0" +"@lerna/conventional-commits@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz#660fb2c7b718cb942ead70110df61f18c6f99750" + integrity sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw== + dependencies: + "@lerna/validation-error" "4.0.0" + conventional-changelog-angular "^5.0.12" + conventional-changelog-core "^4.2.2" + conventional-recommended-bump "^6.1.0" + fs-extra "^9.1.0" + get-stream "^6.0.0" lodash.template "^4.5.0" - npm-package-arg "^6.1.0" + npm-package-arg "^8.1.0" npmlog "^4.1.2" - pify "^4.0.1" - semver "^6.2.0" + pify "^5.0.0" + semver "^7.3.4" -"@lerna/create-symlink@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" - integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== +"@lerna/create-symlink@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-4.0.0.tgz#8c5317ce5ae89f67825443bd7651bf4121786228" + integrity sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig== dependencies: - "@zkochan/cmd-shim" "^3.1.0" - fs-extra "^8.1.0" + cmd-shim "^4.1.0" + fs-extra "^9.1.0" npmlog "^4.1.2" -"@lerna/create@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.5.tgz#11ac539f069248eaf7bc4c42e237784330f4fc47" - integrity sha512-cHpjocbpKmLopCuZFI7cKEM3E/QY8y+yC7VtZ4FQRSaLU8D8i2xXtXmYaP1GOlVNavji0iwoXjuNpnRMInIr2g== +"@lerna/create@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-4.0.0.tgz#b6947e9b5dfb6530321952998948c3e63d64d730" + integrity sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag== dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - camelcase "^5.0.0" + "@lerna/child-process" "4.0.0" + "@lerna/command" "4.0.0" + "@lerna/npm-conf" "4.0.0" + "@lerna/validation-error" "4.0.0" dedent "^0.7.0" - fs-extra "^8.1.0" - globby "^9.2.0" - init-package-json "^1.10.3" - npm-package-arg "^6.1.0" - p-reduce "^1.0.0" - pify "^4.0.1" - semver "^6.2.0" - slash "^2.0.0" - validate-npm-package-license "^3.0.3" + fs-extra "^9.1.0" + globby "^11.0.2" + init-package-json "^2.0.2" + npm-package-arg "^8.1.0" + p-reduce "^2.1.0" + pacote "^11.2.6" + pify "^5.0.0" + semver "^7.3.4" + slash "^3.0.0" + validate-npm-package-license "^3.0.4" validate-npm-package-name "^3.0.0" - whatwg-url "^7.0.0" + whatwg-url "^8.4.0" + yargs-parser "20.2.4" -"@lerna/describe-ref@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" - integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== +"@lerna/describe-ref@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-4.0.0.tgz#53c53b4ea65fdceffa072a62bfebe6772c45d9ec" + integrity sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ== dependencies: - "@lerna/child-process" "3.16.5" + "@lerna/child-process" "4.0.0" npmlog "^4.1.2" -"@lerna/diff@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.5.tgz#e9e2cb882f84d5b84f0487c612137305f07accbc" - integrity sha512-u90lGs+B8DRA9Z/2xX4YaS3h9X6GbypmGV6ITzx9+1Ga12UWGTVlKaCXBgONMBjzJDzAQOK8qPTwLA57SeBLgA== +"@lerna/diff@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-4.0.0.tgz#6d3071817aaa4205a07bf77cfc6e932796d48b92" + integrity sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag== dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/validation-error" "3.13.0" + "@lerna/child-process" "4.0.0" + "@lerna/command" "4.0.0" + "@lerna/validation-error" "4.0.0" npmlog "^4.1.2" -"@lerna/exec@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.20.0.tgz#29f0c01aee2340eb46f90706731fef2062a49639" - integrity sha512-pS1mmC7kzV668rHLWuv31ClngqeXjeHC8kJuM+W2D6IpUVMGQHLcCTYLudFgQsuKGVpl0DGNYG+sjLhAPiiu6A== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/filter-options@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" - integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/filter-packages" "3.18.0" +"@lerna/exec@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-4.0.0.tgz#eb6cb95cb92d42590e9e2d628fcaf4719d4a8be6" + integrity sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw== + dependencies: + "@lerna/child-process" "4.0.0" + "@lerna/command" "4.0.0" + "@lerna/filter-options" "4.0.0" + "@lerna/profiler" "4.0.0" + "@lerna/run-topologically" "4.0.0" + "@lerna/validation-error" "4.0.0" + p-map "^4.0.0" + +"@lerna/filter-options@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-4.0.0.tgz#ac94cc515d7fa3b47e2f7d74deddeabb1de5e9e6" + integrity sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw== + dependencies: + "@lerna/collect-updates" "4.0.0" + "@lerna/filter-packages" "4.0.0" dedent "^0.7.0" - figgy-pudding "^3.5.1" npmlog "^4.1.2" -"@lerna/filter-packages@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" - integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== +"@lerna/filter-packages@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-4.0.0.tgz#b1f70d70e1de9cdd36a4e50caa0ac501f8d012f2" + integrity sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA== dependencies: - "@lerna/validation-error" "3.13.0" - multimatch "^3.0.0" + "@lerna/validation-error" "4.0.0" + multimatch "^5.0.0" npmlog "^4.1.2" -"@lerna/get-npm-exec-opts@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" - integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== +"@lerna/get-npm-exec-opts@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz#dc955be94a4ae75c374ef9bce91320887d34608f" + integrity sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ== dependencies: npmlog "^4.1.2" -"@lerna/get-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" - integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== +"@lerna/get-packed@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-4.0.0.tgz#0989d61624ac1f97e393bdad2137c49cd7a37823" + integrity sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w== dependencies: - fs-extra "^8.1.0" - ssri "^6.0.1" - tar "^4.4.8" + fs-extra "^9.1.0" + ssri "^8.0.1" + tar "^6.1.0" -"@lerna/github-client@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.5.tgz#2eb0235c3bf7a7e5d92d73e09b3761ab21f35c2e" - integrity sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw== +"@lerna/github-client@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-4.0.0.tgz#2ced67721363ef70f8e12ffafce4410918f4a8a4" + integrity sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw== dependencies: - "@lerna/child-process" "3.16.5" - "@octokit/plugin-enterprise-rest" "^3.6.1" - "@octokit/rest" "^16.28.4" - git-url-parse "^11.1.2" + "@lerna/child-process" "4.0.0" + "@octokit/plugin-enterprise-rest" "^6.0.1" + "@octokit/rest" "^18.1.0" + git-url-parse "^11.4.4" npmlog "^4.1.2" -"@lerna/gitlab-client@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" - integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== +"@lerna/gitlab-client@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz#00dad73379c7b38951d4b4ded043504c14e2b67d" + integrity sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA== dependencies: - node-fetch "^2.5.0" + node-fetch "^2.6.1" npmlog "^4.1.2" - whatwg-url "^7.0.0" - -"@lerna/global-options@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" - integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== - -"@lerna/has-npm-version@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" - integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== - dependencies: - "@lerna/child-process" "3.16.5" - semver "^6.2.0" - -"@lerna/import@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.5.tgz#a9c7d8601870729851293c10abd18b3707f7ba5e" - integrity sha512-PH0WVLEgp+ORyNKbGGwUcrueW89K3Iuk/DDCz8mFyG2IG09l/jOF0vzckEyGyz6PO5CMcz4TI1al/qnp3FrahQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/validation-error" "3.13.0" + whatwg-url "^8.4.0" + +"@lerna/global-options@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-4.0.0.tgz#c7d8b0de6a01d8a845e2621ea89e7f60f18c6a5f" + integrity sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ== + +"@lerna/has-npm-version@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz#d3fc3292c545eb28bd493b36e6237cf0279f631c" + integrity sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg== + dependencies: + "@lerna/child-process" "4.0.0" + semver "^7.3.4" + +"@lerna/import@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-4.0.0.tgz#bde656c4a451fa87ae41733ff8a8da60547c5465" + integrity sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg== + dependencies: + "@lerna/child-process" "4.0.0" + "@lerna/command" "4.0.0" + "@lerna/prompt" "4.0.0" + "@lerna/pulse-till-done" "4.0.0" + "@lerna/validation-error" "4.0.0" dedent "^0.7.0" - fs-extra "^8.1.0" - p-map-series "^1.0.0" - -"@lerna/info@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.20.0.tgz#3a5212f3029f2bc6255f9533bdf4bcb120ef329a" - integrity sha512-Rsz+KQF9mczbGUbPTrtOed1N0C+cA08Qz0eX/oI+NNjvsryZIju/o7uedG4I3P55MBiAioNrJI88fHH3eTgYug== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/output" "3.13.0" - envinfo "^7.3.1" - -"@lerna/init@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.5.tgz#86dd0b2b3290755a96975069b5cb007f775df9f5" - integrity sha512-oCwipWrha98EcJAHm8AGd2YFFLNI7AW9AWi0/LbClj1+XY9ah+uifXIgYGfTk63LbgophDd8936ZEpHMxBsbAg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - fs-extra "^8.1.0" - p-map "^2.1.0" - write-json-file "^3.2.0" + fs-extra "^9.1.0" + p-map-series "^2.1.0" + +"@lerna/info@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-4.0.0.tgz#b9fb0e479d60efe1623603958a831a88b1d7f1fc" + integrity sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q== + dependencies: + "@lerna/command" "4.0.0" + "@lerna/output" "4.0.0" + envinfo "^7.7.4" + +"@lerna/init@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-4.0.0.tgz#dadff67e6dfb981e8ccbe0e6a310e837962f6c7a" + integrity sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ== + dependencies: + "@lerna/child-process" "4.0.0" + "@lerna/command" "4.0.0" + fs-extra "^9.1.0" + p-map "^4.0.0" + write-json-file "^4.3.0" -"@lerna/link@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.5.tgz#f24347e4f0b71d54575bd37cfa1794bc8ee91b18" - integrity sha512-xTN3vktJpkT7Nqc3QkZRtHO4bT5NvuLMtKNIBDkks0HpGxC9PRyyqwOoCoh1yOGbrWIuDezhfMg3Qow+6I69IQ== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/package-graph" "3.18.5" - "@lerna/symlink-dependencies" "3.17.0" - p-map "^2.1.0" - slash "^2.0.0" - -"@lerna/list@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.20.0.tgz#7e67cc29c5cf661cfd097e8a7c2d3dcce7a81029" - integrity sha512-fXTicPrfioVnRzknyPawmYIVkzDRBaQqk9spejS1S3O1DOidkihK0xxNkr8HCVC0L22w6f92g83qWDp2BYRUbg== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/listable@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" - integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== - dependencies: - "@lerna/query-graph" "3.18.5" - chalk "^2.3.1" +"@lerna/link@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-4.0.0.tgz#c3a38aabd44279d714e90f2451e31b63f0fb65ba" + integrity sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w== + dependencies: + "@lerna/command" "4.0.0" + "@lerna/package-graph" "4.0.0" + "@lerna/symlink-dependencies" "4.0.0" + p-map "^4.0.0" + slash "^3.0.0" + +"@lerna/list@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-4.0.0.tgz#24b4e6995bd73f81c556793fe502b847efd9d1d7" + integrity sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg== + dependencies: + "@lerna/command" "4.0.0" + "@lerna/filter-options" "4.0.0" + "@lerna/listable" "4.0.0" + "@lerna/output" "4.0.0" + +"@lerna/listable@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-4.0.0.tgz#d00d6cb4809b403f2b0374fc521a78e318b01214" + integrity sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ== + dependencies: + "@lerna/query-graph" "4.0.0" + chalk "^4.1.0" columnify "^1.5.4" -"@lerna/log-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" - integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== +"@lerna/log-packed@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-4.0.0.tgz#95168fe2e26ac6a71e42f4be857519b77e57a09f" + integrity sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ== dependencies: - byte-size "^5.0.1" + byte-size "^7.0.0" columnify "^1.5.4" has-unicode "^2.0.1" npmlog "^4.1.2" -"@lerna/npm-conf@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" - integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== +"@lerna/npm-conf@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-4.0.0.tgz#b259fd1e1cee2bf5402b236e770140ff9ade7fd2" + integrity sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw== dependencies: - config-chain "^1.1.11" - pify "^4.0.1" + config-chain "^1.1.12" + pify "^5.0.0" -"@lerna/npm-dist-tag@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" - integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== +"@lerna/npm-dist-tag@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz#d1e99b4eccd3414142f0548ad331bf2d53f3257a" + integrity sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw== dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.18.5" - figgy-pudding "^3.5.1" - npm-package-arg "^6.1.0" + "@lerna/otplease" "4.0.0" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" npmlog "^4.1.2" -"@lerna/npm-install@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" - integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== +"@lerna/npm-install@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-4.0.0.tgz#31180be3ab3b7d1818a1a0c206aec156b7094c78" + integrity sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg== dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" + "@lerna/child-process" "4.0.0" + "@lerna/get-npm-exec-opts" "4.0.0" + fs-extra "^9.1.0" + npm-package-arg "^8.1.0" npmlog "^4.1.2" - signal-exit "^3.0.2" - write-pkg "^3.1.0" - -"@lerna/npm-publish@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" - integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== - dependencies: - "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" + signal-exit "^3.0.3" + write-pkg "^4.0.0" + +"@lerna/npm-publish@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-4.0.0.tgz#84eb62e876fe949ae1fd62c60804423dbc2c4472" + integrity sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w== + dependencies: + "@lerna/otplease" "4.0.0" + "@lerna/run-lifecycle" "4.0.0" + fs-extra "^9.1.0" + libnpmpublish "^4.0.0" + npm-package-arg "^8.1.0" npmlog "^4.1.2" - pify "^4.0.1" - read-package-json "^2.0.13" + pify "^5.0.0" + read-package-json "^3.0.0" -"@lerna/npm-run-script@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" - integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== +"@lerna/npm-run-script@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz#dfebf4f4601442e7c0b5214f9fb0d96c9350743b" + integrity sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA== dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" + "@lerna/child-process" "4.0.0" + "@lerna/get-npm-exec-opts" "4.0.0" npmlog "^4.1.2" -"@lerna/otplease@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" - integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== +"@lerna/otplease@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-4.0.0.tgz#84972eb43448f8a1077435ba1c5e59233b725850" + integrity sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw== dependencies: - "@lerna/prompt" "3.18.5" - figgy-pudding "^3.5.1" + "@lerna/prompt" "4.0.0" -"@lerna/output@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" - integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== +"@lerna/output@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-4.0.0.tgz#b1d72215c0e35483e4f3e9994debc82c621851f2" + integrity sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w== dependencies: npmlog "^4.1.2" -"@lerna/pack-directory@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" - integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== +"@lerna/pack-directory@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-4.0.0.tgz#8b617db95d20792f043aaaa13a9ccc0e04cb4c74" + integrity sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ== dependencies: - "@lerna/get-packed" "3.16.0" - "@lerna/package" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - npm-packlist "^1.4.4" + "@lerna/get-packed" "4.0.0" + "@lerna/package" "4.0.0" + "@lerna/run-lifecycle" "4.0.0" + npm-packlist "^2.1.4" npmlog "^4.1.2" - tar "^4.4.10" - temp-write "^3.4.0" + tar "^6.1.0" + temp-write "^4.0.0" -"@lerna/package-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" - integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== +"@lerna/package-graph@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-4.0.0.tgz#16a00253a8ac810f72041481cb46bcee8d8123dd" + integrity sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw== dependencies: - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/validation-error" "3.13.0" - npm-package-arg "^6.1.0" + "@lerna/prerelease-id-from-version" "4.0.0" + "@lerna/validation-error" "4.0.0" + npm-package-arg "^8.1.0" npmlog "^4.1.2" - semver "^6.2.0" + semver "^7.3.4" -"@lerna/package@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" - integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== +"@lerna/package@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-4.0.0.tgz#1b4c259c4bcff45c876ee1d591a043aacbc0d6b7" + integrity sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q== dependencies: - load-json-file "^5.3.0" - npm-package-arg "^6.1.0" - write-pkg "^3.1.0" + load-json-file "^6.2.0" + npm-package-arg "^8.1.0" + write-pkg "^4.0.0" -"@lerna/prerelease-id-from-version@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" - integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== +"@lerna/prerelease-id-from-version@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz#c7e0676fcee1950d85630e108eddecdd5b48c916" + integrity sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg== dependencies: - semver "^6.2.0" + semver "^7.3.4" -"@lerna/profiler@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" - integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== +"@lerna/profiler@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-4.0.0.tgz#8a53ab874522eae15d178402bff90a14071908e9" + integrity sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q== dependencies: - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" + fs-extra "^9.1.0" npmlog "^4.1.2" - upath "^1.2.0" + upath "^2.0.1" -"@lerna/project@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.18.0.tgz#56feee01daeb42c03cbdf0ed8a2a10cbce32f670" - integrity sha512-+LDwvdAp0BurOAWmeHE3uuticsq9hNxBI0+FMHiIai8jrygpJGahaQrBYWpwbshbQyVLeQgx3+YJdW2TbEdFWA== +"@lerna/project@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-4.0.0.tgz#ff84893935833533a74deff30c0e64ddb7f0ba6b" + integrity sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg== dependencies: - "@lerna/package" "3.16.0" - "@lerna/validation-error" "3.13.0" - cosmiconfig "^5.1.0" + "@lerna/package" "4.0.0" + "@lerna/validation-error" "4.0.0" + cosmiconfig "^7.0.0" dedent "^0.7.0" - dot-prop "^4.2.0" - glob-parent "^5.0.0" - globby "^9.2.0" - load-json-file "^5.3.0" + dot-prop "^6.0.1" + glob-parent "^5.1.1" + globby "^11.0.2" + load-json-file "^6.2.0" npmlog "^4.1.2" - p-map "^2.1.0" - resolve-from "^4.0.0" - write-json-file "^3.2.0" + p-map "^4.0.0" + resolve-from "^5.0.0" + write-json-file "^4.3.0" -"@lerna/prompt@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" - integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== +"@lerna/prompt@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-4.0.0.tgz#5ec69a803f3f0db0ad9f221dad64664d3daca41b" + integrity sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ== dependencies: - inquirer "^6.2.0" + inquirer "^7.3.3" npmlog "^4.1.2" -"@lerna/publish@3.20.2": - version "3.20.2" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.20.2.tgz#a45d29813099b3249657ea913d0dc3f8ebc5cc2e" - integrity sha512-N7Y6PdhJ+tYQPdI1tZum8W25cDlTp4D6brvRacKZusweWexxaopbV8RprBaKexkEX/KIbncuADq7qjDBdQHzaA== - dependencies: - "@evocateur/libnpmaccess" "^3.1.2" - "@evocateur/npm-registry-fetch" "^4.0.0" - "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/log-packed" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.18.5" - "@lerna/npm-publish" "3.18.5" - "@lerna/otplease" "3.18.5" - "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.16.4" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.20.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" +"@lerna/publish@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-4.0.0.tgz#f67011305adeba120066a3b6d984a5bb5fceef65" + integrity sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg== + dependencies: + "@lerna/check-working-tree" "4.0.0" + "@lerna/child-process" "4.0.0" + "@lerna/collect-updates" "4.0.0" + "@lerna/command" "4.0.0" + "@lerna/describe-ref" "4.0.0" + "@lerna/log-packed" "4.0.0" + "@lerna/npm-conf" "4.0.0" + "@lerna/npm-dist-tag" "4.0.0" + "@lerna/npm-publish" "4.0.0" + "@lerna/otplease" "4.0.0" + "@lerna/output" "4.0.0" + "@lerna/pack-directory" "4.0.0" + "@lerna/prerelease-id-from-version" "4.0.0" + "@lerna/prompt" "4.0.0" + "@lerna/pulse-till-done" "4.0.0" + "@lerna/run-lifecycle" "4.0.0" + "@lerna/run-topologically" "4.0.0" + "@lerna/validation-error" "4.0.0" + "@lerna/version" "4.0.0" + fs-extra "^9.1.0" + libnpmaccess "^4.0.1" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-pipe "^1.2.0" - semver "^6.2.0" + p-map "^4.0.0" + p-pipe "^3.1.0" + pacote "^11.2.6" + semver "^7.3.4" -"@lerna/pulse-till-done@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" - integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== +"@lerna/pulse-till-done@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz#04bace7d483a8205c187b806bcd8be23d7bb80a3" + integrity sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg== dependencies: npmlog "^4.1.2" -"@lerna/query-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" - integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== +"@lerna/query-graph@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-4.0.0.tgz#09dd1c819ac5ee3f38db23931143701f8a6eef63" + integrity sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg== dependencies: - "@lerna/package-graph" "3.18.5" - figgy-pudding "^3.5.1" + "@lerna/package-graph" "4.0.0" -"@lerna/resolve-symlink@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" - integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== +"@lerna/resolve-symlink@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz#6d006628a210c9b821964657a9e20a8c9a115e14" + integrity sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA== dependencies: - fs-extra "^8.1.0" + fs-extra "^9.1.0" npmlog "^4.1.2" - read-cmd-shim "^1.0.1" + read-cmd-shim "^2.0.0" -"@lerna/rimraf-dir@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" - integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== +"@lerna/rimraf-dir@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz#2edf3b62d4eb0ef4e44e430f5844667d551ec25a" + integrity sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg== dependencies: - "@lerna/child-process" "3.16.5" + "@lerna/child-process" "4.0.0" npmlog "^4.1.2" - path-exists "^3.0.0" - rimraf "^2.6.2" + path-exists "^4.0.0" + rimraf "^3.0.2" -"@lerna/run-lifecycle@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" - integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== +"@lerna/run-lifecycle@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz#e648a46f9210a9bcd7c391df6844498cb5079334" + integrity sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ== dependencies: - "@lerna/npm-conf" "3.16.0" - figgy-pudding "^3.5.1" - npm-lifecycle "^3.1.2" + "@lerna/npm-conf" "4.0.0" + npm-lifecycle "^3.1.5" npmlog "^4.1.2" -"@lerna/run-topologically@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" - integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== - dependencies: - "@lerna/query-graph" "3.18.5" - figgy-pudding "^3.5.1" - p-queue "^4.0.0" - -"@lerna/run@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.20.0.tgz#a479f7c42bdf9ebabb3a1e5a2bdebb7a8d201151" - integrity sha512-9U3AqeaCeB7KsGS9oyKNp62s9vYoULg/B4cqXTKZkc+OKL6QOEjYHYVSBcMK9lUXrMjCjDIuDSX3PnTCPxQ2Dw== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-run-script" "3.16.5" - "@lerna/output" "3.13.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/timer" "3.13.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/symlink-binary@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" - integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/package" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - -"@lerna/symlink-dependencies@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" - integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.17.0" - fs-extra "^8.1.0" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" +"@lerna/run-topologically@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-4.0.0.tgz#af846eeee1a09b0c2be0d1bfb5ef0f7b04bb1827" + integrity sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA== + dependencies: + "@lerna/query-graph" "4.0.0" + p-queue "^6.6.2" -"@lerna/timer@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" - integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== +"@lerna/run@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-4.0.0.tgz#4bc7fda055a729487897c23579694f6183c91262" + integrity sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ== + dependencies: + "@lerna/command" "4.0.0" + "@lerna/filter-options" "4.0.0" + "@lerna/npm-run-script" "4.0.0" + "@lerna/output" "4.0.0" + "@lerna/profiler" "4.0.0" + "@lerna/run-topologically" "4.0.0" + "@lerna/timer" "4.0.0" + "@lerna/validation-error" "4.0.0" + p-map "^4.0.0" + +"@lerna/symlink-binary@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz#21009f62d53a425f136cb4c1a32c6b2a0cc02d47" + integrity sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA== + dependencies: + "@lerna/create-symlink" "4.0.0" + "@lerna/package" "4.0.0" + fs-extra "^9.1.0" + p-map "^4.0.0" -"@lerna/validation-error@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" - integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== +"@lerna/symlink-dependencies@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz#8910eca084ae062642d0490d8972cf2d98e9ebbd" + integrity sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw== + dependencies: + "@lerna/create-symlink" "4.0.0" + "@lerna/resolve-symlink" "4.0.0" + "@lerna/symlink-binary" "4.0.0" + fs-extra "^9.1.0" + p-map "^4.0.0" + p-map-series "^2.1.0" + +"@lerna/timer@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-4.0.0.tgz#a52e51bfcd39bfd768988049ace7b15c1fd7a6da" + integrity sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg== + +"@lerna/validation-error@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-4.0.0.tgz#af9d62fe8304eaa2eb9a6ba1394f9aa807026d35" + integrity sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw== dependencies: npmlog "^4.1.2" -"@lerna/version@3.20.2": - version "3.20.2" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.20.2.tgz#3709141c0f537741d9bc10cb24f56897bcb30428" - integrity sha512-ckBJMaBWc+xJen0cMyCE7W67QXLLrc0ELvigPIn8p609qkfNM0L0CF803MKxjVOldJAjw84b8ucNWZLvJagP/Q== - dependencies: - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/conventional-commits" "3.18.5" - "@lerna/github-client" "3.16.5" - "@lerna/gitlab-client" "3.15.0" - "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - chalk "^2.3.1" +"@lerna/version@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-4.0.0.tgz#532659ec6154d8a8789c5ab53878663e244e3228" + integrity sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA== + dependencies: + "@lerna/check-working-tree" "4.0.0" + "@lerna/child-process" "4.0.0" + "@lerna/collect-updates" "4.0.0" + "@lerna/command" "4.0.0" + "@lerna/conventional-commits" "4.0.0" + "@lerna/github-client" "4.0.0" + "@lerna/gitlab-client" "4.0.0" + "@lerna/output" "4.0.0" + "@lerna/prerelease-id-from-version" "4.0.0" + "@lerna/prompt" "4.0.0" + "@lerna/run-lifecycle" "4.0.0" + "@lerna/run-topologically" "4.0.0" + "@lerna/validation-error" "4.0.0" + chalk "^4.1.0" dedent "^0.7.0" - load-json-file "^5.3.0" + load-json-file "^6.2.0" minimatch "^3.0.4" npmlog "^4.1.2" - p-map "^2.1.0" - p-pipe "^1.2.0" - p-reduce "^1.0.0" - p-waterfall "^1.0.0" - semver "^6.2.0" - slash "^2.0.0" - temp-write "^3.4.0" - write-json-file "^3.2.0" - -"@lerna/write-log-file@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" - integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== + p-map "^4.0.0" + p-pipe "^3.1.0" + p-reduce "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + slash "^3.0.0" + temp-write "^4.0.0" + write-json-file "^4.3.0" + +"@lerna/write-log-file@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-4.0.0.tgz#18221a38a6a307d6b0a5844dd592ad53fa27091e" + integrity sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg== dependencies: npmlog "^4.1.2" - write-file-atomic "^2.3.0" + write-file-atomic "^3.0.3" -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== -"@octokit/auth-token@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" - integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg== +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: - "@octokit/types" "^2.0.0" + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" -"@octokit/endpoint@^5.5.0": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.5.3.tgz#0397d1baaca687a4c8454ba424a627699d97c978" - integrity sha512-EzKwkwcxeegYYah5ukEeAI/gYRLv2Y9U5PpIsseGSFDk+G3RbipQGBs8GuYS1TLCtQaqoO66+aQGtITPalxsNQ== +"@npmcli/ci-detect@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" + integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== + +"@npmcli/git@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.6.tgz#47b97e96b2eede3f38379262fa3bdfa6eae57bf2" + integrity sha512-a1MnTfeRPBaKbFY07fd+6HugY1WAkKJzdiJvlRub/9o5xz2F/JtPacZZapx5zRJUQFIzSL677vmTSxEcDMrDbg== dependencies: - "@octokit/types" "^2.0.0" - is-plain-object "^3.0.0" - universal-user-agent "^5.0.0" + "@npmcli/promise-spawn" "^1.1.0" + lru-cache "^6.0.0" + mkdirp "^1.0.3" + npm-pick-manifest "^6.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.2" + unique-filename "^1.1.1" + which "^2.0.2" -"@octokit/plugin-enterprise-rest@^3.6.1": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" - integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== +"@npmcli/installed-package-contents@^1.0.6": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" -"@octokit/plugin-paginate-rest@^1.1.1": +"@npmcli/move-file@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: - "@octokit/types" "^2.0.1" + mkdirp "^1.0.4" + rimraf "^3.0.2" -"@octokit/plugin-request-log@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" - integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== +"@npmcli/node-gyp@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede" + integrity sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg== -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== +"@npmcli/promise-spawn@^1.1.0", "@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^1.8.2": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.3.tgz#07f440ed492400bb1114369bc37315eeaaae2bb3" + integrity sha512-ELPGWAVU/xyU+A+H3pEPj0QOvYwLTX71RArXcClFzeiyJ/b/McsZ+d0QxpznvfFtZzxGN/gz/1cvlqICR4/suQ== dependencies: - "@octokit/types" "^2.0.1" + "@npmcli/node-gyp" "^1.0.2" + "@npmcli/promise-spawn" "^1.3.2" + infer-owner "^1.0.4" + node-gyp "^7.1.0" + puka "^1.0.1" + read-package-json-fast "^2.0.1" + +"@octokit/auth-token@^2.4.4": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" + integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.2.3": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.5.tgz#57becbd5fd789b0592b915840855f3a5f233d554" + integrity sha512-+DCtPykGnvXKWWQI0E1XD+CCeWSBhB6kwItXqfFmNBlIlhczuDPbg+P6BtLnVBaRJDAjv+1mrUJuRsFSjktopg== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.4.12" + "@octokit/types" "^6.0.3" + before-after-hook "^2.1.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.11" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.11.tgz#082adc2aebca6dcefa1fb383f5efb3ed081949d1" + integrity sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.5.8": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.0.tgz#f9abca55f82183964a33439d5264674c701c3327" + integrity sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ== + dependencies: + "@octokit/request" "^5.3.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^5.2.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.2.2.tgz#1590c118a131031610faffd4222ae54915e2b82d" + integrity sha512-b3nHy/0uufJJsaZERwZM0syLRO6gfr6vvBPLewQxBKzzbhGDx1ygTyoELMNADD7mIPPzGMqbfdCeJTSeZueZwA== + +"@octokit/plugin-enterprise-rest@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^2.6.2": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.11.0.tgz#3568c43896a3355f4a0bbb3a64f443b2abdc760d" + integrity sha512-7L9xQank2G3r1dGqrVPo1z62V5utbykOUzlmNHPz87Pww/JpZQ9KyG5CHtUzgmB4n5iDRKYNK/86A8D98HP0yA== + dependencies: + "@octokit/types" "^6.11.0" + +"@octokit/plugin-request-log@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" + integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== + +"@octokit/plugin-rest-endpoint-methods@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.13.1.tgz#d8c807bbd0e187ac903620f53321e2634818bb30" + integrity sha512-T9YhQqpbO9Onmg+FYk09uci9pfChg8CZR9GBaPJWj+bDSzictW1xnU0NtCSSKKyrwvpW/opu7CtuDSs/HF1Syg== + dependencies: + "@octokit/types" "^6.11.1" deprecation "^2.3.1" -"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== +"@octokit/request-error@^2.0.0": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143" + integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg== dependencies: - "@octokit/types" "^2.0.0" + "@octokit/types" "^6.0.3" deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^5.2.0": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.2.tgz#1ca8b90a407772a1ee1ab758e7e0aced213b9883" - integrity sha512-7NPJpg19wVQy1cs2xqXjjRq/RmtSomja/VSWnptfYwuBxLdbYh2UjhGi0Wx7B1v5Iw5GKhfFDQL7jM7SSp7K2g== +"@octokit/request@^5.3.0", "@octokit/request@^5.4.12": + version "5.4.14" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96" + integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA== dependencies: - "@octokit/endpoint" "^5.5.0" - "@octokit/request-error" "^1.0.1" - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^5.0.0" - -"@octokit/rest@^16.28.4": - version "16.43.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" - integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^6.7.1" deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" once "^1.4.0" - universal-user-agent "^4.0.0" + universal-user-agent "^6.0.0" -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.2.0.tgz#ddb0a90cf3e9624ae97e09d16f21f4c4a682d3be" - integrity sha512-iEeW3XlkxeM/CObeoYvbUv24Oe+DldGofY+3QyeJ5XKKA6B+V94ePk14EDCarseWdMs6afKZPv3dFq8C+SY5lw== +"@octokit/rest@^18.1.0": + version "18.3.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.3.1.tgz#6680331e941c422dbff0e758a9bd3dc4edcbd2db" + integrity sha512-g57ebsk7dtbLjiPBgEYDAiDTsyQM9kvlIt0J5UN6OSjG82K6fQQck6HXPpwcyNIDqbN7lIaWr3nsz56jBfI6qg== + dependencies: + "@octokit/core" "^3.2.3" + "@octokit/plugin-paginate-rest" "^2.6.2" + "@octokit/plugin-request-log" "^1.0.2" + "@octokit/plugin-rest-endpoint-methods" "4.13.1" + +"@octokit/types@^6.0.3", "@octokit/types@^6.11.0", "@octokit/types@^6.11.1", "@octokit/types@^6.7.1": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.11.2.tgz#43973dc29cdf59bf9d5f3ab0d16275c4b4a6eb8d" + integrity sha512-EKQRFZU/oOfUlqk9ntLIE5UO/bcOx8exFpdXGBciJP90f05me3mza0sacIpqVqmiIQP3nJsBjnZHMmtijE5XwQ== dependencies: - "@types/node" ">= 8" + "@octokit/openapi-types" "^5.2.2" "@rdfjs/data-model@^1.1.1", "@rdfjs/data-model@^1.1.2": version "1.1.2" @@ -1149,25 +1143,16 @@ dependencies: "@types/rdf-js" "^2.0.1" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - "@types/http-link-header@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.1.tgz#411493fe06da4b9472fa4eeecc990ea92be8cc2a" @@ -1183,7 +1168,7 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/minimatch@*": +"@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== @@ -1201,7 +1186,7 @@ "@types/node" "*" "@types/rdf-js" "*" -"@types/node@*", "@types/node@>= 8": +"@types/node@*": version "13.7.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" integrity sha512-eyK7MWD0R1HqVTp+PtwRgFeIsemzuj4gBFSQxfPHY5iMjS7474e5wq+VFgTcdpyHeNxyKSaetYAjdMLJlKoWqA== @@ -1221,6 +1206,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" integrity sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A== +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + "@types/parse-link-header@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.0.tgz#69f059e40a0fa93dc2e095d4142395ae6adc5d7a" @@ -1252,16 +1247,7 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== -"@zkochan/cmd-shim@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" - integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== - dependencies: - is-windows "^1.0.0" - mkdirp-promise "^5.0.1" - mz "^2.5.0" - -JSONStream@^1.0.4, JSONStream@^1.3.3, JSONStream@^1.3.4: +JSONStream@^1.0.4, JSONStream@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -1291,25 +1277,25 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - es6-promisify "^5.0.0" + debug "4" -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== +agentkeepalive@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" + integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== dependencies: + debug "^4.1.0" + depd "^1.1.2" humanize-ms "^1.2.1" aggregate-error@^3.0.0: @@ -1335,11 +1321,6 @@ ansi-colors@4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" @@ -1382,11 +1363,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -1402,7 +1378,7 @@ append-transform@^2.0.0: dependencies: default-require-extensions "^3.0.0" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -1432,25 +1408,10 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-find-index@^1.0.1: version "1.0.2" @@ -1471,22 +1432,10 @@ array-includes@^3.1.1: es-abstract "^1.17.0" is-string "^1.0.5" -array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.flat@^1.2.3: version "1.2.3" @@ -1516,6 +1465,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1538,11 +1492,6 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -1563,15 +1512,10 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== aws-sign2@~0.7.0: version "0.7.0" @@ -1588,19 +1532,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -1608,21 +1539,16 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== +before-after-hook@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.1.tgz#99ae36992b5cfab4a83f6bee74ab27835f28f405" + integrity sha512-5ekuQOvO04MDj7kYZJaMab2S8SPjGJbotVNyv7QYFCOAwrGZs/YnoDNlh1U+m5hl7H2D/+n0taaAV/tfyd3KMA== binary-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1631,23 +1557,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@~3.0.2: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1659,11 +1569,6 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1679,46 +1584,33 @@ byline@^5.0.0: resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== +byte-size@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" + integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== -cacache@^12.0.0, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== +cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" caching-transform@^4.0.0: version "4.0.0" @@ -1730,30 +1622,6 @@ caching-transform@^4.0.0: package-hash "^4.0.0" write-file-atomic "^3.0.0" -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1776,6 +1644,15 @@ camelcase-keys@^4.0.0: map-obj "^2.0.0" quick-lru "^1.0.0" +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -1813,7 +1690,7 @@ chai@^4.0.0: pathval "^1.1.0" type-detect "^4.0.5" -chalk@^2.0.0, chalk@^2.3.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1838,6 +1715,14 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1863,38 +1748,26 @@ chokidar@3.3.1: optionalDependencies: fsevents "~2.1.2" -chownr@^1.1.1, chownr@^1.1.2: +chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -1907,6 +1780,11 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -1925,6 +1803,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -1939,19 +1826,18 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +cmd-shim@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" + integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== + dependencies: + mkdirp-infer-owner "^2.0.0" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2030,15 +1916,15 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" - dot-prop "^3.0.0" + dot-prop "^5.1.0" -component-emitter@^1.2.1, component-emitter@^1.3.0: +component-emitter@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -2067,7 +1953,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.4.7, concat-stream@^1.5.0: +concat-stream@^1.4.7: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -2087,7 +1973,7 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -config-chain@^1.1.11: +config-chain@^1.1.12: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== @@ -2105,87 +1991,89 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= -conventional-changelog-angular@^5.0.3: - version "5.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" - integrity sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA== +conventional-changelog-angular@^5.0.12: + version "5.0.12" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== dependencies: - compare-func "^1.3.1" + compare-func "^2.0.0" q "^1.5.1" -conventional-changelog-core@^3.1.6: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" - integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== +conventional-changelog-core@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.2.tgz#f0897df6d53b5d63dec36b9442bd45354f8b3ce5" + integrity sha512-7pDpRUiobQDNkwHyJG7k9f6maPo9tfPzkSWbRq97GGiZqisElhnvUZSvyQH20ogfOjntB5aadvv6NNcKL1sReg== dependencies: - conventional-changelog-writer "^4.0.6" - conventional-commits-parser "^3.0.3" + add-stream "^1.0.0" + conventional-changelog-writer "^4.0.18" + conventional-commits-parser "^3.2.0" dateformat "^3.0.0" get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" + git-raw-commits "^2.0.8" git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.3" - lodash "^4.2.1" - normalize-package-data "^2.3.5" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" q "^1.5.1" read-pkg "^3.0.0" read-pkg-up "^3.0.0" - through2 "^3.0.0" + shelljs "^0.8.3" + through2 "^4.0.0" -conventional-changelog-preset-loader@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz#580fa8ab02cef22c24294d25e52d7ccd247a9a6a" - integrity sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ== +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== -conventional-changelog-writer@^4.0.6: - version "4.0.11" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" - integrity sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw== +conventional-changelog-writer@^4.0.18: + version "4.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" + integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.2" + compare-func "^2.0.0" + conventional-commits-filter "^2.0.7" dateformat "^3.0.0" - handlebars "^4.4.0" + handlebars "^4.7.6" json-stringify-safe "^5.0.1" lodash "^4.17.15" - meow "^5.0.0" + meow "^8.0.0" semver "^6.0.0" split "^1.0.0" - through2 "^3.0.0" + through2 "^4.0.0" -conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== dependencies: lodash.ismatch "^4.4.0" modify-values "^1.0.0" -conventional-commits-parser@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" - integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ== +conventional-commits-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" + integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" lodash "^4.17.15" - meow "^5.0.0" - split2 "^2.0.0" - through2 "^3.0.0" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" trim-off-newlines "^1.0.0" -conventional-recommended-bump@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" - integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== +conventional-recommended-bump@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== dependencies: concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.1.1" - conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.3" - git-raw-commits "2.0.0" - git-semver-tags "^2.0.3" - meow "^4.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" q "^1.5.1" convert-source-map@^1.7.0: @@ -2200,37 +2088,21 @@ cookiejar@^2.1.2: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" coveralls@^3.0.9: version "3.0.9" @@ -2259,17 +2131,6 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" @@ -2288,6 +2149,15 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -2295,11 +2165,6 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" @@ -2307,6 +2172,11 @@ dargs@^4.0.1: dependencies: number-is-nan "^1.0.0" +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -2319,21 +2189,21 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@3.2.6, debug@^3.1.0: +debug@3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@4: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2352,7 +2222,7 @@ debuglog@^1.0.1: resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= -decamelize-keys@^1.0.0: +decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= @@ -2365,11 +2235,6 @@ decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -2408,28 +2273,6 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2440,6 +2283,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -2450,6 +2298,11 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -2463,12 +2316,12 @@ diff@4.0.2: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - path-type "^3.0.0" + path-type "^4.0.0" doctrine@1.5.0: version "1.5.0" @@ -2522,35 +2375,25 @@ domutils@^2.4.2, domutils@^2.4.4: domelementtype "^2.0.1" domhandler "^4.0.0" -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: - is-obj "^1.0.0" + is-obj "^2.0.0" -dot-prop@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== dependencies: - is-obj "^1.0.0" + is-obj "^2.0.0" duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2581,12 +2424,12 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - once "^1.4.0" + iconv-lite "^0.6.2" entities@^2.0.0: version "2.1.0" @@ -2598,15 +2441,15 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -envinfo@^7.3.1: - version "7.5.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" - integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== +envinfo@^7.7.4: + version "7.7.4" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" + integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" @@ -2698,17 +2541,10 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: version "1.0.5" @@ -2855,51 +2691,25 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" extend@~3.0.2: version "3.0.2" @@ -2915,20 +2725,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2944,17 +2740,17 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== +fast-glob@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -2971,23 +2767,18 @@ fast-safe-stringify@^2.0.4, fast-safe-stringify@^2.0.7: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + dependencies: + reusify "^1.0.4" + fecha@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41" integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg== -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -3002,16 +2793,6 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3079,14 +2860,6 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - fn.name@1.x.x: version "1.1.0" resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" @@ -3097,11 +2870,6 @@ follow-redirects@^1.5.1: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - foreground-child@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" @@ -3150,34 +2918,20 @@ forwarded-parse@^2.1.0: resolved "https://registry.yarnpkg.com/forwarded-parse/-/forwarded-parse-2.1.0.tgz#1ae9d7a4be3af884f74d936d856f7d8c6abd0439" integrity sha512-as9a7Xelt0CvdUy7/qxrY73dZq2vMx49F556fwjjFrUyzq5uHHfeLgD2cCq/6P4ZvusGZzjD6aL2NdgGdS5Cew== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fromentries@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.2.0.tgz#e6aa06f240d6267f913cea422075ef88b63e7897" integrity sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ== -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: + at-least-node "^1.0.0" graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fs-minipass@^1.2.5: version "1.2.7" @@ -3186,15 +2940,12 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" + minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" @@ -3230,17 +2981,12 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== - gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -3271,27 +3017,20 @@ get-pkg-repo@^4.0.0: meow "^5.0.0" through2 "^2.0.0" -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== getpass@^0.1.1: version "0.1.7" @@ -3300,17 +3039,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -git-raw-commits@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" - integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== - dependencies: - dargs "^4.0.1" - lodash.template "^4.0.2" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" - git-raw-commits@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.3.tgz#f040e67b8445962d4d168903a9e84c4240c17655" @@ -3322,6 +3050,17 @@ git-raw-commits@^2.0.0: split2 "^2.0.0" through2 "^3.0.0" +git-raw-commits@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" + integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" @@ -3330,7 +3069,7 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^2.0.0, git-semver-tags@^2.0.3: +git-semver-tags@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== @@ -3338,6 +3077,14 @@ git-semver-tags@^2.0.0, git-semver-tags@^2.0.3: meow "^4.0.0" semver "^6.0.0" +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + git-up@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" @@ -3346,10 +3093,10 @@ git-up@^4.0.0: is-ssh "^1.3.0" parse-url "^5.0.0" -git-url-parse@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" - integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== +git-url-parse@^11.4.4: + version "11.4.4" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.4.tgz#5d747debc2469c17bc385719f7d0427802d83d77" + integrity sha512-Y4o9o7vQngQDIU9IjyCmRJBin5iYjI5u9ZITnddRZpD7dcCFQj2sL2XuMNbLRE4b4B/4ENPsp2Q8P44fjAZ0Pw== dependencies: git-up "^4.0.0" @@ -3360,14 +3107,6 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" @@ -3375,19 +3114,14 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" -glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@7.1.6, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@7.1.6, glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3411,38 +3145,42 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== +globby@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +graceful-fs@^4.2.3: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -handlebars@^4.4.0: - version "4.7.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" - integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== +handlebars@^4.7.6: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: + minimist "^1.2.5" neo-async "^2.6.0" - optimist "^0.6.1" source-map "^0.6.1" + wordwrap "^1.0.0" optionalDependencies: uglify-js "^3.1.4" @@ -3459,6 +3197,11 @@ har-validator@~5.1.3: ajv "^6.5.5" har-schema "^2.0.0" +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3479,37 +3222,6 @@ has-unicode@^2.0.0, has-unicode@^2.0.1: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -3540,11 +3252,18 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: +hosted-git-info@^2.1.4: version "2.8.6" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.6.tgz#3a6e6d0324c5371fc8c7ba7175e1e5d14578724d" integrity sha512-Kp6rShEsCHhF5dD3EWKdkgVA8ix90oSUJ0VY4g9goxxa0+f4lx63muTftn0mlJ/+8IESGWyKnP//V2D7S4ZbIQ== +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + html-escaper@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" @@ -3570,23 +3289,24 @@ htmlparser2@^6.0.0: domutils "^2.4.4" entities "^2.0.0" -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== http-link-header@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.2.tgz#bea50f02e1c7996021f1013b428c63f77e0f4e11" integrity sha512-z6YOZ8ZEnejkcCWlGZzYXNa6i+ZaTfiTg3WhlV/YvnNya3W/RbX1bMVUMTuCrg/DrtTCQxaFCkXCz4FtLpcebg== -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: - agent-base "4" - debug "3.1.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" http-signature@~1.2.0: version "1.2.0" @@ -3597,13 +3317,18 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: - agent-base "^4.3.0" - debug "^3.1.0" + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: version "1.2.1" @@ -3619,36 +3344,35 @@ iconv-lite@^0.4.24, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" -ignore-walk@^3.0.1: +ignore-walk@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" -ignore@^4.0.3, ignore@^4.0.6: +ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + immutable@^3.8.2: version "3.8.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - import-fresh@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" @@ -3657,13 +3381,21 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" @@ -3687,7 +3419,7 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.3, infer-owner@^1.0.4: +infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== @@ -3700,7 +3432,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3710,39 +3442,20 @@ ini@^1.3.2, ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== +init-package-json@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.2.tgz#d81a7e6775af9b618f20bba288e440b8d1ce05f3" + integrity sha512-PO64kVeArePvhX7Ff0jVWkpnE1DfGRvaWcStYrPugcJz9twQGYibagKJuIMHCX7ENcp0M6LJlcjLBuLD5KeJMg== dependencies: glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + npm-package-arg "^8.1.0" promzard "^0.3.0" read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" + read-package-json "^3.0.0" + semver "^7.3.2" + validate-npm-package-license "^3.0.4" validate-npm-package-name "^3.0.0" -inquirer@^6.2.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - inquirer@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" @@ -3762,25 +3475,35 @@ inquirer@^7.0.0: strip-ansi "^6.0.0" through "^2.3.6" -ip@1.1.5: +inquirer@^7.3.3: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" @@ -3803,11 +3526,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-buffer@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" @@ -3830,61 +3548,19 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== dependencies: - kind-of "^6.0.0" + has "^1.0.3" is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -3916,13 +3592,6 @@ is-generator-function@^1.0.7: resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -3930,46 +3599,47 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + is-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-promise@^2.1.0: version "2.1.0" @@ -4041,12 +3711,12 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-windows@^1.0.0, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -4061,23 +3731,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - isomorphic-fetch@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" @@ -4191,11 +3849,16 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -4230,10 +3893,12 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" @@ -4309,26 +3974,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -4343,28 +3989,28 @@ lcov-parse@^1.0.0: resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= -lerna@^3.4.0: - version "3.20.2" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.20.2.tgz#abf84e73055fe84ee21b46e64baf37b496c24864" - integrity sha512-bjdL7hPLpU3Y8CBnw/1ys3ynQMUjiK6l9iDWnEGwFtDy48Xh5JboR9ZJwmKGCz9A/sarVVIGwf1tlRNKUG9etA== - dependencies: - "@lerna/add" "3.20.0" - "@lerna/bootstrap" "3.20.0" - "@lerna/changed" "3.20.0" - "@lerna/clean" "3.20.0" - "@lerna/cli" "3.18.5" - "@lerna/create" "3.18.5" - "@lerna/diff" "3.18.5" - "@lerna/exec" "3.20.0" - "@lerna/import" "3.18.5" - "@lerna/info" "3.20.0" - "@lerna/init" "3.18.5" - "@lerna/link" "3.18.5" - "@lerna/list" "3.20.0" - "@lerna/publish" "3.20.2" - "@lerna/run" "3.20.0" - "@lerna/version" "3.20.2" - import-local "^2.0.0" +lerna@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-4.0.0.tgz#b139d685d50ea0ca1be87713a7c2f44a5b678e9e" + integrity sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg== + dependencies: + "@lerna/add" "4.0.0" + "@lerna/bootstrap" "4.0.0" + "@lerna/changed" "4.0.0" + "@lerna/clean" "4.0.0" + "@lerna/cli" "4.0.0" + "@lerna/create" "4.0.0" + "@lerna/diff" "4.0.0" + "@lerna/exec" "4.0.0" + "@lerna/import" "4.0.0" + "@lerna/info" "4.0.0" + "@lerna/init" "4.0.0" + "@lerna/link" "4.0.0" + "@lerna/list" "4.0.0" + "@lerna/publish" "4.0.0" + "@lerna/run" "4.0.0" + "@lerna/version" "4.0.0" + import-local "^3.0.2" npmlog "^4.1.2" levn@^0.4.1: @@ -4375,6 +4021,32 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +libnpmaccess@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.1.tgz#17e842e03bef759854adf6eb6c2ede32e782639f" + integrity sha512-ZiAgvfUbvmkHoMTzdwmNWCrQRsDkOC+aM5BDfO0C9aOSwF3R1LdFDBD+Rer1KWtsoQYO35nXgmMR7OUHpDRxyA== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^8.0.0" + npm-registry-fetch "^9.0.0" + +libnpmpublish@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.0.tgz#ad6413914e0dfd78df868ce14ba3d3a4cc8b385b" + integrity sha512-2RwYXRfZAB1x/9udKpZmqEzSqNd7ouBRU52jyG14/xG8EF+O9A62d7/XVR3iABEQHf1iYhkm0Oq9iXjrL3tsXA== + dependencies: + normalize-package-data "^3.0.0" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" + semver "^7.1.3" + ssri "^8.0.0" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -4406,16 +4078,15 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -load-json-file@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== +load-json-file@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== dependencies: graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" locate-path@^2.0.0: version "2.0.0" @@ -4445,31 +4116,16 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4490,21 +4146,21 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - lodash.uniqwith@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz#7a0cbf65f43b5928625a9d4d0dc54b18cadc7ef3" integrity sha1-egy/ZfQ7WShiWp1NDcVLGMrcfvM= -lodash@^4.0.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.2.1: +lodash@^4.0.0, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.19: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" @@ -4556,17 +4212,12 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: - pify "^3.0.0" + yallist "^4.0.0" make-dir@^2.1.0: version "2.1.0" @@ -4583,22 +4234,26 @@ make-dir@^3.0.0, make-dir@^3.0.2: dependencies: semver "^6.0.0" -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" +make-fetch-happen@^8.0.9: + version "8.0.14" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" + integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.0.5" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + promise-retry "^2.0.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" manual-git-changelog@^1.0.1: version "1.0.1" @@ -4611,11 +4266,6 @@ manual-git-changelog@^1.0.1: git-semver-tags "^2.0.0" minimist "^1.2.0" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -4626,12 +4276,10 @@ map-obj@^2.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== meow@^3.3.0: version "3.7.0" @@ -4679,10 +4327,32 @@ meow@^5.0.0: trim-newlines "^2.0.0" yargs-parser "^10.0.0" -merge2@^1.2.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" - integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@1.1.2, methods@^1.1.2: version "1.1.2" @@ -4699,24 +4369,13 @@ microdata-rdf-streaming-parser@^1.1.0: rdf-data-factory "^1.0.2" relative-to-absolute-iri "^1.0.2" -micromatch@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" mime-db@1.43.0: version "1.43.0" @@ -4740,16 +4399,16 @@ mime@^2.4.6: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -4757,6 +4416,15 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" @@ -4775,12 +4443,59 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a" + integrity sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -4788,6 +4503,13 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -4795,41 +4517,22 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" + minipass "^3.0.0" + yallist "^4.0.0" -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== dependencies: - mkdirp "*" - -mkdirp@*: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" - integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" @@ -4838,6 +4541,11 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mocha@^8.0.0: version "8.0.1" resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.0.1.tgz#fe01f0530362df271aa8f99510447bc38b88d8ed" @@ -4874,18 +4582,6 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4896,35 +4592,22 @@ ms@2.1.2, ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -multimatch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" - integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== +multimatch@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: - array-differ "^2.0.3" - array-union "^1.0.2" - arrify "^1.0.1" + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - n3@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/n3/-/n3-1.3.5.tgz#ea00062b64fef71dc3a92befc00413a733ef1029" @@ -4948,23 +4631,6 @@ nan@^2.14.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -4980,21 +4646,7 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-fetch@2.6.1: +node-fetch@2.6.1, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -5007,11 +4659,6 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.3.0, node-fetch@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - node-gyp@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" @@ -5029,6 +4676,22 @@ node-gyp@^5.0.2: tar "^4.4.12" which "^1.3.1" +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" + node-preload@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" @@ -5044,7 +4707,14 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -5054,6 +4724,16 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" + integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== + dependencies: + hosted-git-info "^3.0.6" + resolve "^1.17.0" + semver "^7.3.2" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -5064,17 +4744,24 @@ normalize-url@^3.3.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -npm-bundled@^1.0.1: +npm-bundled@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== dependencies: npm-normalize-package-bin "^1.0.1" -npm-lifecycle@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== + dependencies: + semver "^7.1.1" + +npm-lifecycle@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== dependencies: byline "^5.0.0" graceful-fs "^4.1.15" @@ -5090,40 +4777,54 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== dependencies: - hosted-git-info "^2.7.1" - osenv "^0.1.5" - semver "^5.6.0" + hosted-git-info "^3.0.6" + semver "^7.0.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== +npm-packlist@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.4.tgz#40e96b2b43787d0546a574542d01e066640d09da" + integrity sha512-Qzg2pvXC9U4I4fLnUrBmcIT4x0woLtUgxUi9eC+Zrcv1Xx5eamytGAfbDWQ67j7xOcQ2VW1I3su9smVTIdu7Hw== dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" + glob "^7.1.6" + ignore-walk "^3.0.3" + npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= +npm-pick-manifest@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz#2befed87b0fce956790f62d32afb56d7539c022a" + integrity sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw== + dependencies: + npm-install-checks "^4.0.0" + npm-package-arg "^8.0.0" + semver "^7.0.0" + +npm-registry-fetch@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" + integrity sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA== + dependencies: + "@npmcli/ci-detect" "^1.0.0" + lru-cache "^6.0.0" + make-fetch-happen "^8.0.9" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - path-key "^2.0.0" + path-key "^3.0.0" npmlog@^4.1.2: version "4.1.2" @@ -5184,15 +4885,6 @@ object-assign@^4.0.1, object-assign@^4.1.0: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" @@ -5203,13 +4895,6 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - object.assign@4.1.0, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" @@ -5228,13 +4913,6 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - object.values@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" @@ -5245,12 +4923,7 @@ object.values@^1.1.1: function-bind "^1.1.1" has "^1.0.3" -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -5264,13 +4937,6 @@ one-time@^1.0.0: dependencies: fn.name "1.x.x" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" @@ -5278,13 +4944,12 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" + mimic-fn "^2.1.0" optionator@^0.9.1: version "0.9.1" @@ -5303,14 +4968,6 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - os-shim@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" @@ -5321,7 +4978,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4, osenv@^0.1.5: +osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -5369,17 +5026,10 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" - integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= - dependencies: - p-reduce "^1.0.0" - -p-map@^2.1.0: +p-map-series@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== p-map@^3.0.0: version "3.0.0" @@ -5388,22 +5038,37 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" -p-pipe@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" - integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= - -p-queue@^4.0.0: +p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" - integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: - eventemitter3 "^3.1.0" + aggregate-error "^3.0.0" -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +p-pipe@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" @@ -5415,12 +5080,12 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -p-waterfall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" - integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= +p-waterfall@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== dependencies: - p-reduce "^1.0.0" + p-reduce "^2.0.0" package-hash@^4.0.0: version "4.0.0" @@ -5432,14 +5097,30 @@ package-hash@^4.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" +pacote@^11.2.6: + version "11.2.7" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.2.7.tgz#a44a9d40d4feac524e9ce78d77e2b390181d8afc" + integrity sha512-ogxPor11v/rnU9ukwLlI2dPx22q9iob1+yZyqSwerKsOvBMhU9e+SJHtxY4y2N0MRH4/5jGsGiRLsZeJWyM4dQ== + dependencies: + "@npmcli/git" "^2.0.1" + "@npmcli/installed-package-contents" "^1.0.6" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^1.8.2" + cacache "^15.0.5" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.3" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^2.1.4" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^9.0.0" + promise-retry "^2.0.1" + read-package-json-fast "^2.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.0" parent-module@^1.0.0: version "1.0.1" @@ -5473,6 +5154,16 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse-link-header@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" @@ -5498,16 +5189,6 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -5530,12 +5211,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -5568,6 +5244,11 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathval@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" @@ -5578,7 +5259,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.7: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -5598,6 +5279,11 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -5613,29 +5299,17 @@ pinkie@^2.0.0: pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: - find-up "^3.0.0" + find-up "^2.1.0" -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - pre-commit@^1.1.3: version "1.2.2" resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" @@ -5677,13 +5351,13 @@ promise-polyfill@^1.1.6: resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-1.1.6.tgz#cd04eff46f5c95c3a7d045591d79b5e3e01f12d7" integrity sha1-zQTv9G9clcOn0EVZHXm14+AfEtc= -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: - err-code "^1.0.0" - retry "^0.10.0" + err-code "^2.0.2" + retry "^0.12.0" promise.allsettled@1.0.2: version "1.0.2" @@ -5713,13 +5387,6 @@ protocols@^1.1.0, protocols@^1.4.0: resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== - dependencies: - genfun "^5.0.0" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5730,30 +5397,10 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" +puka@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/puka/-/puka-1.0.1.tgz#a2df782b7eb4cf9564e4c93a5da422de0dfacc02" + integrity sha512-ssjRZxBd7BT3dte1RR3VoeT2cT/ODH8x+h0rUF1rMqB0srHYf48stSDWfiYakTp5UBZMxroZhB2+ExLDHm7W3g== punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" @@ -5787,7 +5434,7 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -queue-microtask@^1.1.2: +queue-microtask@^1.1.2, queue-microtask@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== @@ -5797,6 +5444,11 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + rdf-data-factory@^1.0.0, rdf-data-factory@^1.0.1, rdf-data-factory@^1.0.2, rdf-data-factory@^1.0.3, rdf-data-factory@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/rdf-data-factory/-/rdf-data-factory-1.0.4.tgz#4e22fc462620fbca650eb2d26c4a13a103edd777" @@ -5898,14 +5550,20 @@ rdfxml-streaming-parser@^1.4.0: relative-to-absolute-iri "^1.0.0" sax "^1.2.4" -read-cmd-shim@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" - integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== +read-cmd-shim@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" + integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== + +read-package-json-fast@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz#2dcb24d9e8dd50fb322042c8c35a954e6cc7ac9e" + integrity sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ== dependencies: - graceful-fs "^4.1.2" + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: +read-package-json@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== @@ -5917,7 +5575,17 @@ read-cmd-shim@^1.0.1: optionalDependencies: graceful-fs "^4.1.2" -read-package-tree@^5.1.6: +read-package-json@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-3.0.1.tgz#c7108f0b9390257b08c21e3004d2404c806744b9" + integrity sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^3.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-tree@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== @@ -5950,6 +5618,15 @@ read-pkg-up@^3.0.0: find-up "^2.0.0" read-pkg "^3.0.0" +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -5977,6 +5654,16 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + read@1, read@~1.0.1: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -5989,7 +5676,16 @@ readable-stream-node-to-web@^1.0.1: resolved "https://registry.yarnpkg.com/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz#8b7614faa1465ebfa0da9b9ca6303fa27073b7cf" integrity sha1-i3YU+qFGXr+g2pucpjA/onBzt88= -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.7, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6002,15 +5698,6 @@ readable-stream-node-to-web@^1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" @@ -6028,6 +5715,13 @@ readdirp@~3.3.0: dependencies: picomatch "^2.0.7" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -6044,13 +5738,13 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" + indent-string "^4.0.0" + strip-indent "^3.0.0" regexpp@^3.1.0: version "3.1.0" @@ -6074,16 +5768,6 @@ release-zalgo@^1.0.0: dependencies: es6-error "^4.0.1" -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -6127,17 +5811,12 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: +resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" @@ -6149,10 +5828,13 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@^1.1.6: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.3.2: version "1.15.1" @@ -6168,14 +5850,6 @@ resolve@^1.13.1, resolve@^1.17.0: dependencies: path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -6184,15 +5858,15 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@2.6.3: version "2.6.3" @@ -6201,27 +5875,20 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - run-async@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" @@ -6229,19 +5896,12 @@ run-async@^2.4.0: dependencies: is-promise "^2.1.0" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.4.0: - version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: - tslib "^1.9.0" + queue-microtask "^1.2.2" rxjs@^6.5.3: version "6.5.5" @@ -6250,7 +5910,14 @@ rxjs@^6.5.3: dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +rxjs@^6.6.0: + version "6.6.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" + integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -6260,14 +5927,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -6287,16 +5947,23 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" @@ -6312,16 +5979,6 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -6353,11 +6010,25 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shelljs@^0.8.3: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -6380,10 +6051,10 @@ sinon@^1.17.4: samsam "1.1.2" util ">=0.10.3 <1" -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^2.1.0: version "2.1.0" @@ -6404,50 +6075,21 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== +socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== dependencies: - agent-base "~4.2.1" - socks "~2.3.2" + agent-base "6" + debug "4" + socks "^2.3.3" -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== +socks@^2.3.3: + version "2.5.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.5.1.tgz#7720640b6b5ec9a07d556419203baa3f0596df5f" + integrity sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ== dependencies: - ip "1.1.5" + ip "^1.1.5" smart-buffer "^4.1.0" sort-keys@^2.0.0: @@ -6457,23 +6099,14 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== +sort-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" + integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" + is-plain-obj "^2.0.0" -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -6539,13 +6172,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - split2@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" @@ -6553,6 +6179,13 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -6580,39 +6213,18 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: - figgy-pudding "^3.5.1" + minipass "^3.1.1" stack-trace@0.0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - stream-to-string@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/stream-to-string/-/stream-to-string-1.2.0.tgz#3ca506a097ecbf78b0e0aee0b6fa5c4565412a15" @@ -6639,7 +6251,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0: +"string-width@^1.0.2 || 2": version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -6756,10 +6368,10 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-indent@^1.0.1: version "1.0.1" @@ -6773,6 +6385,13 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" @@ -6783,7 +6402,7 @@ strip-json-comments@^3.1.0: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== -strong-log-transformer@^2.0.0: +strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== @@ -6841,7 +6460,7 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: +tar@^4.4.12: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -6854,22 +6473,33 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" +tar@^6.0.2, tar@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= -temp-write@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" - integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= +temp-write@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-4.0.0.tgz#cd2e0825fc826ae72d201dc26eef3bf7e6fc9320" + integrity sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw== dependencies: - graceful-fs "^4.1.2" - is-stream "^1.1.0" - make-dir "^1.0.0" - pify "^3.0.0" + graceful-fs "^4.1.15" + is-stream "^2.0.0" + make-dir "^3.0.0" temp-dir "^1.0.0" - uuid "^3.0.1" + uuid "^3.3.2" test-exclude@^6.0.0: version "6.0.0" @@ -6895,20 +6525,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.0" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" - integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= - dependencies: - any-promise "^1.0.0" - through2@^2.0.0, through2@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -6924,6 +6540,13 @@ through2@^3.0.0: dependencies: readable-stream "2 || 3" +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -6941,21 +6564,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6963,16 +6571,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -6981,12 +6579,12 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== dependencies: - punycode "^2.1.0" + punycode "^2.1.1" trim-newlines@^1.0.0: version "1.0.0" @@ -6998,6 +6596,11 @@ trim-newlines@^2.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" @@ -7052,10 +6655,20 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" @@ -7092,16 +6705,6 @@ umask@^1.1.0: resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -7116,37 +6719,20 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -universal-user-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" - integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== - dependencies: - os-name "^3.1.0" - -universal-user-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" - integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== - dependencies: - os-name "^3.1.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== uri-js@^4.2.2: version "4.2.2" @@ -7160,16 +6746,6 @@ uritemplate@^0.3.4: resolved "https://registry.yarnpkg.com/uritemplate/-/uritemplate-0.3.4.tgz#05d0a853ffbc8b0f49aa3d4d2ad777b0d1ee070c" integrity sha1-BdCoU/+8iw9Jqj1NKtd3sNHuBww= -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7192,7 +6768,7 @@ util-promisify@^2.1.0: is-generator-function "^1.0.7" safe-buffer "^5.1.2" -uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -7202,7 +6778,7 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -7247,24 +6823,24 @@ web-streams-ponyfill@^1.4.1: resolved "https://registry.yarnpkg.com/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz#0ae863cc5f7493903679f16b08cbf14d432b62f4" integrity sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA== -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== whatwg-fetch@>=0.10.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== +whatwg-url@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== dependencies: lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" which-module@^2.0.0: version "2.0.0" @@ -7278,7 +6854,7 @@ which@1.2.x: dependencies: isexe "^2.0.0" -which@2.0.2, which@^2.0.1: +which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -7299,13 +6875,6 @@ wide-align@1.1.3, wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== - dependencies: - execa "^1.0.0" - winston-transport@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" @@ -7334,10 +6903,10 @@ word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= workerpool@6.0.0: version "6.0.0" @@ -7362,12 +6931,21 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: +write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== @@ -7376,7 +6954,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -7386,18 +6964,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-json-file@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - pify "^3.0.0" - sort-keys "^2.0.0" - write-file-atomic "^2.0.0" - write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" @@ -7410,13 +6976,26 @@ write-json-file@^3.2.0: sort-keys "^2.0.0" write-file-atomic "^2.4.2" -write-pkg@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" - integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== +write-json-file@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" + integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== + dependencies: + detect-indent "^6.0.0" + graceful-fs "^4.1.15" + is-plain-obj "^2.0.0" + make-dir "^3.0.0" + sort-keys "^4.0.0" + write-file-atomic "^3.0.0" + +write-pkg@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== dependencies: sort-keys "^2.0.0" - write-json-file "^2.2.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" write@1.0.3: version "1.0.3" @@ -7435,6 +7014,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -7445,6 +7029,16 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + yargs-parser@13.1.2, yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -7453,6 +7047,11 @@ yargs-parser@13.1.2, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" @@ -7460,14 +7059,6 @@ yargs-parser@^10.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" - integrity sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^16.1.0: version "16.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" @@ -7476,6 +7067,11 @@ yargs-parser@^16.1.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.6" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" + integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== + yargs-unparser@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" @@ -7501,23 +7097,6 @@ yargs@13.3.2, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^14.2.2: - version "14.2.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" - integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.0" - yargs@^15.0.2: version "15.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219" @@ -7534,3 +7113,16 @@ yargs@^15.0.2: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^16.1.0" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" From a459b74c6411bc9d042a0e7d4caca079a349fe7f Mon Sep 17 00:00:00 2001 From: Ruben D Date: Mon, 10 May 2021 08:50:23 +0200 Subject: [PATCH 152/165] Fix illegal mutation of quads, Closes #137 * Fix error caused by updating immutable object * Fixed assignment to immutable quad object. Updated default dataFactory lib to recent version and updated tests * Small code cleanup * Removed unnecessary variable declarations --- packages/core/lib/datasources/Datasource.js | 18 +++++++++--------- packages/core/lib/views/RdfView.js | 8 ++++---- packages/core/package.json | 2 +- .../core/test/datasources/Datasource-test.js | 16 +++++++++------- .../datasources/CompositeDatasource-test.js | 8 ++++---- test/assets/basic-fragment-metadata-last.trig | 6 +++--- test/assets/basic-fragment-metadata-last.ttl | 6 +++--- test/assets/basic-fragment.trig | 6 +++--- test/assets/basic-fragment.ttl | 6 +++--- test/assets/empty-fragment.trig | 6 +++--- test/assets/empty-fragment.ttl | 6 +++--- yarn.lock | 8 ++++++++ 12 files changed, 53 insertions(+), 43 deletions(-) diff --git a/packages/core/lib/datasources/Datasource.js b/packages/core/lib/datasources/Datasource.js index 61838799..05324766 100644 --- a/packages/core/lib/datasources/Datasource.js +++ b/packages/core/lib/datasources/Datasource.js @@ -135,20 +135,20 @@ class Datasource extends EventEmitter { query.graph = stringToTerm(this._queryGraphReplacements[query.graph.value], this.dataFactory); // Transform the received quads - let destination = new BufferedIterator(), outputQuads, graph = this._graph; + let destination = new BufferedIterator(), outputQuads, defaultGraph = this._graph; outputQuads = destination.map((quad) => { + let { subject, predicate, object, graph } = quad; // Translate blank nodes in the result to blank node IRIs. if (quad.subject && quad.subject.termType === 'BlankNode' && !this._skolemizeBlacklist[quad.subject.value]) - quad.subject = this.dataFactory.namedNode(blankNodePrefix + quad.subject.value); + subject = this.dataFactory.namedNode(blankNodePrefix + quad.subject.value); if (quad.object && quad.object.termType === 'BlankNode' && !this._skolemizeBlacklist[quad.object.value]) - quad.object = this.dataFactory.namedNode(blankNodePrefix + quad.object.value); - if (quad.graph && quad.graph.termType !== 'DefaultGraph') { - if (quad.graph.termType === 'BlankNode' && !this._skolemizeBlacklist[quad.graph.value]) - quad.graph = this.dataFactory.namedNode(blankNodePrefix + quad.graph.value); - } + object = this.dataFactory.namedNode(blankNodePrefix + quad.object.value); + if (quad.graph && quad.graph.termType === 'BlankNode' && !this._skolemizeBlacklist[quad.graph.value]) + graph = this.dataFactory.namedNode(blankNodePrefix + quad.graph.value); // If a custom default graph was set, move default graph triples there. - quad.graph = quad.graph && quad.graph.termType !== 'DefaultGraph' ? quad.graph : (graph || quad.graph); - return quad; + else if (defaultGraph && (!quad.graph || quad.graph.termType === 'DefaultGraph')) + graph = defaultGraph; + return this.dataFactory.quad(subject, predicate, object, graph); }); outputQuads.copyProperties(destination, ['metadata']); onError && outputQuads.on('error', onError); diff --git a/packages/core/lib/views/RdfView.js b/packages/core/lib/views/RdfView.js index a1430d37..57252c47 100644 --- a/packages/core/lib/views/RdfView.js +++ b/packages/core/lib/views/RdfView.js @@ -86,8 +86,8 @@ class RdfView extends View { metadataGraph = settings.metadataGraph; writer.addQuad(dataFactory.namedNode(metadataGraph), dataFactory.namedNode(primaryTopic), dataFactory.namedNode(settings.fragmentUrl), dataFactory.namedNode(metadataGraph)); } - quad.graph = quad.graph.termType === 'DefaultGraph' ? (metadataGraph ? dataFactory.namedNode(metadataGraph) : dataFactory.defaultGraph()) : quad.graph; - writer.addQuad(quad); + const graph = quad.graph.termType === 'DefaultGraph' ? (metadataGraph ? dataFactory.namedNode(metadataGraph) : dataFactory.defaultGraph()) : quad.graph; + writer.addQuad(dataFactory.quad(quad.subject, quad.predicate, quad.object, graph)); }, // Ends the output and flushes the stream end: function () { @@ -117,8 +117,8 @@ class RdfView extends View { }, // Adds the metadata triple to the output meta: function (quad) { - quad.graph = quad.graph.termType === 'DefaultGraph' ? (settings.metadataGraph ? dataFactory.namedNode(settings.metadataGraph) : dataFactory.defaultGraph()) : quad.graph; - mySerializer.write(quad); + const graph = quad.graph.termType === 'DefaultGraph' ? (settings.metadataGraph ? dataFactory.namedNode(settings.metadataGraph) : dataFactory.defaultGraph()) : quad.graph; + mySerializer.write(dataFactory.quad(quad.subject, quad.predicate, quad.object, graph)); }, // Ends the output and flushes the stream end: function () { diff --git a/packages/core/package.json b/packages/core/package.json index 3662a021..612fd96e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -34,7 +34,7 @@ "jsonld-streaming-serializer": "^1.1.0", "lodash": "^4.0.0", "mime": "^2.4.4", - "n3": "^1.3.5", + "n3": "^1.10.0", "negotiate": "^1.0.1", "q": "^1.4.1", "qejs": "^3.0.5", diff --git a/packages/core/test/datasources/Datasource-test.js b/packages/core/test/datasources/Datasource-test.js index ff4d56e2..a4c5fd7d 100644 --- a/packages/core/test/datasources/Datasource-test.js +++ b/packages/core/test/datasources/Datasource-test.js @@ -300,9 +300,9 @@ describe('Datasource', () => { }); datasource.initialize(); datasource._executeQuery = sinon.spy((query, destination) => { - destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o1') }); - destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o2'), graph: dataFactory.defaultGraph() }); - destination._push({ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o3'), graph: dataFactory.namedNode('g') }); + destination._push(dataFactory.quad(dataFactory.namedNode('s'), dataFactory.namedNode('p'), dataFactory.namedNode('o1'))); + destination._push(dataFactory.quad(dataFactory.namedNode('s'), dataFactory.namedNode('p'), dataFactory.namedNode('o2'), dataFactory.defaultGraph())); + destination._push(dataFactory.quad(dataFactory.namedNode('s'), dataFactory.namedNode('p'), dataFactory.namedNode('o3'), dataFactory.namedNode('g'))); destination.close(); }); @@ -314,12 +314,14 @@ describe('Datasource', () => { let result = datasource.select({ features: { custom: true } }, done), quads = []; result.on('data', (q) => { quads.push(q); }); result.on('end', () => { - let matchingquads = [{ subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o1'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, - { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o2'), graph: dataFactory.namedNode('http://example.org/#mygraph') }, - { subject: dataFactory.namedNode('s'), predicate: dataFactory.namedNode('p'), object: dataFactory.namedNode('o3'), graph: dataFactory.namedNode('g') }]; + let matchingquads = [ + dataFactory.quad(dataFactory.namedNode('s'), dataFactory.namedNode('p'), dataFactory.namedNode('o1'), dataFactory.namedNode('http://example.org/#mygraph')), + dataFactory.quad(dataFactory.namedNode('s'), dataFactory.namedNode('p'), dataFactory.namedNode('o2'), dataFactory.namedNode('http://example.org/#mygraph')), + dataFactory.quad(dataFactory.namedNode('s'), dataFactory.namedNode('p'), dataFactory.namedNode('o3'), dataFactory.namedNode('g')), + ]; matchingquads.length.should.be.equal(quads.length); for (let i = 0; i < quads.length; i++) - matchingquads[i].should.deep.equal(quads[i]); + quads[i].should.deep.equal(matchingquads[i]); done(); }); }); diff --git a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js index 38c72fc8..436543c1 100644 --- a/packages/datasource-composite/test/datasources/CompositeDatasource-test.js +++ b/packages/datasource-composite/test/datasources/CompositeDatasource-test.js @@ -37,19 +37,19 @@ describe('CompositeDatasource', () => { }); it('should be an CompositeDatasource constructor', (done) => { - let instance = new CompositeDatasource({ references: references }); + let instance = new CompositeDatasource({ references: references, dataFactory }); instance.should.be.an.instanceof(CompositeDatasource); instance.close(done); }); it('should create CompositeDatasource objects', (done) => { - let instance = new CompositeDatasource({ references: references }); + let instance = new CompositeDatasource({ references: references, dataFactory }); instance.should.be.an.instanceof(CompositeDatasource); instance.close(done); }); it('should create Datasource objects', (done) => { - let instance = new CompositeDatasource({ references: references }); + let instance = new CompositeDatasource({ references: references, dataFactory }); instance.should.be.an.instanceof(Datasource); instance.close(done); }); @@ -59,7 +59,7 @@ describe('CompositeDatasource', () => { let datasource; function getDatasource() { return datasource; } before((done) => { - datasource = new CompositeDatasource({ references: references }); + datasource = new CompositeDatasource({ references: references, dataFactory }); datasource.initialize(); datasource.on('initialized', done); }); diff --git a/test/assets/basic-fragment-metadata-last.trig b/test/assets/basic-fragment-metadata-last.trig index c4bab182..810ac982 100644 --- a/test/assets/basic-fragment-metadata-last.trig +++ b/test/assets/basic-fragment-metadata-last.trig @@ -32,9 +32,9 @@ _:graph hydra:variable "graph"; dcterms:title "Linked Data Fragment of My data"@en; dcterms:description "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en; dcterms:source ; - hydra:totalItems "1234"^^xsd:integer; - void:triples "1234"^^xsd:integer; - hydra:itemsPerPage "100"^^xsd:integer; + hydra:totalItems 1234; + void:triples 1234; + hydra:itemsPerPage 100; hydra:first ; hydra:previous ; hydra:next diff --git a/test/assets/basic-fragment-metadata-last.ttl b/test/assets/basic-fragment-metadata-last.ttl index 973584c2..fd3f547d 100644 --- a/test/assets/basic-fragment-metadata-last.ttl +++ b/test/assets/basic-fragment-metadata-last.ttl @@ -28,9 +28,9 @@ _:graph hydra:variable "graph"; dcterms:title "Linked Data Fragment of My data"@en; dcterms:description "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en; dcterms:source ; - hydra:totalItems "1234"^^xsd:integer; - void:triples "1234"^^xsd:integer; - hydra:itemsPerPage "100"^^xsd:integer; + hydra:totalItems 1234; + void:triples 1234; + hydra:itemsPerPage 100; hydra:first ; hydra:previous ; hydra:next . diff --git a/test/assets/basic-fragment.trig b/test/assets/basic-fragment.trig index 8a6b9389..fd130487 100644 --- a/test/assets/basic-fragment.trig +++ b/test/assets/basic-fragment.trig @@ -27,9 +27,9 @@ _:graph hydra:variable "graph"; dcterms:title "Linked Data Fragment of My data"@en; dcterms:description "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en; dcterms:source ; - hydra:totalItems "1234"^^xsd:integer; - void:triples "1234"^^xsd:integer; - hydra:itemsPerPage "100"^^xsd:integer; + hydra:totalItems 1234; + void:triples 1234; + hydra:itemsPerPage 100; hydra:first ; hydra:previous ; hydra:next diff --git a/test/assets/basic-fragment.ttl b/test/assets/basic-fragment.ttl index 510e480d..ef6a3af9 100644 --- a/test/assets/basic-fragment.ttl +++ b/test/assets/basic-fragment.ttl @@ -25,9 +25,9 @@ _:graph hydra:variable "graph"; dcterms:title "Linked Data Fragment of My data"@en; dcterms:description "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en; dcterms:source ; - hydra:totalItems "1234"^^xsd:integer; - void:triples "1234"^^xsd:integer; - hydra:itemsPerPage "100"^^xsd:integer; + hydra:totalItems 1234; + void:triples 1234; + hydra:itemsPerPage 100; hydra:first ; hydra:previous ; hydra:next . diff --git a/test/assets/empty-fragment.trig b/test/assets/empty-fragment.trig index 75c43e1b..2dc03a10 100644 --- a/test/assets/empty-fragment.trig +++ b/test/assets/empty-fragment.trig @@ -27,9 +27,9 @@ _:graph hydra:variable "graph"; dcterms:title "Linked Data Fragment of My data"@en; dcterms:description "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en; dcterms:source ; - hydra:totalItems "1234"^^xsd:integer; - void:triples "1234"^^xsd:integer; - hydra:itemsPerPage "100"^^xsd:integer; + hydra:totalItems 1234; + void:triples 1234; + hydra:itemsPerPage 100; hydra:first ; hydra:previous ; hydra:next diff --git a/test/assets/empty-fragment.ttl b/test/assets/empty-fragment.ttl index 3843e56e..4b4223ad 100644 --- a/test/assets/empty-fragment.ttl +++ b/test/assets/empty-fragment.ttl @@ -25,9 +25,9 @@ _:graph hydra:variable "graph"; dcterms:title "Linked Data Fragment of My data"@en; dcterms:description "Triple/Quad Pattern Fragment of the 'My data' dataset containing triples matching the pattern { a ?b ?c ?d }."@en; dcterms:source ; - hydra:totalItems "1234"^^xsd:integer; - void:triples "1234"^^xsd:integer; - hydra:itemsPerPage "100"^^xsd:integer; + hydra:totalItems 1234; + void:triples 1234; + hydra:itemsPerPage 100; hydra:first ; hydra:previous ; hydra:next . diff --git a/yarn.lock b/yarn.lock index 008b4cf3..05e9e174 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4608,6 +4608,14 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +n3@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/n3/-/n3-1.10.0.tgz#4ebc725ad4c7a1ee4fac184b7b42114d620ba8c7" + integrity sha512-y+qpS0GktEBttOaDR+BF1t1G2fw4Xn4nCZWNn+7MvEmD2I4YpMH6OJF/xHKSwInCxOC9vu9eI6pluB9/RDUyZQ== + dependencies: + queue-microtask "^1.1.2" + readable-stream "^3.6.0" + n3@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/n3/-/n3-1.3.5.tgz#ea00062b64fef71dc3a92befc00413a733ef1029" From 976ab875746ecf97db312a888e8a4aab5029cdb3 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Mon, 10 May 2021 08:53:26 +0200 Subject: [PATCH 153/165] Bump to release version v3.2.1 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/core/package.json | 2 +- packages/datasource-composite/package.json | 4 ++-- packages/datasource-hdt/package.json | 4 ++-- packages/datasource-jsonld/package.json | 4 ++-- packages/datasource-n3/package.json | 4 ++-- packages/datasource-sparql/package.json | 4 ++-- packages/feature-memento/package.json | 4 ++-- packages/feature-qpf/package.json | 4 ++-- packages/feature-summary/package.json | 4 ++-- packages/feature-webid/package.json | 4 ++-- packages/server/package.json | 20 ++++++++++---------- 13 files changed, 36 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14927a46..845dcdb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.2.1](https://github.com/LinkedDataFragments/Server.js/compare/v3.2.0...v3.2.1) - 2021-05-10 + +### Fixed +* [Fix illegal mutation of quads, Closes #137](https://github.com/LinkedDataFragments/Server.js/commit/a459b74c6411bc9d042a0e7d4caca079a349fe7f) + ## [v3.2.0](https://github.com/LinkedDataFragments/Server.js/compare/v3.1.0...v3.2.0) - 2021-01-15 diff --git a/lerna.json b/lerna.json index ceeb3c83..d0982964 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.2.0", + "version": "3.2.1", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/core/package.json b/packages/core/package.json index 612fd96e..ad1d2e73 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/core", "description": "Linked Data Fragments Server - Core", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", diff --git a/packages/datasource-composite/package.json b/packages/datasource-composite/package.json index abd9a2e9..2d1082ea 100644 --- a/packages/datasource-composite/package.json +++ b/packages/datasource-composite/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-composite", "description": "Linked Data Fragments Server - Composite Datasource", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -28,6 +28,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" } } diff --git a/packages/datasource-hdt/package.json b/packages/datasource-hdt/package.json index 447c104b..ac0450fc 100644 --- a/packages/datasource-hdt/package.json +++ b/packages/datasource-hdt/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-hdt", "description": "Linked Data Fragments Server - HDT Datasource", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -28,7 +28,7 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" }, "optionalDependencies": { "hdt": "^3.0.1" diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 8aa42ecd..57950860 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-jsonld", "description": "Linked Data Fragments Server - JSON-LD Datasource", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -29,6 +29,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" } } diff --git a/packages/datasource-n3/package.json b/packages/datasource-n3/package.json index af8d3fa0..284ab126 100644 --- a/packages/datasource-n3/package.json +++ b/packages/datasource-n3/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-n3", "description": "Linked Data Fragments Server - N3 Datasources", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -28,6 +28,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" } } diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index f00801e4..93eb6f9d 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-sparql", "description": "Linked Data Fragments Server - SPARQL Datasource", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -31,6 +31,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" } } diff --git a/packages/feature-memento/package.json b/packages/feature-memento/package.json index 768164b2..67d2c2b5 100644 --- a/packages/feature-memento/package.json +++ b/packages/feature-memento/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-memento", "description": "Linked Data Fragments Server - Memento", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -29,6 +29,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" } } diff --git a/packages/feature-qpf/package.json b/packages/feature-qpf/package.json index 7ebae409..35a9a2fc 100644 --- a/packages/feature-qpf/package.json +++ b/packages/feature-qpf/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-qpf", "description": "Linked Data Fragments Server - Quad Pattern Fragments", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -31,6 +31,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" } } diff --git a/packages/feature-summary/package.json b/packages/feature-summary/package.json index 3cd69075..5757897f 100644 --- a/packages/feature-summary/package.json +++ b/packages/feature-summary/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-summary", "description": "Linked Data Fragments Server - Memento", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "bin": { @@ -33,6 +33,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" } } diff --git a/packages/feature-webid/package.json b/packages/feature-webid/package.json index 35a1ca20..c442fc2f 100644 --- a/packages/feature-webid/package.json +++ b/packages/feature-webid/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/feature-webid", "description": "Linked Data Fragments Server - WebID", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "main": "index.js", @@ -31,6 +31,6 @@ "@ldf/core": "^3.0.0" }, "devDependencies": { - "@ldf/core": "^3.2.0" + "@ldf/core": "^3.2.1" } } diff --git a/packages/server/package.json b/packages/server/package.json index 4f2c79e9..61543522 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.2.0", + "version": "3.2.1", "lsd:module": true, "license": "MIT", "bin": { @@ -27,15 +27,15 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "@ldf/core": "3.2.0", - "@ldf/datasource-composite": "3.2.0", - "@ldf/datasource-hdt": "3.2.0", - "@ldf/datasource-jsonld": "3.2.0", - "@ldf/datasource-n3": "3.2.0", - "@ldf/datasource-sparql": "3.2.0", - "@ldf/feature-memento": "3.2.0", - "@ldf/feature-qpf": "3.2.0", - "@ldf/feature-summary": "3.2.0", + "@ldf/core": "^3.2.1", + "@ldf/datasource-composite": "^3.2.1", + "@ldf/datasource-hdt": "^3.2.1", + "@ldf/datasource-jsonld": "^3.2.1", + "@ldf/datasource-n3": "^3.2.1", + "@ldf/datasource-sparql": "^3.2.1", + "@ldf/feature-memento": "^3.2.1", + "@ldf/feature-qpf": "^3.2.1", + "@ldf/feature-summary": "^3.2.1", "@ldf/preset-qpf": "3.2.0" } } From c2898b2b7a7606e2ae93adab1cef659be7a7e01c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 08:31:43 +0200 Subject: [PATCH 154/165] Update Dockerfile to Node.js to v16 (#139) Co-authored-by: Renovate Bot --- packages/server/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/Dockerfile b/packages/server/Dockerfile index 1f041bd0..4eeff067 100644 --- a/packages/server/Dockerfile +++ b/packages/server/Dockerfile @@ -1,4 +1,4 @@ -FROM node:10-slim +FROM node:16-slim # Install location ENV dir /var/www/@ldf/server From 58c64c03539ed5ab25080b6a352e70019e4053ff Mon Sep 17 00:00:00 2001 From: rossbowen <74777313+rossbowen@users.noreply.github.com> Date: Fri, 27 Aug 2021 12:21:27 +0100 Subject: [PATCH 155/165] Add RDFa datasource (#142) * Add RDFa datasource * Polish RDFa datasource Co-authored-by: Ruben Taelman --- .gitignore | 1 + README.md | 1 + greenkeeper.json | 1 + packages/datasource-rdfa/README.md | 57 +++++++ .../components/Datasource/Rdfa.jsonld | 19 +++ .../components/components.jsonld | 9 ++ .../datasource-rdfa/components/context.jsonld | 11 ++ .../config/config-example.json | 16 ++ packages/datasource-rdfa/index.js | 8 + .../lib/datasources/RdfaDatasource.js | 27 ++++ packages/datasource-rdfa/package.json | 34 +++++ packages/datasource-rdfa/test/.eslintrc | 18 +++ .../test/datasources/RdfaDatasource-test.js | 99 ++++++++++++ packages/datasource-rdfa/test/mocha.opts | 3 + packages/server/components/context.jsonld | 1 + packages/server/package.json | 1 + test/assets/test.html | 143 ++++++++++++++++++ yarn.lock | 24 +++ 18 files changed, 473 insertions(+) create mode 100644 packages/datasource-rdfa/README.md create mode 100644 packages/datasource-rdfa/components/Datasource/Rdfa.jsonld create mode 100644 packages/datasource-rdfa/components/components.jsonld create mode 100644 packages/datasource-rdfa/components/context.jsonld create mode 100644 packages/datasource-rdfa/config/config-example.json create mode 100644 packages/datasource-rdfa/index.js create mode 100644 packages/datasource-rdfa/lib/datasources/RdfaDatasource.js create mode 100644 packages/datasource-rdfa/package.json create mode 100644 packages/datasource-rdfa/test/.eslintrc create mode 100644 packages/datasource-rdfa/test/datasources/RdfaDatasource-test.js create mode 100644 packages/datasource-rdfa/test/mocha.opts create mode 100644 test/assets/test.html diff --git a/.gitignore b/.gitignore index 034f0832..08d70774 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ config/*.json # Ignore dev environment files .idea +.devcontainer \ No newline at end of file diff --git a/README.md b/README.md index 52d185c5..a442042a 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,7 @@ The following modules are available: * [`@ldf/feature-webid`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/feature-webid): Feature that enables authenticated requests from clients with WebID. * [`@ldf/datasource-hdt`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-hdt): Datasource that allows HDT files to be loaded. * [`@ldf/datasource-jsonld`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-jsonld): Datasource that allows JSON-LD files to be loaded. +* [`@ldf/datasource-rdfa`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-rdfa): Datasource that allows RDFa files to be loaded. * [`@ldf/datasource-n3`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-n3): Datasource that allows [N-Quads](https://www.w3.org/TR/n-quads/), [N-Triples](https://www.w3.org/TR/n-triples/), [Trig](https://www.w3.org/TR/trig/) and [Turtle](https://www.w3.org/TR/turtle/) files to be loaded. * [`@ldf/datasource-sparql`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-sparql): Datasource that allows SPARQL endpoints to be used as a data proxy. * [`@ldf/datasource-composite`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-composite): Datasource that delegates queries to an sequence of other datasources. diff --git a/greenkeeper.json b/greenkeeper.json index 8d040f71..9c507bb7 100644 --- a/greenkeeper.json +++ b/greenkeeper.json @@ -17,6 +17,7 @@ "packages/datasource-composite/package.json", "packages/preset-qpf/package.json", "packages/datasource-jsonld/package.json", + "packages/datasource-rdfa/package.json", "packages/feature-qpf/package.json", "packages/feature-summary/package.json" ] diff --git a/packages/datasource-rdfa/README.md b/packages/datasource-rdfa/README.md new file mode 100644 index 00000000..57a80a52 --- /dev/null +++ b/packages/datasource-rdfa/README.md @@ -0,0 +1,57 @@ +# Linked Data Fragments Server - RDFa Datasource + + +[![npm version](https://badge.fury.io/js/%40ldf%2Fdatasource-rdfa.svg)](https://www.npmjs.com/package/@ldf/datasource-rdfa) + +This module contains a RDFa datasource for the [Linked Data Fragments server](https://github.com/LinkedDataFragments/Server.js). +It allows HTML files containing RDFa to be loaded. + +_This package is a [Linked Data Fragments Server module](https://github.com/LinkedDataFragments/Server.js/)._ + +## Usage in `@ldf/server` + +This package exposes the following config entries: +* `RdfaDatasource`: A RDFa datasource that requires at least one `file` field. _Should be used as `@type` value._ + +Example: +```json +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "urn:ldf-server:myRdfaDatasource", + "@type": "RdfaDatasource", + "datasourceTitle": "My RDFa HTML file", + "description": "My dataset with a RDFa back-end", + "datasourcePath": "myrdfa", + "file": "path/to/file.html" + } + ] +} +``` + +## Usage in other packages + +When this module is used in a package other than `@ldf/server`, +then the JSON-LD context `https://linkedsoftwaredependencies.org/contexts/@ldf/datasource-rdfa.jsonld` must be imported. + +For example: +``` +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/preset-qpf/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-rdfa/^3.0.0/components/context.jsonld", + ], + // Same as above... +} +``` + +## License +The Linked Data Fragments server is written by [Ruben Verborgh](https://ruben.verborgh.org/), Miel Vander Sande, [Ruben Taelman](https://www.rubensworks.net/) and colleagues. + +This code is copyrighted by [Ghent University – imec](http://idlab.ugent.be/) +and released under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/packages/datasource-rdfa/components/Datasource/Rdfa.jsonld b/packages/datasource-rdfa/components/Datasource/Rdfa.jsonld new file mode 100644 index 00000000..37757946 --- /dev/null +++ b/packages/datasource-rdfa/components/Datasource/Rdfa.jsonld @@ -0,0 +1,19 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/core/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-rdfa/^3.0.0/components/context.jsonld" + ], + "@id": "npmd:@ldf/datasource-rdfa", + "components": [ + { + "@id": "ldfdr:Datasource/Rdfa", + "@type": "Class", + "extends": "ldfc:Datasource/Memory", + "requireElement": "datasources.RdfaDatasource", + "comment": "An RdfaDatasource fetches data from an RDFa HTML document", + "constructorArguments": { + "extends": "ldfc:Datasource/Memory#constructorArgumentsObject" + } + } + ] +} diff --git a/packages/datasource-rdfa/components/components.jsonld b/packages/datasource-rdfa/components/components.jsonld new file mode 100644 index 00000000..d1b4fb74 --- /dev/null +++ b/packages/datasource-rdfa/components/components.jsonld @@ -0,0 +1,9 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-rdfa/^3.0.0/components/context.jsonld", + "@id": "npmd:@ldf/datasource-rdfa", + "@type": "Module", + "requireName": "@ldf/datasource-rdfa", + "import": [ + "files-ldfdr:components/Datasource/Rdfa.jsonld" + ] +} diff --git a/packages/datasource-rdfa/components/context.jsonld b/packages/datasource-rdfa/components/context.jsonld new file mode 100644 index 00000000..1ebd0712 --- /dev/null +++ b/packages/datasource-rdfa/components/context.jsonld @@ -0,0 +1,11 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^4.0.0/components/context.jsonld", + { + "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/", + "ldfdr": "npmd:@ldf/datasource-rdfa/", + "files-ldfdr": "ldfdr:^3.0.0/", + "RdfaDatasource": "ldfdr:Datasource/Rdfa" + } + ] +} diff --git a/packages/datasource-rdfa/config/config-example.json b/packages/datasource-rdfa/config/config-example.json new file mode 100644 index 00000000..60315928 --- /dev/null +++ b/packages/datasource-rdfa/config/config-example.json @@ -0,0 +1,16 @@ +{ + "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/server/^3.0.0/components/context.jsonld", + "@id": "urn:ldf-server:my", + "import": "preset-qpf:config-defaults.json", + + "datasources": [ + { + "@id": "urn:ldf-server:myRdfaDatasource", + "@type": "RdfaDatasource", + "datasourceTitle": "My RDFa HTML file", + "description": "My dataset with a RDFa back-end", + "datasourcePath": "myrdfa", + "file": "path/to/file.html" + } + ] +} diff --git a/packages/datasource-rdfa/index.js b/packages/datasource-rdfa/index.js new file mode 100644 index 00000000..c66c25f0 --- /dev/null +++ b/packages/datasource-rdfa/index.js @@ -0,0 +1,8 @@ +/*! @license MIT ©2015-2016 Ruben Verborgh, Ghent University - imec */ +/* Exports of the components of this package */ + +module.exports = { + datasources: { + RdfaDatasource: require('./lib/datasources/RdfaDatasource'), + }, +}; diff --git a/packages/datasource-rdfa/lib/datasources/RdfaDatasource.js b/packages/datasource-rdfa/lib/datasources/RdfaDatasource.js new file mode 100644 index 00000000..f77aab75 --- /dev/null +++ b/packages/datasource-rdfa/lib/datasources/RdfaDatasource.js @@ -0,0 +1,27 @@ +/*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ +/* An RdfaDatasource fetches data from a JSON-LD document. */ + +let MemoryDatasource = require('@ldf/core').datasources.MemoryDatasource, + RdfaParser = require('rdfa-streaming-parser').RdfaParser; + +let ACCEPT = 'text/html;q=1.0,application/xhtml+xml;q=0.7'; + +// Creates a new RdfaDatasource +class RdfaDatasource extends MemoryDatasource { + constructor(options) { + super(options); + this._url = options && (options.url || options.file); + } + + // Retrieves all quads from the document + _getAllQuads(addQuad, done) { + let document = this._fetch({ url: this._url, headers: { accept: ACCEPT } }); + new RdfaParser({ baseIRI: this._url, dataFactory: this.dataFactory }) + .import(document) + .on('error', done) + .on('data', addQuad) + .on('end', done); + } +} + +module.exports = RdfaDatasource; diff --git a/packages/datasource-rdfa/package.json b/packages/datasource-rdfa/package.json new file mode 100644 index 00000000..28d7f2aa --- /dev/null +++ b/packages/datasource-rdfa/package.json @@ -0,0 +1,34 @@ +{ + "name": "@ldf/datasource-rdfa", + "description": "Linked Data Fragments Server - RDFa Datasource", + "version": "3.2.1", + "lsd:module": true, + "license": "MIT", + "main": "index.js", + "publishConfig": { + "access": "public" + }, + "files": [ + "components", + "lib/**/*.js", + "index.js" + ], + "repository": "https://github.com/LinkedDataFragments/Server.js/tree/master/packages/datasource-rdfa", + "bugs": { + "url": "https://github.com/LinkedDataFragments/Server.js/issues" + }, + "scripts": { + "test": "nyc mocha", + "lint": "eslint bin/* lib test" + }, + "dependencies": { + "rdf-string": "^1.3.1", + "rdfa-streaming-parser": "^1.5.0" + }, + "peerDependencies": { + "@ldf/core": "^3.0.0" + }, + "devDependencies": { + "@ldf/core": "^3.2.1" + } +} diff --git a/packages/datasource-rdfa/test/.eslintrc b/packages/datasource-rdfa/test/.eslintrc new file mode 100644 index 00000000..aa46bea4 --- /dev/null +++ b/packages/datasource-rdfa/test/.eslintrc @@ -0,0 +1,18 @@ +{ + globals: { + describe: true, + it: true, + before: true, + after: true, + beforeEach: true, + afterEach: true, + expect: true, + sinon: true, + test: true, + }, + + rules: { + new-cap: 0, // test constructors as regular functions + max-nested-callbacks: 0, // Mocha works with deeply nested callbacks + }, +} diff --git a/packages/datasource-rdfa/test/datasources/RdfaDatasource-test.js b/packages/datasource-rdfa/test/datasources/RdfaDatasource-test.js new file mode 100644 index 00000000..66961fa6 --- /dev/null +++ b/packages/datasource-rdfa/test/datasources/RdfaDatasource-test.js @@ -0,0 +1,99 @@ +/*! @license MIT ©2014-2016 Ruben Verborgh, Ghent University - imec */ +let RdfaDatasource = require('../../').datasources.RdfaDatasource; + +let Datasource = require('@ldf/core').datasources.Datasource, + path = require('path'), + dataFactory = require('n3').DataFactory; + +let exampleRdfaUrl = 'file://' + path.join(__dirname, '../../../../test/assets/test.html'); + +describe('RdfaDatasource', () => { + describe('The RdfaDatasource module', () => { + it('should be a function', () => { + RdfaDatasource.should.be.a('function'); + }); + + it('should be a RdfaDatasource constructor', (done) => { + let instance = new RdfaDatasource({ dataFactory, url: exampleRdfaUrl }); + instance.should.be.an.instanceof(RdfaDatasource); + instance.close(done); + }); + + it('should create Datasource objects', (done) => { + let instance = new RdfaDatasource({ dataFactory, url: exampleRdfaUrl }); + instance.should.be.an.instanceof(Datasource); + instance.close(done); + }); + }); + + describe('A RdfaDatasource instance for an example RDFa HTML file', () => { + let datasource = new RdfaDatasource({ dataFactory, url: exampleRdfaUrl }); + datasource.initialize(); + after((done) => { datasource.close(done); }); + + itShouldExecute(datasource, + 'the empty query', + { features: { triplePattern: true } }, + 129, 129); + + itShouldExecute(datasource, + 'the empty query with a limit', + { limit: 10, features: { triplePattern: true, limit: true } }, + 10, 129); + + itShouldExecute(datasource, + 'the empty query with an offset', + { offset: 10, features: { triplePattern: true, offset: true } }, + 119, 129); + + itShouldExecute(datasource, + 'a query for an existing subject', + { subject: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, + 10, 100); + + itShouldExecute(datasource, + 'a query for a non-existing subject', + { subject: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, + 0, 0); + + itShouldExecute(datasource, + 'a query for an existing predicate', + { predicate: dataFactory.namedNode('http://example.org/p1'), limit: 10, features: { triplePattern: true, limit: true } }, + 10, 110); + + itShouldExecute(datasource, + 'a query for a non-existing predicate', + { predicate: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, + 0, 0); + + itShouldExecute(datasource, + 'a query for an existing object', + { object: dataFactory.namedNode('http://example.org/o001'), limit: 10, features: { triplePattern: true, limit: true } }, + 3, 3); + + itShouldExecute(datasource, + 'a query for a non-existing object', + { object: dataFactory.namedNode('http://example.org/s1'), limit: 10, features: { triplePattern: true, limit: true } }, + 0, 0); + }); +}); + +function itShouldExecute(datasource, name, query, expectedResultsCount, expectedTotalCount) { + describe('executing ' + name, () => { + let resultsCount = 0, totalCount; + before((done) => { + let result = datasource.select(query); + result.getProperty('metadata', (metadata) => { totalCount = metadata.totalCount; }); + result.on('data', (triple) => { resultsCount++; }); + result.on('end', done); + }); + + it('should return the expected number of triples', () => { + expect(resultsCount).to.equal(expectedResultsCount); + }); + + it('should emit the expected total number of triples', () => { + expect(totalCount).to.equal(expectedTotalCount); + }); + }); +} diff --git a/packages/datasource-rdfa/test/mocha.opts b/packages/datasource-rdfa/test/mocha.opts new file mode 100644 index 00000000..7014624f --- /dev/null +++ b/packages/datasource-rdfa/test/mocha.opts @@ -0,0 +1,3 @@ +--require ../../test/test-setup +--recursive +--timeout 500 diff --git a/packages/server/components/context.jsonld b/packages/server/components/context.jsonld index f515447d..e266aafb 100644 --- a/packages/server/components/context.jsonld +++ b/packages/server/components/context.jsonld @@ -5,6 +5,7 @@ "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-hdt/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-jsonld/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-n3/^3.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-rdfa/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/datasource-sparql/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-memento/^3.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@ldf/feature-qpf/^3.0.0/components/context.jsonld", diff --git a/packages/server/package.json b/packages/server/package.json index 61543522..1d3fa9c4 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -31,6 +31,7 @@ "@ldf/datasource-composite": "^3.2.1", "@ldf/datasource-hdt": "^3.2.1", "@ldf/datasource-jsonld": "^3.2.1", + "@ldf/datasource-rdfa": "^3.0.0", "@ldf/datasource-n3": "^3.2.1", "@ldf/datasource-sparql": "^3.2.1", "@ldf/feature-memento": "^3.2.1", diff --git a/test/assets/test.html b/test/assets/test.html new file mode 100644 index 00000000..89741a51 --- /dev/null +++ b/test/assets/test.html @@ -0,0 +1,143 @@ + + + +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        + + +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        + + +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        + + +
        +
        +
        +
        +
        a
        +
        a
        +
        a
        +
        a
        +
        a\"b\'c\\\r\n\\
        +
        a\"b\'c\\\r\n\\
        +
        a\"b\'c\\\r\n\\
        +
        a\"b\'c\\\r\n\\
        + + diff --git a/yarn.lock b/yarn.lock index 05e9e174..9106a264 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1143,6 +1143,13 @@ dependencies: "@types/rdf-js" "^2.0.1" +"@rdfjs/types@*": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rdfjs/types/-/types-1.0.1.tgz#92908a13bc88c71b349b332f3db19178282d6f4e" + integrity sha512-YxVkH0XrCNG3MWeZxfg596GFe+oorTVusmNxRP6ZHTsGczZ8AGvG3UchRNkg3Fy4MyysI7vBAA5YZbESL+VmHQ== + dependencies: + "@types/node" "*" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -5464,6 +5471,13 @@ rdf-data-factory@^1.0.0, rdf-data-factory@^1.0.1, rdf-data-factory@^1.0.2, rdf-d dependencies: "@types/rdf-js" "^4.0.0" +rdf-data-factory@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/rdf-data-factory/-/rdf-data-factory-1.1.0.tgz#d0510b9f100dd79e94f29559a12d4a5a585054d6" + integrity sha512-g8feOVZ/KL1OK2Pco/jDBDFh4m29QDsOOD+rWloG9qFvIzRFchGy2CviLUX491E0ByewXxMpaq/A3zsWHQA16A== + dependencies: + "@rdfjs/types" "*" + rdf-literal@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/rdf-literal/-/rdf-literal-1.2.0.tgz#3159cce5587007144ea4a3a713cea31af4fc0c68" @@ -5548,6 +5562,16 @@ rdfa-streaming-parser@^1.3.0, rdfa-streaming-parser@^1.4.0: rdf-data-factory "^1.0.2" relative-to-absolute-iri "^1.0.2" +rdfa-streaming-parser@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/rdfa-streaming-parser/-/rdfa-streaming-parser-1.5.0.tgz#34072e760aa07e6cddf210923888f9834354fb92" + integrity sha512-A+Kl0vbRQKK3SqgWdCiR48Hi75LK6z6glPdGcbLXMw6qMRcLeIKe4p6yFkPXpbwtegmOa94uaxeLs5HMdo66AQ== + dependencies: + "@rdfjs/types" "*" + htmlparser2 "^6.0.0" + rdf-data-factory "^1.1.0" + relative-to-absolute-iri "^1.0.2" + rdfxml-streaming-parser@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.4.0.tgz#32cae3cfbc77aef110f6be8e067935fbf156f3b6" From 2f87f9017e109785cc2f3d8da698204a5ded1ca1 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 27 Aug 2021 13:30:24 +0200 Subject: [PATCH 156/165] Migrate CI to GitHub actions --- .github/workflows/ci.yml | 90 ++++++++++++++++++++++++++++++++++++++++ .travis.yml | 40 ------------------ README.md | 2 +- greenkeeper.json | 26 ------------ package.json | 2 +- 5 files changed, 92 insertions(+), 68 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml delete mode 100644 greenkeeper.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..54fda541 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,90 @@ +name: CI +on: [push, pull_request] +jobs: + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ runner.os }}-lint-modules-${{ hashFiles('**/yarn.lock') }} + - uses: actions/setup-node@v2 + with: + node-version: 14.x + - run: yarn install + - run: yarn run lint + + test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + node-version: + - 12.x + - 14.x + - 16.x + steps: + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + - name: Ensure line endings are consistent + run: git config --global core.autocrlf input + - name: Check out repository + uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ runner.os }}-test-modules-${{ hashFiles('**/yarn.lock') }} + - name: Install dependencies + run: yarn install + - name: Run tests + run: yarn run test-ci + - name: Submit coverage results + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.github_token }} + flag-name: run-${{ matrix.node-version }} + parallel: true + + coveralls: + needs: test + runs-on: ubuntu-latest + steps: + - name: Consolidate test coverage from different jobs + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true + + docker: + needs: + - test + - lint + runs-on: ubuntu-latest + steps: + - name: Use Node.js + uses: actions/setup-node@v2 + with: + node-version: '14.x' + - name: Check out repository + uses: actions/checkout@v2 + - name: Load cache + uses: actions/cache@v2 + with: + path: '**/node_modules' + key: ${{ runner.os }}-docker-modules-v1-${{ hashFiles('**/yarn.lock') }} + - name: Install dependencies + run: yarn install --pure-lockfile + - name: Install Lerna Docker + run: sh -c "`curl -fsSl https://raw.githubusercontent.com/rubensworks/lerna-docker/master/install.sh`" + - name: Build Docker images + run: ~/.lerna-docker/bin/lerna-docker linkeddatafragments build + - name: Deploy Docker images + if: startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') + run: ~/.lerna-docker/bin/lerna-docker linkeddatafragments push + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index f0751e35..00000000 --- a/.travis.yml +++ /dev/null @@ -1,40 +0,0 @@ -sudo: required -services: - - docker -import: rubensworks/travis-presets:node-base.yml@master -install: yarn install --pure-lockfile -script: - - yarn run lint - - yarn test - - if [ "$NODE_MAIN" = "true" ]; then ( sh -c "`curl -fsSl https://raw.githubusercontent.com/rubensworks/lerna-docker/master/install.sh`" && ~/.lerna-docker/bin/lerna-docker linkeddatafragments build ) fi -after_success: - - yarn run coveralls -env: - - CXX=g++-4.8 -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 -cache: - yarn: true - directories: - - node_modules -deploy: - - provider: script - skip-cleanup: true - script: ~/.lerna-docker/bin/lerna-docker linkeddatafragments push - on: - tags: false - branch: master - condition: $NODE_MAIN = true - os: "linux" - - provider: script - skip-cleanup: true - script: ~/.lerna-docker/bin/lerna-docker linkeddatafragments push - on: - tags: true - all_branches: true - condition: $NODE_MAIN = true - os: "linux" diff --git a/README.md b/README.md index a442042a..c4b3baf5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Linked Data Fragments Server -[![Build Status](https://travis-ci.org/LinkedDataFragments/Server.js.svg?branch=master)](https://travis-ci.org/LinkedDataFragments/Server.js) +[![Build status](https://github.com/LinkedDataFragments/Server.js/workflows/CI/badge.svg)](https://github.com/LinkedDataFragments/Server.js/actions?query=workflow%3ACI) [![Coverage Status](https://coveralls.io/repos/github/LinkedDataFragments/Server.js/badge.svg?branch=master)](https://coveralls.io/github/LinkedDataFragments/Server.js?branch=master) [![npm version](https://badge.fury.io/js/%40ldf%2Fserver.svg)](https://www.npmjs.com/package/@ldf/server) [![DOI](https://zenodo.org/badge/16891600.svg)](https://zenodo.org/badge/latestdoi/16891600) diff --git a/greenkeeper.json b/greenkeeper.json deleted file mode 100644 index 9c507bb7..00000000 --- a/greenkeeper.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "groups": { - "root": { - "packages": [ - "package.json" - ] - }, - "allPackages": { - "packages": [ - "packages/datasource-hdt/package.json", - "packages/core/package.json", - "packages/feature-memento/package.json", - "packages/datasource-sparql/package.json", - "packages/server/package.json", - "packages/feature-webid/package.json", - "packages/datasource-n3/package.json", - "packages/datasource-composite/package.json", - "packages/preset-qpf/package.json", - "packages/datasource-jsonld/package.json", - "packages/datasource-rdfa/package.json", - "packages/feature-qpf/package.json", - "packages/feature-summary/package.json" - ] - } - } -} diff --git a/package.json b/package.json index 67f82c68..f20fa389 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "lint-changed": "lerna run lint --since HEAD", "mocha": "mocha \"packages/*/test/**/*-test.js\" --recursive --require ./test/test-setup --timeout 500", "test": "nyc npm run mocha", - "coveralls": "nyc --reporter=text-lcov npm run mocha | coveralls", + "test-ci": "nyc --reporter=lcov npm run mocha", "lint": "eslint packages/*/bin/* packages/*/lib packages/*/test", "clean": "rm -rf ./node_modules && rm -rf ./packages/*/node_modules", "publish": "lerna publish", From 30940e360698341b05683050fb9a791c0f480d70 Mon Sep 17 00:00:00 2001 From: Ruben Taelman Date: Fri, 27 Aug 2021 14:09:07 +0200 Subject: [PATCH 157/165] Bump to release version v3.3.0 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/datasource-rdfa/package.json | 2 +- packages/server/package.json | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 845dcdb3..585f0aaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog All notable changes to this project will be documented in this file. + +## [v3.3.0](https://github.com/LinkedDataFragments/Server.js/compare/v3.2.1...v3.3.0) - 2021-08-27 + +### Added +* [Add RDFa datasource (#142)](https://github.com/LinkedDataFragments/Server.js/commit/58c64c03539ed5ab25080b6a352e70019e4053ff) + ## [v3.2.1](https://github.com/LinkedDataFragments/Server.js/compare/v3.2.0...v3.2.1) - 2021-05-10 diff --git a/lerna.json b/lerna.json index d0982964..a8d78de8 100644 --- a/lerna.json +++ b/lerna.json @@ -14,7 +14,7 @@ "packages/*" ], "useWorkspaces": true, - "version": "3.2.1", + "version": "3.3.0", "loglevel": "success", "registry": "https://registry.npmjs.org/", "npmClient": "yarn" diff --git a/packages/datasource-rdfa/package.json b/packages/datasource-rdfa/package.json index 28d7f2aa..b1d38124 100644 --- a/packages/datasource-rdfa/package.json +++ b/packages/datasource-rdfa/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/datasource-rdfa", "description": "Linked Data Fragments Server - RDFa Datasource", - "version": "3.2.1", + "version": "3.3.0", "lsd:module": true, "license": "MIT", "main": "index.js", diff --git a/packages/server/package.json b/packages/server/package.json index 1d3fa9c4..7ce515c4 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@ldf/server", "description": "Quad Pattern Fragments Linked Data Fragments Server", - "version": "3.2.1", + "version": "3.3.0", "lsd:module": true, "license": "MIT", "bin": { @@ -31,8 +31,8 @@ "@ldf/datasource-composite": "^3.2.1", "@ldf/datasource-hdt": "^3.2.1", "@ldf/datasource-jsonld": "^3.2.1", - "@ldf/datasource-rdfa": "^3.0.0", "@ldf/datasource-n3": "^3.2.1", + "@ldf/datasource-rdfa": "^3.3.0", "@ldf/datasource-sparql": "^3.2.1", "@ldf/feature-memento": "^3.2.1", "@ldf/feature-qpf": "^3.2.1", From 3b2317326fe40771ab9f053c643133192080e9af Mon Sep 17 00:00:00 2001 From: Tylar Date: Thu, 23 Jun 2022 02:27:20 -0400 Subject: [PATCH 158/165] Fix broken lerna link (#153) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4b3baf5..3eef3140 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ Now visit `http://localhost:5000/` in your browser. This repository should be used by LDF Server module **developers** as it contains multiple LDF Server modules that can be composed. We manage this repository as a [monorepo](https://github.com/babel/babel/blob/master/doc/design/monorepo.md) -using [Lerna](https://lernajs.io/). +using [Lerna](https://lerna.js.org/). The following modules are available: * [`@ldf/core`](https://github.com/LinkedDataFragments/Server.js/tree/master/packages/core): Shared functionality for LDF servers. From 1b3b1321fbb8021cb084c42d98fe372884d519d9 Mon Sep 17 00:00:00 2001 From: Marcelo Machado Date: Thu, 11 Aug 2022 07:38:37 -0300 Subject: [PATCH 159/165] Fix documentation about the sparqlEndpoint config entry Closes #162 --- packages/datasource-sparql/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/datasource-sparql/README.md b/packages/datasource-sparql/README.md index 78660e52..b507a425 100644 --- a/packages/datasource-sparql/README.md +++ b/packages/datasource-sparql/README.md @@ -12,7 +12,7 @@ _This package is a [Linked Data Fragments Server module](https://github.com/Link This package exposes the following config entries: * `SparqlDatasource`: A SPARQL-endpoint-based datasource that requires at least one `sparqlEndpoint` field. _Should be used as `@type` value._ -* `sparqlEndpoint`: Refers to an absolute or relative file location of an HDT file. _Should be used as key in a `SparqlDatasource`._ +* `sparqlEndpoint`: Refers to a SPARQL endpoint capable of receiving and processing SPARQL Protocol requests. _Should be used as key in a `SparqlDatasource`._ Example: ```json From 6bdb7f4af0af003213c4765065961ca77594aa63 Mon Sep 17 00:00:00 2001 From: Marcelo Machado Date: Mon, 10 Oct 2022 05:01:17 -0300 Subject: [PATCH 160/165] Fix Dockerfile to set WORKDIR before run npm install --- packages/server/Dockerfile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/server/Dockerfile b/packages/server/Dockerfile index 4eeff067..96133911 100644 --- a/packages/server/Dockerfile +++ b/packages/server/Dockerfile @@ -1,5 +1,5 @@ FROM node:16-slim - +LABEL description="Triple Pattern Fragment Server." # Install location ENV dir /var/www/@ldf/server @@ -16,16 +16,18 @@ RUN npm config set @ldf:registry $NPM_REGISTRY # Install the node module RUN apt-get update && \ apt-get install -y g++ make python && \ - cd ${dir} && npm install --only=production && \ - apt-get remove -y g++ make python && apt-get autoremove -y && \ + cd ${dir} + +WORKDIR ${dir} +RUN npm install --only=production +RUN apt-get remove -y g++ make python && apt-get autoremove -y && \ rm -rf /var/cache/apt/archives # Expose the default port EXPOSE 3000 # Run base binary -WORKDIR ${dir} ENTRYPOINT ["node", "bin/ldf-server"] # Default command -CMD ["--help"] +CMD ["--help"] \ No newline at end of file From 2861f58f4a0af49652618e9161df7dc1ebf6335b Mon Sep 17 00:00:00 2001 From: Marcelo Machado Date: Mon, 31 Oct 2022 04:12:30 -0300 Subject: [PATCH 161/165] Add file scheme by default on memory sources --- packages/core/lib/datasources/MemoryDatasource.js | 6 ++++++ .../datasource-jsonld/lib/datasources/JsonLdDatasource.js | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/core/lib/datasources/MemoryDatasource.js b/packages/core/lib/datasources/MemoryDatasource.js index 3dfe708a..da540e72 100644 --- a/packages/core/lib/datasources/MemoryDatasource.js +++ b/packages/core/lib/datasources/MemoryDatasource.js @@ -9,6 +9,12 @@ class MemoryDatasource extends Datasource { constructor(options) { let supportedFeatureList = ['quadPattern', 'triplePattern', 'limit', 'offset', 'totalCount']; super(options, supportedFeatureList); + if (options.file) { + if (!options.file.startsWith('file://') && !options.file.startsWith('http://') && !options.file.startsWith('https://')) + options.file = `file://${options.file}`; + } + + this._url = options && (options.url || options.file); } // Prepares the datasource for querying diff --git a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js index 7635cd40..9b0129fb 100644 --- a/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js +++ b/packages/datasource-jsonld/lib/datasources/JsonLdDatasource.js @@ -10,7 +10,6 @@ let ACCEPT = 'application/ld+json;q=1.0,application/json;q=0.7'; class JsonLdDatasource extends MemoryDatasource { constructor(options) { super(options); - this._url = options && (options.url || options.file); } // Retrieves all quads from the document From e5c6e3ceafa0d9c7cd9549bb3ffecb4b0277851d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Nov 2022 08:53:57 +0100 Subject: [PATCH 162/165] Update dependency jsonld-streaming-serializer to v2 (#172) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/core/package.json | 2 +- yarn.lock | 71 +++++++++++++++++++++++++++++++++++--- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index ad1d2e73..2fb005a7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -31,7 +31,7 @@ "asynciterator": "^3.0.0", "componentsjs": "^4.0.4", "forwarded-parse": "^2.1.0", - "jsonld-streaming-serializer": "^1.1.0", + "jsonld-streaming-serializer": "^2.0.0", "lodash": "^4.0.0", "mime": "^2.4.4", "n3": "^1.10.0", diff --git a/yarn.lock b/yarn.lock index 9106a264..3bf15901 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1249,6 +1249,14 @@ dependencies: "@types/node" "*" +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + "@types/semver@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" @@ -1267,6 +1275,13 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + access-log@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/access-log/-/access-log-0.4.1.tgz#e884a2b5d22a954727d2593e51687a0d089b61b8" @@ -1539,6 +1554,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -1581,6 +1601,14 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -2698,11 +2726,21 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + execa@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" @@ -3358,6 +3396,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-walk@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -3958,13 +4001,16 @@ jsonld-streaming-parser@^2.1.1: jsonparse "^1.3.1" rdf-data-factory "^1.0.2" -jsonld-streaming-serializer@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-1.1.0.tgz#1639d2811241bc23a78fe3b5d9d6eb9b3fe887ce" - integrity sha512-C+cs913C3XDScZIqUL8fg5crHQtPTQSZstzvFmhA9/r0QBCRw88BR4TYHvLNhJhzB45GOpoF5/Fx4I4xfKGpOQ== +jsonld-streaming-serializer@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-2.0.1.tgz#b299588673df4450183e992fc34d8a8d21b50693" + integrity sha512-/ee/o1ZqzEaJIR70dWsMqc5ZvGV32wht4znvoGxVXtd+95vHNnQJHs9IEqm6G0tQFCNUlNSb3g62f7SK1jFNvw== dependencies: - "@types/rdf-js" "^2.0.1" + "@rdfjs/types" "*" + "@types/readable-stream" "^2.3.13" + buffer "^6.0.3" jsonld-context-parser "^2.0.0" + readable-stream "^4.0.0" jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" @@ -5351,6 +5397,11 @@ process-on-spawn@^1.0.0: dependencies: fromentries "^1.2.0" +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -5730,6 +5781,16 @@ readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.7, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.2.0.tgz#a7ef523d3b39e4962b0db1a1af22777b10eeca46" + integrity sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" From b8cc6e3c07d21371e11ea352924237cb48139855 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Nov 2022 09:04:14 +0100 Subject: [PATCH 163/165] Update dependency sparqljson-parse to v2 (#174) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/datasource-sparql/package.json | 2 +- yarn.lock | 27 +++++++++++-------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/packages/datasource-sparql/package.json b/packages/datasource-sparql/package.json index 93eb6f9d..3215fe83 100644 --- a/packages/datasource-sparql/package.json +++ b/packages/datasource-sparql/package.json @@ -25,7 +25,7 @@ "lru-cache": "^5.1.1", "n3": "^1.3.5", "rdf-string": "^1.3.1", - "sparqljson-parse": "^1.5.1" + "sparqljson-parse": "^2.0.0" }, "peerDependencies": { "@ldf/core": "^3.0.0" diff --git a/yarn.lock b/yarn.lock index 3bf15901..818ee371 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1198,11 +1198,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.6.tgz#cb734a7c191472ae6a2b3a502b4dfffcea974113" integrity sha512-eyK7MWD0R1HqVTp+PtwRgFeIsemzuj4gBFSQxfPHY5iMjS7474e5wq+VFgTcdpyHeNxyKSaetYAjdMLJlKoWqA== -"@types/node@^10.12.18": - version "10.17.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.17.tgz#7a183163a9e6ff720d86502db23ba4aade5999b8" - integrity sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q== - "@types/node@^13.1.0": version "13.11.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" @@ -1235,7 +1230,7 @@ dependencies: "@types/node" "*" -"@types/rdf-js@^2.0.1", "@types/rdf-js@^2.0.2": +"@types/rdf-js@^2.0.1": version "2.0.11" resolved "https://registry.yarnpkg.com/@types/rdf-js/-/rdf-js-2.0.11.tgz#b9e398504ceb9f00eaa3b3036b643dc3490cf362" integrity sha512-GC5MZU2HbL5JnlrLAzoxSqLprqtKwocz0TNVugqM04t1ZeeNFpZRqqBQc9Jhev35hEwdH84siRLaCesxHHYlmA== @@ -1262,7 +1257,7 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== -JSONStream@^1.0.4, JSONStream@^1.3.3: +JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -6209,15 +6204,17 @@ source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sparqljson-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sparqljson-parse/-/sparqljson-parse-1.5.1.tgz#a3f1b08724e31c6c7e96f182ca9685b606f15ebf" - integrity sha512-+hlVthsoADK/gZkNrV6GCz7Ep3GwtY8DNJSjt9Mt32vuTL9QbQlCRalqOQRaz7D/oyRAsNvkW6/KldMA7s2YCQ== +sparqljson-parse@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/sparqljson-parse/-/sparqljson-parse-2.1.2.tgz#e727724ca8c9e6bc979f0d15c550d862f6ae3003" + integrity sha512-RqPeyy+RYQMeqgEsKPTY+ME5ZNXcgXJzg1v0o+tROiTntS9CwUW8mAY3wsx6seSvW3LVyNDEtsqOxnAokoGXOA== dependencies: - "@rdfjs/data-model" "^1.1.1" - "@types/node" "^10.12.18" - "@types/rdf-js" "^2.0.2" - JSONStream "^1.3.3" + "@rdfjs/types" "*" + "@types/readable-stream" "^2.3.13" + buffer "^6.0.3" + jsonparse "^1.3.1" + rdf-data-factory "^1.1.0" + readable-stream "^4.0.0" spawn-sync@^1.0.15: version "1.0.15" From ed816616dcc8fbe32cee378e5513a7efcfc2e279 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 29 Sep 2024 22:00:25 +0000 Subject: [PATCH 164/165] Update dependency jsonld-streaming-parser to v4 --- packages/datasource-jsonld/package.json | 2 +- yarn.lock | 67 ++++++++++++++++++------- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/packages/datasource-jsonld/package.json b/packages/datasource-jsonld/package.json index 57950860..6d74d79c 100644 --- a/packages/datasource-jsonld/package.json +++ b/packages/datasource-jsonld/package.json @@ -22,7 +22,7 @@ "lint": "eslint bin/* lib test" }, "dependencies": { - "jsonld-streaming-parser": "^2.0.0", + "jsonld-streaming-parser": "^4.0.0", "rdf-string": "^1.3.1" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index 818ee371..8bd9432a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -119,6 +119,13 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@bergos/jsonparse@^1.4.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@bergos/jsonparse/-/jsonparse-1.4.1.tgz#560e7125f65d0ad6b96dfe1c0d5da3115b9f8c59" + integrity sha512-vXIT0nzZGX/+yMD5bx2VhTzc92H55tPoehh1BW/FZHOndWGFddrH3MAfdx39FRc7irABirW6EQaGxIJYV6CGuA== + dependencies: + buffer "^6.0.3" + "@comunica/actor-abstract-mediatyped@^1.19.0": version "1.19.0" resolved "https://registry.yarnpkg.com/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-1.19.0.tgz#db3eeef7ca4393ce825461421890ace81a605803" @@ -1136,7 +1143,7 @@ dependencies: "@octokit/openapi-types" "^5.2.2" -"@rdfjs/data-model@^1.1.1", "@rdfjs/data-model@^1.1.2": +"@rdfjs/data-model@^1.1.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@rdfjs/data-model/-/data-model-1.1.2.tgz#e2f48a422c7e837b8a7d96d240732be3287df713" integrity sha512-pk/G/JLYGaXesoBLvEmoC/ic0H3B79fTyS0Ujjh5YQB2DZW+mn05ZowFFv88rjB9jf7c1XE5XSmf8jzn6U0HHA== @@ -1208,6 +1215,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" integrity sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A== +"@types/node@^18.0.0": + version "18.19.54" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.54.tgz#f1048dc083f81b242640f04f18fb3e4ccf13fcdb" + integrity sha512-+BRgt0G5gYjTvdLac9sIeE0iZcJxi4Jc4PV5EUzqi+88jmQLr+fRZdv2tCTV7IHKSGxM6SaLoOXQWWUiLUItMw== + dependencies: + undici-types "~5.26.4" + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -1237,13 +1251,6 @@ dependencies: "@types/node" "*" -"@types/rdf-js@^2.0.11": - version "2.0.12" - resolved "https://registry.yarnpkg.com/@types/rdf-js/-/rdf-js-2.0.12.tgz#d305a0b6fd105e33f58d5c1b3de33ff8edcb3210" - integrity sha512-NBzHFHp2vHOJkPlSqzsOrkEsD9grKn+PdFjZieIw59pc0FlRG6WEQAjQZvHzFxJlYzC6ZDCFyTA1wBvUnnzUQw== - dependencies: - "@types/node" "*" - "@types/readable-stream@^2.3.13": version "2.3.15" resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" @@ -1252,6 +1259,14 @@ "@types/node" "*" safe-buffer "~5.1.1" +"@types/readable-stream@^4.0.0": + version "4.0.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.15.tgz#e6ec26fe5b02f578c60baf1fa9452e90957d2bfb" + integrity sha512-oAZ3kw+kJFkEqyh7xORZOku1YAKvsFTogRY8kVl4vHpEKiDkfnSA/My8haRE7fvmix5Zyy+1pwzOi7yycGLBJw== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + "@types/semver@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" @@ -3970,18 +3985,15 @@ jsonld-context-parser@^2.0.1, jsonld-context-parser@^2.0.2, jsonld-context-parse http-link-header "^1.0.2" relative-to-absolute-iri "^1.0.5" -jsonld-streaming-parser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-2.0.0.tgz#d943202d17cd630b4ef2b23726a474575beda8c2" - integrity sha512-iaG4mpwOSe1F0YXso38SWy0F1r1+CxTFXJBHA+MobowC6HFXtVzwPzb7uoILZgYv31OrqE/ft9XoSP1mTegebw== +jsonld-context-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-3.0.0.tgz#43992862fc3eabcee9940cf4c44bb2b0dbe2542c" + integrity sha512-Kg6TVtBUdIm057ht/8WNhM9BROt+BeYaDGXbzrKaa3xA99csee+CsD8IMCTizRgzoO8PIzvzcxxCoRvpq1xNQw== dependencies: - "@rdfjs/data-model" "^1.1.2" "@types/http-link-header" "^1.0.1" - "@types/rdf-js" "^2.0.11" - canonicalize "^1.0.1" + "@types/node" "^18.0.0" http-link-header "^1.0.2" - jsonld-context-parser "^2.0.0" - jsonparse "^1.3.1" + relative-to-absolute-iri "^1.0.5" jsonld-streaming-parser@^2.1.1: version "2.2.0" @@ -3996,6 +4008,22 @@ jsonld-streaming-parser@^2.1.1: jsonparse "^1.3.1" rdf-data-factory "^1.0.2" +jsonld-streaming-parser@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonld-streaming-parser/-/jsonld-streaming-parser-4.0.1.tgz#41212df7ef21df1f970d09ef989261fbb566194b" + integrity sha512-6M4y9YGgADk3nXJebbRrxEdMVBJ9bnz+peAvjTXUievopqaE8sg/qml/I6Sp1ln7rpOKffsNZWSre6B7N76szw== + dependencies: + "@bergos/jsonparse" "^1.4.0" + "@rdfjs/types" "*" + "@types/http-link-header" "^1.0.1" + "@types/readable-stream" "^4.0.0" + buffer "^6.0.3" + canonicalize "^1.0.1" + http-link-header "^1.0.2" + jsonld-context-parser "^3.0.0" + rdf-data-factory "^1.1.0" + readable-stream "^4.0.0" + jsonld-streaming-serializer@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-2.0.1.tgz#b299588673df4450183e992fc34d8a8d21b50693" @@ -6795,6 +6823,11 @@ umask@^1.1.0: resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" From 3893a0685c090942eb4190cba1b4e1f117e72031 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 22:49:30 +0000 Subject: [PATCH 165/165] Update dependency jsonld-streaming-serializer to v3 --- packages/core/package.json | 2 +- yarn.lock | 60 +++++--------------------------------- 2 files changed, 9 insertions(+), 53 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 2fb005a7..d440a720 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -31,7 +31,7 @@ "asynciterator": "^3.0.0", "componentsjs": "^4.0.4", "forwarded-parse": "^2.1.0", - "jsonld-streaming-serializer": "^2.0.0", + "jsonld-streaming-serializer": "^3.0.0", "lodash": "^4.0.0", "mime": "^2.4.4", "n3": "^1.10.0", diff --git a/yarn.lock b/yarn.lock index 8bd9432a..f11d14d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1172,11 +1172,6 @@ resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.1.tgz#411493fe06da4b9472fa4eeecc990ea92be8cc2a" integrity sha512-5h+Pqs4EHoMkY/fLva7XsYmh9IVQghQ6uWWil1FGCNI0WqjhI4g20doYsbT4kJ/G3GkAlQca4AIc9OexdUnzkg== -"@types/isomorphic-fetch@^0.0.35": - version "0.0.35" - resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz#c1c0d402daac324582b6186b91f8905340ea3361" - integrity sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw== - "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -2462,13 +2457,6 @@ enabled@2.0.x: resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -3392,7 +3380,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@^0.4.24, iconv-lite@~0.4.13: +iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -3732,7 +3720,7 @@ is-ssh@^1.3.0: dependencies: protocols "^1.1.0" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -3796,14 +3784,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isomorphic-fetch@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -3962,17 +3942,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonld-context-parser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.0.0.tgz#2c4ea08d1b137cde7ba2376e26f56d3fcb519779" - integrity sha512-dfoLe73CCrqHTM2O6zb5oVoZF2TwDfjZnn6XAlbarvhIR+bQ+6Vkkw+yAXKBmZ7n4Jqdyr14qJHtuc9IP1sTFg== - dependencies: - "@types/isomorphic-fetch" "^0.0.35" - "@types/node" "^13.1.0" - canonicalize "^1.0.1" - isomorphic-fetch "^2.2.1" - relative-to-absolute-iri "^1.0.5" - jsonld-context-parser@^2.0.1, jsonld-context-parser@^2.0.2, jsonld-context-parser@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/jsonld-context-parser/-/jsonld-context-parser-2.1.1.tgz#0de2b459465b199ef6014a94d7af9b2485360374" @@ -4024,15 +3993,15 @@ jsonld-streaming-parser@^4.0.0: rdf-data-factory "^1.1.0" readable-stream "^4.0.0" -jsonld-streaming-serializer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-2.0.1.tgz#b299588673df4450183e992fc34d8a8d21b50693" - integrity sha512-/ee/o1ZqzEaJIR70dWsMqc5ZvGV32wht4znvoGxVXtd+95vHNnQJHs9IEqm6G0tQFCNUlNSb3g62f7SK1jFNvw== +jsonld-streaming-serializer@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonld-streaming-serializer/-/jsonld-streaming-serializer-3.0.1.tgz#42c4e748060924586d71b0f80800c0f05e613a63" + integrity sha512-lw5Z785Km53DRZ0ngyEamC3ojGdjFRDKvUt3b7lW5e8sqmTc7GHZxFBBw7IIqbb0Wc2WNksoXewmF13FC9bPNg== dependencies: "@rdfjs/types" "*" - "@types/readable-stream" "^2.3.13" + "@types/readable-stream" "^4.0.0" buffer "^6.0.3" - jsonld-context-parser "^2.0.0" + jsonld-context-parser "^3.0.0" readable-stream "^4.0.0" jsonparse@^1.2.0, jsonparse@^1.3.1: @@ -4735,14 +4704,6 @@ node-fetch@2.6.1, node-fetch@^2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - node-gyp@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" @@ -6951,11 +6912,6 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -whatwg-fetch@>=0.10.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== - whatwg-url@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837"